extension 3.17.0 → 3.18.1

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/322.cjs +89 -11
  2. package/dist/browsers.cjs +263 -206
  3. package/dist/cli.cjs +1312 -413
  4. package/dist/extension/browsers/browsers-lib/messages.d.ts +17 -0
  5. package/dist/extension/browsers/browsers-lib/output-binaries-resolver.d.ts +1 -1
  6. package/dist/extension/browsers/browsers-lib/shared-utils.d.ts +1 -0
  7. package/dist/extension/browsers/browsers-lib/wsl-support.d.ts +3 -0
  8. package/dist/extension/browsers/browsers-types.d.ts +1 -1
  9. package/dist/extension/browsers/run-chromium/chromium-launch/process-handlers.d.ts +8 -1
  10. package/dist/extension/browsers/run-chromium/chromium-launch/wsl-support.d.ts +2 -9
  11. package/dist/extension/browsers/run-chromium/chromium-source-inspection/cdp-client.d.ts +6 -0
  12. package/dist/extension/browsers/run-chromium/chromium-source-inspection/cdp-extension-controller/logging.d.ts +0 -5
  13. package/dist/extension/browsers/run-chromium/chromium-source-inspection/index.d.ts +1 -0
  14. package/dist/extension/browsers/run-firefox/firefox-launch/binary-detector.d.ts +0 -4
  15. package/dist/extension/browsers/run-firefox/firefox-launch/process-handlers.d.ts +5 -1
  16. package/dist/extension/browsers/run-firefox/firefox-launch/wsl-support.d.ts +2 -4
  17. package/dist/extension/browsers/run-firefox/firefox-source-inspection/remote-firefox/evaluate.d.ts +1 -0
  18. package/dist/extension/browsers/run-safari/safari-launch/dry-run.d.ts +1 -0
  19. package/dist/extension/browsers/run-safari/safari-launch/index.d.ts +5 -0
  20. package/dist/extension/browsers/run-safari/safari-launch/safari-config.d.ts +16 -0
  21. package/dist/extension/browsers/run-safari/safari-launch/toolchain.d.ts +10 -0
  22. package/dist/extension/browsers/run-safari/safari-types.d.ts +18 -0
  23. package/dist/extension/commands/act.d.ts +6 -0
  24. package/dist/extension/commands/dev-wait.d.ts +2 -0
  25. package/dist/extension/commands/logs.d.ts +2 -0
  26. package/dist/extension/commands/publish.d.ts +15 -0
  27. package/dist/extension/helpers/extension-develop-runtime.d.ts +5 -0
  28. package/dist/extension/helpers/messages.d.ts +18 -1
  29. package/dist/extension/helpers/telemetry.d.ts +1 -0
  30. package/dist/extension/helpers/vendors.d.ts +2 -1
  31. package/package.json +5 -5
@@ -77,6 +77,23 @@ export declare function firefoxFailedToStart(error: unknown): string;
77
77
  export declare function firefoxDryRunNotLaunching(): string;
78
78
  export declare function firefoxDryRunBinary(path: string): string;
79
79
  export declare function firefoxDryRunConfig(cfg: string): string;
80
+ export declare function safariBuildCalled(): string;
81
+ export declare function safariRequiresMacOS(platform: string): string;
82
+ export declare function safariXcodeRequired(developerDir: string | null): string;
83
+ export declare function safariToolchainMissing(tool: string): string;
84
+ export declare function safariConverting(extensionDir: string): string;
85
+ export declare function safariConverted(projectDir: string): string;
86
+ export declare function safariBuilding(scheme: string): string;
87
+ export declare function safariBuilt(appPath: string): string;
88
+ export declare function safariOpening(target: string): string;
89
+ export declare function safariFailed(error: unknown): string;
90
+ export declare function safariDryRunNotBuilding(): string;
91
+ export declare function safariDryRunConverter(cmd: string): string;
92
+ export declare function safariDryRunXcodebuild(cmd: string): string;
93
+ export declare function safariNextSteps(appName: string): string;
94
+ export declare function safariRegistered(appName: string): string;
95
+ export declare function safariNotYetRegistered(appName: string): string;
96
+ export declare function safariRebuilt(appName: string): string;
80
97
  export declare function sourceInspectorInitialized(): string;
81
98
  export declare function sourceInspectorInitializationFailed(error: string): string;
82
99
  export declare function sourceInspectorChromeDebuggingRequired(port: number): string;
@@ -1,5 +1,5 @@
1
1
  import type { CompilationLike } from '../browsers-types';
2
2
  export declare function getCompilationOutputPath(compilation: CompilationLike): string;
3
3
  export declare function computeBinariesBaseDir(compilation: CompilationLike): string;
4
- export declare function managedBrowserCacheEnv(cacheRoot: string, browser: 'chrome' | 'chromium' | 'firefox' | 'edge' | 'chromium-based' | 'gecko-based' | 'firefox-based'): Record<string, string>;
4
+ export declare function managedBrowserCacheEnv(cacheRoot: string, browser: 'chrome' | 'chromium' | 'firefox' | 'edge' | 'chromium-based' | 'gecko-based' | 'firefox-based' | 'safari' | 'webkit-based'): Record<string, string>;
5
5
  export declare function resolveFromBinaries(compilation: CompilationLike, browser: 'chrome' | 'chromium' | 'firefox' | 'edge'): string | null;
@@ -8,4 +8,5 @@ export declare function prepareChromiumProfileForLaunch(profilePath: string): {
8
8
  removedArtifacts: string[];
9
9
  };
10
10
  export declare function markManagedEphemeralProfile(profilePath: string): void;
11
+ export declare function removeManagedEphemeralProfile(profilePath: string | undefined | null): void;
11
12
  export declare function cleanupOldTempProfiles(baseDir: string, excludeBasename: string | undefined, maxAgeHours?: number): void;
@@ -0,0 +1,3 @@
1
+ export declare function isWslEnv(): boolean;
2
+ export declare function hasGuiDisplay(): boolean;
3
+ export declare function normalizeBinaryPathForWsl(input: string): string;
@@ -1,4 +1,4 @@
1
- export type BrowserType = 'chrome' | 'edge' | 'firefox' | 'chromium' | 'chromium-based' | 'gecko-based' | 'firefox-based';
1
+ export type BrowserType = 'chrome' | 'edge' | 'firefox' | 'chromium' | 'chromium-based' | 'gecko-based' | 'firefox-based' | 'safari' | 'webkit-based';
2
2
  /**
3
3
  * Lightweight stand-in for rspack's Compilation used by browser-launching code.
4
4
  * Only the properties actually read by launch/reload/inspection flows are declared.
@@ -1,3 +1,10 @@
1
1
  import { ChildProcess } from 'child_process';
2
2
  import type { BrowserType } from '../../browsers-types';
3
- export declare function setupProcessSignalHandlers(browser: BrowserType, child: ChildProcess, cleanupInstance: () => void): void;
3
+ export declare function __activeChromiumInstanceCount(): number;
4
+ export declare function __resetChromiumProcessHandlersForTest(): void;
5
+ /**
6
+ * Register a Chromium instance for process-exit cleanup. Returns a disposer that
7
+ * unregisters the instance (call it once the child has exited). Global process
8
+ * listeners are installed only on the first call.
9
+ */
10
+ export declare function setupProcessSignalHandlers(browser: BrowserType, child: ChildProcess, cleanupInstance: () => void): () => void;
@@ -1,14 +1,9 @@
1
1
  import { ChildProcess, type StdioOptions } from 'child_process';
2
+ import { hasGuiDisplay, isWslEnv, normalizeBinaryPathForWsl } from '../../browsers-lib/wsl-support';
3
+ export { hasGuiDisplay, isWslEnv, normalizeBinaryPathForWsl };
2
4
  type ChromiumLogger = {
3
5
  warn?: (...args: unknown[]) => void;
4
6
  };
5
- export declare function isWslEnv(): boolean;
6
- /**
7
- * Whether a Linux GUI display server is reachable. WSLg sets these
8
- * automatically when shipping its X / Wayland sockets into the distro;
9
- * a normal Linux desktop session also sets them. Headless WSL has neither.
10
- */
11
- export declare function hasGuiDisplay(): boolean;
12
7
  /**
13
8
  * Native Linux browser binary for use under WSL+GUI. Prefers real binaries
14
9
  * over wrapper scripts. Returns null when not in WSL, when no GUI is
@@ -21,7 +16,6 @@ export declare function resolveWslLinuxBinary(browser: string): string | null;
21
16
  * breaks `--remote-debugging-pipe`. No-op outside WSL+GUI.
22
17
  */
23
18
  export declare function preferRealChromeBinary(binary: string | null | undefined): string | null;
24
- export declare function normalizeBinaryPathForWsl(input: string): string;
25
19
  export declare function resolveWslWindowsBinary(browser: string): string | null;
26
20
  export declare function spawnChromiumProcess(opts: {
27
21
  binary: string;
@@ -30,4 +24,3 @@ export declare function spawnChromiumProcess(opts: {
30
24
  browser: string;
31
25
  logger?: ChromiumLogger;
32
26
  }): Promise<ChildProcess>;
33
- export {};
@@ -57,6 +57,12 @@ export declare class CDPClient {
57
57
  awaitPromise?: boolean;
58
58
  }): Promise<unknown>;
59
59
  getPageHTML(sessionId: string, includeShadow?: 'off' | 'open-only' | 'all'): Promise<string>;
60
+ getClosedShadowRoots(sessionId: string, maxBytes?: number): Promise<Array<{
61
+ host: string;
62
+ type: string;
63
+ html: string;
64
+ truncated?: boolean;
65
+ }>>;
60
66
  closeTarget(targetId: string): Promise<void>;
61
67
  forceReloadExtension(extensionId: string): Promise<boolean>;
62
68
  getExtensionInfo(extensionId: string): Promise<{
@@ -1,7 +1,2 @@
1
- import type { Controller } from '../../chromium-types';
2
1
  import { CDPClient } from '../cdp-client';
3
- export declare function enableUnifiedLoggingForAllTargets(controller: Controller): Promise<void>;
4
- export declare function enableRuntimeForAttachedTarget(controller: {
5
- enableRuntimeForSession: (sessionId: string) => Promise<void>;
6
- }, sessionId: string): Promise<void>;
7
2
  export declare function registerAutoEnableLogging(cdp: CDPClient, getExtensionId: () => string | null): void;
@@ -37,6 +37,7 @@ export declare class ChromiumSourceInspectionPlugin {
37
37
  private getPageMetadata;
38
38
  private getFrameContext;
39
39
  private getDomSnapshot;
40
+ private readBuildSignature;
40
41
  private getExtensionRootMeta;
41
42
  /**
42
43
  * Require structural evidence (counted roots or shadow style nodes) after the
@@ -6,8 +6,4 @@ export declare class FirefoxBinaryDetector {
6
6
  binary: string;
7
7
  args: string[];
8
8
  };
9
- static validateFirefoxBinary(binaryPath: string): Promise<{
10
- version: string;
11
- path: string;
12
- }>;
13
9
  }
@@ -1,2 +1,6 @@
1
1
  import { ChildProcess } from 'child_process';
2
- export declare function setupFirefoxProcessHandlers(browser: 'firefox' | 'chrome' | 'edge' | 'chromium-based', childRef: () => ChildProcess | null, cleanupInstance: () => Promise<void>): void;
2
+ type FirefoxBrowserKind = 'firefox' | 'chrome' | 'edge' | 'chromium-based';
3
+ export declare function __activeFirefoxInstanceCount(): number;
4
+ export declare function __resetFirefoxProcessHandlersForTest(): void;
5
+ export declare function setupFirefoxProcessHandlers(browser: FirefoxBrowserKind, childRef: () => ChildProcess | null, cleanupInstance: () => Promise<void>): () => void;
6
+ export {};
@@ -1,11 +1,10 @@
1
1
  import { ChildProcess } from 'child_process';
2
+ import { hasGuiDisplay, isWslEnv, normalizeBinaryPathForWsl } from '../../browsers-lib/wsl-support';
3
+ export { hasGuiDisplay, isWslEnv, normalizeBinaryPathForWsl };
2
4
  type FirefoxLogger = {
3
5
  warn?: (...args: unknown[]) => void;
4
6
  };
5
- export declare function isWslEnv(): boolean;
6
- export declare function hasGuiDisplay(): boolean;
7
7
  export declare function resolveWslLinuxBinary(): string | null;
8
- export declare function normalizeBinaryPathForWsl(input: string): string;
9
8
  export declare function resolveWslWindowsBinary(): string | null;
10
9
  export declare function spawnFirefoxProcess(opts: {
11
10
  binary: string;
@@ -14,4 +13,3 @@ export declare function spawnFirefoxProcess(opts: {
14
13
  fallbackBinary?: string | null;
15
14
  logger?: FirefoxLogger;
16
15
  }): Promise<ChildProcess>;
17
- export {};
@@ -14,5 +14,6 @@ export declare function resolveActorForEvaluation(client: RdpClientLike, descrip
14
14
  export declare function serializeDocument(client: RdpClientLike, actorToUse: string): Promise<string>;
15
15
  export declare function extractShadowContent(client: RdpClientLike, actorToUse: string): Promise<string>;
16
16
  export declare function mergeShadowIntoMain(mainHTML: string, shadowContent: string): string;
17
+ export declare const GET_PAGE_HTML_WITH_SHADOW_EXPRESSION = "(() => { try { var selector = '#extension-root,[data-extension-root]:not([data-extension-root=\"extension-js-devtools\"])'; var serializeShadowRoot = function(shadowRoot, serializer) { if (!shadowRoot) return ''; var stylesheetCss = Array.from(shadowRoot.styleSheets || []).map(function(sheet) { try { return Array.from(sheet.cssRules || []).map(function(rule) { return String(rule.cssText || ''); }).join('\\n'); } catch (e) { return ''; } }).filter(Boolean).join('\\n'); var adoptedCss = Array.from(shadowRoot.adoptedStyleSheets || []).map(function(sheet) { try { return Array.from(sheet.cssRules || []).map(function(rule) { return String(rule.cssText || ''); }).join('\\n'); } catch (e) { return ''; } }).filter(Boolean).join('\\n'); var stylesheetMarkup = stylesheetCss ? '<style>' + stylesheetCss + '</style>' : ''; var adoptedMarkup = adoptedCss ? '<style>' + adoptedCss + '</style>' : ''; var childMarkup = Array.from(shadowRoot.childNodes || []).map(function(node) { try { if (node && node.nodeType === 1 && String(node.nodeName || '').toLowerCase() === 'style') { return '<style>' + String(node.textContent || '') + '</style>'; } return serializer.serializeToString(node); } catch (e) { return ''; } }).join(''); return stylesheetMarkup + adoptedMarkup + childMarkup; }; var cloned = document.documentElement.cloneNode(true); var clonedHosts = Array.from(cloned.querySelectorAll(selector)); var liveHosts = Array.from(document.querySelectorAll(selector)); if (!clonedHosts.length) { var body = cloned.querySelector('body') || cloned; var newRoot = document.createElement('div'); newRoot.id='extension-root'; body.appendChild(newRoot); clonedHosts = [newRoot]; } var s = new XMLSerializer(); for (var i = 0; i < clonedHosts.length; i++) { var host = clonedHosts[i]; var live = liveHosts[i]; var shadow = ''; try { if (live && live.shadowRoot) { shadow = serializeShadowRoot(live.shadowRoot, s); } } catch (e) {} try { host.innerHTML = shadow; } catch (e) {} } return String('<!DOCTYPE html>' + (cloned.outerHTML || document.documentElement.outerHTML)); } catch(e) { try { return String(document.documentElement.outerHTML); } catch(_) { return '' } } })()";
17
18
  export declare function getPageHTML(client: RdpClientLike, descriptorActor: string, consoleActorHint?: string): Promise<string>;
18
19
  export {};
@@ -0,0 +1 @@
1
+ export declare function logSafariDryRun(converterCmd: string, xcodebuildCmd: string): void;
@@ -0,0 +1,5 @@
1
+ import type { BrowserLogger } from '../../browsers-types';
2
+ import type { SafariPluginLike } from '../safari-types';
3
+ export type SafariPipelineMode = 'full' | 'resync';
4
+ export declare function safariPreflightError(): string | null;
5
+ export declare function packageSafariExtension(host: SafariPluginLike, outputPath: string, logger?: BrowserLogger, mode?: SafariPipelineMode): Promise<void>;
@@ -0,0 +1,16 @@
1
+ import type { CompilationLike } from '../../browsers-types';
2
+ import type { SafariBuildConfig, SafariPluginLike } from '../safari-types';
3
+ export declare function resolveSafariBuildConfig(compilation: CompilationLike, host: SafariPluginLike): SafariBuildConfig;
4
+ export declare function composeConverterArgs(config: SafariBuildConfig): string[];
5
+ export declare function macOsSchemeName(config: SafariBuildConfig): string;
6
+ export declare function xcodeProjectPath(config: SafariBuildConfig): string;
7
+ export declare function derivedDataPath(config: SafariBuildConfig): string;
8
+ export declare function builtAppPath(config: SafariBuildConfig): string;
9
+ /**
10
+ * Arguments passed to `xcodebuild`. Local builds use ad-hoc signing (identity
11
+ * `-`): a Developer ID isn't required, yet the embedded `.appex` still gets a
12
+ * signature so `ValidateEmbeddedBinary` passes. Fully disabling signing leaves
13
+ * the appex unsigned and that validation step fails. Real distribution signing
14
+ * belongs to a separate deployment stage.
15
+ */
16
+ export declare function composeXcodebuildArgs(config: SafariBuildConfig): string[];
@@ -0,0 +1,10 @@
1
+ export interface SafariToolchain {
2
+ platformOk: boolean;
3
+ developerDir: string | null;
4
+ needsFullXcode: boolean;
5
+ converter: string | null;
6
+ xcodebuild: string | null;
7
+ ok: boolean;
8
+ }
9
+ export declare function isMacOS(): boolean;
10
+ export declare function detectSafariToolchain(): SafariToolchain;
@@ -0,0 +1,18 @@
1
+ import type { PluginInterface } from '../browsers-types';
2
+ export type SafariPluginLike = Pick<PluginInterface, 'extension' | 'noOpen' | 'instanceId' | 'dryRun'> & {
3
+ browser: PluginInterface['browser'];
4
+ safariBinary?: string;
5
+ appName?: string;
6
+ macOsOnly?: boolean;
7
+ forceRegenerate?: boolean;
8
+ };
9
+ export interface SafariBuildConfig {
10
+ extensionDir: string;
11
+ projectLocation: string;
12
+ appName: string;
13
+ bundleIdentifier: string;
14
+ macOsOnly: boolean;
15
+ language: 'swift' | 'objc';
16
+ open: boolean;
17
+ safariBinary?: string;
18
+ }
@@ -0,0 +1,6 @@
1
+ import type { Command } from 'commander';
2
+ export declare function readRecentConsole(projectPath: string, browser: string, target: {
3
+ context?: string;
4
+ tabId?: number;
5
+ }, limit: number): unknown[];
6
+ export declare function registerActCommands(program: Command): void;
@@ -1,5 +1,6 @@
1
1
  export type WaitFormat = 'pretty' | 'json';
2
2
  export type WaitCommand = 'dev' | 'start';
3
+ export declare const READY_CONTRACT_FRESHNESS_MS = 60000;
3
4
  export type ReadyContractPayload = {
4
5
  status?: string;
5
6
  message?: string;
@@ -33,5 +34,6 @@ export type RunWaitModeResult = {
33
34
  browser: string;
34
35
  }>;
35
36
  };
37
+ export declare function isFreshContractPayload(payload: ReadyContractPayload): boolean;
36
38
  export declare function runWaitMode(options: RunWaitModeOptions): Promise<RunWaitModeResult>;
37
39
  export declare function runDevWaitMode(options: Omit<RunWaitModeOptions, 'command'>): Promise<RunWaitModeResult>;
@@ -0,0 +1,2 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerLogsCommand(program: Command): void;
@@ -0,0 +1,15 @@
1
+ import type { Command } from 'commander';
2
+ export interface PublishRequest {
3
+ url: string;
4
+ headers: Record<string, string>;
5
+ body: string;
6
+ }
7
+ export interface PublishInput {
8
+ token?: string;
9
+ api?: string;
10
+ ttl?: string | number;
11
+ buildSha?: string;
12
+ }
13
+ /** Build the HTTP request (pure, unit-testable — no network). */
14
+ export declare function buildPublishRequest(opts: PublishInput): PublishRequest;
15
+ export declare function registerPublishCommand(program: Command): void;
@@ -7,3 +7,8 @@ export declare function loadExtensionDevelopModule<T = any>(startDir?: string):
7
7
  * `extension preview` start significantly faster.
8
8
  */
9
9
  export declare function loadExtensionDevelopPreviewModule<T = any>(startDir?: string): Promise<T>;
10
+ /**
11
+ * Load only the lightweight agent-bridge entry (BridgeConsumer / readReadyContract)
12
+ * for the `extension logs` command. Avoids pulling in rspack like preview does.
13
+ */
14
+ export declare function loadExtensionDevelopBridgeModule<T = any>(startDir?: string): Promise<T>;
@@ -13,6 +13,13 @@ export declare const commandDescriptions: {
13
13
  readonly start: "Builds and starts the extension in production mode";
14
14
  readonly preview: "Previews the extension in production mode without building";
15
15
  readonly build: "Builds the extension for packaging/distribution";
16
+ readonly logs: "Prints or streams logs from every context of a running dev session";
17
+ readonly eval: "Evaluates an expression in a running extension context (requires --allow-eval)";
18
+ readonly storage: "Reads or writes chrome.storage in a running extension (requires --allow-control)";
19
+ readonly reload: "Reloads a running extension or tab (requires --allow-control)";
20
+ readonly open: "Opens an extension surface — popup, options, or sidebar (requires --allow-control)";
21
+ readonly inspect: "Inspects a page/content DOM via the agent bridge (CDP-free; requires --allow-control)";
22
+ readonly publish: "Publishes to extension.dev and prints a shareable URL (requires EXTENSION_DEV_TOKEN)";
16
23
  readonly install: "Installs a managed browser binary into Extension.js cache";
17
24
  readonly uninstall: "Removes managed browser binaries from Extension.js cache";
18
25
  readonly telemetry: "Manage anonymous telemetry consent (enable, disable, or show status)";
@@ -30,13 +37,14 @@ export declare function noURLWithoutStart(argument: string): string;
30
37
  export declare function notImplemented(argument: string): string;
31
38
  export declare function programUserHelp(): string;
32
39
  export declare function unsupportedBrowserFlag(value: string, supported: string[]): string;
40
+ export declare function safariCommandNotSupported(command: 'dev' | 'preview' | 'start'): string;
33
41
  export declare function invalidLogsOptionPipe(value: string): string;
34
42
  export declare function invalidLogsOptionValue(value: string, allowed: string[]): string;
35
43
  export declare function programAIHelp(): string;
36
44
  export type ProgramAIHelpJSON = {
37
45
  version: string;
38
46
  commands: Array<{
39
- name: 'create' | 'dev' | 'start' | 'preview' | 'build' | 'install' | 'uninstall' | 'telemetry';
47
+ name: 'create' | 'dev' | 'start' | 'preview' | 'build' | 'logs' | 'eval' | 'storage' | 'reload' | 'open' | 'inspect' | 'publish' | 'install' | 'uninstall' | 'telemetry';
40
48
  summary: string;
41
49
  supportsSourceInspection: boolean;
42
50
  }>;
@@ -62,6 +70,15 @@ export type ProgramAIHelpJSON = {
62
70
  trigger: string;
63
71
  action: string;
64
72
  };
73
+ readyContract: {
74
+ readyPath: string;
75
+ eventsPath: string;
76
+ waitFlag: string;
77
+ statuses: string[];
78
+ readyFields: string[];
79
+ eventTypes: string[];
80
+ notes: string[];
81
+ };
65
82
  dockerAndContainers: {
66
83
  hostFlag: string;
67
84
  sandboxDetection: string[];
@@ -21,6 +21,7 @@ type TelemetryStorage = {
21
21
  idFile: string;
22
22
  consentFile: string;
23
23
  };
24
+ export declare const DEFAULT_POSTHOG_KEY: string;
24
25
  export declare function resolveTelemetryStorage(): TelemetryStorage | null;
25
26
  export declare function resolveTelemetryConsent(argv?: string[]): {
26
27
  enabled: boolean;
@@ -1,4 +1,5 @@
1
- export type Browser = 'chrome' | 'edge' | 'firefox' | 'chromium' | 'chromium-based' | 'gecko-based' | 'firefox-based';
1
+ export type Browser = 'chrome' | 'edge' | 'firefox' | 'chromium' | 'chromium-based' | 'gecko-based' | 'firefox-based' | 'safari' | 'webkit-based';
2
+ export declare function isSafariVendor(value: string): boolean;
2
3
  export declare function parseOptionalBoolean(value?: string): boolean;
3
4
  export declare const vendors: (browser?: Browser | "all") => string[];
4
5
  export declare function validateVendorsOrExit(vendorsList: string[], onInvalid: (invalid: string, supported: string[]) => void): void;
package/package.json CHANGED
@@ -38,7 +38,7 @@
38
38
  "extension": "./bin/extension.cjs"
39
39
  },
40
40
  "name": "extension",
41
- "version": "3.17.0",
41
+ "version": "3.18.1",
42
42
  "description": "Create cross-browser extensions with no build configuration.",
43
43
  "homepage": "https://extension.js.org/",
44
44
  "bugs": {
@@ -100,14 +100,14 @@
100
100
  "cross-spawn": "^7.0.6",
101
101
  "edge-location": "2.2.0",
102
102
  "firefox-location2": "3.0.0",
103
- "extension-create": "3.17.0",
104
- "extension-develop": "3.17.0",
105
- "extension-install": "3.17.0",
103
+ "extension-create": "3.18.1",
104
+ "extension-develop": "3.18.1",
105
+ "extension-install": "3.18.1",
106
106
  "commander": "^14.0.3",
107
107
  "pintor": "0.3.0",
108
108
  "semver": "^7.7.3",
109
109
  "unique-names-generator": "^4.7.1",
110
- "ws": "^8.19.0",
110
+ "ws": "^8.20.1",
111
111
  "update-check": "^1.5.4"
112
112
  },
113
113
  "devDependencies": {