extension-develop 4.1.9 → 4.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/0~rspack-config.mjs +109 -39
  2. package/dist/101.mjs +1 -1
  3. package/dist/291.mjs +8 -1
  4. package/dist/839.mjs +3 -2
  5. package/dist/extension-js-devtools/chrome/background/service_worker.js +1 -1
  6. package/dist/extension-js-devtools/chrome/content_scripts/content-0.js +2 -2
  7. package/dist/extension-js-devtools/chrome/manifest.json +4 -0
  8. package/dist/extension-js-devtools/chrome/options/index.css +2 -0
  9. package/dist/extension-js-devtools/chrome/options/index.html +11 -0
  10. package/dist/extension-js-devtools/chrome/options/index.js +1 -0
  11. package/dist/extension-js-devtools/chrome/pages/centralized-logger.css +1 -1
  12. package/dist/extension-js-devtools/chrome/pages/welcome.css +1 -1
  13. package/dist/extension-js-devtools/chrome/scripts/logger-client.js +1 -1
  14. package/dist/extension-js-devtools/chromium/background/service_worker.js +1 -1
  15. package/dist/extension-js-devtools/chromium/content_scripts/content-0.js +2 -2
  16. package/dist/extension-js-devtools/chromium/manifest.json +4 -0
  17. package/dist/extension-js-devtools/chromium/options/index.css +2 -0
  18. package/dist/extension-js-devtools/chromium/options/index.html +11 -0
  19. package/dist/extension-js-devtools/chromium/options/index.js +1 -0
  20. package/dist/extension-js-devtools/chromium/pages/centralized-logger.css +1 -1
  21. package/dist/extension-js-devtools/chromium/pages/welcome.css +1 -1
  22. package/dist/extension-js-devtools/chromium/scripts/logger-client.js +1 -1
  23. package/dist/extension-js-devtools/edge/background/service_worker.js +1 -1
  24. package/dist/extension-js-devtools/edge/content_scripts/content-0.js +2 -2
  25. package/dist/extension-js-devtools/edge/manifest.json +4 -0
  26. package/dist/extension-js-devtools/edge/options/index.css +2 -0
  27. package/dist/extension-js-devtools/edge/options/index.html +11 -0
  28. package/dist/extension-js-devtools/edge/options/index.js +1 -0
  29. package/dist/extension-js-devtools/edge/pages/centralized-logger.css +1 -1
  30. package/dist/extension-js-devtools/edge/pages/welcome.css +1 -1
  31. package/dist/extension-js-devtools/edge/scripts/logger-client.js +1 -1
  32. package/dist/extension-js-devtools/firefox/background/scripts.js +1 -1
  33. package/dist/extension-js-devtools/firefox/content_scripts/content-0.js +2 -2
  34. package/dist/extension-js-devtools/firefox/manifest.json +4 -0
  35. package/dist/extension-js-devtools/firefox/options/index.css +2 -0
  36. package/dist/extension-js-devtools/firefox/options/index.html +11 -0
  37. package/dist/extension-js-devtools/firefox/options/index.js +1 -0
  38. package/dist/extension-js-devtools/firefox/pages/centralized-logger.css +1 -1
  39. package/dist/extension-js-devtools/firefox/pages/welcome.css +1 -1
  40. package/dist/extension-js-devtools/firefox/scripts/logger-client.js +1 -1
  41. package/dist/feature-scripts-content-script-wrapper.js +3 -2
  42. package/dist/feature-scripts-content-script-wrapper.mjs +3 -2
  43. package/dist/minimum-script-file.js +4 -4
  44. package/dist/minimum-script-file.mjs +4 -4
  45. package/dist/plugin-reload/steps/setup-reload-strategy/index.d.ts +6 -8
  46. package/dist/plugin-web-extension/feature-scripts/contracts.d.ts +3 -0
  47. package/dist/plugin-web-extension/feature-scripts/scripts-lib/utils.d.ts +9 -0
  48. package/dist/plugin-web-extension/feature-scripts/steps/add-content-script-wrapper/index.d.ts +2 -1
  49. package/package.json +1 -1
@@ -18,7 +18,7 @@ import { isResourceUnderDirs, canonicalizeDir, toResourceKey } from "./93.mjs";
18
18
  import { prefix as messaging_prefix, isDebug } from "./349.mjs";
19
19
  import { jsFrameworksHmrSummary, isUsingTypeScript, resolvePackageManager, humanLine, jsFrameworksIntegrationsEnabled, jsFrameworksConfigsDetected, recordZipArtifact, hasDependency, resolveDevelopInstallRoot, resolveDevelopDistFile, isUsingCustomLoader, ensureTypeScriptConfig, isUsingIntegration as messages_isUsingIntegration, getUserTypeScriptConfigFile } from "./839.mjs";
20
20
  import { renderStatsBlocks, makeSanitizedConsole } from "./0~stats-handler.mjs";
21
- import { getCanonicalContentScriptEntryName, parseCanonicalContentScriptAsset, EXTENSIONJS_CONTENT_SCRIPT_LAYER, isCanonicalContentScriptAsset, getCanonicalContentScriptJsAssetName, getCanonicalContentScriptCssAssetName } from "./291.mjs";
21
+ import { EXTENSIONJS_CONTENT_SCRIPT_LAYER, getCanonicalContentScriptEntryName, parseCanonicalContentScriptAsset, CONTENT_SCRIPT_CSS_PROBE_MARKER_PREFIX, createContentScriptCssProbeMarkerPattern, getCanonicalContentScriptJsAssetName, getCanonicalContentScriptCssAssetName, isCanonicalContentScriptAsset } from "./291.mjs";
22
22
  import { hasProjectDependency, findNearestProjectManifestSync, PROJECT_MANIFEST_FILENAMES, readProjectDependencies } from "./80.mjs";
23
23
  import { cssIntegrationsEnabled, cssConfigsDetected, deadCssUrlRef, missingSassDependency, isUsingIntegration, postCssPluginNotResolved } from "./845.mjs";
24
24
  import { toPosixPath } from "./86.mjs";
@@ -5591,6 +5591,53 @@ class PruneStaleHotUpdates {
5591
5591
  });
5592
5592
  }
5593
5593
  }
5594
+ const utils_isRemoteUrl = (entry)=>/^([a-z][a-z0-9+.-]*:)?\/\//i.test(entry);
5595
+ function resolveScriptEntryPath(entry, manifestDir, projectPath) {
5596
+ if (!entry || utils_isRemoteUrl(entry)) return entry;
5597
+ if (entry.startsWith('/') && !__rspack_external_node_path_c5b9b54f.isAbsolute(entry)) return __rspack_external_node_path_c5b9b54f.join(projectPath, entry.slice(1));
5598
+ if (__rspack_external_node_path_c5b9b54f.isAbsolute(entry)) return entry;
5599
+ return __rspack_external_node_path_c5b9b54f.join(manifestDir, entry);
5600
+ }
5601
+ function getBackgroundWorkerEntryName(options) {
5602
+ const { manifest, browser, manifestDir } = options;
5603
+ if (3 !== Number(manifest.manifest_version)) return;
5604
+ if (isGeckoBasedBrowser(String(browser))) return;
5605
+ const background = manifest.background;
5606
+ if (!background) return;
5607
+ const projectPath = options.projectPath || manifestDir;
5608
+ const resolve = (entry)=>resolveScriptEntryPath(entry, manifestDir, projectPath);
5609
+ if (background.service_worker) {
5610
+ const workerEntries = getScriptEntries([
5611
+ resolve(String(background.service_worker))
5612
+ ]);
5613
+ if (workerEntries.length > 0) return 'background/service_worker';
5614
+ }
5615
+ const scripts = Array.isArray(background.scripts) ? background.scripts : [];
5616
+ const scriptEntries = getScriptEntries(scripts.filter((script)=>'string' == typeof script).map(resolve));
5617
+ if (scriptEntries.length > 0) return "background/scripts";
5618
+ }
5619
+ function getScriptEntries(scriptPath) {
5620
+ const scriptEntries = Array.isArray(scriptPath) ? scriptPath || [] : scriptPath ? [
5621
+ scriptPath
5622
+ ] : [];
5623
+ const fileAssets = scriptEntries.filter((scriptAsset)=>{
5624
+ const validFile = __rspack_external_node_fs_5ea92f0c.existsSync(scriptAsset);
5625
+ if (/\.d\.[cm]?ts$/i.test(scriptAsset)) return false;
5626
+ const assetExtension = __rspack_external_node_path_c5b9b54f.extname(scriptAsset);
5627
+ return validFile && ('.js' === assetExtension || '.cjs' === assetExtension || '.mjs' === assetExtension || '.jsx' === assetExtension || '.mjsx' === assetExtension || '.ts' === assetExtension || '.mts' === assetExtension || '.mtsx' === assetExtension || '.tsx' === assetExtension);
5628
+ });
5629
+ return fileAssets;
5630
+ }
5631
+ function getCssEntries(scriptPath) {
5632
+ const scriptEntries = Array.isArray(scriptPath) ? scriptPath || [] : scriptPath ? [
5633
+ scriptPath
5634
+ ] : [];
5635
+ const fileAssets = scriptEntries.filter((scriptAsset)=>{
5636
+ const validFile = __rspack_external_node_fs_5ea92f0c.existsSync(scriptAsset);
5637
+ return validFile && (scriptAsset.endsWith('.css') || scriptAsset.endsWith('.scss') || scriptAsset.endsWith('.sass') || scriptAsset.endsWith('.less'));
5638
+ });
5639
+ return fileAssets;
5640
+ }
5594
5641
  function createIssue(compiler, message, type = 'error') {
5595
5642
  const ErrorCtor = compiler?.rspack?.WebpackError || Error;
5596
5643
  const issue = new ErrorCtor(message);
@@ -6617,18 +6664,30 @@ class WebExtensionPlugin {
6617
6664
  }
6618
6665
  }
6619
6666
  const webpack_target_webextension_fork = WebExtensionPlugin;
6620
- function getBackgroundEntryName(manifest, browser) {
6667
+ function getBackgroundEntryName(manifest, browser, context) {
6621
6668
  if (manifest.background) {
6622
6669
  if (isGeckoBasedBrowser(String(browser))) return {
6623
6670
  pageEntry: "background/script",
6624
6671
  tryCatchWrapper: true,
6625
6672
  eagerChunkLoading: false
6626
6673
  };
6627
- if (3 === manifest.manifest_version) return {
6628
- serviceWorkerEntry: 'background/service_worker',
6629
- tryCatchWrapper: true,
6630
- eagerChunkLoading: false
6631
- };
6674
+ if (3 === manifest.manifest_version) {
6675
+ const serviceWorkerEntry = getBackgroundWorkerEntryName({
6676
+ manifest,
6677
+ browser,
6678
+ manifestDir: context.manifestDir,
6679
+ projectPath: context.projectPath
6680
+ });
6681
+ if (!serviceWorkerEntry) return {
6682
+ tryCatchWrapper: true,
6683
+ eagerChunkLoading: false
6684
+ };
6685
+ return {
6686
+ serviceWorkerEntry,
6687
+ tryCatchWrapper: true,
6688
+ eagerChunkLoading: false
6689
+ };
6690
+ }
6632
6691
  if (2 === manifest.manifest_version) return {
6633
6692
  pageEntry: "background/script",
6634
6693
  tryCatchWrapper: true,
@@ -6692,7 +6751,10 @@ class SetupReloadStrategy {
6692
6751
  browser: this.browser
6693
6752
  }).apply(compiler);
6694
6753
  new webpack_target_webextension_fork({
6695
- background: getBackgroundEntryName(patchedManifest, this.browser),
6754
+ background: getBackgroundEntryName(patchedManifest, this.browser, {
6755
+ manifestDir: __rspack_external_node_path_c5b9b54f.dirname(this.manifestPath),
6756
+ projectPath: compiler.options.context
6757
+ }),
6696
6758
  hmrConfig: false,
6697
6759
  weakRuntimeCheck: true,
6698
6760
  contentScriptsMeta
@@ -6817,7 +6879,10 @@ class SetupChunkLoadingTarget {
6817
6879
  }
6818
6880
  new webpack_target_webextension_fork({
6819
6881
  background: {
6820
- ...getBackgroundEntryName(patchedManifest, this.browser),
6882
+ ...getBackgroundEntryName(patchedManifest, this.browser, {
6883
+ manifestDir: __rspack_external_node_path_c5b9b54f.dirname(this.manifestPath),
6884
+ projectPath: compiler.options.context
6885
+ }),
6821
6886
  classicLoader: false
6822
6887
  },
6823
6888
  hmrConfig: false,
@@ -12415,6 +12480,16 @@ function getMainWorldBridgeScripts(manifestPath, browser = 'chrome') {
12415
12480
  } catch {}
12416
12481
  return bridgeScripts;
12417
12482
  }
12483
+ function resolveBundleCssProbeMarker(cssPath, hasAsset, assetNames) {
12484
+ if (hasAsset(cssPath)) return cssPath;
12485
+ const wanted = parseCanonicalContentScriptAsset(cssPath);
12486
+ if (!wanted || 'css' !== wanted.extension) return '';
12487
+ for (const name of assetNames()){
12488
+ const parsed = parseCanonicalContentScriptAsset(name);
12489
+ if (parsed && 'css' === parsed.extension && parsed.index === wanted.index) return name;
12490
+ }
12491
+ return '';
12492
+ }
12418
12493
  class AddContentScriptWrapper {
12419
12494
  static getBridgeScripts(manifestPath, browser = 'chrome') {
12420
12495
  return getMainWorldBridgeScripts(manifestPath, browser);
@@ -12482,6 +12557,29 @@ class AddContentScriptWrapper {
12482
12557
  }
12483
12558
  ]
12484
12559
  });
12560
+ compiler.hooks.thisCompilation.tap("scripts:add-content-script-wrapper", (compilation)=>{
12561
+ compilation.hooks.processAssets.tap({
12562
+ name: "scripts:resolve-bundle-css-probe",
12563
+ stage: core_Compilation.PROCESS_ASSETS_STAGE_SUMMARIZE
12564
+ }, ()=>{
12565
+ const assetNames = ()=>compilation.getAssets().map((asset)=>asset.name);
12566
+ for (const asset of compilation.getAssets()){
12567
+ if (!/\.(?:js|mjs)$/.test(asset.name)) continue;
12568
+ const text = asset.source.source().toString();
12569
+ if (!text.includes(CONTENT_SCRIPT_CSS_PROBE_MARKER_PREFIX)) continue;
12570
+ const pattern = createContentScriptCssProbeMarkerPattern();
12571
+ const replaced = new core_sources.ReplaceSource(asset.source);
12572
+ let match = pattern.exec(text);
12573
+ let touched = false;
12574
+ while(match){
12575
+ replaced.replace(match.index, match.index + match[0].length - 1, resolveBundleCssProbeMarker(match[1], (name)=>Boolean(compilation.getAsset(name)), assetNames));
12576
+ touched = true;
12577
+ match = pattern.exec(text);
12578
+ }
12579
+ if (touched) compilation.updateAsset(asset.name, replaced);
12580
+ }
12581
+ });
12582
+ });
12485
12583
  }
12486
12584
  }
12487
12585
  const basic = [
@@ -12539,29 +12637,6 @@ function add_public_path_runtime_module_PublicPathRuntimeModule(compiler) {
12539
12637
  }
12540
12638
  return new PublicPathRuntimeModule();
12541
12639
  }
12542
- function getScriptEntries(scriptPath) {
12543
- const scriptEntries = Array.isArray(scriptPath) ? scriptPath || [] : scriptPath ? [
12544
- scriptPath
12545
- ] : [];
12546
- const fileAssets = scriptEntries.filter((scriptAsset)=>{
12547
- const validFile = __rspack_external_node_fs_5ea92f0c.existsSync(scriptAsset);
12548
- if (/\.d\.[cm]?ts$/i.test(scriptAsset)) return false;
12549
- const assetExtension = __rspack_external_node_path_c5b9b54f.extname(scriptAsset);
12550
- return validFile && ('.js' === assetExtension || '.cjs' === assetExtension || '.mjs' === assetExtension || '.jsx' === assetExtension || '.mjsx' === assetExtension || '.ts' === assetExtension || '.mts' === assetExtension || '.mtsx' === assetExtension || '.tsx' === assetExtension);
12551
- });
12552
- return fileAssets;
12553
- }
12554
- function getCssEntries(scriptPath) {
12555
- const scriptEntries = Array.isArray(scriptPath) ? scriptPath || [] : scriptPath ? [
12556
- scriptPath
12557
- ] : [];
12558
- const fileAssets = scriptEntries.filter((scriptAsset)=>{
12559
- const validFile = __rspack_external_node_fs_5ea92f0c.existsSync(scriptAsset);
12560
- return validFile && (scriptAsset.endsWith('.css') || scriptAsset.endsWith('.scss') || scriptAsset.endsWith('.sass') || scriptAsset.endsWith('.less'));
12561
- });
12562
- return fileAssets;
12563
- }
12564
- const add_scripts_isRemoteUrl = (entry)=>/^([a-z][a-z0-9+.-]*:)?\/\//i.test(entry);
12565
12640
  const isContentScriptFeature = (feature)=>feature.startsWith("content_scripts/");
12566
12641
  const isScriptsFolderFeature = (feature)=>feature.startsWith("scripts/");
12567
12642
  const isBackgroundScriptsFeature = (feature)=>"background/scripts" === feature;
@@ -12601,7 +12676,7 @@ class AddScripts {
12601
12676
  raw
12602
12677
  ] : [];
12603
12678
  for (const entry of rawEntries){
12604
- if (!entry || 'string' != typeof entry || add_scripts_isRemoteUrl(entry)) continue;
12679
+ if (!entry || 'string' != typeof entry || utils_isRemoteUrl(entry)) continue;
12605
12680
  let resolved = entry;
12606
12681
  if (!__rspack_external_node_fs_5ea92f0c.existsSync(resolved)) resolved = __rspack_external_node_path_c5b9b54f.isAbsolute(entry) ? entry : entry.startsWith('/') ? __rspack_external_node_path_c5b9b54f.join(manifestDir, entry.slice(1)) : __rspack_external_node_path_c5b9b54f.join(manifestDir, entry);
12607
12682
  if (__rspack_external_node_fs_5ea92f0c.existsSync(resolved)) continue;
@@ -12630,12 +12705,7 @@ class AddScripts {
12630
12705
  } catch {
12631
12706
  manifestJson = {};
12632
12707
  }
12633
- const resolveEntryPath = (entry)=>{
12634
- if (!entry || add_scripts_isRemoteUrl(entry)) return entry;
12635
- if (entry.startsWith('/') && !__rspack_external_node_path_c5b9b54f.isAbsolute(entry)) return __rspack_external_node_path_c5b9b54f.join(projectPath, entry.slice(1));
12636
- if (__rspack_external_node_path_c5b9b54f.isAbsolute(entry)) return entry;
12637
- return __rspack_external_node_path_c5b9b54f.join(manifestDir, entry);
12638
- };
12708
+ const resolveEntryPath = (entry)=>resolveScriptEntryPath(entry, manifestDir, projectPath);
12639
12709
  const claimedByContentScript = new Set();
12640
12710
  for (const [feature, scriptPath] of Object.entries(scriptFields)){
12641
12711
  if (!isContentScriptFeature(feature)) continue;
package/dist/101.mjs CHANGED
@@ -699,7 +699,7 @@ async function config_loader_isUsingExperimentalConfig(projectPath) {
699
699
  }
700
700
  return false;
701
701
  }
702
- var package_namespaceObject = /*#__PURE__*/ JSON.parse('{"rE":"4.1.9","El":{"@prefresh/core":"1.5.9","@prefresh/utils":"1.2.1","@rspack/core":"^2.1.1","@rspack/dev-server":"2.1.0","@rspack/plugin-preact-refresh":"2.0.1","@rspack/plugin-react-refresh":"2.0.2","@vue/compiler-sfc":"3.5.26","acorn":"^8.16.0","browser-extension-manifest-fields":"^2.3.0","case-sensitive-paths-webpack-plugin":"^2.4.0","content-security-policy-parser":"^0.6.0","dotenv":"^17.2.3","es-module-lexer":"^2.1.0","extension-from-store":"^0.2.5","fflate":"^0.8.3","go-git-it":"^5.1.5","ignore":"^7.0.5","less":"4.6.7","less-loader":"13.0.0","parse5-utilities":"^1.0.0","pintor":"0.3.0","postcss":"8.5.23","postcss-loader":"8.2.1","postcss-preset-env":"11.1.1","postcss-scss":"4.0.9","preact":"10.27.3","prefers-yarn":"2.0.1","react-refresh":"0.18.0","sass-loader":"17.0.0","schema-utils":"^4.3.3","svelte-loader":"3.2.4","tiny-glob":"^0.2.9","vue":"3.5.26","vue-loader":"17.4.2","webextension-polyfill":"^0.12.0","webpack-merge":"^6.0.1","webpack-target-webextension":"^2.1.3","ws":"^8.20.1"}}');
702
+ var package_namespaceObject = /*#__PURE__*/ JSON.parse('{"rE":"4.1.10","El":{"@prefresh/core":"1.5.9","@prefresh/utils":"1.2.1","@rspack/core":"^2.1.1","@rspack/dev-server":"2.1.0","@rspack/plugin-preact-refresh":"2.0.1","@rspack/plugin-react-refresh":"2.0.2","@vue/compiler-sfc":"3.5.26","acorn":"^8.16.0","browser-extension-manifest-fields":"^2.3.0","case-sensitive-paths-webpack-plugin":"^2.4.0","content-security-policy-parser":"^0.6.0","dotenv":"^17.2.3","es-module-lexer":"^2.1.0","extension-from-store":"^0.2.5","fflate":"^0.8.3","go-git-it":"^5.1.5","ignore":"^7.0.5","less":"4.6.7","less-loader":"13.0.0","parse5-utilities":"^1.0.0","pintor":"0.3.0","postcss":"8.5.23","postcss-loader":"8.2.1","postcss-preset-env":"11.1.1","postcss-scss":"4.0.9","preact":"10.27.3","prefers-yarn":"2.0.1","react-refresh":"0.18.0","sass-loader":"17.0.0","schema-utils":"^4.3.3","svelte-loader":"3.2.4","tiny-glob":"^0.2.9","vue":"3.5.26","vue-loader":"17.4.2","webextension-polyfill":"^0.12.0","webpack-merge":"^6.0.1","webpack-target-webextension":"^2.1.3","ws":"^8.20.1"}}');
703
703
  function asAbsolute(p) {
704
704
  return __rspack_external_node_path_c5b9b54f.isAbsolute(p) ? p : __rspack_external_node_path_c5b9b54f.resolve(p);
705
705
  }
package/dist/291.mjs CHANGED
@@ -23,4 +23,11 @@ function parseCanonicalContentScriptAsset(assetName) {
23
23
  function isCanonicalContentScriptAsset(assetName) {
24
24
  return void 0 !== parseCanonicalContentScriptAsset(assetName);
25
25
  }
26
- export { CANONICAL_CONTENT_SCRIPT_ENTRY_PREFIX, EXTENSIONJS_CONTENT_SCRIPT_LAYER, getCanonicalContentScriptCssAssetName, getCanonicalContentScriptEntryName, getCanonicalContentScriptJsAssetName, isCanonicalContentScriptAsset, parseCanonicalContentScriptAsset };
26
+ const CONTENT_SCRIPT_CSS_PROBE_MARKER_PREFIX = '__EXTENSIONJS_CSS_PROBE__';
27
+ function getContentScriptCssProbeMarker(entryName) {
28
+ return `${CONTENT_SCRIPT_CSS_PROBE_MARKER_PREFIX}${entryName}.css__`;
29
+ }
30
+ function createContentScriptCssProbeMarkerPattern() {
31
+ return /__EXTENSIONJS_CSS_PROBE__([^"'`\s\\]+?\.css)__/g;
32
+ }
33
+ export { CANONICAL_CONTENT_SCRIPT_ENTRY_PREFIX, CONTENT_SCRIPT_CSS_PROBE_MARKER_PREFIX, EXTENSIONJS_CONTENT_SCRIPT_LAYER, createContentScriptCssProbeMarkerPattern, getCanonicalContentScriptCssAssetName, getCanonicalContentScriptEntryName, getCanonicalContentScriptJsAssetName, getContentScriptCssProbeMarker, isCanonicalContentScriptAsset, parseCanonicalContentScriptAsset };
package/dist/839.mjs CHANGED
@@ -1679,14 +1679,15 @@ async function extensionDev(pathOrRemoteUrl, devOptions) {
1679
1679
  if (isUsingTypeScript(manifestDir)) await generateExtensionTypes(manifestDir, packageJsonDir);
1680
1680
  const userManifestPath = projectStructure.packageJsonPath || projectStructure.denoJsonPath;
1681
1681
  if (userManifestPath) assertNoManagedDependencyConflicts(userManifestPath, manifestDir);
1682
- const browser = normalizeBrowser(devOptions.browser || 'chrome', devOptions.chromiumBinary, devOptions.geckoBinary || devOptions.firefoxBinary, devOptions.safariBinary);
1682
+ const commandConfig = await loadCommandConfig(packageJsonDir, 'dev');
1683
+ const configBrowser = commandConfig.browser;
1684
+ const browser = normalizeBrowser(devOptions.browser || configBrowser || 'chrome', devOptions.chromiumBinary, devOptions.geckoBinary || devOptions.firefoxBinary, devOptions.safariBinary);
1683
1685
  const geckoBinary = devOptions.geckoBinary || devOptions.firefoxBinary;
1684
1686
  if (debug) {
1685
1687
  console.log(debugDirs(manifestDir, packageJsonDir));
1686
1688
  console.log(debugBrowser(browser, devOptions.chromiumBinary, geckoBinary));
1687
1689
  }
1688
1690
  const browserConfig = await loadBrowserConfig(packageJsonDir, browser);
1689
- const commandConfig = await loadCommandConfig(packageJsonDir, 'dev');
1690
1691
  const merged = withDarkMode({
1691
1692
  ...mergeOptionLayers(DEV_COMMAND_DEFAULTS, browserConfig, commandConfig, devOptions),
1692
1693
  browser
@@ -23,4 +23,4 @@
23
23
  ██████████████████████████████████████████████████████████
24
24
  ██████████████████████████████████████████████████████████
25
25
  MIT (c) ${new Date().getFullYear()} - Cezar Augusto and the Extension.js authors.
26
- `,"background: transparent; color: #0971fe; "),!t){try{await n()}catch{try{chrome.tabs.create({url:o})}catch{}}return}let i=String(t.url||""),s=i.startsWith(`${a}://newtab`)||i.startsWith(`${a}://welcome`);0;s?await n():r(t,o)})}catch{}}let o=[],i=new Map,s=new Set;try{chrome.storage.session.get(["logger_capture_stacks"],e=>{e?.logger_capture_stacks}),chrome.storage.session.onChanged.addListener((e,t)=>{"session"===t&&"logger_capture_stacks"in e&&e.logger_capture_stacks?.newValue})}catch{}function d(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}function l(e){if(o.push(e),o.length>2e3&&o.shift(),"number"==typeof e.tabId){let t=i.get(e.tabId)||[];t.push(e),t.length>1e3&&t.shift(),i.set(e.tabId,t)}for(let t of s)try{let r={type:"append",event:e};t.postMessage(r)}catch{}}chrome.runtime.onConnect.addListener(e=>{if("logger"!==e.name)return;let t=t=>(function(e,t){var r;let n,a;if("subscribe"===t.type){s.add(e);try{e.postMessage({type:"init",events:o})}catch{}return}let i=e.sender?.id;if(i&&i===chrome.runtime.id)return;let l=e.sender?.tab?.id,c=e.sender?.frameId,u=e.sender?.tab?.incognito,m=e.sender?.tab?.windowId;if(r=i||`tab:${l??"unknown"}`,n=Date.now(),(a=h.get(r))?n-a.ts>1e3?(a.ts=n,a.count=1,!!0):(a.count+=1,!!(a.count>200)):(h.set(r,{ts:n,count:1}),!!0))return;let y=p(t.messageParts),v={id:d(),timestamp:Date.now(),level:t.level,context:t.context,messageParts:y,eventType:"dx.signal"===t.eventType||"log"===t.eventType?t.eventType:"log",code:"string"==typeof t.code?f(t.code,128):void 0,status:"ok"===t.status||"warn"===t.status||"fail"===t.status?t.status:void 0,data:b(t.data),remediation:"string"==typeof t.remediation?f(t.remediation,512):void 0,url:t.url,stack:t.stack,errorName:t.errorName,tabId:l,frameId:c,sourceExtensionId:i,incognito:u,windowId:m};g(v)})(e,t);e.onMessage.addListener(t),e.onDisconnect.addListener(()=>{s.delete(e);try{e.onMessage.removeListener(t)}catch{}})}),chrome.action.onClicked.addListener(async()=>{try{await chrome.sidePanel.setPanelBehavior({openPanelOnActionClick:!0})}catch{}});let c=[],u=new Set;function m(e){try{return JSON.stringify(e)}catch{return String(e)}}function g(e){let t=`${e.eventType??"log"}|${e.code??""}|${e.status??""}|${e.level}|${e.context}|${e.tabId??""}|${e.frameId??""}|${e.url??""}|${m(e.messageParts)}|${m(e.data)}`.slice(0,512);if(!u.has(t)){if(u.add(t),c.push(t),c.length>2e3){let e=c.shift();e&&u.delete(e)}if(e.url&&!e.hostname)try{let t=new URL(e.url);e.hostname=`${t.hostname}${t.pathname}`}catch{}if(null!=e.tabId&&null==e.title)try{chrome.tabs.get(e.tabId,t=>{if(chrome.runtime.lastError)return l(e);e.title=t?.title||e.title,l(e)});return}catch{}l(e)}}let h=new Map;function f(e,t=2048){return e.length<=t?e:e.slice(0,t)+"..."}function y(e){try{return JSON.stringify(e)}catch{try{return String(e)}catch{return"[unserializable]"}}}function p(e){try{let t=[];for(let r of e??[])if("string"==typeof r?t.push(f(r)):r instanceof Error?t.push(f(`${r.name}: ${r.message}`)):t.push(f(y(r))),t.join(" ").length>8192)break;return t}catch{return[y(e)]}}function b(e){if(e&&"object"==typeof e)try{let t=JSON.stringify(e);if(!t)return;let r=JSON.parse(t);if(0===Object.keys(r).length)return;return r}catch{return}}function v(e,t,r={}){g({id:d(),timestamp:Date.now(),level:e,context:"background",messageParts:t,url:"string"==typeof r.url?r.url:void 0,tabId:"number"==typeof r.tabId?r.tabId:void 0,frameId:"number"==typeof r.frameId?r.frameId:void 0})}function x(e){let t=String(e.name||"").toLowerCase();return t.includes("extension.js built-in developer tools")||t.includes("extension.js theme")}async function w(){let e=(await new Promise(e=>{chrome.management.getAll(e)})||[]).filter(e=>e.id!==chrome.runtime.id&&"igcijhgmihmjbbahdabahfbpffalcfnn"!==e.id&&"development"===e.installType&&"theme"!==e.type&&!x(e));if(0===e.length)return{ok:!0,extensionEnabled:null};let t=e.find(e=>e.enabled)||e[e.length-1];return{ok:!0,extensionEnabled:!!t?.enabled,extensionName:t?.name,extensionId:t?.id}}async function I(e){if(e.startsWith("data:"))return e;let t=await fetch(e);if(!t.ok)throw Error(`Failed to fetch icon: ${t.status}`);let r=await t.blob();return await new Promise((e,t)=>{let n=new FileReader;n.onload=()=>e(String(n.result||"")),n.onerror=()=>t(Error("Failed to read icon blob")),n.readAsDataURL(r)})}function L(e){return!!e&&e.id!==chrome.runtime.id&&"development"===e.installType&&"theme"!==e.type&&!x(e)}chrome.runtime.onInstalled.addListener(e=>{v("info",["extension installed",e.reason,e.previousVersion??null])}),chrome.storage.session.get(["logger_events"],e=>{let t=Array.isArray(e?.logger_events)?e.logger_events:[];if(t.length)for(let e of t.slice(-2e3))o.push(e)}),setInterval(()=>{chrome.storage.session.set({logger_events:o.slice(-200)})},2e3),chrome.runtime.onStartup.addListener(()=>{v("info",["extension startup"]);try{v("info",["TEST_LOG: background-start"])}catch{}}),chrome.tabs.onCreated.addListener(e=>{v("info",["tab created"],{tabId:e.id??void 0,url:e.url})}),chrome.tabs.onUpdated.addListener((e,t,r)=>{"loading"===t.status&&v("debug",["tab loading"],{tabId:e,url:r.url}),"complete"===t.status&&v("debug",["tab complete"],{tabId:e,url:r.url}),"string"==typeof t.url&&v("info",["tab url changed",t.url],{tabId:e,url:t.url})}),chrome.tabs.onRemoved.addListener((e,t)=>{v("info",["tab removed",{windowId:t.windowId,isWindowClosing:t.isWindowClosing}],{tabId:e})}),chrome.webNavigation.onBeforeNavigate.addListener(e=>{0===e.frameId&&v("info",["Before navigate"],{tabId:e.tabId,frameId:e.frameId,url:e.url,title:"[navigation]"})}),chrome.webNavigation.onCommitted.addListener(e=>{0===e.frameId&&v("info",["Navigation committed"],{tabId:e.tabId,frameId:e.frameId,url:e.url,title:"[navigation]"})}),chrome.webNavigation.onCompleted.addListener(e=>{0===e.frameId&&v("info",["Navigation completed"],{tabId:e.tabId,frameId:e.frameId,url:e.url,title:"[navigation]"})}),chrome.webNavigation.onErrorOccurred.addListener(e=>{0===e.frameId&&v("error",["Navigation error",e.error],{tabId:e.tabId,frameId:e.frameId,url:e.url,title:"[navigation]"})}),chrome.webNavigation.onHistoryStateUpdated.addListener(e=>{0===e.frameId&&v("info",["History state updated"],{tabId:e.tabId,frameId:e.frameId,url:e.url,title:"[navigation]"})}),chrome.runtime.onMessage.addListener((e,t,r)=>e&&"get-events"===e.type?(r({events:o.slice(-500)}),!0):!!e&&"clear-events"===e.type&&(o.length=0,r({ok:!0}),!0)),chrome.runtime.onMessage.addListener((e,t,r)=>{if((!t?.id||t.id===chrome.runtime.id)&&e){if("resolve-icon-url"===e.type)return e.url&&function(e){if(e.startsWith("data:"))return!0;try{let t=new URL(e);return"moz-extension:"===t.protocol||"chrome-extension:"===t.protocol}catch{return!1}}(e.url)?(I(e.url).then(e=>r({ok:!0,dataUrl:e})).catch(e=>r({ok:!1,error:String(e)})),!0):void r({ok:!1,error:"Unsupported icon URL"});if("get-dx-status"===e.type)return w().then(e=>r(e)).catch(e=>r({ok:!1,error:String(e||"Unknown error")})),!0;if("dx-signal"===e.type){try{var n={level:e.level||"info",context:e.context||"content",messageParts:Array.isArray(e.messageParts)&&e.messageParts.length>0?e.messageParts:[e.code||"DX_SIGNAL"],eventType:e.eventType||"dx.signal",code:e.code,status:e.status,data:e.data,remediation:e.remediation,url:"string"==typeof e.url?e.url:void 0,stack:"string"==typeof e.stack?e.stack:void 0,errorName:"string"==typeof e.errorName?e.errorName:void 0};g({id:d(),timestamp:Date.now(),level:n.level,context:n.context,messageParts:p(n.messageParts||[]),eventType:"dx.signal"===n.eventType||"log"===n.eventType?n.eventType:"log",code:"string"==typeof n.code?f(String(n.code),128):void 0,status:"ok"===n.status||"warn"===n.status||"fail"===n.status?n.status:void 0,data:b(n.data),remediation:"string"==typeof n.remediation?f(n.remediation,512):void 0,url:n.url,stack:n.stack,errorName:n.errorName,tabId:n.tabId,frameId:n.frameId}),r({ok:!0})}catch(e){r({ok:!1,error:String(e||"Unknown error")})}return!0}}}),chrome.runtime.onStartup.addListener(async()=>{await a()}),chrome.runtime.onInstalled.addListener(async()=>{await a()});let k="";function S(e,t,r){try{chrome.tabs.query({},n=>{for(let a of n||[])if("number"==typeof a.id)try{chrome.tabs.sendMessage(a.id,{type:"extjs-dev-reload",state:e,label:t||"",kind:r||""}).catch(()=>{})}catch{}})}catch{}}"function"==typeof chrome.runtime?.onMessageExternal?.addListener&&chrome.runtime.onMessageExternal.addListener((e,t,r)=>{if(!e||"extjs-dev-reload-state"!==e.type)return;let n=t?.id;if(!n)return;let a="reloaded"===e.phase?"reloaded":"reloading",o="string"==typeof e.label?e.label:"",i="string"==typeof e.kind?e.kind:"";chrome.management.get(n,e=>{chrome.runtime.lastError||L(e)&&(k="reloading"===a?o:"",S(a,o,i))}),r({ok:!0})}),"function"==typeof chrome.management?.onDisabled?.addListener&&chrome.management.onDisabled.addListener(e=>{L(e)&&S("reloading",k)}),"function"==typeof chrome.management?.onEnabled?.addListener&&chrome.management.onEnabled.addListener(e=>{L(e)&&(S("reloaded",k),k="")}),"function"==typeof chrome.management?.onInstalled?.addListener&&chrome.management.onInstalled.addListener(e=>{L(e)&&(S("reloaded",k),k="")})})();
26
+ `,"background: transparent; color: #0971fe; "),!t){try{await n()}catch{try{chrome.tabs.create({url:o})}catch{}}return}let i=String(t.url||""),s=i.startsWith(`${a}://newtab`)||i.startsWith(`${a}://welcome`);0;s?await n():r(t,o)})}catch{}}let o=[],i=new Map,s=new Set;try{chrome.storage.session.get(["logger_capture_stacks"],e=>{e?.logger_capture_stacks}),chrome.storage.session.onChanged.addListener((e,t)=>{"session"===t&&"logger_capture_stacks"in e&&e.logger_capture_stacks?.newValue})}catch{}function d(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}function l(e){if(o.push(e),o.length>2e3&&o.shift(),"number"==typeof e.tabId){let t=i.get(e.tabId)||[];t.push(e),t.length>1e3&&t.shift(),i.set(e.tabId,t)}for(let t of s)try{let r={type:"append",event:e};t.postMessage(r)}catch{}}chrome.runtime.onConnect.addListener(e=>{if("logger"!==e.name)return;let t=t=>(function(e,t){var r;let n,a;if("subscribe"===t.type){s.add(e);try{e.postMessage({type:"init",events:o})}catch{}return}let i=e.sender?.id;if(i&&i===chrome.runtime.id)return;let l=e.sender?.tab?.id,c=e.sender?.frameId,u=e.sender?.tab?.incognito,m=e.sender?.tab?.windowId;if(r=i||`tab:${l??"unknown"}`,n=Date.now(),(a=h.get(r))?n-a.ts>1e3?(a.ts=n,a.count=1,!!0):(a.count+=1,!!(a.count>200)):(h.set(r,{ts:n,count:1}),!!0))return;let p=y(t.messageParts),v={id:d(),timestamp:Date.now(),level:t.level,context:t.context,messageParts:p,eventType:"dx.signal"===t.eventType||"log"===t.eventType?t.eventType:"log",code:"string"==typeof t.code?f(t.code,128):void 0,status:"ok"===t.status||"warn"===t.status||"fail"===t.status?t.status:void 0,data:b(t.data),remediation:"string"==typeof t.remediation?f(t.remediation,512):void 0,url:t.url,stack:t.stack,errorName:t.errorName,tabId:l,frameId:c,sourceExtensionId:i,incognito:u,windowId:m};g(v)})(e,t);e.onMessage.addListener(t),e.onDisconnect.addListener(()=>{s.delete(e);try{e.onMessage.removeListener(t)}catch{}})}),chrome.action.onClicked.addListener(async()=>{try{await chrome.sidePanel.setPanelBehavior({openPanelOnActionClick:!0})}catch{}});let c=[],u=new Set;function m(e){try{return JSON.stringify(e)}catch{return String(e)}}function g(e){let t=`${e.eventType??"log"}|${e.code??""}|${e.status??""}|${e.level}|${e.context}|${e.tabId??""}|${e.frameId??""}|${e.url??""}|${m(e.messageParts)}|${m(e.data)}`.slice(0,512);if(!u.has(t)){if(u.add(t),c.push(t),c.length>2e3){let e=c.shift();e&&u.delete(e)}if(e.url&&!e.hostname)try{let t=new URL(e.url);e.hostname=`${t.hostname}${t.pathname}`}catch{}if(null!=e.tabId&&null==e.title)try{chrome.tabs.get(e.tabId,t=>{if(chrome.runtime.lastError)return l(e);e.title=t?.title||e.title,l(e)});return}catch{}l(e)}}let h=new Map;function f(e,t=2048){return e.length<=t?e:e.slice(0,t)+"..."}function p(e){try{return JSON.stringify(e)}catch{try{return String(e)}catch{return"[unserializable]"}}}function y(e){try{let t=[];for(let r of e??[])if("string"==typeof r?t.push(f(r)):r instanceof Error?t.push(f(`${r.name}: ${r.message}`)):t.push(f(p(r))),t.join(" ").length>8192)break;return t}catch{return[p(e)]}}function b(e){if(e&&"object"==typeof e)try{let t=JSON.stringify(e);if(!t)return;let r=JSON.parse(t);if(0===Object.keys(r).length)return;return r}catch{return}}function v(e,t,r={}){g({id:d(),timestamp:Date.now(),level:e,context:"background",messageParts:t,url:"string"==typeof r.url?r.url:void 0,tabId:"number"==typeof r.tabId?r.tabId:void 0,frameId:"number"==typeof r.frameId?r.frameId:void 0})}function x(e){let t=String(e.name||"").toLowerCase();return t.includes("extension.js built-in developer tools")||t.includes("extension.js theme")}async function w(){let e=(await new Promise(e=>{chrome.management.getAll(e)})||[]).filter(e=>e.id!==chrome.runtime.id&&"igcijhgmihmjbbahdabahfbpffalcfnn"!==e.id&&"development"===e.installType&&"theme"!==e.type&&!x(e));if(0===e.length)return{ok:!0,extensionEnabled:null};let t=e.find(e=>e.enabled)||e[e.length-1];return{ok:!0,extensionEnabled:!!t?.enabled,extensionName:t?.name,extensionId:t?.id}}async function I(e){if(e.startsWith("data:"))return e;let t=await fetch(e);if(!t.ok)throw Error(`Failed to fetch icon: ${t.status}`);let r=await t.blob();return await new Promise((e,t)=>{let n=new FileReader;n.onload=()=>e(String(n.result||"")),n.onerror=()=>t(Error("Failed to read icon blob")),n.readAsDataURL(r)})}function k(e){return!!e&&e.id!==chrome.runtime.id&&"development"===e.installType&&"theme"!==e.type&&!x(e)}chrome.runtime.onInstalled.addListener(e=>{v("info",["extension installed",e.reason,e.previousVersion??null])}),chrome.storage.session.get(["logger_events"],e=>{let t=Array.isArray(e?.logger_events)?e.logger_events:[];if(t.length)for(let e of t.slice(-2e3))o.push(e)}),setInterval(()=>{chrome.storage.session.set({logger_events:o.slice(-200)})},2e3),chrome.runtime.onStartup.addListener(()=>{v("info",["extension startup"]);try{v("info",["TEST_LOG: background-start"])}catch{}}),chrome.tabs.onCreated.addListener(e=>{v("info",["tab created"],{tabId:e.id??void 0,url:e.url})}),chrome.tabs.onUpdated.addListener((e,t,r)=>{"loading"===t.status&&v("debug",["tab loading"],{tabId:e,url:r.url}),"complete"===t.status&&v("debug",["tab complete"],{tabId:e,url:r.url}),"string"==typeof t.url&&v("info",["tab url changed",t.url],{tabId:e,url:t.url})}),chrome.tabs.onRemoved.addListener((e,t)=>{v("info",["tab removed",{windowId:t.windowId,isWindowClosing:t.isWindowClosing}],{tabId:e})}),chrome.webNavigation.onBeforeNavigate.addListener(e=>{0===e.frameId&&v("info",["Before navigate"],{tabId:e.tabId,frameId:e.frameId,url:e.url,title:"[navigation]"})}),chrome.webNavigation.onCommitted.addListener(e=>{0===e.frameId&&v("info",["Navigation committed"],{tabId:e.tabId,frameId:e.frameId,url:e.url,title:"[navigation]"})}),chrome.webNavigation.onCompleted.addListener(e=>{0===e.frameId&&v("info",["Navigation completed"],{tabId:e.tabId,frameId:e.frameId,url:e.url,title:"[navigation]"})}),chrome.webNavigation.onErrorOccurred.addListener(e=>{0===e.frameId&&v("error",["Navigation error",e.error],{tabId:e.tabId,frameId:e.frameId,url:e.url,title:"[navigation]"})}),chrome.webNavigation.onHistoryStateUpdated.addListener(e=>{0===e.frameId&&v("info",["History state updated"],{tabId:e.tabId,frameId:e.frameId,url:e.url,title:"[navigation]"})}),chrome.runtime.onMessage.addListener((e,t,r)=>e&&"get-events"===e.type?(r({events:o.slice(-500)}),!0):!!e&&"clear-events"===e.type&&(o.length=0,r({ok:!0}),!0)),chrome.runtime.onMessage.addListener((e,t,r)=>{if((!t?.id||t.id===chrome.runtime.id)&&e){if("resolve-icon-url"===e.type)return e.url&&function(e){if(e.startsWith("data:"))return!0;try{let t=new URL(e);return"moz-extension:"===t.protocol||"chrome-extension:"===t.protocol}catch{return!1}}(e.url)?(I(e.url).then(e=>r({ok:!0,dataUrl:e})).catch(e=>r({ok:!1,error:String(e)})),!0):void r({ok:!1,error:"Unsupported icon URL"});if("get-dx-status"===e.type)return w().then(e=>r(e)).catch(e=>r({ok:!1,error:String(e||"Unknown error")})),!0;if("open-options-page"===e.type){try{chrome.runtime.openOptionsPage(()=>{chrome.runtime.lastError?r({ok:!1,error:String(chrome.runtime.lastError.message||"Unknown error")}):r({ok:!0})})}catch(e){r({ok:!1,error:String(e||"Unknown error")})}return!0}if("dx-signal"===e.type){try{var n={level:e.level||"info",context:e.context||"content",messageParts:Array.isArray(e.messageParts)&&e.messageParts.length>0?e.messageParts:[e.code||"DX_SIGNAL"],eventType:e.eventType||"dx.signal",code:e.code,status:e.status,data:e.data,remediation:e.remediation,url:"string"==typeof e.url?e.url:void 0,stack:"string"==typeof e.stack?e.stack:void 0,errorName:"string"==typeof e.errorName?e.errorName:void 0};g({id:d(),timestamp:Date.now(),level:n.level,context:n.context,messageParts:y(n.messageParts||[]),eventType:"dx.signal"===n.eventType||"log"===n.eventType?n.eventType:"log",code:"string"==typeof n.code?f(String(n.code),128):void 0,status:"ok"===n.status||"warn"===n.status||"fail"===n.status?n.status:void 0,data:b(n.data),remediation:"string"==typeof n.remediation?f(n.remediation,512):void 0,url:n.url,stack:n.stack,errorName:n.errorName,tabId:n.tabId,frameId:n.frameId}),r({ok:!0})}catch(e){r({ok:!1,error:String(e||"Unknown error")})}return!0}}}),chrome.runtime.onStartup.addListener(async()=>{await a()}),chrome.runtime.onInstalled.addListener(async()=>{await a()});let L="";function S(e,t,r){try{chrome.tabs.query({},n=>{for(let a of n||[])if("number"==typeof a.id)try{chrome.tabs.sendMessage(a.id,{type:"extjs-dev-reload",state:e,label:t||"",kind:r||""}).catch(()=>{})}catch{}})}catch{}}"function"==typeof chrome.runtime?.onMessageExternal?.addListener&&chrome.runtime.onMessageExternal.addListener((e,t,r)=>{if(!e||"extjs-dev-reload-state"!==e.type)return;let n=t?.id;if(!n)return;let a="reloaded"===e.phase?"reloaded":"reloading",o="string"==typeof e.label?e.label:"",i="string"==typeof e.kind?e.kind:"";chrome.management.get(n,e=>{chrome.runtime.lastError||k(e)&&(L="reloading"===a?o:"",S(a,o,i))}),r({ok:!0})}),"function"==typeof chrome.management?.onDisabled?.addListener&&chrome.management.onDisabled.addListener(e=>{k(e)&&S("reloading",L)}),"function"==typeof chrome.management?.onEnabled?.addListener&&chrome.management.onEnabled.addListener(e=>{k(e)&&(S("reloaded",L),L="")}),"function"==typeof chrome.management?.onInstalled?.addListener&&chrome.management.onInstalled.addListener(e=>{k(e)&&(S("reloaded",L),L="")})})();