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.
- package/README.md +1 -1
- package/build/src/McpContext.js +78 -41
- package/build/src/McpPage.js +5 -1
- package/build/src/ToolHandler.js +54 -76
- package/build/src/bin/chrome-devtools-mcp-main.js +4 -4
- package/build/src/bin/chrome-devtools.js +56 -124
- package/build/src/bin/opera-browser-cli.js +102 -0
- package/build/src/bin/opera-devtools-cli-options.js +1 -1
- package/build/src/bin/opera-devtools-mcp-cli-options.js +1 -1
- package/build/src/bin/opera-devtools-mcp.js +20 -1
- package/build/src/browser.js +23 -25
- package/build/src/config/browser-options.js +126 -0
- package/build/src/config/category-options.js +81 -0
- package/build/src/{bin/chrome-devtools-cli-options.js → config/cli-options.js} +368 -26
- package/build/src/{bin/chrome-devtools-mcp-cli-options.js → config/mcp-options.js} +143 -164
- package/build/src/daemon/client.js +55 -40
- package/build/src/daemon/daemon.js +62 -39
- package/build/src/daemon/utils.js +6 -0
- package/build/src/devtools/DevtoolsUtils.js +27 -21
- package/build/src/formatters/NetworkFormatter.js +5 -2
- package/build/src/index.js +166 -100
- package/build/src/opera/branding.js +4 -2
- package/build/src/opera/browserActivity.js +62 -0
- package/build/src/opera/browserCleanup.js +123 -0
- package/build/src/opera/browserErrors.js +66 -0
- package/build/src/opera/browserFlags.js +184 -38
- package/build/src/opera/browserTarget.js +513 -0
- package/build/src/opera/cdpErrors.js +391 -0
- package/build/src/opera/cliCommands.js +378 -0
- package/build/src/opera/cliOutput.js +284 -0
- package/build/src/opera/compactSnapshot.js +525 -0
- package/build/src/opera/config.js +166 -0
- package/build/src/opera/daemonLifecycle.js +257 -0
- package/build/src/opera/daemonLog.js +103 -0
- package/build/src/opera/daemonPidFile.js +83 -0
- package/build/src/opera/daemonShutdown.js +66 -0
- package/build/src/opera/daemonSocket.js +87 -0
- package/build/src/opera/daemonStreaming.js +130 -0
- package/build/src/opera/daemonToolCall.js +26 -0
- package/build/src/opera/detect.js +114 -0
- package/build/src/opera/doctor.js +317 -0
- package/build/src/opera/envConfig.js +229 -0
- package/build/src/opera/launcherNotice.js +116 -0
- package/build/src/opera/legacyBridgeCleanup.js +297 -0
- package/build/src/opera/logs.js +133 -0
- package/build/src/opera/mcpServerSupervisor.js +128 -0
- package/build/src/opera/migrationShared.js +164 -0
- package/build/src/opera/operaPages.js +56 -0
- package/build/src/opera/pageIdRouting.js +35 -0
- package/build/src/opera/pageRecovery.js +53 -0
- package/build/src/opera/profile.js +270 -0
- package/build/src/opera/refArgs.js +36 -0
- package/build/src/opera/serviceWorkerRetry.js +46 -4
- package/build/src/opera/setup.js +290 -0
- package/build/src/opera/skills/SKILL.md +160 -0
- package/build/src/opera/streamingTools.js +73 -0
- package/build/src/opera/suggestions.js +67 -0
- package/build/src/opera/toolHandlerHooks.js +25 -1
- package/build/src/opera/tools/opera.js +107 -38
- package/build/src/opera/urlResolver.js +69 -0
- package/build/src/opera/webStorageWarning.js +92 -0
- package/build/src/processors/HeapSnapshotManager.js +12 -0
- package/build/src/telemetry/ClearcutLogger.js +19 -6
- package/build/src/telemetry/transformation.js +4 -0
- package/build/src/telemetry/types.js +4 -0
- package/build/src/third_party/THIRD_PARTY_NOTICES +5 -5
- package/build/src/third_party/bundled-packages.json +3 -3
- package/build/src/third_party/devtools-formatter-worker.js +23 -0
- package/build/src/third_party/devtools-heap-snapshot-worker.js +101 -20
- package/build/src/third_party/index.js +15460 -14256
- package/build/src/third_party/issue-descriptions/federatedAuthRequestAccountsBlockedByConnectionAllowlist.md +1 -0
- package/build/src/third_party/issue-descriptions/federatedAuthRequestConfigBlockedByConnectionAllowlist.md +1 -0
- package/build/src/third_party/issue-descriptions/federatedAuthRequestIdTokenBlockedByConnectionAllowlist.md +1 -0
- package/build/src/third_party/issue-descriptions/federatedAuthRequestWellKnownBlockedByConnectionAllowlist.md +1 -0
- package/build/src/tools/ToolDefinition.js +15 -0
- package/build/src/tools/categories.js +0 -6
- package/build/src/tools/comments.js +90 -0
- package/build/src/tools/console.js +1 -1
- package/build/src/tools/emulation.js +1 -1
- package/build/src/tools/extensions.js +1 -1
- package/build/src/tools/memory.js +60 -6
- package/build/src/tools/network.js +2 -2
- package/build/src/tools/pages.js +26 -15
- package/build/src/tools/performance.js +4 -3
- package/build/src/tools/screencast.js +3 -2
- package/build/src/tools/screenshot.js +39 -8
- package/build/src/tools/script.js +17 -4
- package/build/src/tools/slim/tools.js +41 -33
- package/build/src/tools/snapshot.js +1 -1
- package/build/src/tools/tools.js +2 -0
- package/build/src/utils/WaitForHelper.js +12 -1
- package/build/src/utils/bytes.js +105 -0
- package/build/src/utils/url.js +79 -0
- package/build/src/version.js +1 -1
- package/package.json +29 -8
- 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(
|
|
91
|
-
tool_invocation.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.
|
|
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.
|
|
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.
|
|
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.
|
|
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:
|
|
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.
|
|
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.
|
|
9
|
-
"https://github.com/ChromeDevTools/devtools-frontend": "
|
|
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
|