extension-develop 4.0.19 → 4.0.20

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 (31) hide show
  1. package/dist/0~dev-server.mjs +8 -3
  2. package/dist/0~rspack-config.mjs +3759 -205
  3. package/dist/101.mjs +65 -2
  4. package/dist/349.mjs +2 -0
  5. package/dist/494.mjs +7 -1
  6. package/dist/839.mjs +164 -3619
  7. package/dist/887.mjs +5 -1
  8. package/dist/bridge-entry.d.ts +5 -4
  9. package/dist/bridge.mjs +25 -5
  10. package/dist/contract/codes.json +19 -2
  11. package/dist/contract/envelope.schema.json +10 -1
  12. package/dist/contract/golden.eval.target-not-found.json +14 -0
  13. package/dist/contract/golden.open.headed-window-required.json +14 -0
  14. package/dist/contracts-entry.d.ts +2 -0
  15. package/dist/contracts.mjs +12 -0
  16. package/dist/dev-server/control-bridge/consumer-client.d.ts +15 -1
  17. package/dist/dev-server/control-bridge/contracts.d.ts +6 -0
  18. package/dist/dev-server/control-bridge/producer-runtime.d.ts +1 -1
  19. package/dist/ensure-hmr-for-scripts.js +1 -1
  20. package/dist/ensure-hmr-for-scripts.mjs +1 -1
  21. package/dist/feature-scripts-content-script-wrapper.js +2 -2
  22. package/dist/feature-scripts-content-script-wrapper.mjs +2 -2
  23. package/dist/lib/extension-id.d.ts +9 -0
  24. package/dist/lib/messaging.d.ts +9 -0
  25. package/dist/lib/session-paths.d.ts +2 -0
  26. package/dist/plugin-playwright/index.d.ts +7 -0
  27. package/dist/plugin-web-extension/feature-icons/messages.d.ts +3 -0
  28. package/dist/plugin-web-extension/feature-manifest/manifest-lib/theme-values.d.ts +7 -0
  29. package/dist/plugin-web-extension/feature-manifest/messages.d.ts +1 -0
  30. package/dist/plugin-web-extension/feature-manifest/steps/validate-theme-values.d.ts +9 -0
  31. package/package.json +10 -1
package/dist/101.mjs CHANGED
@@ -7,6 +7,7 @@ import { fetchExtensionFromStore } from "extension-from-store";
7
7
  import node_fs from "node:fs";
8
8
  import node_path from "node:path";
9
9
  import { getSpecialFoldersData } from "browser-extension-manifest-fields";
10
+ import { createHash } from "node:crypto";
10
11
  import { fmt, isDebug, artifactNoun as messaging_artifactNoun, prefix as messaging_prefix, card } from "./349.mjs";
11
12
  import { stripBom, parseJsonSafe } from "./23.mjs";
12
13
  import { findNearestDenoConfigSync, validateDenoConfig, PROJECT_MANIFEST_FILENAMES, readProjectDependencies } from "./80.mjs";
@@ -643,7 +644,7 @@ async function config_loader_isUsingExperimentalConfig(projectPath) {
643
644
  }
644
645
  return false;
645
646
  }
646
- var package_namespaceObject = /*#__PURE__*/ JSON.parse('{"rE":"4.0.19","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","adm-zip":"^0.6.0","browser-extension-manifest-fields":"^2.2.9","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.1.1","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.18","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"}}');
647
+ var package_namespaceObject = /*#__PURE__*/ JSON.parse('{"rE":"4.0.20","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","adm-zip":"^0.6.0","browser-extension-manifest-fields":"^2.2.9","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.1.1","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.18","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"}}');
647
648
  function asAbsolute(p) {
648
649
  return __rspack_external_node_path_c5b9b54f.isAbsolute(p) ? p : __rspack_external_node_path_c5b9b54f.resolve(p);
649
650
  }
@@ -1781,6 +1782,57 @@ function computeExtensionsToLoad(baseDir, mode, browser, userExtensionOutputPath
1781
1782
  list.push(userExtensionOutputPath);
1782
1783
  return dedupeByResolvedPath(list);
1783
1784
  }
1785
+ function idFromHash(hash) {
1786
+ const hex = hash.subarray(0, 16).toString('hex');
1787
+ let id = '';
1788
+ for (const char of hex)id += String.fromCharCode('a'.charCodeAt(0) + parseInt(char, 16));
1789
+ return id;
1790
+ }
1791
+ function chromiumExtensionIdFromKey(manifestKey) {
1792
+ const decoded = Buffer.from(manifestKey, 'base64');
1793
+ return idFromHash(createHash('sha256').update(decoded).digest());
1794
+ }
1795
+ function chromiumExtensionIdFromPath(extensionDir) {
1796
+ const absolute = __rspack_external_node_path_c5b9b54f.resolve(extensionDir);
1797
+ const bytes = 'win32' === process.platform ? Buffer.from(absolute.replace(/[A-Z]/g, (char)=>char.toLowerCase()), 'utf16le') : Buffer.from(absolute, 'utf8');
1798
+ return idFromHash(createHash('sha256').update(bytes).digest());
1799
+ }
1800
+ function readManifest(extensionDir) {
1801
+ try {
1802
+ const raw = __rspack_external_node_fs_5ea92f0c.readFileSync(__rspack_external_node_path_c5b9b54f.join(extensionDir, 'manifest.json'), 'utf-8');
1803
+ const parsed = JSON.parse(stripBom(raw));
1804
+ return parsed && 'object' == typeof parsed ? parsed : null;
1805
+ } catch {
1806
+ return null;
1807
+ }
1808
+ }
1809
+ function chromiumExtensionId(extensionDir) {
1810
+ const manifest = readManifest(extensionDir);
1811
+ const key = manifest?.key;
1812
+ if ('string' == typeof key && key.trim().length > 0) try {
1813
+ return chromiumExtensionIdFromKey(key);
1814
+ } catch {}
1815
+ return chromiumExtensionIdFromPath(extensionDir);
1816
+ }
1817
+ function geckoExtensionId(extensionDir) {
1818
+ const manifest = readManifest(extensionDir);
1819
+ const settings = manifest?.browser_specific_settings ?? manifest?.applications;
1820
+ const id = settings?.gecko?.id;
1821
+ return 'string' == typeof id && id.trim().length > 0 ? id : void 0;
1822
+ }
1823
+ function managedExtensionRecords(browser, extensionDirs) {
1824
+ const gecko = isGeckoBasedBrowser(browser);
1825
+ return extensionDirs.map((dir)=>{
1826
+ const absolute = __rspack_external_node_path_c5b9b54f.resolve(dir);
1827
+ const id = gecko ? geckoExtensionId(absolute) : chromiumExtensionId(absolute);
1828
+ return id ? {
1829
+ path: absolute,
1830
+ id
1831
+ } : {
1832
+ path: absolute
1833
+ };
1834
+ });
1835
+ }
1784
1836
  function nowISO() {
1785
1837
  return new Date().toISOString();
1786
1838
  }
@@ -1864,6 +1916,8 @@ function createPlaywrightMetadataWriter(options) {
1864
1916
  }
1865
1917
  })();
1866
1918
  if (foreignLiveDevSession) console.warn(`[extension] a live dev session (pid ${foreignLiveDevSession.pid}) owns ${readyPath}; this ${options.command} run will not rewrite the session's ready.json/events.ndjson. The output dir is shared, so the dev browser may pick up freshly ${options.command}-built files. Stop the dev session first for a clean ${options.command} receipt.`);
1919
+ const toManagedRecords = (dirs)=>Array.isArray(dirs) && dirs.length > 0 ? managedExtensionRecords(options.browser, dirs) : void 0;
1920
+ let managedExtensions = toManagedRecords(options.managedExtensionDirs);
1867
1921
  const base = {
1868
1922
  schemaVersion: 2,
1869
1923
  schema: 1,
@@ -1895,11 +1949,15 @@ function createPlaywrightMetadataWriter(options) {
1895
1949
  };
1896
1950
  if (extra?.code) payload.code = extra.code;
1897
1951
  if (extra?.message) payload.message = extra.message;
1952
+ if (managedExtensions) payload.managedExtensions = managedExtensions;
1898
1953
  try {
1899
1954
  if (__rspack_external_node_fs_5ea92f0c.existsSync(readyPath)) {
1900
1955
  const prev = JSON.parse(__rspack_external_node_fs_5ea92f0c.readFileSync(readyPath, 'utf-8'));
1901
1956
  if ('number' == typeof prev.cdpPort) payload.cdpPort = prev.cdpPort;
1902
1957
  if ('number' == typeof prev.rdpPort) payload.rdpPort = prev.rdpPort;
1958
+ if (!payload.managedExtensions && Array.isArray(prev.managedExtensions)) payload.managedExtensions = prev.managedExtensions;
1959
+ if ('string' == typeof prev.profilePath) payload.profilePath = prev.profilePath;
1960
+ if ('number' == typeof prev.browserPid) payload.browserPid = prev.browserPid;
1903
1961
  if ('string' == typeof prev.browserExitedAt) {
1904
1962
  payload.browserExitedAt = prev.browserExitedAt;
1905
1963
  payload.browserExitCode = prev.browserExitCode ?? null;
@@ -1936,6 +1994,9 @@ function createPlaywrightMetadataWriter(options) {
1936
1994
  metadataDir,
1937
1995
  readyPath,
1938
1996
  eventsPath,
1997
+ setManagedExtensionDirs (dirs) {
1998
+ managedExtensions = toManagedRecords(dirs);
1999
+ },
1939
2000
  writeStarting () {
1940
2001
  if (foreignLiveDevSession) return;
1941
2002
  plugin_playwright_ensureDirSync(metadataDir);
@@ -2011,7 +2072,8 @@ class PlaywrightPlugin {
2011
2072
  instanceId: options.instanceId,
2012
2073
  controlPort: options.controlPort,
2013
2074
  controlPath: options.controlPath,
2014
- logsPath: options.logsPath
2075
+ logsPath: options.logsPath,
2076
+ managedExtensionDirs: options.managedExtensionDirs
2015
2077
  });
2016
2078
  }
2017
2079
  apply(compiler) {
@@ -2211,6 +2273,7 @@ async function extensionPreview(pathOrRemoteUrl, previewOptions, browserLauncher
2211
2273
  config: merged.extensions
2212
2274
  });
2213
2275
  const unpackedExtensionDirsToLoad = computeExtensionsToLoad(__rspack_external_node_path_c5b9b54f.resolve(__rspack_import_meta_dirname__, '..'), 'production', browser, outputPath, companionUnpackedExtensionDirs, projectStructure.manifestPath);
2276
+ metadata.setManagedExtensionDirs(unpackedExtensionDirsToLoad.filter((dir)=>__rspack_external_node_path_c5b9b54f.resolve(dir) !== __rspack_external_node_path_c5b9b54f.resolve(outputPath)));
2214
2277
  const resolvedOpts = {
2215
2278
  browser,
2216
2279
  outPath: outputPath,
package/dist/349.mjs CHANGED
@@ -115,6 +115,8 @@ const CODES = {
115
115
  E_SESSION_NOT_FOUND: 'E_SESSION_NOT_FOUND',
116
116
  E_EVAL_REFUSED: 'E_EVAL_REFUSED',
117
117
  E_TARGET_NOT_FOUND: 'E_TARGET_NOT_FOUND',
118
+ E_HEADED_WINDOW_REQUIRED: 'E_HEADED_WINDOW_REQUIRED',
119
+ E_USER_GESTURE_REQUIRED: 'E_USER_GESTURE_REQUIRED',
118
120
  E_TIMEOUT: 'E_TIMEOUT',
119
121
  E_PUBLISH_REJECTED: 'E_PUBLISH_REJECTED',
120
122
  E_AUTH_REQUIRED: 'E_AUTH_REQUIRED',
package/dist/494.mjs CHANGED
@@ -36,6 +36,12 @@ function ensureSessionArtifactsIgnoreFile(projectPath) {
36
36
  function browserArtifactsDir(projectPath, browser) {
37
37
  return __rspack_external_node_path_c5b9b54f.join(sessionArtifactsRootDir(projectPath), browser);
38
38
  }
39
+ function browserProfileRootDir(projectPath, browser) {
40
+ return __rspack_external_node_path_c5b9b54f.join(sessionArtifactsRootDir(projectPath), 'profiles', `${browser}-profile`);
41
+ }
42
+ function browserDistDir(projectPath, browser) {
43
+ return __rspack_external_node_path_c5b9b54f.resolve(projectPath, 'dist', browser);
44
+ }
39
45
  function readyContractPath(projectPath, browser) {
40
46
  return __rspack_external_node_path_c5b9b54f.join(browserArtifactsDir(projectPath, browser), 'ready.json');
41
47
  }
@@ -51,4 +57,4 @@ function actionsPath(projectPath, browser) {
51
57
  function buildSummaryPath(projectPath, browser) {
52
58
  return __rspack_external_node_path_c5b9b54f.join(browserArtifactsDir(projectPath, browser), 'build-summary.json');
53
59
  }
54
- export { actionsPath, browserArtifactsDir, buildSummaryPath, controlPortFilePath, controlTokenPath, ensureSessionArtifactsIgnoreFile, eventsPath, legacyControlPortFilePath, legacyControlTokenPath, logsPath, readyContractPath, sessionArtifactsRootDir, sessionStateDir };
60
+ export { actionsPath, browserArtifactsDir, browserDistDir, browserProfileRootDir, buildSummaryPath, controlPortFilePath, controlTokenPath, ensureSessionArtifactsIgnoreFile, eventsPath, legacyControlPortFilePath, legacyControlTokenPath, logsPath, readyContractPath, sessionArtifactsRootDir, sessionStateDir };