diff --git a/package.json b/package.json index 6f8626a..f64c99a 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "build:shell": "yarn --cwd ./packages/shell build", "start": "yarn build:context-menu && yarn build:extensions && yarn --cwd ./packages/shell start", "start:debug": "cross-env SHELL_DEBUG=true DEBUG='electron-chrome-extensions*' yarn start", + "start:electron-dev": "cross-env ELECTRON_OVERRIDE_DIST_PATH=$(e show out --path) ELECTRON_ENABLE_LOGGING=1 DEBUG='electron-chrome-extensions*' yarn start", "start:skip-build": "cross-env SHELL_DEBUG=true DEBUG='electron-chrome-extensions*' yarn --cwd ./packages/shell start", "test": "yarn test:extensions", "test:extensions": "yarn --cwd ./packages/electron-chrome-extensions test", diff --git a/packages/electron-chrome-extensions/package.json b/packages/electron-chrome-extensions/package.json index 104147e..6620d10 100644 --- a/packages/electron-chrome-extensions/package.json +++ b/packages/electron-chrome-extensions/package.json @@ -28,7 +28,7 @@ "@babel/preset-typescript": "^7.10.4", "@types/chai": "^4.2.14", "@types/chai-as-promised": "^7.1.3", - "@types/chrome": "^0.0.122", + "@types/chrome": "^0.0.272", "@types/mocha": "^8.0.4", "babel-loader": "^8.2.5", "chai": "^4.2.0", diff --git a/packages/electron-chrome-extensions/spec/chrome-browserAction-spec.ts b/packages/electron-chrome-extensions/spec/chrome-browserAction-spec.ts index 7b44ab5..7e60c09 100644 --- a/packages/electron-chrome-extensions/spec/chrome-browserAction-spec.ts +++ b/packages/electron-chrome-extensions/spec/chrome-browserAction-spec.ts @@ -42,7 +42,11 @@ describe('chrome.browserAction', () => { it('supports cross-session communication', async () => { const otherSession = session.fromPartition(`persist:crx-${uuid()}`) - otherSession.setPreloads(browser.session.getPreloads()) + + // TODO(mv3): remove any + ;(browser.session as any).getPreloadScripts().forEach((script) => { + ;(otherSession as any).registerPreloadScript(script) + }) const view = new BrowserView({ webPreferences: { session: otherSession, nodeIntegration: false, contextIsolation: true }, diff --git a/packages/electron-chrome-extensions/spec/crx-helpers.ts b/packages/electron-chrome-extensions/spec/crx-helpers.ts index c2cf48a..05e46c1 100644 --- a/packages/electron-chrome-extensions/spec/crx-helpers.ts +++ b/packages/electron-chrome-extensions/spec/crx-helpers.ts @@ -14,8 +14,12 @@ export const createCrxSession = () => { } export const addCrxPreload = (session: Electron.Session) => { - const preload = path.join(__dirname, 'fixtures', 'crx-test-preload.js') - session.setPreloads([...session.getPreloads(), preload]) + // TODO(mv3): remove any + (session as any).registerPreloadScript({ + id: 'crx-test-preload', + type: 'frame', + filePath: path.join(__dirname, 'fixtures', 'crx-test-preload.js') + }) } export const createCrxRemoteWindow = () => { diff --git a/packages/electron-chrome-extensions/src/browser-action.ts b/packages/electron-chrome-extensions/src/browser-action.ts index 53c0686..d06b6fc 100644 --- a/packages/electron-chrome-extensions/src/browser-action.ts +++ b/packages/electron-chrome-extensions/src/browser-action.ts @@ -401,12 +401,14 @@ export const injectBrowserAction = () => { customElements.define('browser-action-list', BrowserActionListElement) } - try { + if (process.contextIsolated) { contextBridge.exposeInMainWorld('browserAction', __browserAction__) // Must execute script in main world to modify custom component registry. - webFrame.executeJavaScript(`(${mainWorldScript}());`) - } catch { + ;(contextBridge as any).evaluateInMainWorld({ + func: mainWorldScript + }) + } else { // When contextIsolation is disabled, contextBridge will throw an error. // If that's the case, we're in the main world so we can just execute our // function. diff --git a/packages/electron-chrome-extensions/src/browser/api/browser-action.ts b/packages/electron-chrome-extensions/src/browser/api/browser-action.ts index e528321..3a774b5 100644 --- a/packages/electron-chrome-extensions/src/browser/api/browser-action.ts +++ b/packages/electron-chrome-extensions/src/browser/api/browser-action.ts @@ -38,17 +38,23 @@ interface ActivateDetails { const getBrowserActionDefaults = (extension: Electron.Extension): ExtensionAction | undefined => { const manifest = getExtensionManifest(extension) - const { browser_action } = manifest - if (typeof browser_action === 'object') { + const browserAction = + manifest.manifest_version === 3 + ? manifest.action + : manifest.manifest_version === 2 + ? manifest.browser_action + : undefined + if (typeof browserAction === 'object') { + const manifestAction: chrome.runtime.ManifestAction = browserAction const action: ExtensionAction = {} - action.title = browser_action.default_title || manifest.name + action.title = manifestAction.default_title || manifest.name const iconPath = getIconPath(extension) if (iconPath) action.icon = { path: iconPath } - if (browser_action.default_popup) { - action.popup = browser_action.default_popup + if (manifestAction.default_popup) { + action.popup = manifestAction.default_popup } return action @@ -63,7 +69,9 @@ export class BrowserActionAPI { private actionMap = new Map() private popup?: PopupView - private observers: Set = new Set() + // TODO(mv3): support SWs + // private observers: Set = new Set() + private observers: Set = new Set() private queuedUpdate: boolean = false constructor(private ctx: ExtensionContext) { @@ -96,7 +104,7 @@ export class BrowserActionAPI { propName: ExtensionActionKey, ) => { const { tabId } = details - let value = (details as any)[propName] || undefined + let value = details[propName] if (typeof value === 'undefined') { const defaults = getBrowserActionDefaults(extension) @@ -131,6 +139,11 @@ export class BrowserActionAPI { handleProp('Title', 'title') handleProp('Popup', 'popup') + handle('browserAction.getUserSettings', (): chrome.action.UserSettings => { + // TODO: allow extension pinning + return { isOnToolbar: true } + }) + // setIcon is unique in that it can pass in a variety of properties. Here we normalize them // to use 'icon'. handle( @@ -148,10 +161,11 @@ export class BrowserActionAPI { handle( 'browserAction.addObserver', (event) => { - const { sender: webContents } = event - this.observers.add(webContents) - webContents.once('destroyed', () => { - this.observers.delete(webContents) + const { sender: observer } = event + this.observers.add(observer) + // TODO(mv3): need a destroyed event on workers + observer.once?.('destroyed', () => { + this.observers.delete(observer) }) }, preloadOpts, @@ -159,8 +173,8 @@ export class BrowserActionAPI { handle( 'browserAction.removeObserver', (event) => { - const { sender: webContents } = event - this.observers.delete(webContents) + const { sender: observer } = event + this.observers.delete(observer) }, preloadOpts, ) @@ -291,7 +305,16 @@ export class BrowserActionAPI { private getPopupUrl(extensionId: string, tabId: number) { const action = this.getAction(extensionId) - const popupPath = action.tabs[tabId]?.popup || action.popup || undefined + const tabPopupValue = action.tabs[tabId]?.popup + const actionPopupValue = action.popup + + let popupPath: string | undefined + + if (typeof tabPopupValue !== 'undefined') { + popupPath = tabPopupValue + } else if (typeof actionPopupValue !== 'undefined') { + popupPath = actionPopupValue + } let url: string | undefined @@ -431,6 +454,7 @@ export class BrowserActionAPI { appendSeparator() + // TODO(mv3): need to build 'action' menu items? const contextMenuItems: MenuItem[] = this.ctx.store.buildMenuItems( extensionId, 'browser_action', @@ -475,7 +499,8 @@ export class BrowserActionAPI { debug(`dispatching update to ${this.observers.size} observer(s)`) Array.from(this.observers).forEach((observer) => { if (!observer.isDestroyed()) { - observer.send('browserAction.update') + // TODO(mv3): support sending to SWs + observer.send?.('browserAction.update') } }) }) diff --git a/packages/electron-chrome-extensions/src/browser/api/common.ts b/packages/electron-chrome-extensions/src/browser/api/common.ts index f86b81d..7845ee0 100644 --- a/packages/electron-chrome-extensions/src/browser/api/common.ts +++ b/packages/electron-chrome-extensions/src/browser/api/common.ts @@ -80,8 +80,12 @@ export const getIconPath = ( iconSize: number = 32, resizeType = ResizeType.Up, ) => { - const { browser_action, icons } = getExtensionManifest(extension) - const { default_icon } = browser_action || {} + const manifest = getExtensionManifest(extension) + const { icons } = manifest + + const default_icon: chrome.runtime.ManifestIcons | undefined = ( + manifest.manifest_version === 3 ? manifest.action : manifest.browser_action + )?.default_icon if (typeof default_icon === 'string') { const iconPath = default_icon diff --git a/packages/electron-chrome-extensions/src/browser/api/context-menus.ts b/packages/electron-chrome-extensions/src/browser/api/context-menus.ts index 08c50ca..2402821 100644 --- a/packages/electron-chrome-extensions/src/browser/api/context-menus.ts +++ b/packages/electron-chrome-extensions/src/browser/api/context-menus.ts @@ -54,7 +54,7 @@ const matchesConditions = ( const { contextTypes, targetUrl, documentUrl } = conditions - const contexts = props.contexts || DEFAULT_CONTEXTS + const contexts = (Array.isArray(props.contexts) ? props.contexts : [props.contexts]) || DEFAULT_CONTEXTS const inContext = contexts.some((context) => contextTypes.has(context as ContextMenuType)) if (!inContext) return false @@ -139,7 +139,7 @@ export class ContextMenusAPI { for (const item of menuItemTemplates) { const menuItem = itemMap.get(item.props.id) if (item.props.parentId) { - const parentMenuItem = itemMap.get(item.props.parentId) + const parentMenuItem = itemMap.get(`${item.props.parentId}`) if (parentMenuItem) { const submenu = (parentMenuItem.submenu || []) as Electron.MenuItemConstructorOptions[] submenu.push(menuItem!) @@ -320,7 +320,8 @@ export class ContextMenusAPI { frameId: -1, // TODO: match frameURL with webFrameMain in Electron 12 frameUrl: params?.frameURL, editable: params?.isEditable || false, - mediaType: params?.mediaType, + // TODO(mv3): limit possible string enums + mediaType: params?.mediaType as any, wasChecked: false, // TODO pageUrl: params?.pageURL as any, // types are inaccurate linkUrl: params?.linkURL, diff --git a/packages/electron-chrome-extensions/src/browser/api/tabs.ts b/packages/electron-chrome-extensions/src/browser/api/tabs.ts index 0be6036..9d59913 100644 --- a/packages/electron-chrome-extensions/src/browser/api/tabs.ts +++ b/packages/electron-chrome-extensions/src/browser/api/tabs.ts @@ -106,6 +106,7 @@ export class TabsAPI { id: tabId, incognito: false, index: -1, // TODO + groupId: -1, // TODO(mv3): implement? mutedInfo: { muted: tab.audioMuted }, pinned: false, selected: true, diff --git a/packages/electron-chrome-extensions/src/browser/api/web-navigation.ts b/packages/electron-chrome-extensions/src/browser/api/web-navigation.ts index fb0f4ad..b7179d9 100644 --- a/packages/electron-chrome-extensions/src/browser/api/web-navigation.ts +++ b/packages/electron-chrome-extensions/src/browser/api/web-navigation.ts @@ -4,29 +4,34 @@ import { ExtensionEvent } from '../router' const debug = require('debug')('electron-chrome-extensions:webNavigation') -// https://github.com/electron/electron/pull/25464 -const getFrame = (frameProcessId: number, frameRoutingId: number) => { - return ( - ('webFrameMain' in electron && - (electron as any).webFrameMain.fromId(frameProcessId, frameRoutingId)) || - null - ) -} +const getFrame = (frameProcessId: number, frameRoutingId: number) => + electron.webFrameMain.fromId(frameProcessId, frameRoutingId); -const getFrameId = (frame: any) => - 'webFrameMain' in electron ? (frame === frame.top ? 0 : frame.frameTreeNodeId) : -1 +const getFrameId = (frame: Electron.WebFrameMain) => + frame === frame.top ? 0 : frame.frameTreeNodeId -const getParentFrameId = (frame: any) => { +const getParentFrameId = (frame: Electron.WebFrameMain) => { const parentFrame = frame?.parent return parentFrame ? getFrameId(parentFrame) : -1 } -const getFrameDetails = (frame: any) => ({ - errorOccurred: false, // TODO - processId: frame.processId, - frameId: getFrameId(frame), - parentFrameId: getParentFrameId(frame), +// TODO(mv3): fenced_frame getter API needed +const getFrameType = (frame: Electron.WebFrameMain) => + !frame.parent ? 'outermost_frame' : 'sub_frame'; + +// TODO(mv3): add WebFrameMain API to retrieve this +const getDocumentLifecycle = (frame: Electron.WebFrameMain): DocumentLifecycle => + 'active' as const; + +const getFrameDetails = (frame: Electron.WebFrameMain): chrome.webNavigation.GetFrameResultDetails => ({ + // TODO(mv3): implement new properties url: frame.url, + documentId: 'not-implemented', + documentLifecycle: getDocumentLifecycle(frame), + errorOccurred: false, + frameType: getFrameType(frame), + parentDocumentId: undefined, + parentFrameId: getParentFrameId(frame), }) export class WebNavigationAPI { @@ -68,17 +73,14 @@ export class WebNavigationAPI { const tab = this.ctx.store.getTabById(details.tabId) if (!tab) return null - let targetFrame: any + let targetFrame: Electron.WebFrameMain | undefined if (typeof details.frameId === 'number') { - // https://github.com/electron/electron/pull/25464 - if ('mainFrame' in tab) { - const mainFrame = (tab as any).mainFrame - targetFrame = mainFrame.framesInSubtree.find((frame: any) => { - const isMainFrame = frame === frame.top - return isMainFrame ? details.frameId === 0 : details.frameId === frame.frameTreeNodeId - }) - } + const mainFrame = tab.mainFrame + targetFrame = mainFrame.framesInSubtree.find((frame: any) => { + const isMainFrame = frame === frame.top + return isMainFrame ? details.frameId === 0 : details.frameId === frame.frameTreeNodeId + }) } return targetFrame ? getFrameDetails(targetFrame) : null @@ -134,6 +136,8 @@ export class WebNavigationAPI { const details: chrome.webNavigation.WebNavigationParentedCallbackDetails = { frameId: getFrameId(frame), + frameType: getFrameType(frame), + documentLifecycle: getDocumentLifecycle(frame), parentFrameId: getParentFrameId(frame), processId: frame ? frame.processId : -1, tabId: tab.id, @@ -155,9 +159,21 @@ export class WebNavigationAPI { frameRoutingId: number, ) => { const frame = getFrame(frameProcessId, frameRoutingId) - const details: chrome.webNavigation.WebNavigationParentedCallbackDetails = { + if (!frame) { + // TODO(mv3): handle null return + return; + } + + const details: chrome.webNavigation.WebNavigationTransitionCallbackDetails = { frameId: getFrameId(frame), - parentFrameId: getParentFrameId(frame), + // NOTE: workaround for property missing in type + ...({ + parentFrameId: getParentFrameId(frame), + }), + frameType: getFrameType(frame), + transitionType: '', // TODO(mv3) + transitionQualifiers: [], // TODO(mv3) + documentLifecycle: getDocumentLifecycle(frame), processId: frameProcessId, tabId: tab.id, timeStamp: Date.now(), @@ -175,6 +191,11 @@ export class WebNavigationAPI { frameRoutingId: number, ) => { const frame = getFrame(frameProcessId, frameRoutingId) + if (!frame) { + // TODO(mv3): handle null return + return; + } + const details: chrome.webNavigation.WebNavigationTransitionCallbackDetails & { parentFrameId: number } = { @@ -182,6 +203,8 @@ export class WebNavigationAPI { transitionQualifiers: [], // TODO frameId: getFrameId(frame), parentFrameId: getParentFrameId(frame), + frameType: getFrameType(frame), + documentLifecycle: getDocumentLifecycle(frame), processId: frameProcessId, tabId: tab.id, timeStamp: Date.now(), @@ -194,6 +217,8 @@ export class WebNavigationAPI { const details: chrome.webNavigation.WebNavigationParentedCallbackDetails = { frameId: getFrameId(frame), parentFrameId: getParentFrameId(frame), + frameType: getFrameType(frame), + documentLifecycle: getDocumentLifecycle(frame), processId: frame.processId, tabId: tab.id, timeStamp: Date.now(), @@ -214,10 +239,17 @@ export class WebNavigationAPI { frameRoutingId: number, ) => { const frame = getFrame(frameProcessId, frameRoutingId) + if (!frame) { + // TODO(mv3): handle null return + return; + } + const url = tab.getURL() const details: chrome.webNavigation.WebNavigationParentedCallbackDetails = { frameId: getFrameId(frame), parentFrameId: getParentFrameId(frame), + frameType: getFrameType(frame), + documentLifecycle: getDocumentLifecycle(frame), processId: frameProcessId, tabId: tab.id, timeStamp: Date.now(), diff --git a/packages/electron-chrome-extensions/src/browser/index.ts b/packages/electron-chrome-extensions/src/browser/index.ts index 67686e5..0045cdf 100644 --- a/packages/electron-chrome-extensions/src/browser/index.ts +++ b/packages/electron-chrome-extensions/src/browser/index.ts @@ -120,17 +120,19 @@ export class ElectronChromeExtensions extends EventEmitter { private async prependPreload() { const { session } = this.ctx - let preloads = session.getPreloads() + // TODO(mv3): remove 'any' const preloadPath = path.join(this.modulePath, 'dist/preload.js') - - const preloadIndex = preloads.indexOf(preloadPath) - if (preloadIndex > -1) { - preloads.splice(preloadIndex, 1) - } - - preloads = [preloadPath, ...preloads] - session.setPreloads(preloads) + ;(session as any).registerPreloadScript({ + id: 'crx-mv2-preload', + type: 'frame', + filePath: preloadPath, + }) + ;(session as any).registerPreloadScript({ + id: 'crx-mv3-preload', + type: 'service-worker', + filePath: preloadPath, + }) let preloadExists = false try { diff --git a/packages/electron-chrome-extensions/src/browser/popup.ts b/packages/electron-chrome-extensions/src/browser/popup.ts index e7c89c9..202ed17 100644 --- a/packages/electron-chrome-extensions/src/browser/popup.ts +++ b/packages/electron-chrome-extensions/src/browser/popup.ts @@ -60,6 +60,7 @@ export class PopupView { resizable: false, skipTaskbar: true, backgroundColor: '#ffffff', + roundedCorners: false, webPreferences: { session: opts.session, sandbox: true, diff --git a/packages/electron-chrome-extensions/src/browser/router.ts b/packages/electron-chrome-extensions/src/browser/router.ts index ea2a4ad..e2eac61 100644 --- a/packages/electron-chrome-extensions/src/browser/router.ts +++ b/packages/electron-chrome-extensions/src/browser/router.ts @@ -10,6 +10,24 @@ createDebug.formatters.r = (value: any) => { return value ? JSON.stringify(value, shortenValues, ' ') : value } +const getSessionFromEvent = (event: any): Electron.Session => { + if (event.type === 'service-worker') { + return event.session + } else { + return event.sender.session + } +} + +// TODO(mv3): add types +const getHostFromEvent = (event: any) => { + if (event.type === 'service-worker') { + const serviceWorker = event.session.serviceWorkers.fromVersionID(event.versionId) + return serviceWorker && !serviceWorker.isDestroyed() ? serviceWorker : null + } else { + return event.sender + } +} + const debug = createDebug('electron-chrome-extensions:router') const DEFAULT_SESSION = '_self' @@ -38,6 +56,7 @@ class RoutingDelegate { } private sessionMap: WeakMap = new WeakMap() + private workers: WeakSet = new WeakSet() private constructor() { ipcMain.handle('crx-msg', this.onRouterMessage) @@ -48,6 +67,25 @@ class RoutingDelegate { addObserver(observer: RoutingDelegateObserver) { this.sessionMap.set(observer.session, observer) + + // TODO(mv3): remove anys + const maybeListenForWorkerEvents = ({ runningStatus, versionId }: any) => { + if (runningStatus !== 'starting') return + + const serviceWorker = (observer.session as any).serviceWorkers.fromVersionID(versionId) + if ( + serviceWorker?.scope?.startsWith('chrome-extension://') && + !this.workers.has(serviceWorker) + ) { + debug(`listening to service worker [versionId:${versionId}, scope:${serviceWorker.scope}]`) + this.workers.add(serviceWorker) + serviceWorker.ipc.handle('crx-msg', this.onRouterMessage) + serviceWorker.ipc.handle('crx-msg-remote', this.onRemoteMessage) + serviceWorker.ipc.on('crx-add-listener', this.onAddListener) + serviceWorker.ipc.on('crx-remove-listener', this.onRemoveListener) + } + } + observer.session.serviceWorkers.on('running-status-changed' as any, maybeListenForWorkerEvents) } private onRouterMessage = async ( @@ -58,7 +96,7 @@ class RoutingDelegate { ) => { debug(`received '${handlerName}'`, args) - const observer = this.sessionMap.get(event.sender.session) + const observer = this.sessionMap.get(getSessionFromEvent(event)) return observer?.onExtensionMessage(event, extensionId, handlerName, ...args) } @@ -73,7 +111,7 @@ class RoutingDelegate { const ses = sessionPartition === DEFAULT_SESSION - ? event.sender.session + ? getSessionFromEvent(event) : session.fromPartition(sessionPartition) const observer = this.sessionMap.get(ses) @@ -86,8 +124,9 @@ class RoutingDelegate { extensionId: string, eventName: string, ) => { - const observer = this.sessionMap.get(event.sender.session) - const listener: EventListener = { host: event.sender, extensionId } + const observer = this.sessionMap.get(getSessionFromEvent(event)) + const host = getHostFromEvent(event) + const listener: EventListener = { host, extensionId } return observer?.addListener(listener, extensionId, eventName) } @@ -96,14 +135,15 @@ class RoutingDelegate { extensionId: string, eventName: string, ) => { - const observer = this.sessionMap.get(event.sender.session) - const listener: EventListener = { host: event.sender, extensionId } + const observer = this.sessionMap.get(getSessionFromEvent(event)) + const host = getHostFromEvent(event) + const listener: EventListener = { host, extensionId } return observer?.removeListener(listener, extensionId, eventName) } } export interface ExtensionEvent { - sender: WebContents + sender?: any // TODO(mv3): types extension: Extension } @@ -126,10 +166,14 @@ type EventName = string type HandlerMap = Map interface EventListener { - host: Electron.WebContents + // TODO(mv3): host: Electron.WebContents | Electron.ServiceWorkerMain + host: any extensionId: string } +const getHostId = (host: EventListener['host']) => host.id || host.versionId +const getHostUrl = (host: EventListener['host']) => host.getURL?.() || host.scope + const eventListenerEquals = (eventListener: EventListener) => (other: EventListener) => other.host === eventListener.host && other.extensionId === eventListener.extensionId @@ -146,6 +190,8 @@ export class ExtensionRouter { */ private extensionHosts: Set = new Set() + private extensionWorkers: Set = new Set() + constructor( public session: Electron.Session, private delegate: RoutingDelegate = RoutingDelegate.get(), @@ -162,6 +208,16 @@ export class ExtensionRouter { this.extensionHosts.add(webContents) } }) + + session.serviceWorkers.on('running-status-changed' as any, ({ runningStatus, versionId }: any) => { + if (runningStatus !== 'starting') return + + const serviceWorker = (session as any).serviceWorkers.fromVersionID(versionId) + if (serviceWorker) { + debug(`storing reference to background service worker [url:'${serviceWorker.scope}']`) + this.extensionWorkers.add(serviceWorker) + } + }) } private filterListeners(predicate: (listener: EventListener) => boolean) { @@ -181,10 +237,11 @@ export class ExtensionRouter { } } - private observeListenerHost(host: Electron.WebContents) { - debug(`observing listener [id:${host.id}, url:'${host.getURL()}']`) + private observeListenerHost(host: EventListener['host']) { + const hostId = getHostId(host) + debug(`observing listener [id:${hostId}, url:'${getHostUrl(host)}']`) host.once('destroyed', () => { - debug(`extension host destroyed [id:${host.id}]`) + debug(`extension host destroyed [id:${hostId}]`) this.filterListeners((listener) => listener.host !== host) }) } @@ -250,20 +307,21 @@ export class ExtensionRouter { ...args: any[] ) { const { session } = this - const { sender } = event + const eventSession = getSessionFromEvent(event) const handler = this.getHandler(handlerName) - if (sender.session !== session && !handler.allowRemote) { + if (eventSession !== session && !handler.allowRemote) { throw new Error(`${handlerName} does not support calling from a remote session`) } - const extension = extensionId ? sender.session.getExtension(extensionId) : undefined + const extension = extensionId ? eventSession.getExtension(extensionId) : undefined if (!extension && handler.extensionContext) { throw new Error(`${handlerName} was sent from an unknown extension context`) } - const extEvent = { - sender, + const extEvent: ExtensionEvent = { + // TODO(mv3): handle types + sender: event.sender || (event as any).worker, extension: extension!, } @@ -309,16 +367,31 @@ export class ExtensionRouter { return } + let sentCount = 0 for (const { host } of eventListeners) { - // TODO: may need to wake lazy extension context - if (host.isDestroyed()) { - console.error(`Unable to send '${eventName}' to extension host for ${extensionId}`) - continue + const ipcName = `crx-${eventName}` + const send = () => { + if (host.isDestroyed()) { + console.error(`Unable to send '${eventName}' to extension host for ${extensionId}`) + return + } + host.send(ipcName, ...args) } - const ipcName = `crx-${eventName}` - host.send(ipcName, ...args) + if (host.constructor.name === 'ServiceWorkerMain') { + if (host.isDestroyed()) { + console.error(`Service Worker is destroyed.\nUnable to send '${eventName}' to extension host for ${extensionId}`) + return + } + host.startWorker().then(send) + } else { + send() + } + + sentCount++ } + + debug(`sent '${eventName}' event to ${sentCount} listeners`) } /** Broadcasts extension event to all extension hosts listening for it. */ diff --git a/packages/electron-chrome-extensions/src/preload.ts b/packages/electron-chrome-extensions/src/preload.ts index 796ba30..be8d549 100644 --- a/packages/electron-chrome-extensions/src/preload.ts +++ b/packages/electron-chrome-extensions/src/preload.ts @@ -1,6 +1,6 @@ import { injectExtensionAPIs } from './renderer' // Only load within extension page context -if (location.href.startsWith('chrome-extension://')) { +if ((process as any).type === 'service-worker' || location.href.startsWith('chrome-extension://')) { injectExtensionAPIs() } diff --git a/packages/electron-chrome-extensions/src/renderer/index.ts b/packages/electron-chrome-extensions/src/renderer/index.ts index a77108c..af763f5 100644 --- a/packages/electron-chrome-extensions/src/renderer/index.ts +++ b/packages/electron-chrome-extensions/src/renderer/index.ts @@ -4,6 +4,7 @@ import { addExtensionListener, removeExtensionListener } from './event' export const injectExtensionAPIs = () => { interface ExtensionMessageOptions { noop?: boolean + defaultResponse?: any serialize?: (...args: any[]) => any[] } @@ -21,8 +22,8 @@ export const injectExtensionAPIs = () => { if (options.noop) { console.warn(`${fnName} is not yet implemented.`) - if (callback) callback() - return + if (callback) callback(options.defaultResponse) + return Promise.resolve(options.defaultResponse) } if (options.serialize) { @@ -60,16 +61,17 @@ export const injectExtensionAPIs = () => { // IMPORTANT: This must be self-contained, no closure variable will be included! function mainWorldScript() { // Use context bridge API or closure variable when context isolation is disabled. - const electron = ((window as any).electron as typeof electronContext) || electronContext + const electron = ((globalThis as any).electron as typeof electronContext) || electronContext - const chrome = window.chrome || {} + const chrome = globalThis.chrome || {} const extensionId = chrome.runtime?.id // NOTE: This uses a synchronous IPC to get the extension manifest. // To avoid this, JS bindings for RendererExtensionRegistry would be // required. + // OFFSCREEN_DOCUMENT contexts do not have this function defined. const manifest: chrome.runtime.Manifest = - (extensionId && chrome.runtime.getManifest()) || ({} as any) + (extensionId && chrome.runtime.getManifest?.()) || ({} as any) const invokeExtension = (fnName: string, opts: ExtensionMessageOptions = {}) => @@ -142,56 +144,72 @@ export const injectExtensionAPIs = () => { } } - /** - * Factories for each additional chrome.* API. - */ - const apiDefinitions: Partial = { - browserAction: { - shouldInject: () => !!manifest.browser_action, - factory: (base) => { - const api = { - ...base, + const browserActionFactory = (base: DeepPartial) => { + // TODO(mv3): add new action APIs + const api = { + ...base, + + setTitle: invokeExtension('browserAction.setTitle'), + getTitle: invokeExtension('browserAction.getTitle'), + + setIcon: invokeExtension('browserAction.setIcon', { + serialize: (details: chrome.action.TabIconDetails) => { + if (details.imageData) { + if (manifest.manifest_version === 3) { + // TODO(mv3): might need to use offscreen document to serialize + console.warn( + 'action.setIcon with imageData is not yet supported by electron-chrome-extensions' + ) + details.imageData = undefined + } else if (details.imageData instanceof ImageData) { + details.imageData = imageData2base64(details.imageData) as any + } else { + details.imageData = Object.entries(details.imageData).reduce( + (obj: any, pair: any[]) => { + obj[pair[0]] = imageData2base64(pair[1]) + return obj + }, + {} + ) + } + } - setTitle: invokeExtension('browserAction.setTitle'), - getTitle: invokeExtension('browserAction.getTitle'), - - setIcon: invokeExtension('browserAction.setIcon', { - serialize: (details: any) => { - if (details.imageData) { - if (details.imageData instanceof ImageData) { - details.imageData = imageData2base64(details.imageData) - } else { - details.imageData = Object.entries(details.imageData).reduce( - (obj: any, pair: any[]) => { - obj[pair[0]] = imageData2base64(pair[1]) - return obj - }, - {}, - ) - } - } - - return [details] - }, - }), + return [details] + }, + }), - setPopup: invokeExtension('browserAction.setPopup'), - getPopup: invokeExtension('browserAction.getPopup'), + setPopup: invokeExtension('browserAction.setPopup'), + getPopup: invokeExtension('browserAction.getPopup'), - setBadgeText: invokeExtension('browserAction.setBadgeText'), - getBadgeText: invokeExtension('browserAction.getBadgeText'), + setBadgeText: invokeExtension('browserAction.setBadgeText'), + getBadgeText: invokeExtension('browserAction.getBadgeText'), - setBadgeBackgroundColor: invokeExtension('browserAction.setBadgeBackgroundColor'), - getBadgeBackgroundColor: invokeExtension('browserAction.getBadgeBackgroundColor'), + setBadgeBackgroundColor: invokeExtension('browserAction.setBadgeBackgroundColor'), + getBadgeBackgroundColor: invokeExtension('browserAction.getBadgeBackgroundColor'), - enable: invokeExtension('browserAction.enable', { noop: true }), - disable: invokeExtension('browserAction.disable', { noop: true }), + getUserSettings: invokeExtension('browserAction.getUserSettings'), - onClicked: new ExtensionEvent('browserAction.onClicked'), - } + enable: invokeExtension('browserAction.enable', { noop: true }), + disable: invokeExtension('browserAction.disable', { noop: true }), - return api - }, + onClicked: new ExtensionEvent('browserAction.onClicked'), + } + + return api + } + + /** + * Factories for each additional chrome.* API. + */ + const apiDefinitions: Partial = { + action: { + shouldInject: () => manifest.manifest_version === 3 && !!manifest.action, + factory: browserActionFactory, + }, + + browserAction: { + shouldInject: () => manifest.manifest_version === 2 && !!manifest.browser_action, + factory: browserActionFactory, }, commands: { @@ -264,17 +282,67 @@ export const injectExtensionAPIs = () => { }, }, + // TODO: implement + downloads: { + factory: (base) => { + return { + ...base, + acceptDanger: invokeExtension('downloads.acceptDanger', { noop: true }), + cancel: invokeExtension('downloads.cancel', { noop: true }), + download: invokeExtension('downloads.download', { noop: true }), + erase: invokeExtension('downloads.erase', { noop: true }), + getFileIcon: invokeExtension('downloads.getFileIcon', { noop: true }), + open: invokeExtension('downloads.open', { noop: true }), + pause: invokeExtension('downloads.pause', { noop: true }), + removeFile: invokeExtension('downloads.removeFile', { noop: true }), + resume: invokeExtension('downloads.resume', { noop: true }), + search: invokeExtension('downloads.search', { noop: true }), + setUiOptions: invokeExtension('downloads.setUiOptions', { noop: true }), + show: invokeExtension('downloads.show', { noop: true }), + showDefaultFolder: invokeExtension('downloads.showDefaultFolder', { noop: true }), + onChanged: new ExtensionEvent('downloads.onChanged'), + onCreated: new ExtensionEvent('downloads.onCreated'), + onDeterminingFilename: new ExtensionEvent('downloads.onDeterminingFilename'), + onErased: new ExtensionEvent('downloads.onErased'), + } + }, + }, + extension: { factory: (base) => { return { ...base, - isAllowedIncognitoAccess: () => false, + isAllowedFileSchemeAccess: invokeExtension('extension.isAllowedFileSchemeAccess', { + noop: true, + defaultResponse: false + }), + isAllowedIncognitoAccess: invokeExtension('extension.isAllowedIncognitoAccess', { + noop: true, + defaultResponse: false + }), // TODO: Add native implementation getViews: () => [], } }, }, + i18n: { + factory: (base) => { + return { + ...base, + // TODO(mv3): implement + getUILanguage: () => 'en-US', + getAcceptLanguages: (callback: any) => { + const results = ['en-US'] + if (callback) { + queueMicrotask(() => callback(results)) + } + return Promise.resolve(results) + }, + } + }, + }, + notifications: { factory: (base) => { return { @@ -291,6 +359,21 @@ export const injectExtensionAPIs = () => { }, }, + permissions: { + factory: (base) => { + return { + ...base, + // TODO(mv3): implement + contains: () => Promise.resolve(true), + getAll: () => Promise.resolve({ permissions: [], origins: [] }), + remove: () => Promise.resolve(true), + request: () => Promise.resolve(true), + onAdded: new ExtensionEvent('permissions.onAdded'), + onRemoved: new ExtensionEvent('permissions.onRemoved'), + } + }, + }, + privacy: { factory: (base) => { return { @@ -332,20 +415,19 @@ export const injectExtensionAPIs = () => { const api = { ...base, create: invokeExtension('tabs.create'), - executeScript: function (arg1: unknown, arg2: unknown, arg3: unknown) { + executeScript: async function (arg1: unknown, arg2: unknown, arg3: unknown): Promise { // Electron's implementation of chrome.tabs.executeScript is in // C++, but it doesn't support implicit execution in the active // tab. To handle this, we need to get the active tab ID and // pass it into the C++ implementation ourselves. if (typeof arg1 === 'object') { - api.query( - { active: true, windowId: chrome.windows.WINDOW_ID_CURRENT }, - ([activeTab]: chrome.tabs.Tab[]) => { - api.executeScript(activeTab.id, arg1, arg2) - }, - ) + const [activeTab] = await api.query({ + active: true, + windowId: chrome.windows.WINDOW_ID_CURRENT, + }) + return api.executeScript(activeTab.id, arg1, arg2) } else { - ;(base.executeScript as typeof chrome.tabs.executeScript)( + return (base.executeScript as typeof chrome.tabs.executeScript)( arg1 as number, arg2 as chrome.tabs.InjectDetails, arg3 as () => {}, @@ -441,22 +523,29 @@ export const injectExtensionAPIs = () => { }) // Remove access to internals - delete (window as any).electron + delete (globalThis as any).electron Object.freeze(chrome) void 0 // no return } + if (!process.contextIsolated) { + console.warn(`injectExtensionAPIs: context isolation disabled in ${location.href}`) + mainWorldScript() + return + } + try { // Expose extension IPC to main world contextBridge.exposeInMainWorld('electron', electronContext) // Mutate global 'chrome' object with additional APIs in the main world. - webFrame.executeJavaScript(`(${mainWorldScript}());`) - } catch { - // contextBridge threw an error which means we're in the main world so we - // can just execute our function. - mainWorldScript() + ;(contextBridge as any).evaluateInMainWorld({ + func: mainWorldScript + }) + } catch (error) { + console.error(`injectExtensionAPIs error (${location.href})`) + console.error(error) } } diff --git a/packages/shell/browser/main.js b/packages/shell/browser/main.js index 4e364a8..14bc5eb 100644 --- a/packages/shell/browser/main.js +++ b/packages/shell/browser/main.js @@ -126,7 +126,11 @@ class Browser { this.initSession() setupMenu(this) - this.session.setPreloads([PATHS.PRELOAD]) + this.session.registerPreloadScript({ + id: 'shell-preload', + type: 'frame', + filePath: PATHS.PRELOAD, + }) this.extensions = new ElectronChromeExtensions({ license: 'internal-license-do-not-use', diff --git a/packages/shell/browser/ui/manifest.json b/packages/shell/browser/ui/manifest.json index aa9d934..3142d6d 100644 --- a/packages/shell/browser/ui/manifest.json +++ b/packages/shell/browser/ui/manifest.json @@ -1,6 +1,6 @@ { "name": "WebUI", "version": "1.0.0", - "manifest_version": 2, + "manifest_version": 3, "permissions": [] } diff --git a/packages/shell/browser/ui/new-tab.html b/packages/shell/browser/ui/new-tab.html index 02ebdec..eb04c66 100644 --- a/packages/shell/browser/ui/new-tab.html +++ b/packages/shell/browser/ui/new-tab.html @@ -23,6 +23,7 @@

New Tab

>
  • https://chromewebstore.google.com
  • +
  • https://microsoftedge.microsoft.com/addons/Microsoft-Edge-Extensions-Home
  • https://permission.site
  • https://samuelmaddock.com
  • diff --git a/packages/shell/forge.config.js b/packages/shell/forge.config.js index b9328b7..1243f27 100644 --- a/packages/shell/forge.config.js +++ b/packages/shell/forge.config.js @@ -1,6 +1,3 @@ -const path = require('path') -const { promises: fs } = require('fs') - module.exports = { packagerConfig: { name: 'Shell', @@ -9,7 +6,11 @@ module.exports = { makers: [ { name: '@electron-forge/maker-zip', - platforms: ['darwin', 'win32', 'linux'], + platforms: ['darwin', 'win32'], + }, + { + name: '@electron-forge/maker-dmg', + platforms: ['darwin'], }, ], plugins: [ @@ -35,5 +36,5 @@ module.exports = { }, }, }, - ], + ].filter(Boolean), } diff --git a/packages/shell/package.json b/packages/shell/package.json index a825de1..d8f1959 100644 --- a/packages/shell/package.json +++ b/packages/shell/package.json @@ -1,7 +1,7 @@ { "name": "shell", "productName": "Shell", - "version": "1.0.0", + "version": "2.0.0", "description": "Minimum Viable Browser shell built on Electron.", "main": ".webpack/main", "scripts": { @@ -20,13 +20,12 @@ "electron-squirrel-startup": "^1.0.0" }, "devDependencies": { - "@electron-forge/cli": "^7.2.0", - "@electron-forge/maker-deb": "^7.2.0", - "@electron-forge/maker-rpm": "^7.2.0", - "@electron-forge/maker-squirrel": "^7.2.0", - "@electron-forge/maker-zip": "^7.2.0", - "@electron-forge/plugin-auto-unpack-natives": "^7.2.0", - "@electron-forge/plugin-webpack": "^7.2.0", + "@electron-forge/cli": "^7.5.0", + "@electron-forge/maker-dmg": "^7.5.0", + "@electron-forge/maker-squirrel": "^7.5.0", + "@electron-forge/maker-zip": "^7.5.0", + "@electron-forge/plugin-auto-unpack-natives": "^7.5.0", + "@electron-forge/plugin-webpack": "^7.5.0", "copy-webpack-plugin": "^11.0.0", "cross-env": "^7.0.2", "electron": "33.0.0-beta.4" diff --git a/yarn.lock b/yarn.lock index 0089e46..cb8af34 100644 --- a/yarn.lock +++ b/yarn.lock @@ -941,27 +941,27 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== -"@electron-forge/cli@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@electron-forge/cli/-/cli-7.2.0.tgz#54349ed2b1cb0e09dd8cff51cf3699b62163ab46" - integrity sha512-FJ8XzT4w6bTC3trvHHWL67W1zp7g2xmCC5riNa1rjk8Gd2C1j8wf0ul4ch9kbcaEAFaXuXwv98QKXxhCn4aLtQ== +"@electron-forge/cli@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@electron-forge/cli/-/cli-7.5.0.tgz#7462ba2de8510101a1f6c1e38b1562ddca68491d" + integrity sha512-dlxr4ac5ONWs1Wmbgh18rclxcp9Fe5SzCF9ookp08Z1w4YP9FbQd1SHs0oLKWLF6qH9qdX8H2EWB9Nt6tOzC5g== dependencies: - "@electron-forge/core" "7.2.0" - "@electron-forge/shared-types" "7.2.0" + "@electron-forge/core" "7.5.0" + "@electron-forge/shared-types" "7.5.0" "@electron/get" "^3.0.0" chalk "^4.0.0" commander "^4.1.1" debug "^4.3.1" fs-extra "^10.0.0" - listr2 "^5.0.3" + listr2 "^7.0.2" semver "^7.2.1" -"@electron-forge/core-utils@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@electron-forge/core-utils/-/core-utils-7.2.0.tgz#4634a264fa9a20c6957879d5d6dcd6bde88b62c2" - integrity sha512-PI1wETlF/+Cxm1m/IgURQ9S3LzHU70/S4CHmkw4xJg4wYVRTfiKpH2XRE9VqEJU854hEnsCGynAIn7/Z2h6SIA== +"@electron-forge/core-utils@7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@electron-forge/core-utils/-/core-utils-7.5.0.tgz#a90a1397cb1f1b6aaf342a68fac2c66db35cb09f" + integrity sha512-PtyQT6qeOEJsi4ltoB7Jb6YUUCwK3gDt5gVyAF2aJ8eZi9rJ0hasHc5vjcmBaz9FwDMjYZrBD8oRBhNgbhEakQ== dependencies: - "@electron-forge/shared-types" "7.2.0" + "@electron-forge/shared-types" "7.5.0" "@electron/rebuild" "^3.2.10" "@malept/cross-spawn-promise" "^2.0.0" chalk "^4.0.0" @@ -972,24 +972,24 @@ semver "^7.2.1" yarn-or-npm "^3.0.1" -"@electron-forge/core@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@electron-forge/core/-/core-7.2.0.tgz#467d0aadf449b8404dae6894037d6e707d93b34d" - integrity sha512-7Sh0KW79Z/y9MStU3sWTBbTkM4SvV6rL557/ndlfAbZrxcGMnmWHrzn/odAZW1eyfhKguBb7C1Ijw0YTpsdVsw== - dependencies: - "@electron-forge/core-utils" "7.2.0" - "@electron-forge/maker-base" "7.2.0" - "@electron-forge/plugin-base" "7.2.0" - "@electron-forge/publisher-base" "7.2.0" - "@electron-forge/shared-types" "7.2.0" - "@electron-forge/template-base" "7.2.0" - "@electron-forge/template-vite" "7.2.0" - "@electron-forge/template-vite-typescript" "7.2.0" - "@electron-forge/template-webpack" "7.2.0" - "@electron-forge/template-webpack-typescript" "7.2.0" - "@electron-forge/tracer" "7.2.0" +"@electron-forge/core@7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@electron-forge/core/-/core-7.5.0.tgz#bb05afa54c9ecddc70401b453571325ef30b70e9" + integrity sha512-Hg/fXabRZtMbyrtnpzpb3i49qNai+juCg+6bgyjYfWgJGr5VGH947lWd7skujH5qJ+Y7FgvANDGnenZuQwxZNw== + dependencies: + "@electron-forge/core-utils" "7.5.0" + "@electron-forge/maker-base" "7.5.0" + "@electron-forge/plugin-base" "7.5.0" + "@electron-forge/publisher-base" "7.5.0" + "@electron-forge/shared-types" "7.5.0" + "@electron-forge/template-base" "7.5.0" + "@electron-forge/template-vite" "7.5.0" + "@electron-forge/template-vite-typescript" "7.5.0" + "@electron-forge/template-webpack" "7.5.0" + "@electron-forge/template-webpack-typescript" "7.5.0" + "@electron-forge/tracer" "7.5.0" "@electron/get" "^3.0.0" - "@electron/packager" "^18.0.0" + "@electron/packager" "^18.3.5" "@electron/rebuild" "^3.2.10" "@malept/cross-spawn-promise" "^2.0.0" chalk "^4.0.0" @@ -1000,7 +1000,7 @@ fs-extra "^10.0.0" got "^11.8.5" interpret "^3.1.1" - listr2 "^5.0.3" + listr2 "^7.0.2" lodash "^4.17.20" log-symbols "^4.0.0" node-fetch "^2.6.7" @@ -1013,164 +1013,157 @@ username "^5.1.0" yarn-or-npm "^3.0.1" -"@electron-forge/maker-base@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@electron-forge/maker-base/-/maker-base-7.2.0.tgz#2086b1ffc110316d8336e96e72c81aefd0c62c54" - integrity sha512-5dCFiVo4WhSlLf/T9MP+jnMqP3qfmwvjCSiTRE08USeotNWhycztcFox94NbxMJkRt329tNeG2RRs7RzdCz21w== +"@electron-forge/maker-base@7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@electron-forge/maker-base/-/maker-base-7.5.0.tgz#6626f33d5f1616b5f31eca72c6818806e3550909" + integrity sha512-+jluKW2UPxaI1+qQQ8fqaUVVbZohRjOSF0Iti7STRFbgJKJitzPB24Cjji9qJCKIx5klMeEiwp0YPAE/d9Xt8g== dependencies: - "@electron-forge/shared-types" "7.2.0" + "@electron-forge/shared-types" "7.5.0" fs-extra "^10.0.0" which "^2.0.2" -"@electron-forge/maker-deb@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@electron-forge/maker-deb/-/maker-deb-7.2.0.tgz#31f3340cdc95eedf2229eadf52340c4b5613455a" - integrity sha512-UYulMZpof+PIcapUFxQ5pVoSqa2FsS8crY8WGbVm1ALuknJUn4C2I37S8AujQH0l7oJRGnH95Y7Bcryyhe08yw== +"@electron-forge/maker-dmg@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@electron-forge/maker-dmg/-/maker-dmg-7.5.0.tgz#2f5c69b8356e319629607df80dcb0d234adcc3cb" + integrity sha512-OcySukBT6FQJRbb0CKXnre4e0JinJfDGteCOLypB8UsN5Wg/4lIDB0hMhBmWGPJkZXKUDGkB1lhkdcLKbzT50Q== dependencies: - "@electron-forge/maker-base" "7.2.0" - "@electron-forge/shared-types" "7.2.0" - optionalDependencies: - electron-installer-debian "^3.2.0" - -"@electron-forge/maker-rpm@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@electron-forge/maker-rpm/-/maker-rpm-7.2.0.tgz#2b627c058922b6ed31e7394652ba1c6bb25a9f6c" - integrity sha512-XKWK8Db44O9L7Njx0jEYLPfkf5eJ/i+XqT1Tejke+t0b74uCqFMKcbWLFp1LZj0hVM3kACy1LqtTCuOlti3INA== - dependencies: - "@electron-forge/maker-base" "7.2.0" - "@electron-forge/shared-types" "7.2.0" + "@electron-forge/maker-base" "7.5.0" + "@electron-forge/shared-types" "7.5.0" + fs-extra "^10.0.0" optionalDependencies: - electron-installer-redhat "^3.2.0" + electron-installer-dmg "^5.0.1" -"@electron-forge/maker-squirrel@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@electron-forge/maker-squirrel/-/maker-squirrel-7.2.0.tgz#eb573369919678468207b22a842da0c802ffdac6" - integrity sha512-SyPeFgJoMUcOPDM8+1AUPuseOqnl5YqnnjgKX9+YUIrsGKIsSz1cTtSOEu5R/l2yWNWFTmLnOlcuqIe7NayHBg== +"@electron-forge/maker-squirrel@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@electron-forge/maker-squirrel/-/maker-squirrel-7.5.0.tgz#32ce96a2ae5fd824d61d27a262528961497dab8a" + integrity sha512-fz3vbp1BnbQWeZVVM3lKOGhrCVKLjAXKDTntBL2+8Rz02a63eozGjOtC5KZYXax6nM4TF6LvwjagY/qTs5jFag== dependencies: - "@electron-forge/maker-base" "7.2.0" - "@electron-forge/shared-types" "7.2.0" + "@electron-forge/maker-base" "7.5.0" + "@electron-forge/shared-types" "7.5.0" fs-extra "^10.0.0" optionalDependencies: - electron-winstaller "^5.0.0" + electron-winstaller "^5.3.0" -"@electron-forge/maker-zip@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@electron-forge/maker-zip/-/maker-zip-7.2.0.tgz#59926d108dc2af52a80bc1ad673c33eb7290ae09" - integrity sha512-U6FSSMcHogHDv+7SmF037lJ9m0stwwqyerw7Q6mD3jKQHX9GBxFApEzA5HSURGPAEBhPgPppYOSMGRB6LV5F2g== +"@electron-forge/maker-zip@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@electron-forge/maker-zip/-/maker-zip-7.5.0.tgz#e0d534cc5715055b611507e3754f9b4bbe31ffef" + integrity sha512-gIO3bEbubOJqWV6kd0b9nBwTrFfFQv/K8PAqg6e0uSZiy7QuSCFZVAZse02gO3AzxVDSVjjTQ4nmXBXC4Glh1A== dependencies: - "@electron-forge/maker-base" "7.2.0" - "@electron-forge/shared-types" "7.2.0" + "@electron-forge/maker-base" "7.5.0" + "@electron-forge/shared-types" "7.5.0" cross-zip "^4.0.0" fs-extra "^10.0.0" got "^11.8.5" -"@electron-forge/plugin-auto-unpack-natives@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@electron-forge/plugin-auto-unpack-natives/-/plugin-auto-unpack-natives-7.2.0.tgz#177372de7913a710352341e5323f34e1f6eb7dba" - integrity sha512-5BI2t/Qt9wP188PHoS1qv/0CqIhByyacWRVeAgQ9kP6iMsPyyc4kn3kWGDQF2MyFqMmusRzcdM+SljDGR9aIeg== +"@electron-forge/plugin-auto-unpack-natives@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@electron-forge/plugin-auto-unpack-natives/-/plugin-auto-unpack-natives-7.5.0.tgz#cea6a845a5c367c2579dffc05ecf3aa3d1d9ecb5" + integrity sha512-cT/yTAr5Zd81HANi5bdyCoSG9nzIrB1WIEkFA7sWuyATiOjk9SGKn1aM543XWJ/TFkTg0800JpyocsSC9wOzEg== dependencies: - "@electron-forge/plugin-base" "7.2.0" - "@electron-forge/shared-types" "7.2.0" + "@electron-forge/plugin-base" "7.5.0" + "@electron-forge/shared-types" "7.5.0" -"@electron-forge/plugin-base@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@electron-forge/plugin-base/-/plugin-base-7.2.0.tgz#1d7f3cb6ededc68139b3556ccae5bbce6cbac7ff" - integrity sha512-c/pQK36BMBMKiemO68g1ZQOCXBA93x/aeX3lIXwK5bKVuaGt16Unfmby5Q7iIvY+/KsBuLYGkAder8HDN+4Nbw== +"@electron-forge/plugin-base@7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@electron-forge/plugin-base/-/plugin-base-7.5.0.tgz#f98bbe2d3d52c197fa7bf5c3fea0714776de4b0c" + integrity sha512-44AbXSb5lDY8uHIo0mJ91atOSWgxv3iuECk07/gDBiuMPX62dwHnLteEjQF4GBXJZTpnV7SxhD+d2AUBQmoojw== dependencies: - "@electron-forge/shared-types" "7.2.0" + "@electron-forge/shared-types" "7.5.0" -"@electron-forge/plugin-webpack@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@electron-forge/plugin-webpack/-/plugin-webpack-7.2.0.tgz#160123037f40ada5184bdd78f40c739858382509" - integrity sha512-L/0UDCYwSuxCysJh2QE0P0tIqXQvcTP7vhQwKW7sC9zFqpsfP3dn+xMPsQESZqe97i1k9xNHZnefpFFwrmabYQ== +"@electron-forge/plugin-webpack@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@electron-forge/plugin-webpack/-/plugin-webpack-7.5.0.tgz#0d59e9e410ba473459a7469b5c1166d0882278ee" + integrity sha512-0dDfT2sFY/acxN+OWc2gEXWg2unhERlIaBCwSbJH541EEs3yTkT3qAbi034yKO2SnYfumh6DYFxgC2+c6oaI4A== dependencies: - "@electron-forge/core-utils" "7.2.0" - "@electron-forge/plugin-base" "7.2.0" - "@electron-forge/shared-types" "7.2.0" - "@electron-forge/web-multi-logger" "7.2.0" + "@electron-forge/core-utils" "7.5.0" + "@electron-forge/plugin-base" "7.5.0" + "@electron-forge/shared-types" "7.5.0" + "@electron-forge/web-multi-logger" "7.5.0" chalk "^4.0.0" debug "^4.3.1" + fast-glob "^3.2.7" fs-extra "^10.0.0" html-webpack-plugin "^5.5.3" + listr2 "^7.0.2" webpack "^5.69.1" webpack-dev-server "^4.0.0" webpack-merge "^5.7.3" -"@electron-forge/publisher-base@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@electron-forge/publisher-base/-/publisher-base-7.2.0.tgz#dce47a7e4b3caaf36e87dce4d0fa21c7e11504e2" - integrity sha512-c0pwcQeMZi0S4iLlgA3pqm6ZdW2u7Ea4Ynat04Gw7su5GLtbrKRgYSL36ZRhzz7sgm4372niI0k91KaH5KToHg== +"@electron-forge/publisher-base@7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@electron-forge/publisher-base/-/publisher-base-7.5.0.tgz#2f6352d010755d3b378856b553f1e760cf684f21" + integrity sha512-PcF3jWA+oXRwNVWjKW6GxHJywJ62QXpYF/8SMs7kgKzBDzLqrbUnWuaXoCP5kCP+AxM495ZU5L2dyJek1eM+VA== dependencies: - "@electron-forge/shared-types" "7.2.0" + "@electron-forge/shared-types" "7.5.0" -"@electron-forge/shared-types@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@electron-forge/shared-types/-/shared-types-7.2.0.tgz#8642910693e957e9da18fa9fff2d8da2d14a0415" - integrity sha512-d8i+pwPwBnlmFTRkq7QfaoRS9LywfyjDdHqQZuArFbL6NLAEbZ52irFiAE3NSLf4STew/BA6IK9sTPz3KRmvQw== +"@electron-forge/shared-types@7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@electron-forge/shared-types/-/shared-types-7.5.0.tgz#3e72aba15add1e5af45767640eeb43b59497f907" + integrity sha512-VXuLVGYa3ZulBlmjA40ZEpk+iPH5ebN0v7t27wDt3rm23bph2aQrL7uSTLXhobenXYBVKggXnQt6rJ9A7FCDNQ== dependencies: - "@electron-forge/tracer" "7.2.0" - "@electron/packager" "^18.0.0" + "@electron-forge/tracer" "7.5.0" + "@electron/packager" "^18.3.5" "@electron/rebuild" "^3.2.10" - listr2 "^5.0.3" + listr2 "^7.0.2" -"@electron-forge/template-base@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@electron-forge/template-base/-/template-base-7.2.0.tgz#dec1f1279520ff3dadc490ee69a4f8165c3a546a" - integrity sha512-X7JrgQctgN0saFih/kKWVJ3KxiI1BpzdrkW58vs5H0kXXmA6UObE16/dWuKYfB06j0yIsfMbZ32Md1yAkgdCfg== +"@electron-forge/template-base@7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@electron-forge/template-base/-/template-base-7.5.0.tgz#4e2a841cba3efc434e7ccf187215b65cc73b2ad9" + integrity sha512-wEz4FI90jje4FdwJ4FzqUejodfioNcJjlgG2Ci1FiRn4Qv0jX4MP8SEgKmnD44181/44HgMa429zxRv/fDYzOw== dependencies: - "@electron-forge/shared-types" "7.2.0" + "@electron-forge/shared-types" "7.5.0" "@malept/cross-spawn-promise" "^2.0.0" debug "^4.3.1" fs-extra "^10.0.0" username "^5.1.0" -"@electron-forge/template-vite-typescript@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@electron-forge/template-vite-typescript/-/template-vite-typescript-7.2.0.tgz#7453583d7671fca9deb33038a14eef960c5225a8" - integrity sha512-knN3lxJY6UyXa2u5957K4ZyItCoCw22wrUhQARvdHOcgXvMFAcwvfEDT8zOQy6ki6A9W3cMHhSTys7dC8/ChVw== +"@electron-forge/template-vite-typescript@7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@electron-forge/template-vite-typescript/-/template-vite-typescript-7.5.0.tgz#0a22b0a049638e62f8f2783ad16c1f6269c2afc2" + integrity sha512-bD9QQ6uEsDHp6/V7odCkoK53egy0A4LEh++F1VYFt7SWJ5+InkcSLww7ELz2hrNmpmXb+euRrNagL1gorPToSA== dependencies: - "@electron-forge/shared-types" "7.2.0" - "@electron-forge/template-base" "7.2.0" + "@electron-forge/shared-types" "7.5.0" + "@electron-forge/template-base" "7.5.0" fs-extra "^10.0.0" -"@electron-forge/template-vite@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@electron-forge/template-vite/-/template-vite-7.2.0.tgz#0b37eada1094ee16fd7fc9f229cafa3b8cb475d4" - integrity sha512-Q5FSD+NVNMJKuAo/htQXpk3Q/eo116Xhx0zTzhSldAqpsgfxdAIJhl8TFmdVvCJIig1vEcLG2n/PgudxnuDuEQ== +"@electron-forge/template-vite@7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@electron-forge/template-vite/-/template-vite-7.5.0.tgz#562e0a453596558128aa7d2f5ed3e783f2de963a" + integrity sha512-AkMO5nW5jC8ijCYeoAK7hu+K5o7NMoHNsn71eepJ/kjOnSxXjJeBVGmP4DgzF2zc6AgeRz2TCKx6P8GUtFG5cw== dependencies: - "@electron-forge/shared-types" "7.2.0" - "@electron-forge/template-base" "7.2.0" + "@electron-forge/shared-types" "7.5.0" + "@electron-forge/template-base" "7.5.0" fs-extra "^10.0.0" -"@electron-forge/template-webpack-typescript@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@electron-forge/template-webpack-typescript/-/template-webpack-typescript-7.2.0.tgz#2a77e5a11026b29e6f74ef476ce7e8c23ba80b08" - integrity sha512-eshvPcYXUgmpB+ts9/xRPvQexY46unfe0mGmLDaj8s/5fqCANgyUO5jusvMXlJdf3qwJ/rfi3jS0NuqnjsqskQ== +"@electron-forge/template-webpack-typescript@7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@electron-forge/template-webpack-typescript/-/template-webpack-typescript-7.5.0.tgz#35cb73a0fda0c27902f8a2668fb215ff606b2583" + integrity sha512-Q11xAzFxWtES0bwykMd8MAzrVRtmSruXQxQIvqM7Qf3VmU8joq8v5njmn13LeCDkcRGjALiJqO8EsgsW3bttNw== dependencies: - "@electron-forge/shared-types" "7.2.0" - "@electron-forge/template-base" "7.2.0" + "@electron-forge/shared-types" "7.5.0" + "@electron-forge/template-base" "7.5.0" fs-extra "^10.0.0" -"@electron-forge/template-webpack@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@electron-forge/template-webpack/-/template-webpack-7.2.0.tgz#91c77fb27b1405569ff52536e659283b5282909e" - integrity sha512-h2LQ3vAzIraRqLUM5fKOLXknp7n5hrQXudRjO/vEEbm1a0jbl4yjp6liKk3yx8MFFO4eAHVDrXwRSsLR3a2Wew== +"@electron-forge/template-webpack@7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@electron-forge/template-webpack/-/template-webpack-7.5.0.tgz#14157cac218ebc69e81fcf79888def5b9152b951" + integrity sha512-Il9dO4VMhxibsYTsKRkccWUN3WFg55PEQFL93oarFcEtAT3sjMx/1bZDj/2AIHqbwIf7IrCylPKiPP2uUNOM9Q== dependencies: - "@electron-forge/shared-types" "7.2.0" - "@electron-forge/template-base" "7.2.0" + "@electron-forge/shared-types" "7.5.0" + "@electron-forge/template-base" "7.5.0" fs-extra "^10.0.0" -"@electron-forge/tracer@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@electron-forge/tracer/-/tracer-7.2.0.tgz#e70fb373946cce4c40409a3d9152d3bbfcec2057" - integrity sha512-EoJ07nptEuuY2fcs/bUWzIf11RQRx6Ch/dZ6A9WIRcFYe9cFrslQwvyUf0siY3jcqVvxETCz69JGuBxKGwak7A== +"@electron-forge/tracer@7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@electron-forge/tracer/-/tracer-7.5.0.tgz#45288de6a99923073e69c74ec46c63e26ce1ef66" + integrity sha512-1dE0wKCmv/K3BXCH70o2jp/y2kXgZQm73gIvzyadySXYwu2L4BWxhAO+Q+JsnbUk+nclHEup5ph4D0JoPIWLcQ== dependencies: chrome-trace-event "^1.0.3" -"@electron-forge/web-multi-logger@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@electron-forge/web-multi-logger/-/web-multi-logger-7.2.0.tgz#88abac8bc895d74d766c1193a96d181da565557b" - integrity sha512-RILwNWrcPvMIefpwho/xVu38cyjeAcJCfuJ9YpQDgsVyJzGtPVXbLeKCL8lepMu+I2j9lnYPMKkp2QzycLwMcg== +"@electron-forge/web-multi-logger@7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@electron-forge/web-multi-logger/-/web-multi-logger-7.5.0.tgz#e573da8e79428b3d4d4dd5876deb3e5443bdac76" + integrity sha512-NE7Y9dPp67ipIbht8rCy10SeZweyw4GaQse0dykfxbTzcmPfnhvgDHPk4aqUW4S1249Chd6XI1PkLKnbTlTjxg== dependencies: express "^4.17.1" express-ws "^5.0.2" @@ -1187,6 +1180,16 @@ glob "^7.1.6" minimatch "^3.0.4" +"@electron/asar@^3.2.13": + version "3.2.13" + resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.2.13.tgz#56565ea423ead184465adfa72663b2c70d9835f2" + integrity sha512-pY5z2qQSwbFzJsBdgfJIzXf5ElHTVMutC2dxh0FD60njknMu3n1NnTABOcQwbb5/v5soqE79m9UjaJryBf3epg== + dependencies: + "@types/glob" "^7.1.0" + commander "^5.0.0" + glob "^7.1.6" + minimatch "^3.0.4" + "@electron/get@^2.0.0": version "2.0.2" resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.2.tgz#ae2a967b22075e9c25aaf00d5941cd79c21efd7e" @@ -1238,18 +1241,17 @@ minimist "^1.2.6" plist "^3.0.5" -"@electron/packager@^18.0.0": - version "18.1.1" - resolved "https://registry.yarnpkg.com/@electron/packager/-/packager-18.1.1.tgz#2dde6545febc7e2c823134f8e071dc86837042d7" - integrity sha512-NAqcAs/tnGS6O3RuWfTbPsRCBXt96qijFqvAhTtBQfxkL0nlHqnwTnr2HUPpNc5L2Xo/8nBeP8BKfMd+ySLNsQ== +"@electron/packager@^18.3.5": + version "18.3.5" + resolved "https://registry.yarnpkg.com/@electron/packager/-/packager-18.3.5.tgz#571a8faa321bd9d9e5b97a9a71b8d40401980d8d" + integrity sha512-ClgTxXTt3MesWAcjIxIkgxELjTcllw1FRoVsihP7uT48kpDMqI71p4XvnMWbq8PvU57TcrKICAaLkxRhbc+/wQ== dependencies: - "@electron/asar" "^3.2.1" + "@electron/asar" "^3.2.13" "@electron/get" "^3.0.0" "@electron/notarize" "^2.1.0" "@electron/osx-sign" "^1.0.5" "@electron/universal" "^2.0.1" "@electron/windows-sign" "^1.0.0" - cross-spawn-windows-exe "^1.2.0" debug "^4.0.1" extract-zip "^2.0.0" filenamify "^4.1.0" @@ -1259,7 +1261,7 @@ junk "^3.1.0" parse-author "^2.0.0" plist "^3.0.0" - rcedit "^4.0.0" + resedit "^2.0.0" resolve "^1.1.6" semver "^7.1.3" yargs-parser "^21.1.1" @@ -1306,6 +1308,17 @@ fs-extra "^11.1.1" minimist "^1.2.8" +"@electron/windows-sign@^1.1.2": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@electron/windows-sign/-/windows-sign-1.1.3.tgz#52023d17d8f6c686d934f518be76736f6f2f0aef" + integrity sha512-OqVSdAe+/88fIjvTDWiy+5Ho1nXsiBhE5RTsIQ6M/zcxcDAEP2TlQCkOyusItnmzXRN+XTFaK9gKhiZ6KGyXQw== + dependencies: + cross-dirname "^0.1.0" + debug "^4.3.4" + fs-extra "^11.1.1" + minimist "^1.2.8" + postject "^1.0.0-alpha.6" + "@esbuild/aix-ppc64@0.24.0": version "0.24.0" resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz#b57697945b50e99007b4c2521507dc613d4a648c" @@ -1538,13 +1551,6 @@ resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== -"@malept/cross-spawn-promise@^1.0.0", "@malept/cross-spawn-promise@^1.1.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz#504af200af6b98e198bce768bc1730c6936ae01d" - integrity sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ== - dependencies: - cross-spawn "^7.0.1" - "@malept/cross-spawn-promise@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz#d0772de1aa680a0bfb9ba2f32b4c828c7857cb9d" @@ -1626,6 +1632,13 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== +"@types/appdmg@^0.5.5": + version "0.5.5" + resolved "https://registry.yarnpkg.com/@types/appdmg/-/appdmg-0.5.5.tgz#141a4f565395acf587c3f35642a021aea97deea2" + integrity sha512-G+n6DgZTZFOteITE30LnWj+HRVIGr7wMlAiLWOO02uJFWVEitaPU9JVXm9wJokkgshBawb2O1OykdcsmkkZfgg== + dependencies: + "@types/node" "*" + "@types/body-parser@*": version "1.19.5" resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" @@ -1663,10 +1676,10 @@ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.4.tgz#e913e8175db8307d78b4e8fa690408ba6b65dee4" integrity sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw== -"@types/chrome@^0.0.122": - version "0.0.122" - resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.122.tgz#65265d3854f511c2c1e779148e97982ee00b460f" - integrity sha512-xHmT1AlBwKAVpQmv+/5gUsB1FXLUiizIZI6bIM52DJDtEhv97FkryHkohjw2HZqAGLOxuJ3kae7YfgWIZ+hMrg== +"@types/chrome@^0.0.272": + version "0.0.272" + resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.272.tgz#a74d2075d306b4d15d72bf1e57dc80316a280f6c" + integrity sha512-9cxDmmgyhXV8gsZvlRjqaDizNjIjbV0spsR0fIEaQUoHtbl9D8VkTOLyONgiBKK+guR38x5eMO3E3avUYOXwcQ== dependencies: "@types/filesystem" "*" "@types/har-format" "*" @@ -1749,14 +1762,7 @@ resolved "https://registry.yarnpkg.com/@types/filewriter/-/filewriter-0.0.29.tgz#a48795ecadf957f6c0d10e0c34af86c098fa5bee" integrity sha512-BsPXH/irW0ht0Ji6iw/jJaK8Lj3FJemon2gvEqHKpCdDCeemHa+rI3WBGq5z7cDMZgoLjY40oninGxqk+8NzNQ== -"@types/fs-extra@^9.0.1": - version "9.0.13" - resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45" - integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA== - dependencies: - "@types/node" "*" - -"@types/glob@^7.1.1": +"@types/glob@^7.1.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== @@ -2307,12 +2313,12 @@ ansi-colors@4.1.1: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== -ansi-escapes@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== +ansi-escapes@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" + integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== dependencies: - type-fest "^0.21.3" + type-fest "^1.0.2" ansi-escapes@^7.0.0: version "7.0.0" @@ -2376,6 +2382,23 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" +appdmg@^0.6.4: + version "0.6.6" + resolved "https://registry.yarnpkg.com/appdmg/-/appdmg-0.6.6.tgz#d06bd82b530032fd7a8f0970a1c6ee6196e1efce" + integrity sha512-GRmFKlCG+PWbcYF4LUNonTYmy0GjguDy6Jh9WP8mpd0T6j80XIJyXBiWlD0U+MLNhqV9Nhx49Gl9GpVToulpLg== + dependencies: + async "^1.4.2" + ds-store "^0.1.5" + execa "^1.0.0" + fs-temp "^1.0.0" + fs-xattr "^0.3.0" + image-size "^0.7.4" + is-my-json-valid "^2.20.0" + minimist "^1.1.3" + parse-color "^1.0.0" + path-exists "^4.0.0" + repeat-string "^1.5.4" + "aproba@^1.0.3 || ^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" @@ -2409,27 +2432,15 @@ array-flatten@^2.1.2: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== -asar@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/asar/-/asar-3.2.0.tgz#e6edb5edd6f627ebef04db62f771c61bea9c1221" - integrity sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg== - dependencies: - chromium-pickle-js "^0.2.0" - commander "^5.0.0" - glob "^7.1.6" - minimatch "^3.0.4" - optionalDependencies: - "@types/glob" "^7.1.1" - assertion-error@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== +async@^1.4.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== at-least-node@^1.0.0: version "1.0.0" @@ -2480,6 +2491,13 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +"base32-encode@^0.1.0 || ^1.0.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/base32-encode/-/base32-encode-1.2.0.tgz#e150573a5e431af0a998e32bdfde7045725ca453" + integrity sha512-cHFU8XeRyx0GgmoWi5qHMCVRiqU6J3MHWxVgun7jggCBUpVzm1Ir7M9dYr2whjSNc3tFeXfQ/oZjQu/4u55h9A== + dependencies: + to-data-view "^1.1.0" + base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" @@ -2552,6 +2570,13 @@ boolean@^3.0.1: resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b" integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw== +bplist-creator@~0.0.3: + version "0.0.8" + resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.8.tgz#56b2a6e79e9aec3fc33bf831d09347d73794e79c" + integrity sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA== + dependencies: + stream-buffers "~2.2.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2795,11 +2820,6 @@ chrome-trace-event@^1.0.2, chrome-trace-event@^1.0.3: resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== -chromium-pickle-js@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" - integrity sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw== - clean-css@^5.2.2: version "5.3.3" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd" @@ -2819,6 +2839,13 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" +cli-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" + integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== + dependencies: + restore-cursor "^4.0.0" + cli-cursor@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-5.0.0.tgz#24a4831ecf5a6b01ddeb32fb71a4b2088b0dce38" @@ -2831,13 +2858,13 @@ cli-spinners@^2.5.0: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== -cli-truncate@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" - integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== +cli-truncate@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" + integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== dependencies: - slice-ansi "^3.0.0" - string-width "^4.2.0" + slice-ansi "^5.0.0" + string-width "^5.0.0" cli-truncate@^4.0.0: version "4.0.0" @@ -2900,6 +2927,11 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" +color-convert@~0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-0.5.3.tgz#bdb6c69ce660fadffe0b0007cc447e1b9f7282bd" + integrity sha512-RwBeO/B/vZR3dfKL1ye/vx8MHZ40ugzpyfeVG5GsiuGnrlMWe2o8wxBbLCpw9CsxV+wHuzYlCiWnybrIA0ling== + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" @@ -2915,7 +2947,7 @@ color-support@^1.1.3: resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== -colorette@^2.0.10, colorette@^2.0.19, colorette@^2.0.20: +colorette@^2.0.10, colorette@^2.0.20: version "2.0.20" resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== @@ -2955,6 +2987,11 @@ commander@^8.3.0: resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== +commander@^9.4.0: + version "9.5.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" + integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== + commander@~12.1.0: version "12.1.0" resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" @@ -3061,6 +3098,11 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== +cross-dirname@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/cross-dirname/-/cross-dirname-0.1.0.tgz#b899599f30a5389f59e78c150e19f957ad16a37c" + integrity sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q== + cross-env@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" @@ -3068,15 +3110,6 @@ cross-env@^7.0.2: dependencies: cross-spawn "^7.0.1" -cross-spawn-windows-exe@^1.1.0, cross-spawn-windows-exe@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/cross-spawn-windows-exe/-/cross-spawn-windows-exe-1.2.0.tgz#46253b0f497676e766faf4a7061004618b5ac5ec" - integrity sha512-mkLtJJcYbDCxEG7Js6eUnUNndWjyUZwJ3H7bErmmtOYU/Zb99DyUkpamuIZE0b3bhmJyZ7D90uS6f+CGxRRjOw== - dependencies: - "@malept/cross-spawn-promise" "^1.1.0" - is-wsl "^2.2.0" - which "^2.0.2" - cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -3148,7 +3181,7 @@ debug@4.3.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: dependencies: ms "2.1.2" -debug@^4.3.7, debug@~4.3.6: +debug@^4.3.2, debug@^4.3.7, debug@~4.3.6: version "4.3.7" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== @@ -3327,6 +3360,15 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" +ds-store@^0.1.5: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ds-store/-/ds-store-0.1.6.tgz#d1024ef746ed0c13f0f7fec85c7e858e8c4b7ca7" + integrity sha512-kY21M6Lz+76OS3bnCzjdsJSF7LBpLYGCVfavW8TgQD2XkcqIZ86W0y9qUDZu6fp7SIZzqosMDW2zi7zVFfv4hw== + dependencies: + bplist-creator "~0.0.3" + macos-alias "~0.2.5" + tn1150 "^0.1.0" + eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" @@ -3337,49 +3379,16 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-installer-common@^0.10.2: - version "0.10.3" - resolved "https://registry.yarnpkg.com/electron-installer-common/-/electron-installer-common-0.10.3.tgz#40f9db644ca60eb28673d545b67ee0113aef4444" - integrity sha512-mYbP+6i+nHMIm0WZHXgGdmmXMe+KXncl6jZYQNcCF9C1WsNA9C5SZ2VP4TLQMSIoFO+X4ugkMEA5uld1bmyEvA== +electron-installer-dmg@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/electron-installer-dmg/-/electron-installer-dmg-5.0.1.tgz#309662eccce4a8585a79fe4bce79c23976a950f0" + integrity sha512-qOa1aAQdX57C+vzhDk3549dd/PRlNL4F8y736MTD1a43qptD+PvHY97Bo9gSf+OZ8iUWE7BrYSpk/FgLUe40EA== dependencies: - "@malept/cross-spawn-promise" "^1.0.0" - asar "^3.0.0" - debug "^4.1.1" - fs-extra "^9.0.0" - glob "^7.1.4" - lodash "^4.17.15" - parse-author "^2.0.0" - semver "^7.1.1" - tmp-promise "^3.0.2" + "@types/appdmg" "^0.5.5" + debug "^4.3.2" + minimist "^1.2.7" optionalDependencies: - "@types/fs-extra" "^9.0.1" - -electron-installer-debian@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/electron-installer-debian/-/electron-installer-debian-3.2.0.tgz#2a9c8220f50a57807de8f93619a0d61ec41271e0" - integrity sha512-58ZrlJ1HQY80VucsEIG9tQ//HrTlG6sfofA3nRGr6TmkX661uJyu4cMPPh6kXW+aHdq/7+q25KyQhDrXvRL7jw== - dependencies: - "@malept/cross-spawn-promise" "^1.0.0" - debug "^4.1.1" - electron-installer-common "^0.10.2" - fs-extra "^9.0.0" - get-folder-size "^2.0.1" - lodash "^4.17.4" - word-wrap "^1.2.3" - yargs "^16.0.2" - -electron-installer-redhat@^3.2.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/electron-installer-redhat/-/electron-installer-redhat-3.4.0.tgz#4a7f8d67b48b7d5b23bd1eb074f4b684ae43b192" - integrity sha512-gEISr3U32Sgtj+fjxUAlSDo3wyGGq6OBx7rF5UdpIgbnpUvMN4W5uYb0ThpnAZ42VEJh/3aODQXHbFS4f5J3Iw== - dependencies: - "@malept/cross-spawn-promise" "^1.0.0" - debug "^4.1.1" - electron-installer-common "^0.10.2" - fs-extra "^9.0.0" - lodash "^4.17.15" - word-wrap "^1.2.3" - yargs "^16.0.2" + appdmg "^0.6.4" electron-squirrel-startup@^1.0.0: version "1.0.0" @@ -3398,16 +3407,18 @@ electron-to-chromium@^1.4.251: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== -electron-winstaller@^5.0.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/electron-winstaller/-/electron-winstaller-5.2.1.tgz#1a22d8125f35745a9fbbe7c0aa1e91d0556d520e" - integrity sha512-2UuvOGMLLGJioIBsqWANF1A19G7uJuIifae8/pR3FClI21aCJc5nutAOGnZI17kkxUc47UqByqKOl0XSVtwAlQ== +electron-winstaller@^5.3.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/electron-winstaller/-/electron-winstaller-5.4.0.tgz#f0660d476d5c4f579fdf7edd2f0cf01d54c4d0b2" + integrity sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg== dependencies: "@electron/asar" "^3.2.1" debug "^4.1.1" fs-extra "^7.0.1" - lodash.template "^4.2.2" + lodash "^4.17.21" temp "^0.9.0" + optionalDependencies: + "@electron/windows-sign" "^1.1.2" electron@33.0.0-beta.4: version "33.0.0-beta.4" @@ -3447,6 +3458,11 @@ emojis-list@^3.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== +encode-utf8@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" + integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -3877,6 +3893,13 @@ flora-colossus@^2.0.0: debug "^4.3.4" fs-extra "^10.1.0" +fmix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/fmix/-/fmix-0.1.0.tgz#c7bbf124dec42c9d191cfb947d0a9778dd986c0c" + integrity sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w== + dependencies: + imul "^1.0.0" + follow-redirects@^1.0.0: version "1.15.3" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" @@ -3936,7 +3959,7 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.0.0, fs-extra@^9.0.1: +fs-extra@^9.0.1: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -3958,6 +3981,18 @@ fs-monkey@^1.0.4: resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.5.tgz#fe450175f0db0d7ea758102e1d84096acb925788" integrity sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew== +fs-temp@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/fs-temp/-/fs-temp-1.2.1.tgz#ffd136ef468177accc3c267d4510f6ce3b2b9697" + integrity sha512-okTwLB7/Qsq82G6iN5zZJFsOfZtx2/pqrA7Hk/9fvy+c+eJS9CvgGXT2uNxwnI14BDY9L/jQPkaBgSvlKfSW9w== + dependencies: + random-path "^0.1.0" + +fs-xattr@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/fs-xattr/-/fs-xattr-0.3.1.tgz#a23d88571031f6c56f26d59e0bab7d2e12f49f77" + integrity sha512-UVqkrEW0GfDabw4C3HOrFlxKfx0eeigfRne69FxSBdHIP8Qt5Sq6Pu3RM9KmMlkygtC4pPKkj5CiPO5USnj2GA== + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -3992,11 +4027,6 @@ galactus@^1.0.0: flora-colossus "^2.0.0" fs-extra "^10.1.0" -gar@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/gar/-/gar-1.0.4.tgz#f777bc7db425c0572fdeb52676172ca1ae9888b8" - integrity sha512-w4n9cPWyP7aHxKxYHFQMegj7WIAsL/YX/C4Bs5Rr8s1H9M1rNtRWRsw+ovYMkXDQ5S4ZbYHsHAPmevPjPgw44w== - gauge@^4.0.3: version "4.0.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" @@ -4011,6 +4041,20 @@ gauge@^4.0.3: strip-ansi "^6.0.1" wide-align "^1.1.5" +generate-function@^2.0.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" + integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== + dependencies: + is-property "^1.0.2" + +generate-object-property@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" + integrity sha512-TuOwZWgJ2VAMEGJvAyPWvpqxSANF0LDpmyHauMjFYzaACvn+QTT/AZomvPCzVBV7yDN3OmwHQ5OvHaeLKre3JQ== + dependencies: + is-property "^1.0.0" + gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -4026,14 +4070,6 @@ get-east-asian-width@^1.0.0: resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz#21b4071ee58ed04ee0db653371b55b4299875389" integrity sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ== -get-folder-size@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/get-folder-size/-/get-folder-size-2.0.1.tgz#3fe0524dd3bad05257ef1311331417bcd020a497" - integrity sha512-+CEb+GDCM7tkOS2wdMKTn9vU7DgnKUTuDlehkNJKNSovdCOVxs14OfKCk4cvSaR3za4gj+OBdl9opPN9xrJ0zA== - dependencies: - gar "^1.0.4" - tiny-each-async "2.0.3" - get-func-name@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" @@ -4513,6 +4549,11 @@ ignore@^5.2.4: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== +image-size@^0.7.4: + version "0.7.5" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.7.5.tgz#269f357cf5797cb44683dfa99790e54c705ead04" + integrity sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g== + import-local@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" @@ -4521,6 +4562,11 @@ import-local@^3.0.2: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" +imul@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/imul/-/imul-1.0.1.tgz#9d5867161e8b3de96c2c38d5dc7cb102f35e2ac9" + integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -4666,6 +4712,22 @@ is-lambda@^1.0.1: resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== +is-my-ip-valid@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.1.tgz#f7220d1146257c98672e6fba097a9f3f2d348442" + integrity sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg== + +is-my-json-valid@^2.20.0: + version "2.20.6" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.20.6.tgz#a9d89e56a36493c77bda1440d69ae0dc46a08387" + integrity sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw== + dependencies: + generate-function "^2.0.0" + generate-object-property "^1.1.0" + is-my-ip-valid "^1.0.0" + jsonpointer "^5.0.0" + xtend "^4.0.0" + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -4688,6 +4750,11 @@ is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-property@^1.0.0, is-property@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + integrity sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g== + is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -4824,6 +4891,11 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsonpointer@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" + integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== + junk@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1" @@ -4870,19 +4942,17 @@ lint-staged@^15.2.10: string-argv "~0.3.2" yaml "~2.5.0" -listr2@^5.0.3: - version "5.0.8" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-5.0.8.tgz#a9379ffeb4bd83a68931a65fb223a11510d6ba23" - integrity sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA== +listr2@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-7.0.2.tgz#3aa3e1549dfaf3c57ab5eeaba754da3b87f33063" + integrity sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g== dependencies: - cli-truncate "^2.1.0" - colorette "^2.0.19" - log-update "^4.0.0" - p-map "^4.0.0" + cli-truncate "^3.1.0" + colorette "^2.0.20" + eventemitter3 "^5.0.1" + log-update "^5.0.1" rfdc "^1.3.0" - rxjs "^7.8.0" - through "^2.3.8" - wrap-ansi "^7.0.0" + wrap-ansi "^8.1.0" listr2@~8.2.4: version "8.2.5" @@ -4942,11 +5012,6 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA== - lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -4957,22 +5022,7 @@ lodash.get@^4.0.0: resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== -lodash.template@^4.2.2: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" - integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.templatesettings "^4.0.0" - -lodash.templatesettings@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" - integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== - dependencies: - lodash._reinterpolate "^3.0.0" - -lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4: +lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -4992,15 +5042,16 @@ log-symbols@^4.0.0, log-symbols@^4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" -log-update@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" - integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== +log-update@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-5.0.1.tgz#9e928bf70cb183c1f0c9e91d9e6b7115d597ce09" + integrity sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw== dependencies: - ansi-escapes "^4.3.0" - cli-cursor "^3.1.0" - slice-ansi "^4.0.0" - wrap-ansi "^6.2.0" + ansi-escapes "^5.0.0" + cli-cursor "^4.0.0" + slice-ansi "^5.0.0" + strip-ansi "^7.0.1" + wrap-ansi "^8.0.1" log-update@^6.1.0: version "6.1.0" @@ -5056,6 +5107,13 @@ lru-cache@^7.7.1: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== +macos-alias@~0.2.5: + version "0.2.11" + resolved "https://registry.yarnpkg.com/macos-alias/-/macos-alias-0.2.11.tgz#feeea6c13ba119814a43fc43c470b31e59ef718a" + integrity sha512-zIUs3+qpml+w3wiRuADutd7XIO8UABqksot10Utl/tji4UxZzLG4fWDC+yJZoO8/Ehg5RqsvSRE/6TS5AEOeWw== + dependencies: + nan "^2.4.0" + make-dir@^3.0.2, make-dir@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" @@ -5243,7 +5301,7 @@ minimatch@^9.0.3: dependencies: brace-expansion "^2.0.1" -minimist@^1.2.6, minimist@^1.2.8: +minimist@^1.1.3, minimist@^1.2.6, minimist@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -5383,6 +5441,20 @@ multicast-dns@^7.2.5: dns-packet "^5.2.2" thunky "^1.0.2" +"murmur-32@^0.1.0 || ^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/murmur-32/-/murmur-32-0.2.0.tgz#bf42b7567880db13cd92ca0c2c72eeea884f44c7" + integrity sha512-ZkcWZudylwF+ir3Ld1n7gL6bI2mQAzXvSobPwVtu8aYi2sbXeipeSkdcanRLzIofLcM5F53lGaKm2dk7orBi7Q== + dependencies: + encode-utf8 "^1.0.3" + fmix "^0.1.0" + imul "^1.0.0" + +nan@^2.4.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.20.0.tgz#08c5ea813dd54ed16e5bd6505bf42af4f7838ca3" + integrity sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw== + nanoid@3.1.20: version "3.1.20" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" @@ -5710,6 +5782,13 @@ parse-author@^2.0.0: dependencies: author-regex "^1.0.0" +parse-color@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-color/-/parse-color-1.0.0.tgz#7b748b95a83f03f16a94f535e52d7f3d94658619" + integrity sha512-fuDHYgFHJGbpGMgw9skY/bj3HL/Jrn4l/5rSspy00DoT4RyLnDcRvPxdZ+r6OFwIsgAuhDh4I09tAId4mI12bw== + dependencies: + color-convert "~0.5.0" + parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" @@ -5807,6 +5886,11 @@ pbf@^4.0.1: dependencies: resolve-protobuf-schema "^2.1.0" +pe-library@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/pe-library/-/pe-library-1.0.1.tgz#02735430885a622576a53cd8827658b7d2fada0e" + integrity sha512-nh39Mo1eGWmZS7y+mK/dQIqg7S1lp38DpRxkyoHf0ZcUs/HDc+yyTjuOtTvSMZHmfSLuSQaX945u05Y2Q6UWZg== + pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" @@ -5848,6 +5932,13 @@ plist@^3.0.0, plist@^3.0.5, plist@^3.1.0: base64-js "^1.5.1" xmlbuilder "^15.1.1" +postject@^1.0.0-alpha.6: + version "1.0.0-alpha.6" + resolved "https://registry.yarnpkg.com/postject/-/postject-1.0.0-alpha.6.tgz#9d022332272e2cfce8dea4cfce1ee6dd1b2ee135" + integrity sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A== + dependencies: + commander "^9.4.0" + prettier@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.1.tgz#e211d451d6452db0a291672ca9154bc8c2579f7b" @@ -5927,6 +6018,14 @@ quick-lru@^5.1.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== +random-path@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/random-path/-/random-path-0.1.2.tgz#78b7f1570e2a09f66a4e2e0113a98ed588e85da9" + integrity sha512-4jY0yoEaQ5v9StCl5kZbNIQlg1QheIDBrdkDn53EynpPb9FgO6//p3X/tgMnrC45XN6QZCzU1Xz/+pSSsJBpRw== + dependencies: + base32-encode "^0.1.0 || ^1.0.0" + murmur-32 "^0.1.0 || ^0.2.0" + randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -5949,13 +6048,6 @@ raw-body@2.5.1: iconv-lite "0.4.24" unpipe "1.0.0" -rcedit@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/rcedit/-/rcedit-4.0.1.tgz#892ac47a19204a380f49e00ea38ce070443343c2" - integrity sha512-bZdaQi34krFWhrDn+O53ccBDw0MkAT2Vhu75SqhtvhQu4OPyFM4RoVheyYiVQYdjhUi6EJMVWQ0tR6bCIYVkUg== - dependencies: - cross-spawn-windows-exe "^1.1.0" - read-binary-file-arch@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/read-binary-file-arch/-/read-binary-file-arch-1.0.6.tgz#959c4637daa932280a9b911b1a6766a7e44288fc" @@ -6094,6 +6186,11 @@ renderkid@^3.0.0: lodash "^4.17.21" strip-ansi "^6.0.1" +repeat-string@^1.5.4: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -6109,6 +6206,13 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== +resedit@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resedit/-/resedit-2.0.2.tgz#875adfb3eb975e27e4d0bec1214b8ccc37509d5d" + integrity sha512-UKTnq602iVe+W5SyRAQx/WdWMnlDiONfXBLFg/ur4QE4EQQ8eP7Jgm5mNXdK12kKawk1vvXPja2iXKqZiGDW6Q== + dependencies: + pe-library "^1.0.1" + resolve-alpn@^1.0.0: version "1.2.1" resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" @@ -6181,6 +6285,14 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" +restore-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" + integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + restore-cursor@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-5.1.0.tgz#0766d95699efacb14150993f55baf0953ea1ebe7" @@ -6214,7 +6326,7 @@ rfdc@^1.4.1: resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== -rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -6255,13 +6367,6 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^7.8.0: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -6342,7 +6447,7 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.1.1, semver@^7.1.3, semver@^7.2.1, semver@^7.3.5: +semver@^7.1.3, semver@^7.2.1, semver@^7.3.5: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -6511,24 +6616,6 @@ slash@^4.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== -slice-ansi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" - integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - slice-ansi@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" @@ -6660,12 +6747,17 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== +stream-buffers@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" + integrity sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg== + string-argv@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -6682,7 +6774,16 @@ string-argv@~0.3.2: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^5.0.1, string-width@^5.1.2: +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== @@ -6714,7 +6815,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -6735,6 +6836,13 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^7.0.1, strip-ansi@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -6879,34 +6987,22 @@ terser@^5.7.2: commander "^2.20.0" source-map-support "~0.5.20" -through@^2.3.8: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - thunky@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== -tiny-each-async@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/tiny-each-async/-/tiny-each-async-2.0.3.tgz#8ebbbfd6d6295f1370003fbb37162afe5a0a51d1" - integrity sha512-5ROII7nElnAirvFn8g7H7MtpfV1daMcyfTGQwsn/x2VtyV+VPiO5CjReCJtWLvoKTDEDmZocf3cNPraiMnBXLA== - -tmp-promise@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7" - integrity sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ== +tn1150@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/tn1150/-/tn1150-0.1.0.tgz#673503d24d56b87de8b8c77fee3fc0853d59a18d" + integrity sha512-DbplOfQFkqG5IHcDyyrs/lkvSr3mPUVsFf/RbDppOshs22yTPnSJWEe6FkYd1txAwU/zcnR905ar2fi4kwF29w== dependencies: - tmp "^0.2.0" + unorm "^1.4.1" -tmp@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" +to-data-view@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/to-data-view/-/to-data-view-1.1.0.tgz#08d6492b0b8deb9b29bdf1f61c23eadfa8994d00" + integrity sha512-1eAdufMg6mwgmlojAx3QeMnzB/BTVp7Tbndi3U7ftcT2zCZadjxkkmLmd97zmaxWi+sgGcgWrokmpEoy0Dn0vQ== to-fast-properties@^2.0.0: version "2.0.0" @@ -6956,7 +7052,7 @@ ts-node@^10.9.1: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tslib@^2.0.3, tslib@^2.1.0: +tslib@^2.0.3: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== @@ -6971,10 +7067,10 @@ type-fest@^0.13.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== +type-fest@^1.0.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== type-is@~1.6.18: version "1.6.18" @@ -7046,6 +7142,11 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== +unorm@^1.4.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/unorm/-/unorm-1.6.0.tgz#029b289661fba714f1a9af439eb51d9b16c205af" + integrity sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -7345,17 +7446,12 @@ wildcard@^2.0.0: resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== -word-wrap@^1.2.3: - version "1.2.5" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== - workerpool@6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.0.tgz#a8e038b4c94569596852de7a8ea4228eefdeb37b" integrity sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -7364,16 +7460,16 @@ workerpool@6.1.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^8.1.0: +wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== @@ -7411,6 +7507,11 @@ xmlbuilder@^15.1.1: resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5" integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + xterm-addon-fit@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/xterm-addon-fit/-/xterm-addon-fit-0.5.0.tgz#2d51b983b786a97dcd6cde805e700c7f913bc596" @@ -7471,7 +7572,7 @@ yargs-unparser@2.0.0: flat "^5.0.2" is-plain-obj "^2.1.0" -yargs@16.2.0, yargs@^16.0.2: +yargs@16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==