opera-devtools-mcp 0.6.1 → 0.8.0

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 (96) hide show
  1. package/README.md +1 -1
  2. package/build/src/McpContext.js +78 -41
  3. package/build/src/McpPage.js +5 -1
  4. package/build/src/ToolHandler.js +54 -76
  5. package/build/src/bin/chrome-devtools-mcp-main.js +4 -4
  6. package/build/src/bin/chrome-devtools.js +56 -124
  7. package/build/src/bin/opera-browser-cli.js +102 -0
  8. package/build/src/bin/opera-devtools-cli-options.js +1 -1
  9. package/build/src/bin/opera-devtools-mcp-cli-options.js +1 -1
  10. package/build/src/bin/opera-devtools-mcp.js +20 -1
  11. package/build/src/browser.js +23 -25
  12. package/build/src/config/browser-options.js +126 -0
  13. package/build/src/config/category-options.js +81 -0
  14. package/build/src/{bin/chrome-devtools-cli-options.js → config/cli-options.js} +368 -26
  15. package/build/src/{bin/chrome-devtools-mcp-cli-options.js → config/mcp-options.js} +143 -164
  16. package/build/src/daemon/client.js +55 -40
  17. package/build/src/daemon/daemon.js +62 -39
  18. package/build/src/daemon/utils.js +6 -0
  19. package/build/src/devtools/DevtoolsUtils.js +27 -21
  20. package/build/src/formatters/NetworkFormatter.js +5 -2
  21. package/build/src/index.js +166 -100
  22. package/build/src/opera/branding.js +4 -2
  23. package/build/src/opera/browserActivity.js +62 -0
  24. package/build/src/opera/browserCleanup.js +123 -0
  25. package/build/src/opera/browserErrors.js +66 -0
  26. package/build/src/opera/browserFlags.js +184 -38
  27. package/build/src/opera/browserTarget.js +513 -0
  28. package/build/src/opera/cdpErrors.js +391 -0
  29. package/build/src/opera/cliCommands.js +378 -0
  30. package/build/src/opera/cliOutput.js +284 -0
  31. package/build/src/opera/compactSnapshot.js +525 -0
  32. package/build/src/opera/config.js +166 -0
  33. package/build/src/opera/daemonLifecycle.js +257 -0
  34. package/build/src/opera/daemonLog.js +103 -0
  35. package/build/src/opera/daemonPidFile.js +83 -0
  36. package/build/src/opera/daemonShutdown.js +66 -0
  37. package/build/src/opera/daemonSocket.js +87 -0
  38. package/build/src/opera/daemonStreaming.js +130 -0
  39. package/build/src/opera/daemonToolCall.js +26 -0
  40. package/build/src/opera/detect.js +114 -0
  41. package/build/src/opera/doctor.js +317 -0
  42. package/build/src/opera/envConfig.js +229 -0
  43. package/build/src/opera/launcherNotice.js +116 -0
  44. package/build/src/opera/legacyBridgeCleanup.js +297 -0
  45. package/build/src/opera/logs.js +133 -0
  46. package/build/src/opera/mcpServerSupervisor.js +128 -0
  47. package/build/src/opera/migrationShared.js +164 -0
  48. package/build/src/opera/operaPages.js +56 -0
  49. package/build/src/opera/pageIdRouting.js +35 -0
  50. package/build/src/opera/pageRecovery.js +53 -0
  51. package/build/src/opera/profile.js +270 -0
  52. package/build/src/opera/refArgs.js +36 -0
  53. package/build/src/opera/serviceWorkerRetry.js +46 -4
  54. package/build/src/opera/setup.js +290 -0
  55. package/build/src/opera/skills/SKILL.md +160 -0
  56. package/build/src/opera/streamingTools.js +73 -0
  57. package/build/src/opera/suggestions.js +67 -0
  58. package/build/src/opera/toolHandlerHooks.js +25 -1
  59. package/build/src/opera/tools/opera.js +107 -38
  60. package/build/src/opera/urlResolver.js +69 -0
  61. package/build/src/opera/webStorageWarning.js +92 -0
  62. package/build/src/processors/HeapSnapshotManager.js +12 -0
  63. package/build/src/telemetry/ClearcutLogger.js +19 -6
  64. package/build/src/telemetry/transformation.js +4 -0
  65. package/build/src/telemetry/types.js +4 -0
  66. package/build/src/third_party/THIRD_PARTY_NOTICES +5 -5
  67. package/build/src/third_party/bundled-packages.json +3 -3
  68. package/build/src/third_party/devtools-formatter-worker.js +23 -0
  69. package/build/src/third_party/devtools-heap-snapshot-worker.js +101 -20
  70. package/build/src/third_party/index.js +15460 -14256
  71. package/build/src/third_party/issue-descriptions/federatedAuthRequestAccountsBlockedByConnectionAllowlist.md +1 -0
  72. package/build/src/third_party/issue-descriptions/federatedAuthRequestConfigBlockedByConnectionAllowlist.md +1 -0
  73. package/build/src/third_party/issue-descriptions/federatedAuthRequestIdTokenBlockedByConnectionAllowlist.md +1 -0
  74. package/build/src/third_party/issue-descriptions/federatedAuthRequestWellKnownBlockedByConnectionAllowlist.md +1 -0
  75. package/build/src/tools/ToolDefinition.js +15 -0
  76. package/build/src/tools/categories.js +0 -6
  77. package/build/src/tools/comments.js +90 -0
  78. package/build/src/tools/console.js +1 -1
  79. package/build/src/tools/emulation.js +1 -1
  80. package/build/src/tools/extensions.js +1 -1
  81. package/build/src/tools/memory.js +60 -6
  82. package/build/src/tools/network.js +2 -2
  83. package/build/src/tools/pages.js +26 -15
  84. package/build/src/tools/performance.js +4 -3
  85. package/build/src/tools/screencast.js +3 -2
  86. package/build/src/tools/screenshot.js +39 -8
  87. package/build/src/tools/script.js +17 -4
  88. package/build/src/tools/slim/tools.js +41 -33
  89. package/build/src/tools/snapshot.js +1 -1
  90. package/build/src/tools/tools.js +2 -0
  91. package/build/src/utils/WaitForHelper.js +12 -1
  92. package/build/src/utils/bytes.js +105 -0
  93. package/build/src/utils/url.js +79 -0
  94. package/build/src/version.js +1 -1
  95. package/package.json +29 -8
  96. package/build/src/bin/opera-devtools.js +0 -10
@@ -0,0 +1,92 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Opera Norway AS. All rights reserved.
4
+ *
5
+ * This file is an original work developed by Opera.
6
+ */
7
+ /**
8
+ * Node's Web Storage warning, and the one read of `localStorage` that provokes
9
+ * it.
10
+ *
11
+ * Node defines `localStorage` as a lazy global accessor. Reading it without
12
+ * `--localstorage-file` yields `undefined` and prints, once, to stderr:
13
+ *
14
+ * ExperimentalWarning: localStorage is not available because
15
+ * --localstorage-file was not provided.
16
+ *
17
+ * The bundled `debug` package reads it when it initializes
18
+ * (`node_modules/debug/src/browser.js` → `localstorage()`, reached through
19
+ * `lighthouse-logger` and `third_party/lighthouse-devtools-mcp-bundle.js`), and
20
+ * every entry point reaches that: the warning preceded a CLI command's own
21
+ * output, led the MCP server's stderr, and opened the daemon's log. The read
22
+ * only ever wants the "no storage here" answer its `try { return localStorage }
23
+ * catch {}` falls back to anyway; the warning is its entire effect.
24
+ *
25
+ * This module takes the accessor away first, replacing it with the `undefined`
26
+ * the read produces. It is deliberately neither `--disable-warning` nor
27
+ * `process.removeAllListeners('warning')`: those hide every experimental
28
+ * warning, including the ones worth reading, and the flag cannot reach a
29
+ * Windows `.cmd` shim or a plain `node build/…/bin.js`.
30
+ *
31
+ * The guard installs on import, so a process whose own imports load
32
+ * `third_party` first — the daemon — can preload this file instead; see
33
+ * `preloadWebStorageWarningGuardInChildren`.
34
+ */
35
+ import fs from 'node:fs';
36
+ import process from 'node:process';
37
+ import { fileURLToPath, pathToFileURL } from 'node:url';
38
+ /**
39
+ * Removes the accessor, so the read becomes the `undefined` it already fell back
40
+ * to and prints nothing.
41
+ *
42
+ * Nothing happens on a Node without the accessor, or when the process was told
43
+ * where to keep Web Storage: `--localstorage-file` is the whole of the opt-in,
44
+ * and with it the getter hands back a real `Storage` that must survive.
45
+ */
46
+ function installWebStorageWarningGuard() {
47
+ const descriptor = Object.getOwnPropertyDescriptor(globalThis, 'localStorage');
48
+ // `--localstorage-file` can arrive as a Node flag or through NODE_OPTIONS,
49
+ // which the daemon inherits from this process.
50
+ const configured = [
51
+ ...process.execArgv,
52
+ ...(process.env.NODE_OPTIONS?.split(/\s+/) ?? []),
53
+ ].some(arg => arg === '--localstorage-file' || arg.startsWith('--localstorage-file='));
54
+ // No accessor — older Node, or Web Storage not exposed at all — leaves
55
+ // nothing to do. A second call lands here too: the install below replaces the
56
+ // accessor with a plain value, so the `get` is gone.
57
+ if (!descriptor?.get || configured) {
58
+ return;
59
+ }
60
+ Object.defineProperty(globalThis, 'localStorage', {
61
+ value: undefined,
62
+ configurable: true,
63
+ writable: true,
64
+ });
65
+ }
66
+ installWebStorageWarningGuard();
67
+ /**
68
+ * Hand the guard to every Node child this process spawns, by preloading it
69
+ * through `NODE_OPTIONS`.
70
+ *
71
+ * The daemon is the child that needs it: `src/daemon/daemon.ts` reaches
72
+ * `third_party/index.ts` through its own static imports, so no module of ours
73
+ * can run first in that process — only a `--import` preload can. The daemon
74
+ * passes its environment on to the MCP server it supervises, so one call at the
75
+ * CLI's entry point covers both.
76
+ *
77
+ * A guard file that is not there is not a reason to fail a spawn: this removes
78
+ * a warning, and a preload that cannot be resolved would abort the child.
79
+ */
80
+ export function preloadWebStorageWarningGuardInChildren() {
81
+ const guardFile = fileURLToPath(new URL('./webStorageWarning.js', import.meta.url));
82
+ if (!fs.existsSync(guardFile)) {
83
+ return;
84
+ }
85
+ const option = `--import=${pathToFileURL(guardFile).href}`;
86
+ const current = process.env.NODE_OPTIONS?.trim();
87
+ if (current?.includes(option)) {
88
+ return;
89
+ }
90
+ process.env.NODE_OPTIONS = current ? `${current} ${option}` : option;
91
+ }
92
+ //# sourceMappingURL=webStorageWarning.js.map
@@ -7,10 +7,17 @@ import fsSync from 'node:fs';
7
7
  import path from 'node:path';
8
8
  import { DevTools } from '../third_party/index.js';
9
9
  import { createIdGenerator, stableIdSymbol, } from '../utils/id.js';
10
+ const VALID_EXTENSIONS = ['.heapsnapshot', '.heaptimeline'];
11
+ function hasValidHeapSnapshotExtension(filePath) {
12
+ return VALID_EXTENSIONS.some(ext => filePath.endsWith(ext));
13
+ }
10
14
  export class HeapSnapshotManager {
11
15
  #snapshotIdGenerator = createIdGenerator();
12
16
  #snapshots = new Map();
13
17
  async getSnapshot(filePath) {
18
+ if (!hasValidHeapSnapshotExtension(filePath)) {
19
+ throw new Error(`File ${filePath} must have a .heapsnapshot or .heaptimeline extension.`);
20
+ }
14
21
  const absolutePath = path.resolve(filePath);
15
22
  const cached = this.#snapshots.get(absolutePath);
16
23
  if (cached) {
@@ -235,6 +242,11 @@ export class HeapSnapshotManager {
235
242
  const snapshot = await this.getSnapshot(filePath);
236
243
  return await snapshot.getDuplicateStrings();
237
244
  }
245
+ async queryObjects(filePath, options) {
246
+ const snapshot = await this.getSnapshot(filePath);
247
+ const provider = snapshot.queryObjects(options);
248
+ return await provider.serializeItemsRange(0, Infinity);
249
+ }
238
250
  hasSnapshots() {
239
251
  return this.#snapshots.size > 0;
240
252
  }
@@ -6,7 +6,7 @@
6
6
  import process from 'node:process';
7
7
  import { DAEMON_CLIENT_NAME } from '../daemon/utils.js';
8
8
  import { logger } from '../utils/logger.js';
9
- import { sanitizeParams, stripUnderscoreBeforeNumber } from './transformation.js';
9
+ import { bucketizeDaysSince, bucketizeLatency, buildContext, sanitizeParams, stripUnderscoreBeforeNumber, } from './transformation.js';
10
10
  import { McpClient, WatchdogMessageType, OsType, } from './types.js';
11
11
  import { WatchdogClient } from './WatchdogClient.js';
12
12
  const MS_PER_DAY = 24 * 60 * 60 * 1000;
@@ -58,7 +58,10 @@ export class ClearcutLogger {
58
58
  }
59
59
  setClientName(clientName) {
60
60
  const lowerName = clientName.toLowerCase();
61
- if (lowerName.includes('claude')) {
61
+ if (lowerName.includes('claude-desktop')) {
62
+ this.#mcpClient = McpClient.MCP_CLIENT_CLAUDE_DESKTOP;
63
+ }
64
+ else if (lowerName.includes('claude')) {
62
65
  this.#mcpClient = McpClient.MCP_CLIENT_CLAUDE_CODE;
63
66
  }
64
67
  else if (lowerName.includes('gemini')) {
@@ -70,25 +73,35 @@ export class ClearcutLogger {
70
73
  else if (lowerName.includes('openclaw')) {
71
74
  this.#mcpClient = McpClient.MCP_CLIENT_OPENCLAW;
72
75
  }
76
+ else if (lowerName.includes('opencode')) {
77
+ this.#mcpClient = McpClient.MCP_CLIENT_OPENCODE;
78
+ }
73
79
  else if (lowerName.includes('codex')) {
74
80
  this.#mcpClient = McpClient.MCP_CLIENT_CODEX;
75
81
  }
76
82
  else if (lowerName.includes('antigravity')) {
77
83
  this.#mcpClient = McpClient.MCP_CLIENT_ANTIGRAVITY;
78
84
  }
85
+ else if (lowerName.includes('grok') || lowerName.includes('xai')) {
86
+ this.#mcpClient = McpClient.MCP_CLIENT_GROK;
87
+ }
88
+ else if (lowerName.includes('copilot')) {
89
+ this.#mcpClient = McpClient.MCP_CLIENT_GITHUB_COPILOT;
90
+ }
79
91
  else {
80
92
  this.#mcpClient = McpClient.MCP_CLIENT_OTHER;
81
93
  }
82
94
  }
83
95
  async logToolInvocation(args) {
96
+ const context = buildContext(args.devToolsData, args.pageUrl);
84
97
  const sanitizedToolName = stripUnderscoreBeforeNumber(args.toolName);
85
98
  const tool_invocation = {
86
99
  tool_name: sanitizedToolName,
87
100
  success: args.success,
88
- latency_ms: args.latencyMs,
101
+ latency_ms: bucketizeLatency(args.latencyMs),
89
102
  };
90
- if (Object.keys(args.context).length > 0) {
91
- tool_invocation.context = args.context;
103
+ if (Object.keys(context).length > 0) {
104
+ tool_invocation.context = context;
92
105
  }
93
106
  if (Object.keys(args.params).length > 0) {
94
107
  tool_invocation.tool_params = {
@@ -130,7 +143,7 @@ export class ClearcutLogger {
130
143
  payload: {
131
144
  mcp_client: this.#mcpClient,
132
145
  daily_active: {
133
- days_since_last_active: daysSince,
146
+ days_since_last_active: bucketizeDaysSince(daysSince),
134
147
  },
135
148
  },
136
149
  });
@@ -13,6 +13,10 @@ export function bucketizeLatency(latencyMs) {
13
13
  }
14
14
  return LATENCY_BUCKETS[LATENCY_BUCKETS.length - 1];
15
15
  }
16
+ export const MAX_ACTIVE_DAYS = 31;
17
+ export function bucketizeDaysSince(days) {
18
+ return Math.min(days, MAX_ACTIVE_DAYS);
19
+ }
16
20
  export const PARAM_BLOCKLIST = new Set(['uid', 'reqid', 'msgid']);
17
21
  const SUPPORTED_ZOD_TYPES = [
18
22
  'ZodString',
@@ -20,6 +20,10 @@ export var McpClient;
20
20
  McpClient[McpClient["MCP_CLIENT_OPENCLAW"] = 5] = "MCP_CLIENT_OPENCLAW";
21
21
  McpClient[McpClient["MCP_CLIENT_CODEX"] = 6] = "MCP_CLIENT_CODEX";
22
22
  McpClient[McpClient["MCP_CLIENT_ANTIGRAVITY"] = 7] = "MCP_CLIENT_ANTIGRAVITY";
23
+ McpClient[McpClient["MCP_CLIENT_GROK"] = 8] = "MCP_CLIENT_GROK";
24
+ McpClient[McpClient["MCP_CLIENT_OPENCODE"] = 9] = "MCP_CLIENT_OPENCODE";
25
+ McpClient[McpClient["MCP_CLIENT_CLAUDE_DESKTOP"] = 10] = "MCP_CLIENT_CLAUDE_DESKTOP";
26
+ McpClient[McpClient["MCP_CLIENT_GITHUB_COPILOT"] = 11] = "MCP_CLIENT_GITHUB_COPILOT";
23
27
  McpClient[McpClient["MCP_CLIENT_OTHER"] = 3] = "MCP_CLIENT_OTHER";
24
28
  })(McpClient || (McpClient = {}));
25
29
  // IPC types for messages between the main process and the
@@ -1,6 +1,6 @@
1
1
  Name: core-js
2
2
  URL: https://core-js.io
3
- Version: 3.49.0
3
+ Version: 3.50.0
4
4
  License: MIT
5
5
 
6
6
  Copyright (c) 2013–2025 Denis Pushkarev (zloirock.ru)
@@ -745,21 +745,21 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
745
745
 
746
746
  Name: puppeteer-core
747
747
  URL: https://github.com/puppeteer/puppeteer/tree/main/packages/puppeteer-core
748
- Version: 25.6.0
748
+ Version: 25.10.0
749
749
  License: Apache-2.0
750
750
 
751
751
  -------------------- DEPENDENCY DIVIDER --------------------
752
752
 
753
753
  Name: @puppeteer/browsers
754
754
  URL: https://github.com/puppeteer/puppeteer/tree/main/packages/browsers
755
- Version: 3.2.0
755
+ Version: 3.2.2
756
756
  License: Apache-2.0
757
757
 
758
758
  -------------------- DEPENDENCY DIVIDER --------------------
759
759
 
760
760
  Name: ws
761
761
  URL: https://github.com/websockets/ws
762
- Version: 8.21.1
762
+ Version: 8.21.3
763
763
  License: MIT
764
764
 
765
765
  Copyright (c) 2011 Einar Otto Stangvik <einaros@gmail.com>
@@ -795,7 +795,7 @@ License: MIT
795
795
 
796
796
  Name: devtools-frontend
797
797
  URL: https://github.com/ChromeDevTools/devtools-frontend
798
- Version: eaad2491924990cb310a4c753b2851e64d515f00
798
+ Version: 2a5562dea4bfa759c15700d2311fc623c1b684d1
799
799
  License: Apache-2.0
800
800
 
801
801
  // Copyright 2014 The Chromium Authors
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "@modelcontextprotocol/sdk": "1.30.0",
3
- "core-js": "3.49.0",
3
+ "core-js": "3.50.0",
4
4
  "lighthouse": "13.4.1",
5
5
  "semver": "7.8.5",
6
6
  "yargs": "18.1.0",
7
7
  "zod": "3.25.76",
8
- "puppeteer-core": "25.6.0",
9
- "https://github.com/ChromeDevTools/devtools-frontend": "eaad2491924990cb310a4c753b2851e64d515f00"
8
+ "puppeteer-core": "25.10.0",
9
+ "https://github.com/ChromeDevTools/devtools-frontend": "2a5562dea4bfa759c15700d2311fc623c1b684d1"
10
10
  }
@@ -8557,6 +8557,16 @@ class ColorConverter {
8557
8557
  const rgbOutput = NAMED_GAMUTS.displayP3_INVERSE.multiply(xyzInput);
8558
8558
  return applyTransferFns(NAMED_TRANSFER_FN.sRGB_INVERSE, rgbOutput.values[0], rgbOutput.values[1], rgbOutput.values[2]);
8559
8559
  }
8560
+ static displayP3LinearToXyzd50(r, g, b) {
8561
+ const rgbInput = new Vector3([r, g, b]);
8562
+ const xyzOutput = NAMED_GAMUTS.displayP3.multiply(rgbInput);
8563
+ return xyzOutput.values;
8564
+ }
8565
+ static xyzd50ToDisplayP3Linear(x, y, z) {
8566
+ const xyzInput = new Vector3([x, y, z]);
8567
+ const rgbResult = NAMED_GAMUTS.displayP3_INVERSE.multiply(xyzInput);
8568
+ return rgbResult.values;
8569
+ }
8560
8570
  static proPhotoToXyzd50(r, g, b) {
8561
8571
  const [mappedR, mappedG, mappedB] = applyTransferFns(NAMED_TRANSFER_FN.proPhotoRGB, r, g, b);
8562
8572
  const rgbInput = new Vector3([mappedR, mappedG, mappedB]);
@@ -8756,6 +8766,8 @@ function getColorSpace(colorSpaceText) {
8756
8766
  return "srgb-linear" ;
8757
8767
  case "display-p3" :
8758
8768
  return "display-p3" ;
8769
+ case "display-p3-linear" :
8770
+ return "display-p3-linear" ;
8759
8771
  case "a98-rgb" :
8760
8772
  return "a98-rgb" ;
8761
8773
  case "prophoto-rgb" :
@@ -8974,6 +8986,7 @@ class Lab {
8974
8986
  ["srgb" ]: (self) => new ColorFunction("srgb" , ...ColorConverter.xyzd50ToSrgb(...self.#toXyzd50()), self.alpha),
8975
8987
  ["srgb-linear" ]: (self) => new ColorFunction("srgb-linear" , ...ColorConverter.xyzd50TosRGBLinear(...self.#toXyzd50()), self.alpha),
8976
8988
  ["display-p3" ]: (self) => new ColorFunction("display-p3" , ...ColorConverter.xyzd50ToDisplayP3(...self.#toXyzd50()), self.alpha),
8989
+ ["display-p3-linear" ]: (self) => new ColorFunction("display-p3-linear" , ...ColorConverter.xyzd50ToDisplayP3Linear(...self.#toXyzd50()), self.alpha),
8977
8990
  ["a98-rgb" ]: (self) => new ColorFunction("a98-rgb" , ...ColorConverter.xyzd50ToAdobeRGB(...self.#toXyzd50()), self.alpha),
8978
8991
  ["prophoto-rgb" ]: (self) => new ColorFunction("prophoto-rgb" , ...ColorConverter.xyzd50ToProPhoto(...self.#toXyzd50()), self.alpha),
8979
8992
  ["rec2020" ]: (self) => new ColorFunction("rec2020" , ...ColorConverter.xyzd50ToRec2020(...self.#toXyzd50()), self.alpha),
@@ -9090,6 +9103,7 @@ class LCH {
9090
9103
  ["srgb" ]: (self) => new ColorFunction("srgb" , ...ColorConverter.xyzd50ToSrgb(...self.#toXyzd50()), self.alpha),
9091
9104
  ["srgb-linear" ]: (self) => new ColorFunction("srgb-linear" , ...ColorConverter.xyzd50TosRGBLinear(...self.#toXyzd50()), self.alpha),
9092
9105
  ["display-p3" ]: (self) => new ColorFunction("display-p3" , ...ColorConverter.xyzd50ToDisplayP3(...self.#toXyzd50()), self.alpha),
9106
+ ["display-p3-linear" ]: (self) => new ColorFunction("display-p3-linear" , ...ColorConverter.xyzd50ToDisplayP3Linear(...self.#toXyzd50()), self.alpha),
9093
9107
  ["a98-rgb" ]: (self) => new ColorFunction("a98-rgb" , ...ColorConverter.xyzd50ToAdobeRGB(...self.#toXyzd50()), self.alpha),
9094
9108
  ["prophoto-rgb" ]: (self) => new ColorFunction("prophoto-rgb" , ...ColorConverter.xyzd50ToProPhoto(...self.#toXyzd50()), self.alpha),
9095
9109
  ["rec2020" ]: (self) => new ColorFunction("rec2020" , ...ColorConverter.xyzd50ToRec2020(...self.#toXyzd50()), self.alpha),
@@ -9208,6 +9222,7 @@ class Oklab {
9208
9222
  ["srgb" ]: (self) => new ColorFunction("srgb" , ...ColorConverter.xyzd50ToSrgb(...self.#toXyzd50()), self.alpha),
9209
9223
  ["srgb-linear" ]: (self) => new ColorFunction("srgb-linear" , ...ColorConverter.xyzd50TosRGBLinear(...self.#toXyzd50()), self.alpha),
9210
9224
  ["display-p3" ]: (self) => new ColorFunction("display-p3" , ...ColorConverter.xyzd50ToDisplayP3(...self.#toXyzd50()), self.alpha),
9225
+ ["display-p3-linear" ]: (self) => new ColorFunction("display-p3-linear" , ...ColorConverter.xyzd50ToDisplayP3Linear(...self.#toXyzd50()), self.alpha),
9211
9226
  ["a98-rgb" ]: (self) => new ColorFunction("a98-rgb" , ...ColorConverter.xyzd50ToAdobeRGB(...self.#toXyzd50()), self.alpha),
9212
9227
  ["prophoto-rgb" ]: (self) => new ColorFunction("prophoto-rgb" , ...ColorConverter.xyzd50ToProPhoto(...self.#toXyzd50()), self.alpha),
9213
9228
  ["rec2020" ]: (self) => new ColorFunction("rec2020" , ...ColorConverter.xyzd50ToRec2020(...self.#toXyzd50()), self.alpha),
@@ -9324,6 +9339,7 @@ class Oklch {
9324
9339
  ["srgb" ]: (self) => new ColorFunction("srgb" , ...ColorConverter.xyzd50ToSrgb(...self.#toXyzd50()), self.alpha),
9325
9340
  ["srgb-linear" ]: (self) => new ColorFunction("srgb-linear" , ...ColorConverter.xyzd50TosRGBLinear(...self.#toXyzd50()), self.alpha),
9326
9341
  ["display-p3" ]: (self) => new ColorFunction("display-p3" , ...ColorConverter.xyzd50ToDisplayP3(...self.#toXyzd50()), self.alpha),
9342
+ ["display-p3-linear" ]: (self) => new ColorFunction("display-p3-linear" , ...ColorConverter.xyzd50ToDisplayP3Linear(...self.#toXyzd50()), self.alpha),
9327
9343
  ["a98-rgb" ]: (self) => new ColorFunction("a98-rgb" , ...ColorConverter.xyzd50ToAdobeRGB(...self.#toXyzd50()), self.alpha),
9328
9344
  ["prophoto-rgb" ]: (self) => new ColorFunction("prophoto-rgb" , ...ColorConverter.xyzd50ToProPhoto(...self.#toXyzd50()), self.alpha),
9329
9345
  ["rec2020" ]: (self) => new ColorFunction("rec2020" , ...ColorConverter.xyzd50ToRec2020(...self.#toXyzd50()), self.alpha),
@@ -9443,6 +9459,7 @@ class ColorFunction {
9443
9459
  ["srgb" ]: (self) => new ColorFunction("srgb" , ...ColorConverter.xyzd50ToSrgb(...self.#toXyzd50()), self.alpha),
9444
9460
  ["srgb-linear" ]: (self) => new ColorFunction("srgb-linear" , ...ColorConverter.xyzd50TosRGBLinear(...self.#toXyzd50()), self.alpha),
9445
9461
  ["display-p3" ]: (self) => new ColorFunction("display-p3" , ...ColorConverter.xyzd50ToDisplayP3(...self.#toXyzd50()), self.alpha),
9462
+ ["display-p3-linear" ]: (self) => new ColorFunction("display-p3-linear" , ...ColorConverter.xyzd50ToDisplayP3Linear(...self.#toXyzd50()), self.alpha),
9446
9463
  ["a98-rgb" ]: (self) => new ColorFunction("a98-rgb" , ...ColorConverter.xyzd50ToAdobeRGB(...self.#toXyzd50()), self.alpha),
9447
9464
  ["prophoto-rgb" ]: (self) => new ColorFunction("prophoto-rgb" , ...ColorConverter.xyzd50ToProPhoto(...self.#toXyzd50()), self.alpha),
9448
9465
  ["rec2020" ]: (self) => new ColorFunction("rec2020" , ...ColorConverter.xyzd50ToRec2020(...self.#toXyzd50()), self.alpha),
@@ -9459,6 +9476,8 @@ class ColorFunction {
9459
9476
  return ColorConverter.srgbLinearToXyzd50(p0, p1, p2);
9460
9477
  case "display-p3" :
9461
9478
  return ColorConverter.displayP3ToXyzd50(p0, p1, p2);
9479
+ case "display-p3-linear" :
9480
+ return ColorConverter.displayP3LinearToXyzd50(p0, p1, p2);
9462
9481
  case "a98-rgb" :
9463
9482
  return ColorConverter.adobeRGBToXyzd50(p0, p1, p2);
9464
9483
  case "prophoto-rgb" :
@@ -9614,6 +9633,7 @@ class HSL {
9614
9633
  ["srgb" ]: (self) => new ColorFunction("srgb" , ...ColorConverter.xyzd50ToSrgb(...self.#toXyzd50()), self.alpha),
9615
9634
  ["srgb-linear" ]: (self) => new ColorFunction("srgb-linear" , ...ColorConverter.xyzd50TosRGBLinear(...self.#toXyzd50()), self.alpha),
9616
9635
  ["display-p3" ]: (self) => new ColorFunction("display-p3" , ...ColorConverter.xyzd50ToDisplayP3(...self.#toXyzd50()), self.alpha),
9636
+ ["display-p3-linear" ]: (self) => new ColorFunction("display-p3-linear" , ...ColorConverter.xyzd50ToDisplayP3Linear(...self.#toXyzd50()), self.alpha),
9617
9637
  ["a98-rgb" ]: (self) => new ColorFunction("a98-rgb" , ...ColorConverter.xyzd50ToAdobeRGB(...self.#toXyzd50()), self.alpha),
9618
9638
  ["prophoto-rgb" ]: (self) => new ColorFunction("prophoto-rgb" , ...ColorConverter.xyzd50ToProPhoto(...self.#toXyzd50()), self.alpha),
9619
9639
  ["rec2020" ]: (self) => new ColorFunction("rec2020" , ...ColorConverter.xyzd50ToRec2020(...self.#toXyzd50()), self.alpha),
@@ -9741,6 +9761,7 @@ class HWB {
9741
9761
  ["srgb" ]: (self) => new ColorFunction("srgb" , ...ColorConverter.xyzd50ToSrgb(...self.#toXyzd50()), self.alpha),
9742
9762
  ["srgb-linear" ]: (self) => new ColorFunction("srgb-linear" , ...ColorConverter.xyzd50TosRGBLinear(...self.#toXyzd50()), self.alpha),
9743
9763
  ["display-p3" ]: (self) => new ColorFunction("display-p3" , ...ColorConverter.xyzd50ToDisplayP3(...self.#toXyzd50()), self.alpha),
9764
+ ["display-p3-linear" ]: (self) => new ColorFunction("display-p3-linear" , ...ColorConverter.xyzd50ToDisplayP3Linear(...self.#toXyzd50()), self.alpha),
9744
9765
  ["a98-rgb" ]: (self) => new ColorFunction("a98-rgb" , ...ColorConverter.xyzd50ToAdobeRGB(...self.#toXyzd50()), self.alpha),
9745
9766
  ["prophoto-rgb" ]: (self) => new ColorFunction("prophoto-rgb" , ...ColorConverter.xyzd50ToProPhoto(...self.#toXyzd50()), self.alpha),
9746
9767
  ["rec2020" ]: (self) => new ColorFunction("rec2020" , ...ColorConverter.xyzd50ToRec2020(...self.#toXyzd50()), self.alpha),
@@ -9969,6 +9990,7 @@ class Legacy {
9969
9990
  ["srgb" ]: (self) => new ColorFunction("srgb" , ...ColorConverter.xyzd50ToSrgb(...self.#toXyzd50()), self.alpha),
9970
9991
  ["srgb-linear" ]: (self) => new ColorFunction("srgb-linear" , ...ColorConverter.xyzd50TosRGBLinear(...self.#toXyzd50()), self.alpha),
9971
9992
  ["display-p3" ]: (self) => new ColorFunction("display-p3" , ...ColorConverter.xyzd50ToDisplayP3(...self.#toXyzd50()), self.alpha),
9993
+ ["display-p3-linear" ]: (self) => new ColorFunction("display-p3-linear" , ...ColorConverter.xyzd50ToDisplayP3Linear(...self.#toXyzd50()), self.alpha),
9972
9994
  ["a98-rgb" ]: (self) => new ColorFunction("a98-rgb" , ...ColorConverter.xyzd50ToAdobeRGB(...self.#toXyzd50()), self.alpha),
9973
9995
  ["prophoto-rgb" ]: (self) => new ColorFunction("prophoto-rgb" , ...ColorConverter.xyzd50ToProPhoto(...self.#toXyzd50()), self.alpha),
9974
9996
  ["rec2020" ]: (self) => new ColorFunction("rec2020" , ...ColorConverter.xyzd50ToRec2020(...self.#toXyzd50()), self.alpha),
@@ -15339,3 +15361,4 @@ HOST_RUNTIME.workerScope.onmessage = function (event) {
15339
15361
  }
15340
15362
  };
15341
15363
  HOST_RUNTIME.workerScope.postMessage('workerReady');
15364
+ //# sourceMappingURL=devtools-formatter-worker.js.map