build: update some build dependencies (#43882)

* build: update some build dependencies

* build: fix eslint issues after updating

* build: disable ts check on busted js example

* build: update internal types for stricter event handling

* restore url.parse behavior

* fix typing issues

* sigh

* build: update easy deps

* build: skip woa engines check
This commit is contained in:
Samuel Attard 2024-09-26 00:12:11 -07:00 коммит произвёл GitHub
Родитель 15db63e26d
Коммит 74af96da16
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
49 изменённых файлов: 1797 добавлений и 1276 удалений

Просмотреть файл

@ -19,7 +19,7 @@
"prefer-const": ["error", { "prefer-const": ["error", {
"destructuring": "all" "destructuring": "all"
}], }],
"standard/no-callback-literal": "off" "n/no-callback-literal": "off"
}, },
"parserOptions": { "parserOptions": {
"ecmaVersion": 6, "ecmaVersion": 6,

Просмотреть файл

@ -70,8 +70,9 @@ for:
- job_name: Build Arm on X64 Windows - job_name: Build Arm on X64 Windows
build_script: build_script:
# TODO: Remove --ignore-engines once WOA image is up to node 20
- ps: | - ps: |
node script/yarn.js install --frozen-lockfile node script/yarn.js install --frozen-lockfile --ignore-engines
node script/doc-only-change.js --prNumber=$env:APPVEYOR_PULL_REQUEST_NUMBER node script/doc-only-change.js --prNumber=$env:APPVEYOR_PULL_REQUEST_NUMBER
$env:SHOULD_SKIP_ARTIFACT_VALIDATION = "false" $env:SHOULD_SKIP_ARTIFACT_VALIDATION = "false"
if ($LASTEXITCODE -eq 0) { if ($LASTEXITCODE -eq 0) {
@ -264,7 +265,7 @@ for:
build_script: build_script:
- ps: | - ps: |
node script/yarn.js install --frozen-lockfile node script/yarn.js install --frozen-lockfile --ignore-engines
node script/doc-only-change.js --prNumber=$env:APPVEYOR_PULL_REQUEST_NUMBER node script/doc-only-change.js --prNumber=$env:APPVEYOR_PULL_REQUEST_NUMBER
if ($LASTEXITCODE -eq 0) { if ($LASTEXITCODE -eq 0) {
Write-warning "Skipping build for doc only change" Write-warning "Skipping build for doc only change"

Просмотреть файл

@ -255,6 +255,7 @@ async function startRepl () {
// start the default app. // start the default app.
if (option.file && !option.webdriver) { if (option.file && !option.webdriver) {
const file = option.file; const file = option.file;
// eslint-disable-next-line n/no-deprecated-api
const protocol = url.parse(file).protocol; const protocol = url.parse(file).protocol;
const extension = path.extname(file); const extension = path.extname(file);
if (protocol === 'http:' || protocol === 'https:' || protocol === 'file:' || protocol === 'chrome:') { if (protocol === 'http:' || protocol === 'https:' || protocol === 'file:' || protocol === 'chrome:') {

Просмотреть файл

@ -126,10 +126,18 @@ or session log off.
#### Event: 'blur' #### Event: 'blur'
Returns:
* `event` Event
Emitted when the window loses focus. Emitted when the window loses focus.
#### Event: 'focus' #### Event: 'focus'
Returns:
* `event` Event
Emitted when the window gains focus. Emitted when the window gains focus.
#### Event: 'show' #### Event: 'show'

Просмотреть файл

@ -53,7 +53,7 @@ following properties:
[`request.followRedirect`](#requestfollowredirect) is invoked synchronously [`request.followRedirect`](#requestfollowredirect) is invoked synchronously
during the [`redirect`](#event-redirect) event. Defaults to `follow`. during the [`redirect`](#event-redirect) event. Defaults to `follow`.
* `origin` string (optional) - The origin URL of the request. * `origin` string (optional) - The origin URL of the request.
* `referrerPolicy` string (optional) - can be `""`, `no-referrer`, * `referrerPolicy` string (optional) - can be "", `no-referrer`,
`no-referrer-when-downgrade`, `origin`, `origin-when-cross-origin`, `no-referrer-when-downgrade`, `origin`, `origin-when-cross-origin`,
`unsafe-url`, `same-origin`, `strict-origin`, or `unsafe-url`, `same-origin`, `strict-origin`, or
`strict-origin-when-cross-origin`. Defaults to `strict-origin-when-cross-origin`. Defaults to

Просмотреть файл

@ -31,7 +31,7 @@ Emitted when a request has been canceled during an ongoing HTTP transaction.
Returns: Returns:
`error` Error - Typically holds an error string identifying failure root cause. * `error` Error - Typically holds an error string identifying failure root cause.
Emitted when an error was encountered while streaming response data events. For Emitted when an error was encountered while streaming response data events. For
instance, if the server closes the underlying while the response is still instance, if the server closes the underlying while the response is still

Просмотреть файл

@ -495,7 +495,7 @@ app.whenReady().then(() => {
}) })
``` ```
```js ```js @ts-nocheck
// Renderer Process // Renderer Process
const portConnect = async () => { const portConnect = async () => {

Просмотреть файл

@ -251,33 +251,35 @@ export const roleList: Record<RoleId, Role> = {
{ role: 'cut' }, { role: 'cut' },
{ role: 'copy' }, { role: 'copy' },
{ role: 'paste' }, { role: 'paste' },
...(isMac ? [ ...(isMac
{ role: 'pasteAndMatchStyle' }, ? [
{ role: 'delete' }, { role: 'pasteAndMatchStyle' },
{ role: 'selectAll' }, { role: 'delete' },
{ type: 'separator' }, { role: 'selectAll' },
{ { type: 'separator' },
label: 'Substitutions', {
submenu: [ label: 'Substitutions',
{ role: 'showSubstitutions' }, submenu: [
{ type: 'separator' }, { role: 'showSubstitutions' },
{ role: 'toggleSmartQuotes' }, { type: 'separator' },
{ role: 'toggleSmartDashes' }, { role: 'toggleSmartQuotes' },
{ role: 'toggleTextReplacement' } { role: 'toggleSmartDashes' },
] { role: 'toggleTextReplacement' }
}, ]
{ },
label: 'Speech', {
submenu: [ label: 'Speech',
{ role: 'startSpeaking' }, submenu: [
{ role: 'stopSpeaking' } { role: 'startSpeaking' },
] { role: 'stopSpeaking' }
} ]
] as MenuItemConstructorOptions[] : [ }
{ role: 'delete' }, ] as MenuItemConstructorOptions[]
{ type: 'separator' }, : [
{ role: 'selectAll' } { role: 'delete' },
] as MenuItemConstructorOptions[]) { type: 'separator' },
{ role: 'selectAll' }
] as MenuItemConstructorOptions[])
] ]
}, },
// View submenu // View submenu
@ -301,12 +303,14 @@ export const roleList: Record<RoleId, Role> = {
submenu: [ submenu: [
{ role: 'minimize' }, { role: 'minimize' },
{ role: 'zoom' }, { role: 'zoom' },
...(isMac ? [ ...(isMac
{ type: 'separator' }, ? [
{ role: 'front' } { type: 'separator' },
] as MenuItemConstructorOptions[] : [ { role: 'front' }
{ role: 'close' } ] as MenuItemConstructorOptions[]
] as MenuItemConstructorOptions[]) : [
{ role: 'close' }
] as MenuItemConstructorOptions[])
] ]
}, },
// Share submenu // Share submenu

Просмотреть файл

@ -117,10 +117,12 @@ class TouchBarColorPicker extends TouchBarItem<Electron.TouchBarColorPickerConst
@LiveProperty<TouchBarColorPicker>(config => config.selectedColor) @LiveProperty<TouchBarColorPicker>(config => config.selectedColor)
selectedColor!: string; selectedColor!: string;
@ImmutableProperty<TouchBarColorPicker>(({ change: onChange }, setInternalProp) => typeof onChange === 'function' ? (details: { color: string }) => { @ImmutableProperty<TouchBarColorPicker>(({ change: onChange }, setInternalProp) => typeof onChange === 'function'
setInternalProp('selectedColor', details.color); ? (details: { color: string }) => {
onChange(details.color); setInternalProp('selectedColor', details.color);
} : null) onChange(details.color);
}
: null)
onInteraction!: Function | null; onInteraction!: Function | null;
} }
@ -203,10 +205,12 @@ class TouchBarSlider extends TouchBarItem<Electron.TouchBarSliderConstructorOpti
@LiveProperty<TouchBarSlider>(config => config.value) @LiveProperty<TouchBarSlider>(config => config.value)
value!: number; value!: number;
@ImmutableProperty<TouchBarSlider>(({ change: onChange }, setInternalProp) => typeof onChange === 'function' ? (details: { value: number }) => { @ImmutableProperty<TouchBarSlider>(({ change: onChange }, setInternalProp) => typeof onChange === 'function'
setInternalProp('value', details.value); ? (details: { value: number }) => {
onChange(details.value); setInternalProp('value', details.value);
} : null) onChange(details.value);
}
: null)
onInteraction!: Function | null; onInteraction!: Function | null;
} }
@ -236,10 +240,12 @@ class TouchBarSegmentedControl extends TouchBarItem<Electron.TouchBarSegmentedCo
@LiveProperty<TouchBarSegmentedControl>(config => config.mode) @LiveProperty<TouchBarSegmentedControl>(config => config.mode)
mode!: Electron.TouchBarSegmentedControl['mode']; mode!: Electron.TouchBarSegmentedControl['mode'];
@ImmutableProperty<TouchBarSegmentedControl>(({ change: onChange }, setInternalProp) => typeof onChange === 'function' ? (details: { selectedIndex: number, isSelected: boolean }) => { @ImmutableProperty<TouchBarSegmentedControl>(({ change: onChange }, setInternalProp) => typeof onChange === 'function'
setInternalProp('selectedIndex', details.selectedIndex); ? (details: { selectedIndex: number, isSelected: boolean }) => {
onChange(details.selectedIndex, details.isSelected); setInternalProp('selectedIndex', details.selectedIndex);
} : null) onChange(details.selectedIndex, details.isSelected);
}
: null)
onInteraction!: Function | null; onInteraction!: Function | null;
} }
@ -265,13 +271,15 @@ class TouchBarScrubber extends TouchBarItem<Electron.TouchBarScrubberConstructor
@LiveProperty<TouchBarScrubber>(config => typeof config.continuous === 'undefined' ? true : config.continuous) @LiveProperty<TouchBarScrubber>(config => typeof config.continuous === 'undefined' ? true : config.continuous)
continuous!: boolean; continuous!: boolean;
@ImmutableProperty<TouchBarScrubber>(({ select: onSelect, highlight: onHighlight }) => typeof onSelect === 'function' || typeof onHighlight === 'function' ? (details: { type: 'select'; selectedIndex: number } | { type: 'highlight'; highlightedIndex: number }) => { @ImmutableProperty<TouchBarScrubber>(({ select: onSelect, highlight: onHighlight }) => typeof onSelect === 'function' || typeof onHighlight === 'function'
if (details.type === 'select') { ? (details: { type: 'select'; selectedIndex: number } | { type: 'highlight'; highlightedIndex: number }) => {
if (onSelect) onSelect(details.selectedIndex); if (details.type === 'select') {
} else { if (onSelect) onSelect(details.selectedIndex);
if (onHighlight) onHighlight(details.highlightedIndex); } else {
} if (onHighlight) onHighlight(details.highlightedIndex);
} : null) }
}
: null)
onInteraction!: Function | null; onInteraction!: Function | null;
} }

Просмотреть файл

@ -1,5 +1,5 @@
import { app, ipcMain, session, webFrameMain, dialog } from 'electron/main'; import { app, ipcMain, session, webFrameMain, dialog } from 'electron/main';
import type { BrowserWindowConstructorOptions, LoadURLOptions, MessageBoxOptions, WebFrameMain } from 'electron/main'; import type { BrowserWindowConstructorOptions, MessageBoxOptions } from 'electron/main';
import * as url from 'url'; import * as url from 'url';
import * as path from 'path'; import * as path from 'path';
@ -24,8 +24,6 @@ const getNextId = function () {
return ++nextId; return ++nextId;
}; };
type PostData = LoadURLOptions['postData']
// Stock page sizes // Stock page sizes
const PDFPageSizes: Record<string, ElectronInternal.MediaSize> = { const PDFPageSizes: Record<string, ElectronInternal.MediaSize> = {
Letter: { Letter: {
@ -403,7 +401,7 @@ WebContents.prototype.loadURL = function (url, options) {
// the only one is with a bad scheme, perhaps ERR_INVALID_ARGUMENT // the only one is with a bad scheme, perhaps ERR_INVALID_ARGUMENT
// would be more appropriate. // would be more appropriate.
if (!error) { if (!error) {
error = { errorCode: -2, errorDescription: 'ERR_FAILED', url: url }; error = { errorCode: -2, errorDescription: 'ERR_FAILED', url };
} }
finishListener(); finishListener();
}; };
@ -604,7 +602,7 @@ WebContents.prototype._init = function () {
}); });
// Dispatch IPC messages to the ipc module. // Dispatch IPC messages to the ipc module.
this.on('-ipc-message' as any, function (this: Electron.WebContents, event: Electron.IpcMainEvent, internal: boolean, channel: string, args: any[]) { this.on('-ipc-message', function (this: Electron.WebContents, event, internal, channel, args) {
addSenderToEvent(event, this); addSenderToEvent(event, this);
if (internal) { if (internal) {
ipcMainInternal.emit(channel, event, ...args); ipcMainInternal.emit(channel, event, ...args);
@ -618,7 +616,7 @@ WebContents.prototype._init = function () {
} }
}); });
this.on('-ipc-invoke' as any, async function (this: Electron.WebContents, event: Electron.IpcMainInvokeEvent, internal: boolean, channel: string, args: any[]) { this.on('-ipc-invoke', async function (this: Electron.WebContents, event, internal, channel, args) {
addSenderToEvent(event, this); addSenderToEvent(event, this);
const replyWithResult = (result: any) => event._replyChannel.sendReply({ result }); const replyWithResult = (result: any) => event._replyChannel.sendReply({ result });
const replyWithError = (error: Error) => { const replyWithError = (error: Error) => {
@ -640,7 +638,7 @@ WebContents.prototype._init = function () {
} }
}); });
this.on('-ipc-message-sync' as any, function (this: Electron.WebContents, event: Electron.IpcMainEvent, internal: boolean, channel: string, args: any[]) { this.on('-ipc-message-sync', function (this: Electron.WebContents, event, internal, channel, args) {
addSenderToEvent(event, this); addSenderToEvent(event, this);
addReturnValueToEvent(event); addReturnValueToEvent(event);
if (internal) { if (internal) {
@ -658,7 +656,7 @@ WebContents.prototype._init = function () {
} }
}); });
this.on('-ipc-ports' as any, function (this: Electron.WebContents, event: Electron.IpcMainEvent, internal: boolean, channel: string, message: any, ports: any[]) { this.on('-ipc-ports', function (this: Electron.WebContents, event: Electron.IpcMainEvent, internal: boolean, channel: string, message: any, ports: any[]) {
addSenderToEvent(event, this); addSenderToEvent(event, this);
event.ports = ports.map(p => new MessagePortMain(p)); event.ports = ports.map(p => new MessagePortMain(p));
const maybeWebFrame = getWebFrameForEvent(event); const maybeWebFrame = getWebFrameForEvent(event);
@ -676,7 +674,7 @@ WebContents.prototype._init = function () {
} }
}); });
this.on('-before-unload-fired' as any, function (this: Electron.WebContents, event: Electron.Event, proceed: boolean) { this.on('-before-unload-fired', function (this: Electron.WebContents, event, proceed) {
const type = this.getType(); const type = this.getType();
// These are the "interactive" types, i.e. ones a user might be looking at. // These are the "interactive" types, i.e. ones a user might be looking at.
// All other types should ignore the "proceed" signal and unload // All other types should ignore the "proceed" signal and unload
@ -693,12 +691,13 @@ WebContents.prototype._init = function () {
if (this.getType() !== 'remote') { if (this.getType() !== 'remote') {
// Make new windows requested by links behave like "window.open". // Make new windows requested by links behave like "window.open".
this.on('-new-window' as any, (event: Electron.Event, url: string, frameName: string, disposition: Electron.HandlerDetails['disposition'], this.on('-new-window', (event, url, frameName, disposition, rawFeatures, referrer, postData) => {
rawFeatures: string, referrer: Electron.Referrer, postData: PostData) => { const postBody = postData
const postBody = postData ? { ? {
data: postData, data: postData,
...parseContentTypeFormat(postData) ...parseContentTypeFormat(postData)
} : undefined; }
: undefined;
const details: Electron.HandlerDetails = { const details: Electron.HandlerDetails = {
url, url,
frameName, frameName,
@ -735,11 +734,13 @@ WebContents.prototype._init = function () {
let windowOpenOutlivesOpenerOption: boolean = false; let windowOpenOutlivesOpenerOption: boolean = false;
let createWindow: Electron.CreateWindowFunction | undefined; let createWindow: Electron.CreateWindowFunction | undefined;
this.on('-will-add-new-contents' as any, (event: Electron.Event, url: string, frameName: string, rawFeatures: string, disposition: Electron.HandlerDetails['disposition'], referrer: Electron.Referrer, postData: PostData) => { this.on('-will-add-new-contents', (event, url, frameName, rawFeatures, disposition, referrer, postData) => {
const postBody = postData ? { const postBody = postData
data: postData, ? {
...parseContentTypeFormat(postData) data: postData,
} : undefined; ...parseContentTypeFormat(postData)
}
: undefined;
const details: Electron.HandlerDetails = { const details: Electron.HandlerDetails = {
url, url,
frameName, frameName,
@ -761,14 +762,16 @@ WebContents.prototype._init = function () {
windowOpenOverriddenOptions = result.browserWindowConstructorOptions; windowOpenOverriddenOptions = result.browserWindowConstructorOptions;
createWindow = result.createWindow; createWindow = result.createWindow;
if (!event.defaultPrevented) { if (!event.defaultPrevented) {
const secureOverrideWebPreferences = windowOpenOverriddenOptions ? { const secureOverrideWebPreferences = windowOpenOverriddenOptions
// Allow setting of backgroundColor as a webPreference even though ? {
// it's technically a BrowserWindowConstructorOptions option because // Allow setting of backgroundColor as a webPreference even though
// we need to access it in the renderer at init time. // it's technically a BrowserWindowConstructorOptions option because
backgroundColor: windowOpenOverriddenOptions.backgroundColor, // we need to access it in the renderer at init time.
transparent: windowOpenOverriddenOptions.transparent, backgroundColor: windowOpenOverriddenOptions.backgroundColor,
...windowOpenOverriddenOptions.webPreferences transparent: windowOpenOverriddenOptions.transparent,
} : undefined; ...windowOpenOverriddenOptions.webPreferences
}
: undefined;
const { webPreferences: parsedWebPreferences } = parseFeatures(rawFeatures); const { webPreferences: parsedWebPreferences } = parseFeatures(rawFeatures);
const webPreferences = makeWebPreferences({ const webPreferences = makeWebPreferences({
embedder: this, embedder: this,
@ -784,9 +787,7 @@ WebContents.prototype._init = function () {
}); });
// Create a new browser window for "window.open" // Create a new browser window for "window.open"
this.on('-add-new-contents' as any, (event: Electron.Event, webContents: Electron.WebContents, disposition: string, this.on('-add-new-contents', (event, webContents, disposition, _userGesture, _left, _top, _width, _height, url, frameName, referrer, rawFeatures, postData) => {
_userGesture: boolean, _left: number, _top: number, _width: number, _height: number, url: string, frameName: string,
referrer: Electron.Referrer, rawFeatures: string, postData: PostData) => {
const overriddenOptions = windowOpenOverriddenOptions || undefined; const overriddenOptions = windowOpenOverriddenOptions || undefined;
const outlivesOpener = windowOpenOutlivesOpenerOption; const outlivesOpener = windowOpenOutlivesOpenerOption;
const windowOpenFunction = createWindow; const windowOpenFunction = createWindow;
@ -824,7 +825,7 @@ WebContents.prototype._init = function () {
app.emit('login', event, this, ...args); app.emit('login', event, this, ...args);
}); });
this.on('ready-to-show' as any, () => { this.on('ready-to-show', () => {
const owner = this.getOwnerBrowserWindow(); const owner = this.getOwnerBrowserWindow();
if (owner && !owner.isDestroyed()) { if (owner && !owner.isDestroyed()) {
process.nextTick(() => { process.nextTick(() => {
@ -843,7 +844,7 @@ WebContents.prototype._init = function () {
const originCounts = new Map<string, number>(); const originCounts = new Map<string, number>();
const openDialogs = new Set<AbortController>(); const openDialogs = new Set<AbortController>();
this.on('-run-dialog' as any, async (info: {frame: WebFrameMain, dialogType: 'prompt' | 'confirm' | 'alert', messageText: string, defaultPromptText: string}, callback: (success: boolean, user_input: string) => void) => { this.on('-run-dialog', async (info, callback) => {
const originUrl = new URL(info.frame.url); const originUrl = new URL(info.frame.url);
const origin = originUrl.protocol === 'file:' ? originUrl.href : originUrl.origin; const origin = originUrl.protocol === 'file:' ? originUrl.href : originUrl.origin;
if ((originCounts.get(origin) ?? 0) < 0) return callback(false, ''); if ((originCounts.get(origin) ?? 0) < 0) return callback(false, '');
@ -864,15 +865,17 @@ WebContents.prototype._init = function () {
message: info.messageText, message: info.messageText,
checkboxLabel: checkbox, checkboxLabel: checkbox,
signal: abortController.signal, signal: abortController.signal,
...(info.dialogType === 'confirm') ? { ...(info.dialogType === 'confirm')
buttons: ['OK', 'Cancel'], ? {
defaultId: 0, buttons: ['OK', 'Cancel'],
cancelId: 1 defaultId: 0,
} : { cancelId: 1
buttons: ['OK'], }
defaultId: -1, // No default button : {
cancelId: 0 buttons: ['OK'],
} defaultId: -1, // No default button
cancelId: 0
}
}; };
openDialogs.add(abortController); openDialogs.add(abortController);
const promise = parent && !prefs.offscreen ? dialog.showMessageBox(parent, options) : dialog.showMessageBox(options); const promise = parent && !prefs.offscreen ? dialog.showMessageBox(parent, options) : dialog.showMessageBox(options);
@ -886,7 +889,7 @@ WebContents.prototype._init = function () {
} }
}); });
this.on('-cancel-dialogs' as any, () => { this.on('-cancel-dialogs', () => {
for (const controller of openDialogs) { controller.abort(); } for (const controller of openDialogs) { controller.abort(); }
openDialogs.clear(); openDialogs.clear();
}); });

Просмотреть файл

@ -14,33 +14,35 @@ export const setDefaultApplicationMenu = () => {
const helpMenu: Electron.MenuItemConstructorOptions = { const helpMenu: Electron.MenuItemConstructorOptions = {
role: 'help', role: 'help',
submenu: app.isPackaged ? [] : [ submenu: app.isPackaged
{ ? []
label: 'Learn More', : [
click: async () => { {
await shell.openExternal('https://electronjs.org'); label: 'Learn More',
} click: async () => {
}, await shell.openExternal('https://electronjs.org');
{ }
label: 'Documentation', },
click: async () => { {
const version = process.versions.electron; label: 'Documentation',
await shell.openExternal(`https://github.com/electron/electron/tree/v${version}/docs#readme`); click: async () => {
} const version = process.versions.electron;
}, await shell.openExternal(`https://github.com/electron/electron/tree/v${version}/docs#readme`);
{ }
label: 'Community Discussions', },
click: async () => { {
await shell.openExternal('https://discord.gg/electronjs'); label: 'Community Discussions',
} click: async () => {
}, await shell.openExternal('https://discord.gg/electronjs');
{ }
label: 'Search Issues', },
click: async () => { {
await shell.openExternal('https://github.com/electron/electron/issues'); label: 'Search Issues',
} click: async () => {
} await shell.openExternal('https://github.com/electron/electron/issues');
] }
}
]
}; };
const macAppMenu: Electron.MenuItemConstructorOptions = { role: 'appMenu' }; const macAppMenu: Electron.MenuItemConstructorOptions = { role: 'appMenu' };

Просмотреть файл

@ -7,23 +7,29 @@ import { IPC_MESSAGES } from '@electron/internal//common/ipc-messages';
const convertToMenuTemplate = function (items: ContextMenuItem[], handler: (id: number) => void) { const convertToMenuTemplate = function (items: ContextMenuItem[], handler: (id: number) => void) {
return items.map(function (item) { return items.map(function (item) {
const transformed: Electron.MenuItemConstructorOptions = item.type === 'subMenu' ? { const transformed: Electron.MenuItemConstructorOptions = item.type === 'subMenu'
type: 'submenu', ? {
label: item.label, type: 'submenu',
enabled: item.enabled, label: item.label,
submenu: convertToMenuTemplate(item.subItems, handler) enabled: item.enabled,
} : item.type === 'separator' ? { submenu: convertToMenuTemplate(item.subItems, handler)
type: 'separator' }
} : item.type === 'checkbox' ? { : item.type === 'separator'
type: 'checkbox', ? {
label: item.label, type: 'separator'
enabled: item.enabled, }
checked: item.checked : item.type === 'checkbox'
} : { ? {
type: 'normal', type: 'checkbox',
label: item.label, label: item.label,
enabled: item.enabled enabled: item.enabled,
}; checked: item.checked
}
: {
type: 'normal',
label: item.label,
enabled: item.enabled
};
if (item.id != null) { if (item.id != null) {
transformed.click = () => handler(item.id); transformed.click = () => handler(item.id);

Просмотреть файл

@ -237,7 +237,7 @@ const watchEmbedder = function (embedder: Electron.WebContents) {
} }
} }
}; };
embedder.on('-window-visibility-change' as any, onVisibilityChange); embedder.on('-window-visibility-change', onVisibilityChange);
embedder.once('will-destroy' as any, () => { embedder.once('will-destroy' as any, () => {
// Usually the guestInstances is cleared when guest is destroyed, but it // Usually the guestInstances is cleared when guest is destroyed, but it
@ -249,7 +249,7 @@ const watchEmbedder = function (embedder: Electron.WebContents) {
} }
} }
// Clear the listeners. // Clear the listeners.
embedder.removeListener('-window-visibility-change' as any, onVisibilityChange); embedder.removeListener('-window-visibility-change', onVisibilityChange);
watchedEmbedders.delete(embedder); watchedEmbedders.delete(embedder);
}); });
}; };

Просмотреть файл

@ -226,7 +226,7 @@ function validateHeader (name: any, value: any): void {
} }
function parseOptions (optionsIn: ClientRequestConstructorOptions | string): NodeJS.CreateURLLoaderOptions & ExtraURLLoaderOptions { function parseOptions (optionsIn: ClientRequestConstructorOptions | string): NodeJS.CreateURLLoaderOptions & ExtraURLLoaderOptions {
// eslint-disable-next-line node/no-deprecated-api // eslint-disable-next-line n/no-deprecated-api
const options: any = typeof optionsIn === 'string' ? url.parse(optionsIn) : { ...optionsIn }; const options: any = typeof optionsIn === 'string' ? url.parse(optionsIn) : { ...optionsIn };
let urlStr: string = options.url; let urlStr: string = options.url;
@ -259,7 +259,7 @@ function parseOptions (optionsIn: ClientRequestConstructorOptions | string): Nod
// an invalid request. // an invalid request.
throw new TypeError('Request path contains unescaped characters'); throw new TypeError('Request path contains unescaped characters');
} }
// eslint-disable-next-line node/no-deprecated-api // eslint-disable-next-line n/no-deprecated-api
const pathObj = url.parse(options.path || '/'); const pathObj = url.parse(options.path || '/');
urlObj.pathname = pathObj.pathname; urlObj.pathname = pathObj.pathname;
urlObj.search = pathObj.search; urlObj.search = pathObj.search;

Просмотреть файл

@ -59,7 +59,7 @@ function isInstalled () {
if (fs.readFileSync(path.join(__dirname, 'path.txt'), 'utf-8') !== platformPath) { if (fs.readFileSync(path.join(__dirname, 'path.txt'), 'utf-8') !== platformPath) {
return false; return false;
} }
} catch (ignored) { } catch {
return false; return false;
} }

Просмотреть файл

@ -4,72 +4,61 @@
"repository": "https://github.com/electron/electron", "repository": "https://github.com/electron/electron",
"description": "Build cross platform desktop apps with JavaScript, HTML, and CSS", "description": "Build cross platform desktop apps with JavaScript, HTML, and CSS",
"devDependencies": { "devDependencies": {
"@azure/storage-blob": "^12.9.0", "@azure/storage-blob": "^12.25.0",
"@electron/asar": "^3.2.1", "@electron/asar": "^3.2.13",
"@electron/docs-parser": "^1.2.1", "@electron/docs-parser": "^1.2.3",
"@electron/fiddle-core": "^1.0.4", "@electron/fiddle-core": "^1.3.4",
"@electron/github-app-auth": "^2.0.0", "@electron/github-app-auth": "^2.2.1",
"@electron/lint-roller": "^2.3.0", "@electron/lint-roller": "^2.4.0",
"@electron/typescript-definitions": "^8.15.2", "@electron/typescript-definitions": "^8.15.8",
"@octokit/rest": "^19.0.7", "@octokit/rest": "^20.0.2",
"@primer/octicons": "^10.0.0", "@primer/octicons": "^10.0.0",
"@types/basic-auth": "^1.1.3", "@types/minimist": "^1.2.5",
"@types/busboy": "^1.5.0",
"@types/chai": "^4.2.12",
"@types/chai-as-promised": "^8.0.1",
"@types/dirty-chai": "^2.0.2",
"@types/express": "^4.17.13",
"@types/minimist": "^1.2.0",
"@types/mocha": "^7.0.2",
"@types/node": "^20.9.0", "@types/node": "^20.9.0",
"@types/semver": "^7.3.3", "@types/semver": "^7.5.8",
"@types/send": "^0.14.5", "@types/stream-json": "^1.7.7",
"@types/split": "^1.0.0", "@types/temp": "^0.9.4",
"@types/stream-json": "^1.5.1", "@types/webpack": "^5.28.5",
"@types/temp": "^0.8.34", "@types/webpack-env": "^1.18.5",
"@types/uuid": "^3.4.6", "@typescript-eslint/eslint-plugin": "^8.7.0",
"@types/w3c-web-serial": "^1.0.7", "@typescript-eslint/parser": "^8.7.0",
"@types/webpack": "^5.28.0",
"@types/webpack-env": "^1.17.0",
"@typescript-eslint/eslint-plugin": "^5.59.7",
"@typescript-eslint/parser": "^5.59.7",
"buffer": "^6.0.3", "buffer": "^6.0.3",
"chalk": "^4.1.0",
"check-for-leaks": "^1.2.1", "check-for-leaks": "^1.2.1",
"colors": "1.4.0",
"dotenv-safe": "^4.0.4", "dotenv-safe": "^4.0.4",
"dugite": "^2.3.0", "dugite": "^2.7.1",
"eslint": "^8.57.1", "eslint": "^8.57.1",
"eslint-config-standard": "^14.1.1", "eslint-config-standard": "^17.1.0",
"eslint-plugin-import": "^2.26.0", "eslint-plugin-import": "^2.30.0",
"eslint-plugin-mocha": "^7.0.1", "eslint-plugin-mocha": "^10.5.0",
"eslint-plugin-n": "^16.6.2",
"eslint-plugin-node": "^11.1.0", "eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^7.1.0", "eslint-plugin-promise": "^6.6.0",
"eslint-plugin-standard": "^4.0.1", "eslint-plugin-standard": "^5.0.0",
"eslint-plugin-unicorn": "^46.0.1", "eslint-plugin-unicorn": "^55.0.0",
"events": "^3.2.0", "events": "^3.2.0",
"express": "^4.20.0",
"folder-hash": "^2.1.1", "folder-hash": "^2.1.1",
"got": "^11.8.5", "got": "^11.8.5",
"husky": "^8.0.1", "husky": "^8.0.1",
"lint": "^1.1.2", "lint": "^1.1.2",
"lint-staged": "^10.2.11", "lint-staged": "^10.2.11",
"markdownlint-cli2": "^0.13.0", "markdownlint-cli2": "^0.13.0",
"minimist": "^1.2.6", "minimist": "^1.2.8",
"null-loader": "^4.0.1", "null-loader": "^4.0.1",
"pre-flight": "^1.1.0", "pre-flight": "^2.0.0",
"process": "^0.11.10", "process": "^0.11.10",
"remark-cli": "^10.0.0", "remark-cli": "^10.0.0",
"remark-preset-lint-markdown-style-guide": "^4.0.0", "remark-preset-lint-markdown-style-guide": "^4.0.0",
"semver": "^7.5.2", "semver": "^7.6.3",
"shx": "^0.3.2", "shx": "^0.3.4",
"stream-json": "^1.7.1", "stream-json": "^1.8.0",
"tap-xunit": "^2.4.1", "tap-xunit": "^2.4.1",
"temp": "^0.8.3", "temp": "^0.9.4",
"timers-browserify": "1.4.2", "timers-browserify": "1.4.2",
"ts-loader": "^8.0.2", "ts-loader": "^8.0.2",
"ts-node": "6.2.0", "ts-node": "6.2.0",
"typescript": "^5.1.2", "typescript": "^5.1.2",
"url": "^0.11.0", "url": "^0.11.4",
"webpack": "^5.94.0", "webpack": "^5.94.0",
"webpack-cli": "^5.1.4", "webpack-cli": "^5.1.4",
"wrapper-webpack-plugin": "^2.2.0" "wrapper-webpack-plugin": "^2.2.0"

Просмотреть файл

@ -26,6 +26,7 @@ async function checkIfDocOnlyChange () {
const nonDocChange = filesChanged.length === 0 || filesChanged.find(({ filename }) => { const nonDocChange = filesChanged.length === 0 || filesChanged.find(({ filename }) => {
const fileDirs = filename.split('/'); const fileDirs = filename.split('/');
if (fileDirs[0] !== 'docs') return true; if (fileDirs[0] !== 'docs') return true;
return false;
}); });
process.exit(nonDocChange ? 1 : 0); process.exit(nonDocChange ? 1 : 0);

Просмотреть файл

@ -15,7 +15,7 @@ module.exports.getElectronVersion = () => {
if (match) { if (match) {
return match[1]; return match[1];
} }
} catch (error) { } catch {
// Error may happen when trying to get version before running gn, which is a // Error may happen when trying to get version before running gn, which is a
// valid case and error will be ignored. // valid case and error will be ignored.
} }

Просмотреть файл

@ -1,3 +1,4 @@
const chalk = require('chalk');
const { GitProcess } = require('dugite'); const { GitProcess } = require('dugite');
const fs = require('node:fs'); const fs = require('node:fs');
const os = require('node:os'); const os = require('node:os');
@ -6,10 +7,9 @@ const path = require('node:path');
const ELECTRON_DIR = path.resolve(__dirname, '..', '..'); const ELECTRON_DIR = path.resolve(__dirname, '..', '..');
const SRC_DIR = path.resolve(ELECTRON_DIR, '..'); const SRC_DIR = path.resolve(ELECTRON_DIR, '..');
require('colors');
// eslint-disable-next-line @typescript-eslint/no-unused-vars // eslint-disable-next-line @typescript-eslint/no-unused-vars
const pass = '✓'.green; const pass = chalk.green('✓');
const fail = '✗'.red; const fail = chalk.red('✗');
function getElectronExec () { function getElectronExec () {
const OUT_DIR = getOutDir(); const OUT_DIR = getOutDir();

Просмотреть файл

@ -144,7 +144,6 @@ const LINTERS = [{
cacheLocation: `node_modules/.eslintcache.${crypto.createHash('md5').update(fs.readFileSync(__filename)).digest('hex')}`, cacheLocation: `node_modules/.eslintcache.${crypto.createHash('md5').update(fs.readFileSync(__filename)).digest('hex')}`,
extensions: ['.js', '.ts'], extensions: ['.js', '.ts'],
fix: opts.fix, fix: opts.fix,
overrideConfigFile: path.join(ELECTRON_ROOT, '.eslintrc.json'),
resolvePluginsRelativeTo: ELECTRON_ROOT resolvePluginsRelativeTo: ELECTRON_ROOT
}); });
const formatter = await eslint.loadFormatter(); const formatter = await eslint.loadFormatter();

Просмотреть файл

@ -8,6 +8,7 @@ const ciReleaseBuild = require('./ci-release-build');
const { Octokit } = require('@octokit/rest'); const { Octokit } = require('@octokit/rest');
const { execSync } = require('node:child_process'); const { execSync } = require('node:child_process');
const { GitProcess } = require('dugite'); const { GitProcess } = require('dugite');
const chalk = require('chalk');
const path = require('node:path'); const path = require('node:path');
const readline = require('node:readline'); const readline = require('node:readline');
@ -25,9 +26,8 @@ const octokit = new Octokit({
authStrategy: createGitHubTokenStrategy(getRepo()) authStrategy: createGitHubTokenStrategy(getRepo())
}); });
require('colors'); const pass = chalk.green('✓');
const pass = '✓'.green; const fail = chalk.red('✗');
const fail = '✗'.red;
if (!bumpType && !args.notesOnly) { if (!bumpType && !args.notesOnly) {
console.log('Usage: prepare-release [stable | minor | beta | alpha | nightly]' + console.log('Usage: prepare-release [stable | minor | beta | alpha | nightly]' +

Просмотреть файл

@ -6,11 +6,12 @@ const args = require('minimist')(process.argv.slice(2), {
default: { releaseID: '' } default: { releaseID: '' }
}); });
const { Octokit } = require('@octokit/rest'); const { Octokit } = require('@octokit/rest');
const chalk = require('chalk');
const { createGitHubTokenStrategy } = require('./github-token'); const { createGitHubTokenStrategy } = require('./github-token');
require('colors'); const pass = chalk.green('✓');
const pass = '✓'.green; const fail = chalk.red('✗');
const fail = '✗'.red;
async function deleteDraft (releaseId, targetRepo) { async function deleteDraft (releaseId, targetRepo) {
const octokit = new Octokit({ const octokit = new Octokit({

Просмотреть файл

@ -2,6 +2,7 @@
if (!process.env.CI) require('dotenv-safe').load(); if (!process.env.CI) require('dotenv-safe').load();
const chalk = require('chalk');
const args = require('minimist')(process.argv.slice(2), { const args = require('minimist')(process.argv.slice(2), {
boolean: [ boolean: [
'validateRelease', 'validateRelease',
@ -18,9 +19,8 @@ const temp = require('temp').track();
const { BlobServiceClient } = require('@azure/storage-blob'); const { BlobServiceClient } = require('@azure/storage-blob');
const { Octokit } = require('@octokit/rest'); const { Octokit } = require('@octokit/rest');
require('colors'); const pass = chalk.green('✓');
const pass = '✓'.green; const fail = chalk.red('✗');
const fail = '✗'.red;
const { ELECTRON_DIR } = require('../lib/utils'); const { ELECTRON_DIR } = require('../lib/utils');
const { getElectronVersion } = require('../lib/get-version'); const { getElectronVersion } = require('../lib/get-version');

Просмотреть файл

@ -1,6 +1,7 @@
#!/usr/bin/env node #!/usr/bin/env node
const { ElectronVersions, Installer } = require('@electron/fiddle-core'); const { ElectronVersions, Installer } = require('@electron/fiddle-core');
const chalk = require('chalk');
const childProcess = require('node:child_process'); const childProcess = require('node:child_process');
const crypto = require('node:crypto'); const crypto = require('node:crypto');
const fs = require('node:fs'); const fs = require('node:fs');
@ -9,9 +10,8 @@ const os = require('node:os');
const path = require('node:path'); const path = require('node:path');
const unknownFlags = []; const unknownFlags = [];
require('colors'); const pass = chalk.green('✓');
const pass = '✓'.green; const fail = chalk.red('✗');
const fail = '✗'.red;
const args = require('minimist')(process.argv, { const args = require('minimist')(process.argv, {
string: ['runners', 'target', 'electronVersion'], string: ['runners', 'target', 'electronVersion'],

Просмотреть файл

@ -327,7 +327,7 @@ describe('BrowserWindow module', () => {
}, },
{ {
type: 'file', type: 'file',
filePath: filePath, filePath,
offset: 0, offset: 0,
length: fileStats.size, length: fileStats.size,
modificationTime: fileStats.mtime.getTime() / 1000 modificationTime: fileStats.mtime.getTime() / 1000
@ -1677,7 +1677,7 @@ describe('BrowserWindow module', () => {
const backgroundColor = '#BBAAFF'; const backgroundColor = '#BBAAFF';
w.destroy(); w.destroy();
w = new BrowserWindow({ w = new BrowserWindow({
backgroundColor: backgroundColor backgroundColor
}); });
expect(w.getBackgroundColor()).to.equal(backgroundColor); expect(w.getBackgroundColor()).to.equal(backgroundColor);
}); });

Просмотреть файл

@ -67,7 +67,9 @@ describe('contextBridge', () => {
describe(`with sandbox=${useSandbox}`, () => { describe(`with sandbox=${useSandbox}`, () => {
const makeBindingWindow = async (bindingCreator: Function, worldId: number = 0) => { const makeBindingWindow = async (bindingCreator: Function, worldId: number = 0) => {
const preloadContentForMainWorld = `const renderer_1 = require('electron'); const preloadContentForMainWorld = `const renderer_1 = require('electron');
${useSandbox ? '' : `require('node:v8').setFlagsFromString('--expose_gc'); ${useSandbox
? ''
: `require('node:v8').setFlagsFromString('--expose_gc');
const gc=require('node:vm').runInNewContext('gc'); const gc=require('node:vm').runInNewContext('gc');
renderer_1.contextBridge.exposeInMainWorld('GCRunner', { renderer_1.contextBridge.exposeInMainWorld('GCRunner', {
run: () => gc() run: () => gc()
@ -75,7 +77,9 @@ describe('contextBridge', () => {
(${bindingCreator.toString()})();`; (${bindingCreator.toString()})();`;
const preloadContentForIsolatedWorld = `const renderer_1 = require('electron'); const preloadContentForIsolatedWorld = `const renderer_1 = require('electron');
${useSandbox ? '' : `require('node:v8').setFlagsFromString('--expose_gc'); ${useSandbox
? ''
: `require('node:v8').setFlagsFromString('--expose_gc');
const gc=require('node:vm').runInNewContext('gc'); const gc=require('node:vm').runInNewContext('gc');
renderer_1.webFrame.setIsolatedWorldInfo(${worldId}, { renderer_1.webFrame.setIsolatedWorldInfo(${worldId}, {
name: "Isolated World" name: "Isolated World"

Просмотреть файл

@ -530,7 +530,8 @@ ifdescribe(!isLinuxOnArm && !process.mas && !process.env.DISABLE_CRASH_REPORTER_
} }
} }
const processList = process.platform === 'linux' ? ['main', 'renderer', 'sandboxed-renderer'] const processList = process.platform === 'linux'
? ['main', 'renderer', 'sandboxed-renderer']
: ['main', 'renderer', 'sandboxed-renderer', 'node']; : ['main', 'renderer', 'sandboxed-renderer', 'node'];
for (const crashingProcess of processList) { for (const crashingProcess of processList) {
describe(`when ${crashingProcess} crashes`, () => { describe(`when ${crashingProcess} crashes`, () => {

Просмотреть файл

@ -88,8 +88,8 @@ describe('ipcRenderer module', () => {
}`); }`);
const child = { hello: 'world' }; const child = { hello: 'world' };
const foo = { name: 'foo', child: child }; const foo = { name: 'foo', child };
const bar = { name: 'bar', child: child }; const bar = { name: 'bar', child };
const array = [foo, bar]; const array = [foo, bar];
const [, arrayValue, fooValue, barValue, childValue] = await once(ipcMain, 'message'); const [, arrayValue, fooValue, barValue, childValue] = await once(ipcMain, 'message');

Просмотреть файл

@ -2,7 +2,6 @@ import { expect } from 'chai';
import { net, ClientRequest, ClientRequestConstructorOptions, utilityProcess } from 'electron/main'; import { net, ClientRequest, ClientRequestConstructorOptions, utilityProcess } from 'electron/main';
import * as http from 'node:http'; import * as http from 'node:http';
import * as path from 'node:path'; import * as path from 'node:path';
import * as url from 'node:url';
import { once } from 'node:events'; import { once } from 'node:events';
import { setTimeout } from 'node:timers/promises'; import { setTimeout } from 'node:timers/promises';
import { collectStreamBody, collectStreamBodyBuffer, getResponse, kOneKiloByte, kOneMegaByte, randomBuffer, randomString, respondNTimes, respondOnce } from './lib/net-helpers'; import { collectStreamBody, collectStreamBodyBuffer, getResponse, kOneKiloByte, kOneMegaByte, randomBuffer, randomString, respondNTimes, respondOnce } from './lib/net-helpers';
@ -934,7 +933,7 @@ describe('net module', () => {
response.statusMessage = 'OK'; response.statusMessage = 'OK';
response.end(); response.end();
}); });
const serverUrl = url.parse(serverUrlUnparsed); const serverUrl = new URL(serverUrlUnparsed);
const urlRequest = net.request({ const urlRequest = net.request({
port: serverUrl.port ? parseInt(serverUrl.port, 10) : undefined, port: serverUrl.port ? parseInt(serverUrl.port, 10) : undefined,
hostname: '127.0.0.1', hostname: '127.0.0.1',
@ -1307,10 +1306,10 @@ describe('net module', () => {
]); ]);
const netRequest = net.request(netServerUrl); const netRequest = net.request(netServerUrl);
const netResponse = await getResponse(netRequest); const netResponse = await getResponse(netRequest);
const serverUrl = url.parse(nodeServerUrl); const serverUrl = new URL(nodeServerUrl);
const nodeOptions = { const nodeOptions = {
method: 'POST', method: 'POST',
path: serverUrl.path, path: serverUrl.pathname,
port: serverUrl.port port: serverUrl.port
}; };
const nodeRequest = http.request(nodeOptions); const nodeRequest = http.request(nodeOptions);

Просмотреть файл

@ -649,7 +649,7 @@ describe('protocol module', () => {
const { url } = await listen(server); const { url } = await listen(server);
interceptHttpProtocol('http', (request, callback) => { interceptHttpProtocol('http', (request, callback) => {
const data: Electron.ProtocolResponse = { const data: Electron.ProtocolResponse = {
url: url, url,
method: 'POST', method: 'POST',
uploadData: { uploadData: {
contentType: 'application/x-www-form-urlencoded', contentType: 'application/x-www-form-urlencoded',
@ -910,7 +910,7 @@ describe('protocol module', () => {
}); });
it('allows CORS requests by default', async () => { it('allows CORS requests by default', async () => {
await allowsCORSRequests('cors', 200, new RegExp(''), () => { await allowsCORSRequests('cors', 200, /(?:)/, () => {
const { ipcRenderer } = require('electron'); const { ipcRenderer } = require('electron');
fetch('cors://myhost').then(function (response) { fetch('cors://myhost').then(function (response) {
ipcRenderer.send('response', response.status); ipcRenderer.send('response', response.status);
@ -1695,7 +1695,7 @@ describe('protocol module', () => {
const filePath = path.join(fixturesPath, 'pages', 'form-with-data.html'); const filePath = path.join(fixturesPath, 'pages', 'form-with-data.html');
await contents.loadFile(filePath); await contents.loadFile(filePath);
const loadPromise = new Promise((resolve, reject) => { const loadPromise = new Promise<void>((resolve, reject) => {
contents.once('did-finish-load', resolve); contents.once('did-finish-load', resolve);
contents.once('did-fail-load', (_, errorCode, errorDescription) => contents.once('did-fail-load', (_, errorCode, errorDescription) =>
reject(new Error(`did-fail-load: ${errorCode} ${errorDescription}. See AssertionError for details.`)) reject(new Error(`did-fail-load: ${errorCode} ${errorDescription}. See AssertionError for details.`))

Просмотреть файл

@ -2804,15 +2804,17 @@ describe('webContents module', () => {
expect({ expect({
width: w.getBounds().width, width: w.getBounds().width,
height: w.getBounds().height height: w.getBounds().height
}).to.deep.equal(process.platform === 'win32' ? { }).to.deep.equal(process.platform === 'win32'
// The width is reported as being larger on Windows? I'm not sure why ? {
// this is. // The width is reported as being larger on Windows? I'm not sure why
width: 136, // this is.
height: 100 width: 136,
} : { height: 100
width: 100, }
height: 100 : {
}); width: 100,
height: 100
});
}); });
it('does not change window bounds if cancelled', async () => { it('does not change window bounds if cancelled', async () => {

Просмотреть файл

@ -20,7 +20,7 @@ describe('webFrameMain module', () => {
/** Creates an HTTP server whose handler embeds the given iframe src. */ /** Creates an HTTP server whose handler embeds the given iframe src. */
const createServer = async () => { const createServer = async () => {
const server = http.createServer((req, res) => { const server = http.createServer((req, res) => {
const params = new URLSearchParams(url.parse(req.url || '').search || ''); const params = new URLSearchParams(new URL(req.url || '', `http://${req.headers.host}`).search || '');
if (params.has('frameSrc')) { if (params.has('frameSrc')) {
res.end(`<iframe src="${params.get('frameSrc')}"></iframe>`); res.end(`<iframe src="${params.get('frameSrc')}"></iframe>`);
} else { } else {

Просмотреть файл

@ -295,7 +295,7 @@ describe('webRequest module', () => {
ses.webRequest.onBeforeSendHeaders((details, callback) => { ses.webRequest.onBeforeSendHeaders((details, callback) => {
const requestHeaders = details.requestHeaders; const requestHeaders = details.requestHeaders;
requestHeaders.Accept = '*/*;test/header'; requestHeaders.Accept = '*/*;test/header';
callback({ requestHeaders: requestHeaders }); callback({ requestHeaders });
}); });
const { data } = await ajax(defaultURL); const { data } = await ajax(defaultURL);
expect(data).to.equal('/header/received'); expect(data).to.equal('/header/received');
@ -362,7 +362,7 @@ describe('webRequest module', () => {
Test: 'header' Test: 'header'
}; };
ses.webRequest.onBeforeSendHeaders((details, callback) => { ses.webRequest.onBeforeSendHeaders((details, callback) => {
callback({ requestHeaders: requestHeaders }); callback({ requestHeaders });
}); });
ses.webRequest.onSendHeaders((details) => { ses.webRequest.onSendHeaders((details) => {
expect(details.requestHeaders).to.deep.equal(requestHeaders); expect(details.requestHeaders).to.deep.equal(requestHeaders);
@ -388,7 +388,7 @@ describe('webRequest module', () => {
}; };
let onSendHeadersCalled = false; let onSendHeadersCalled = false;
ses.webRequest.onBeforeSendHeaders((details, callback) => { ses.webRequest.onBeforeSendHeaders((details, callback) => {
callback({ requestHeaders: requestHeaders }); callback({ requestHeaders });
}); });
ses.webRequest.onSendHeaders((details) => { ses.webRequest.onSendHeaders((details) => {
expect(details.requestHeaders).to.deep.equal(requestHeaders); expect(details.requestHeaders).to.deep.equal(requestHeaders);
@ -437,7 +437,7 @@ describe('webRequest module', () => {
ses.webRequest.onHeadersReceived((details, callback) => { ses.webRequest.onHeadersReceived((details, callback) => {
const responseHeaders = details.responseHeaders!; const responseHeaders = details.responseHeaders!;
responseHeaders.Custom = ['Changed'] as any; responseHeaders.Custom = ['Changed'] as any;
callback({ responseHeaders: responseHeaders }); callback({ responseHeaders });
}); });
const { headers } = await ajax(defaultURL); const { headers } = await ajax(defaultURL);
expect(headers).to.to.have.property('custom', 'Changed'); expect(headers).to.to.have.property('custom', 'Changed');
@ -447,7 +447,7 @@ describe('webRequest module', () => {
ses.webRequest.onHeadersReceived((details, callback) => { ses.webRequest.onHeadersReceived((details, callback) => {
const responseHeaders = details.responseHeaders!; const responseHeaders = details.responseHeaders!;
responseHeaders['access-control-allow-origin'] = ['http://new-origin'] as any; responseHeaders['access-control-allow-origin'] = ['http://new-origin'] as any;
callback({ responseHeaders: responseHeaders }); callback({ responseHeaders });
}); });
const { headers } = await ajax(defaultURL); const { headers } = await ajax(defaultURL);
expect(headers).to.to.have.property('access-control-allow-origin', 'http://new-origin'); expect(headers).to.to.have.property('access-control-allow-origin', 'http://new-origin');
@ -457,7 +457,7 @@ describe('webRequest module', () => {
ses.webRequest.onHeadersReceived((details, callback) => { ses.webRequest.onHeadersReceived((details, callback) => {
const responseHeaders = details.responseHeaders!; const responseHeaders = details.responseHeaders!;
responseHeaders.Custom = ['Changed'] as any; responseHeaders.Custom = ['Changed'] as any;
callback({ responseHeaders: responseHeaders }); callback({ responseHeaders });
}); });
const { headers } = await ajax('cors://host'); const { headers } = await ajax('cors://host');
expect(headers).to.to.have.property('custom', 'Changed'); expect(headers).to.to.have.property('custom', 'Changed');
@ -486,7 +486,7 @@ describe('webRequest module', () => {
it('follows server redirect', async () => { it('follows server redirect', async () => {
ses.webRequest.onHeadersReceived((details, callback) => { ses.webRequest.onHeadersReceived((details, callback) => {
const responseHeaders = details.responseHeaders; const responseHeaders = details.responseHeaders;
callback({ responseHeaders: responseHeaders }); callback({ responseHeaders });
}); });
const { headers } = await ajax(defaultURL + 'serverRedirect'); const { headers } = await ajax(defaultURL + 'serverRedirect');
expect(headers).to.to.have.property('custom', 'Header'); expect(headers).to.to.have.property('custom', 'Header');
@ -496,7 +496,7 @@ describe('webRequest module', () => {
ses.webRequest.onHeadersReceived((details, callback) => { ses.webRequest.onHeadersReceived((details, callback) => {
const responseHeaders = details.responseHeaders; const responseHeaders = details.responseHeaders;
callback({ callback({
responseHeaders: responseHeaders, responseHeaders,
statusLine: 'HTTP/1.1 404 Not Found' statusLine: 'HTTP/1.1 404 Not Found'
}); });
}); });
@ -533,7 +533,7 @@ describe('webRequest module', () => {
const redirectURL = defaultURL + 'redirect'; const redirectURL = defaultURL + 'redirect';
ses.webRequest.onBeforeRequest((details, callback) => { ses.webRequest.onBeforeRequest((details, callback) => {
if (details.url === defaultURL) { if (details.url === defaultURL) {
callback({ redirectURL: redirectURL }); callback({ redirectURL });
} else { } else {
callback({}); callback({});
} }
@ -600,7 +600,7 @@ describe('webRequest module', () => {
}); });
}); });
server.on('upgrade', function upgrade (request, socket, head) { server.on('upgrade', function upgrade (request, socket, head) {
const pathname = require('node:url').parse(request.url).pathname; const pathname = new URL(request.url!, `http://${request.headers.host}`).pathname;
if (pathname === '/websocket') { if (pathname === '/websocket') {
reqHeaders[request.url!] = request.headers; reqHeaders[request.url!] = request.headers;
wss.handleUpgrade(request, socket as Socket, head, function done (ws) { wss.handleUpgrade(request, socket as Socket, head, function done (ws) {
@ -622,7 +622,7 @@ describe('webRequest module', () => {
callback({ requestHeaders: details.requestHeaders }); callback({ requestHeaders: details.requestHeaders });
}); });
ses.webRequest.onHeadersReceived((details, callback) => { ses.webRequest.onHeadersReceived((details, callback) => {
const pathname = require('node:url').parse(details.url).pathname; const pathname = new URL(details.url).pathname;
receivedHeaders[pathname] = details.responseHeaders; receivedHeaders[pathname] = details.responseHeaders;
callback({ cancel: false }); callback({ cancel: false });
}); });

Просмотреть файл

@ -709,7 +709,7 @@ describe('chromium features', () => {
it('should register for intercepted file scheme', (done) => { it('should register for intercepted file scheme', (done) => {
const customSession = session.fromPartition('intercept-file'); const customSession = session.fromPartition('intercept-file');
customSession.protocol.interceptBufferProtocol('file', (request, callback) => { customSession.protocol.interceptBufferProtocol('file', (request, callback) => {
let file = url.parse(request.url).pathname!; let file = new URL(request.url).pathname!;
if (file[0] === '/' && process.platform === 'win32') file = file.slice(1); if (file[0] === '/' && process.platform === 'win32') file = file.slice(1);
const content = fs.readFileSync(path.normalize(file)); const content = fs.readFileSync(path.normalize(file));
@ -750,7 +750,7 @@ describe('chromium features', () => {
it('should register for custom scheme', (done) => { it('should register for custom scheme', (done) => {
const customSession = session.fromPartition('custom-scheme'); const customSession = session.fromPartition('custom-scheme');
customSession.protocol.registerFileProtocol(serviceWorkerScheme, (request, callback) => { customSession.protocol.registerFileProtocol(serviceWorkerScheme, (request, callback) => {
let file = url.parse(request.url).pathname!; let file = new URL(request.url).pathname!;
if (file[0] === '/' && process.platform === 'win32') file = file.slice(1); if (file[0] === '/' && process.platform === 'win32') file = file.slice(1);
callback({ path: path.normalize(file) } as any); callback({ path: path.normalize(file) } as any);
@ -2004,7 +2004,7 @@ describe('chromium features', () => {
let contents: WebContents; let contents: WebContents;
before(() => { before(() => {
protocol.registerFileProtocol(protocolName, (request, callback) => { protocol.registerFileProtocol(protocolName, (request, callback) => {
const parsedUrl = url.parse(request.url); const parsedUrl = new URL(request.url);
let filename; let filename;
switch (parsedUrl.pathname) { switch (parsedUrl.pathname) {
case '/localStorage' : filename = 'local_storage.html'; break; case '/localStorage' : filename = 'local_storage.html'; break;
@ -2459,7 +2459,7 @@ describe('chromium features', () => {
it('has user agent', async () => { it('has user agent', async () => {
const server = http.createServer(); const server = http.createServer();
const { port } = await listen(server); const { port } = await listen(server);
const wss = new ws.Server({ server: server }); const wss = new ws.Server({ server });
const finished = new Promise<string | undefined>((resolve, reject) => { const finished = new Promise<string | undefined>((resolve, reject) => {
wss.on('error', reject); wss.on('error', reject);
wss.on('connection', (ws, upgradeReq) => { wss.on('connection', (ws, upgradeReq) => {
@ -3444,6 +3444,7 @@ describe('navigator.hid', () => {
haveDevices = true; haveDevices = true;
return true; return true;
} }
return false;
}); });
if (foundDevice) { if (foundDevice) {
callback(foundDevice.deviceId); callback(foundDevice.deviceId);
@ -3491,6 +3492,7 @@ describe('navigator.hid', () => {
return true; return true;
} }
} }
return false;
}); });
} }
callback(); callback();
@ -3670,6 +3672,7 @@ describe('navigator.usb', () => {
haveDevices = true; haveDevices = true;
return true; return true;
} }
return false;
}); });
if (foundDevice) { if (foundDevice) {
callback(foundDevice.deviceId); callback(foundDevice.deviceId);

Просмотреть файл

@ -597,7 +597,7 @@ describe('chrome extensions', () => {
const addExtension = (name: string) => session.defaultSession.loadExtension(path.resolve(extensionPath, name)); const addExtension = (name: string) => session.defaultSession.loadExtension(path.resolve(extensionPath, name));
const removeAllExtensions = () => { const removeAllExtensions = () => {
Object.keys(session.defaultSession.getAllExtensions()).map(extName => { Object.keys(session.defaultSession.getAllExtensions()).forEach(extName => {
session.defaultSession.removeExtension(extName); session.defaultSession.removeExtension(extName);
}); });
}; };

2
spec/fixtures/api/fork-with-node-options.js поставляемый
Просмотреть файл

@ -19,7 +19,7 @@ try {
['--require', path.join(fixtures, 'module', 'noop.js')], ['--require', path.join(fixtures, 'module', 'noop.js')],
{ env, stdio: 'inherit' }); { env, stdio: 'inherit' });
process.exit(0); process.exit(0);
} catch (error) { } catch {
console.log('NODE_OPTIONS passed to child'); console.log('NODE_OPTIONS passed to child');
process.exit(1); process.exit(1);
} }

3
spec/fixtures/api/singleton-data/main.js поставляемый
Просмотреть файл

@ -23,7 +23,8 @@ if (app.commandLine.hasSwitch('data-content')) {
} }
const gotTheLock = sendAdditionalData const gotTheLock = sendAdditionalData
? app.requestSingleInstanceLock(obj) : app.requestSingleInstanceLock(); ? app.requestSingleInstanceLock(obj)
: app.requestSingleInstanceLock();
app.on('second-instance', (event, args, workingDirectory, data) => { app.on('second-instance', (event, args, workingDirectory, data) => {
setImmediate(() => { setImmediate(() => {

4
spec/fixtures/api/utility-process/net.js поставляемый
Просмотреть файл

@ -19,9 +19,9 @@ if (configurableArg === '--omit-credentials') {
if (request) { if (request) {
if (configurableArg === '--use-net-login-event') { if (configurableArg === '--use-net-login-event') {
request.on('login', (authInfo, cb) => { request.on('login', (authInfo, provideCredentials) => {
process.parentPort.postMessage(authInfo); process.parentPort.postMessage(authInfo);
cb('user', 'pass'); provideCredentials('user', 'pass');
}); });
} }
request.on('response', (response) => { request.on('response', (response) => {

Просмотреть файл

@ -1,13 +1,14 @@
const path = require('node:path');
const testLoadLibrary = require('./build/Release/test_module'); const testLoadLibrary = require('./build/Release/test_module');
const lib = (() => { const lib = (() => {
switch (process.platform) { switch (process.platform) {
case 'linux': case 'linux':
return `${__dirname}/build/Release/foo.so`; return path.resolve(__dirname, 'build/Release/foo.so');
case 'darwin': case 'darwin':
return `${__dirname}/build/Release/foo.dylib`; return path.resolve(__dirname, 'build/Release/foo.dylib');
case 'win32': case 'win32':
return `${__dirname}/build/Release/libfoo.dll`; return path.resolve(__dirname, 'build/Release/libfoo.dll');
default: default:
throw new Error('unsupported os'); throw new Error('unsupported os');
} }

Просмотреть файл

@ -259,9 +259,9 @@ function checkFrames (frames) {
duration += frames[i].duration; duration += frames[i].duration;
} }
return { return {
duration: duration, duration,
width: width, width,
height: height height
}; };
} }
@ -399,7 +399,7 @@ function parseWebP (riff) {
horizontalScale, horizontalScale,
verticalScale, verticalScale,
data: VP8, data: VP8,
riff: riff riff
}; };
} }

Просмотреть файл

@ -7,6 +7,18 @@
"node-gyp-install": "node-gyp install" "node-gyp-install": "node-gyp install"
}, },
"devDependencies": { "devDependencies": {
"@types/basic-auth": "^1.1.8",
"@types/busboy": "^1.5.4",
"@types/chai": "^4.3.19",
"@types/chai-as-promised": "^7.1.3",
"@types/dirty-chai": "^2.0.5",
"@types/express": "^4.17.13",
"@types/mocha": "^7.0.2",
"@types/send": "^0.14.5",
"@types/split": "^1.0.5",
"@types/uuid": "^3.4.6",
"@types/w3c-web-serial": "^1.0.7",
"express": "^4.20.0",
"@electron-ci/echo": "file:./fixtures/native-addon/echo", "@electron-ci/echo": "file:./fixtures/native-addon/echo",
"@electron-ci/is-valid-window": "file:./is-valid-window", "@electron-ci/is-valid-window": "file:./is-valid-window",
"@electron-ci/uv-dlopen": "file:./fixtures/native-addon/uv-dlopen/", "@electron-ci/uv-dlopen": "file:./fixtures/native-addon/uv-dlopen/",
@ -34,7 +46,6 @@
"send": "^0.19.0", "send": "^0.19.0",
"sinon": "^9.0.1", "sinon": "^9.0.1",
"split": "^1.0.1", "split": "^1.0.1",
"temp": "^0.9.0",
"uuid": "^3.3.3", "uuid": "^3.3.3",
"winreg": "1.2.4", "winreg": "1.2.4",
"ws": "^7.5.10", "ws": "^7.5.10",

Просмотреть файл

@ -2,7 +2,6 @@ import { expect } from 'chai';
import * as http from 'node:http'; import * as http from 'node:http';
import * as fs from 'node:fs/promises'; import * as fs from 'node:fs/promises';
import * as path from 'node:path'; import * as path from 'node:path';
import * as url from 'node:url';
import { BrowserWindow, WebPreferences } from 'electron/main'; import { BrowserWindow, WebPreferences } from 'electron/main';
@ -28,7 +27,7 @@ describe('security warnings', () => {
before(async () => { before(async () => {
// Create HTTP Server // Create HTTP Server
server = http.createServer(async (request, response) => { server = http.createServer(async (request, response) => {
const uri = url.parse(request.url!).pathname!; const uri = new URL(request.url!, `http://${request.headers.host}`).pathname!;
let filename = path.join(__dirname, 'fixtures', 'pages', uri); let filename = path.join(__dirname, 'fixtures', 'pages', uri);
try { try {

Просмотреть файл

@ -1,3 +1,5 @@
/* eslint-disable */
import { import {
app, app,
autoUpdater, autoUpdater,

Просмотреть файл

@ -1,3 +1,4 @@
/* eslint-disable */
import { ipcRenderer, webFrame } from 'electron/renderer'; import { ipcRenderer, webFrame } from 'electron/renderer';
import { clipboard, crashReporter, shell } from 'electron/common'; import { clipboard, crashReporter, shell } from 'electron/common';

Просмотреть файл

@ -326,8 +326,8 @@ describe('<webview> tag', function () {
before(() => { before(() => {
const protocol = webviewSession.protocol; const protocol = webviewSession.protocol;
protocol.registerStringProtocol(zoomScheme, (request, callback) => { protocol.registerStringProtocol(zoomScheme, (request, respond) => {
callback('hello'); respond('hello');
}); });
}); });
@ -838,13 +838,13 @@ describe('<webview> tag', function () {
function setUpRequestHandler (webContentsId: number, requestedPermission: string) { function setUpRequestHandler (webContentsId: number, requestedPermission: string) {
return new Promise<void>((resolve, reject) => { return new Promise<void>((resolve, reject) => {
session.fromPartition(partition).setPermissionRequestHandler(function (webContents, permission, callback) { session.fromPartition(partition).setPermissionRequestHandler(function (webContents, permission, allow) {
if (webContents.id === webContentsId) { if (webContents.id === webContentsId) {
// All midi permission requests are blocked or allowed as midiSysex permissions // All midi permission requests are blocked or allowed as midiSysex permissions
// since https://chromium-review.googlesource.com/c/chromium/src/+/5154368 // since https://chromium-review.googlesource.com/c/chromium/src/+/5154368
if (permission === 'midiSysex') { if (permission === 'midiSysex') {
const allowed = requestedPermission === 'midi' || requestedPermission === 'midiSysex'; const allowed = requestedPermission === 'midi' || requestedPermission === 'midiSysex';
return callback(!allowed); return allow(!allowed);
} }
try { try {
@ -852,7 +852,7 @@ describe('<webview> tag', function () {
} catch (e) { } catch (e) {
return reject(e); return reject(e);
} }
callback(false); allow(false);
resolve(); resolve();
} }
}); });

Просмотреть файл

@ -193,6 +193,28 @@
dependencies: dependencies:
defer-to-connect "^2.0.0" defer-to-connect "^2.0.0"
"@types/basic-auth@^1.1.8":
version "1.1.8"
resolved "https://registry.yarnpkg.com/@types/basic-auth/-/basic-auth-1.1.8.tgz#ea235203c89e233faae66b99e03665747576e9e9"
integrity sha512-dKcUeixGuZn8pBjcUrf1N7x5K6lWuKuwHHitM2IZ4vwZUDWEhhNtwCWiba8jTA9zn0GQQ+fTFkWpKx8pOU/enw==
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"
integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==
dependencies:
"@types/connect" "*"
"@types/node" "*"
"@types/busboy@^1.5.4":
version "1.5.4"
resolved "https://registry.yarnpkg.com/@types/busboy/-/busboy-1.5.4.tgz#0038c31102ca90f2a7f0d8bc27ee5ebf1088e230"
integrity sha512-kG7WrUuAKK0NoyxfQHsVE6j1m01s6kMma64E+OZenQABMQyTJop1DumUWcLwAQ2JzpefU7PDYoRDKl8uZosFjw==
dependencies:
"@types/node" "*"
"@types/cacheable-request@^6.0.1": "@types/cacheable-request@^6.0.1":
version "6.0.3" version "6.0.3"
resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183"
@ -203,11 +225,63 @@
"@types/node" "*" "@types/node" "*"
"@types/responselike" "^1.0.0" "@types/responselike" "^1.0.0"
"@types/chai-as-promised@^7", "@types/chai-as-promised@^7.1.3":
version "7.1.8"
resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz#f2b3d82d53c59626b5d6bbc087667ccb4b677fe9"
integrity sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==
dependencies:
"@types/chai" "*"
"@types/chai@*", "@types/chai@^4.3.19":
version "4.3.19"
resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.19.tgz#14519f437361d41e84102ed3fbc922ddace3e228"
integrity sha512-2hHHvQBVE2FiSK4eN0Br6snX9MtolHaTo/batnLjlGRhoQzlCL61iVpxoqO7SfFyOw+P/pwv+0zNHzKoGWz9Cw==
"@types/connect@*":
version "3.4.38"
resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858"
integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==
dependencies:
"@types/node" "*"
"@types/dirty-chai@^2.0.5":
version "2.0.5"
resolved "https://registry.yarnpkg.com/@types/dirty-chai/-/dirty-chai-2.0.5.tgz#f743c5735ba0453e2ec8036610356b1aee5f522b"
integrity sha512-7plNsOhNtFn/4eD47et+3CRFNX4tgUrbJRutGhBFqQrWWIyRAV1XP7BYZY0YTOr49t/ZwM/lOW6sxnEXqwVdKg==
dependencies:
"@types/chai" "*"
"@types/chai-as-promised" "^7"
"@types/express-serve-static-core@^4.17.33":
version "4.19.5"
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz#218064e321126fcf9048d1ca25dd2465da55d9c6"
integrity sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==
dependencies:
"@types/node" "*"
"@types/qs" "*"
"@types/range-parser" "*"
"@types/send" "*"
"@types/express@^4.17.13":
version "4.17.21"
resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d"
integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==
dependencies:
"@types/body-parser" "*"
"@types/express-serve-static-core" "^4.17.33"
"@types/qs" "*"
"@types/serve-static" "*"
"@types/http-cache-semantics@*": "@types/http-cache-semantics@*":
version "4.0.4" version "4.0.4"
resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4"
integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==
"@types/http-errors@*":
version "2.0.4"
resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f"
integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==
"@types/keyv@^3.1.4": "@types/keyv@^3.1.4":
version "3.1.4" version "3.1.4"
resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6"
@ -215,6 +289,16 @@
dependencies: dependencies:
"@types/node" "*" "@types/node" "*"
"@types/mime@^1":
version "1.3.5"
resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690"
integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==
"@types/mocha@^7.0.2":
version "7.0.2"
resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-7.0.2.tgz#b17f16cf933597e10d6d78eae3251e692ce8b0ce"
integrity sha512-ZvO2tAcjmMi8V/5Z3JsyofMe3hasRcaw88cto5etSVMwVQfeivGAlEYmaQgceUSVYFofVjT+ioHsATjdWcFt1w==
"@types/node@*": "@types/node@*":
version "20.12.7" version "20.12.7"
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384"
@ -222,6 +306,16 @@
dependencies: dependencies:
undici-types "~5.26.4" undici-types "~5.26.4"
"@types/qs@*":
version "6.9.16"
resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.16.tgz#52bba125a07c0482d26747d5d4947a64daf8f794"
integrity sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==
"@types/range-parser@*":
version "1.2.7"
resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb"
integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==
"@types/responselike@^1.0.0": "@types/responselike@^1.0.0":
version "1.0.3" version "1.0.3"
resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50"
@ -229,6 +323,31 @@
dependencies: dependencies:
"@types/node" "*" "@types/node" "*"
"@types/send@*":
version "0.17.4"
resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a"
integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==
dependencies:
"@types/mime" "^1"
"@types/node" "*"
"@types/send@^0.14.5":
version "0.14.7"
resolved "https://registry.yarnpkg.com/@types/send/-/send-0.14.7.tgz#ee6224edd5a593d7f553235f350569accb56a4af"
integrity sha512-WCUMbzWW1sTEZX31cRMcBxflUXX/JmAYejhjxXtrLGn+vd/yyFjHh/F9FIigAEjE2LauhfH94BT7NJj9Ru2Wlg==
dependencies:
"@types/mime" "^1"
"@types/node" "*"
"@types/serve-static@*":
version "1.15.7"
resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714"
integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==
dependencies:
"@types/http-errors" "*"
"@types/node" "*"
"@types/send" "*"
"@types/sinon@^9.0.4": "@types/sinon@^9.0.4":
version "9.0.11" version "9.0.11"
resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-9.0.11.tgz#7af202dda5253a847b511c929d8b6dda170562eb" resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-9.0.11.tgz#7af202dda5253a847b511c929d8b6dda170562eb"
@ -241,6 +360,31 @@
resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz#5fd3592ff10c1e9695d377020c033116cc2889f2" resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz#5fd3592ff10c1e9695d377020c033116cc2889f2"
integrity sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ== integrity sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==
"@types/split@^1.0.5":
version "1.0.5"
resolved "https://registry.yarnpkg.com/@types/split/-/split-1.0.5.tgz#4bd47164b81d6381db37978d5344b374b6825f6c"
integrity sha512-gMiDr4vA6YofTpAkPQtP+5pvStIf3CMYphf32YAG/3RwogNL8ii1CQKDc+sxN62KuxPoRaJXcf2zDCDkEBH4FA==
dependencies:
"@types/node" "*"
"@types/through" "*"
"@types/through@*":
version "0.0.33"
resolved "https://registry.yarnpkg.com/@types/through/-/through-0.0.33.tgz#14ebf599320e1c7851e7d598149af183c6b9ea56"
integrity sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==
dependencies:
"@types/node" "*"
"@types/uuid@^3.4.6":
version "3.4.13"
resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-3.4.13.tgz#fe890e517fb840620be284ee213e81d702b1f76b"
integrity sha512-pAeZeUbLE4Z9Vi9wsWV2bYPTweEHeJJy0G4pEjOA/FSvy1Ad5U5Km8iDV6TKre1mjBiVNfAdVHKruP8bAh4Q5A==
"@types/w3c-web-serial@^1.0.7":
version "1.0.7"
resolved "https://registry.yarnpkg.com/@types/w3c-web-serial/-/w3c-web-serial-1.0.7.tgz#44416509af271e5196833ff5e1337c7c256991c6"
integrity sha512-jzcwm//EZ0Z306L1/O1GXC3GthRd//9eaNB4/Yagm98UjEQViTzDS8bYvL+y+rTk1r9OFt9Yhp5pprUQFzSiiQ==
"@types/ws@^7.2.0": "@types/ws@^7.2.0":
version "7.4.7" version "7.4.7"
resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702"
@ -265,13 +409,21 @@ abbrev@1:
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
"abstract-socket@github:deepak1556/node-abstractsocket#928cc591decd12aff7dad96449da8afc29832c19", "abstract-socket@github:saghul/node-abstractsocket#35b1b1491fabc04899bde5be3428abf5cf9cd528": abstract-socket@^2.0.0, "abstract-socket@github:deepak1556/node-abstractsocket#928cc591decd12aff7dad96449da8afc29832c19":
version "2.1.1" version "2.1.1"
resolved "https://codeload.github.com/deepak1556/node-abstractsocket/tar.gz/928cc591decd12aff7dad96449da8afc29832c19" resolved "https://codeload.github.com/deepak1556/node-abstractsocket/tar.gz/928cc591decd12aff7dad96449da8afc29832c19"
dependencies: dependencies:
bindings "^1.2.1" bindings "^1.2.1"
node-addon-api "8.0.0" node-addon-api "8.0.0"
accepts@~1.3.8:
version "1.3.8"
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
dependencies:
mime-types "~2.1.34"
negotiator "0.6.3"
agent-base@6: agent-base@6:
version "6.0.2" version "6.0.2"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
@ -327,6 +479,11 @@ argparse@^2.0.1:
resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
array-flatten@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==
assertion-error@^1.1.0: assertion-error@^1.1.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
@ -376,6 +533,24 @@ bluebird@^3.1.1:
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
body-parser@1.20.3:
version "1.20.3"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6"
integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==
dependencies:
bytes "3.1.2"
content-type "~1.0.5"
debug "2.6.9"
depd "2.0.0"
destroy "1.2.0"
http-errors "2.0.0"
iconv-lite "0.4.24"
on-finished "2.4.1"
qs "6.13.0"
raw-body "2.5.2"
type-is "~1.6.18"
unpipe "1.0.0"
boolean@^3.0.1: boolean@^3.0.1:
version "3.2.0" version "3.2.0"
resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b" resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b"
@ -420,6 +595,11 @@ busboy@^1.6.0:
dependencies: dependencies:
streamsearch "^1.1.0" streamsearch "^1.1.0"
bytes@3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
cacheable-lookup@^5.0.3: cacheable-lookup@^5.0.3:
version "5.0.4" version "5.0.4"
resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005"
@ -438,6 +618,17 @@ cacheable-request@^7.0.2:
normalize-url "^6.0.1" normalize-url "^6.0.1"
responselike "^2.0.0" responselike "^2.0.0"
call-bind@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9"
integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==
dependencies:
es-define-property "^1.0.0"
es-errors "^1.3.0"
function-bind "^1.1.2"
get-intrinsic "^1.2.4"
set-function-length "^1.2.1"
camelcase@^6.0.0: camelcase@^6.0.0:
version "6.3.0" version "6.3.0"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
@ -575,6 +766,28 @@ console-control-strings@^1.0.0, console-control-strings@^1.1.0:
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==
content-disposition@0.5.4:
version "0.5.4"
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
dependencies:
safe-buffer "5.2.1"
content-type@~1.0.4, content-type@~1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918"
integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
cookie-signature@1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==
cookie@0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051"
integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==
cross-dirname@^0.1.0: cross-dirname@^0.1.0:
version "0.1.0" version "0.1.0"
resolved "https://registry.yarnpkg.com/cross-dirname/-/cross-dirname-0.1.0.tgz#b899599f30a5389f59e78c150e19f957ad16a37c" resolved "https://registry.yarnpkg.com/cross-dirname/-/cross-dirname-0.1.0.tgz#b899599f30a5389f59e78c150e19f957ad16a37c"
@ -606,7 +819,7 @@ crypt@0.0.2:
safe-buffer "^5.1.1" safe-buffer "^5.1.1"
xml2js "^0.4.17" xml2js "^0.4.17"
optionalDependencies: optionalDependencies:
abstract-socket "github:saghul/node-abstractsocket#35b1b1491fabc04899bde5be3428abf5cf9cd528" abstract-socket "^2.0.0"
debug@2.6.9, debug@^2.2.0: debug@2.6.9, debug@^2.2.0:
version "2.6.9" version "2.6.9"
@ -660,7 +873,7 @@ defer-to-connect@^2.0.0:
resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587"
integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==
define-data-property@^1.0.1: define-data-property@^1.0.1, define-data-property@^1.1.4:
version "1.1.4" version "1.1.4"
resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e"
integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==
@ -746,6 +959,11 @@ encodeurl@~1.0.2:
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
encodeurl@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58"
integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==
end-of-stream@^1.1.0: end-of-stream@^1.1.0:
version "1.4.4" version "1.4.4"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
@ -825,6 +1043,43 @@ event-stream@^4.0.0:
stream-combiner "^0.2.2" stream-combiner "^0.2.2"
through "^2.3.8" through "^2.3.8"
express@^4.20.0:
version "4.21.0"
resolved "https://registry.yarnpkg.com/express/-/express-4.21.0.tgz#d57cb706d49623d4ac27833f1cbc466b668eb915"
integrity sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==
dependencies:
accepts "~1.3.8"
array-flatten "1.1.1"
body-parser "1.20.3"
content-disposition "0.5.4"
content-type "~1.0.4"
cookie "0.6.0"
cookie-signature "1.0.6"
debug "2.6.9"
depd "2.0.0"
encodeurl "~2.0.0"
escape-html "~1.0.3"
etag "~1.8.1"
finalhandler "1.3.1"
fresh "0.5.2"
http-errors "2.0.0"
merge-descriptors "1.0.3"
methods "~1.1.2"
on-finished "2.4.1"
parseurl "~1.3.3"
path-to-regexp "0.1.10"
proxy-addr "~2.0.7"
qs "6.13.0"
range-parser "~1.2.1"
safe-buffer "5.2.1"
send "0.19.0"
serve-static "1.16.2"
setprototypeof "1.2.0"
statuses "2.0.1"
type-is "~1.6.18"
utils-merge "1.0.1"
vary "~1.1.2"
extract-zip@^2.0.0: extract-zip@^2.0.0:
version "2.0.1" version "2.0.1"
resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
@ -869,6 +1124,19 @@ fill-range@^7.1.1:
dependencies: dependencies:
to-regex-range "^5.0.1" to-regex-range "^5.0.1"
finalhandler@1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019"
integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==
dependencies:
debug "2.6.9"
encodeurl "~2.0.0"
escape-html "~1.0.3"
on-finished "2.4.1"
parseurl "~1.3.3"
statuses "2.0.1"
unpipe "~1.0.0"
find-up@5.0.0: find-up@5.0.0:
version "5.0.0" version "5.0.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
@ -897,6 +1165,11 @@ flora-colossus@^2.0.0:
debug "^4.3.4" debug "^4.3.4"
fs-extra "^10.1.0" fs-extra "^10.1.0"
forwarded@0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
fresh@0.5.2: fresh@0.5.2:
version "0.5.2" version "0.5.2"
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
@ -1112,7 +1385,7 @@ has-flag@^4.0.0:
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
has-property-descriptors@^1.0.0: has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854"
integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==
@ -1188,6 +1461,13 @@ https-proxy-agent@^5.0.0:
agent-base "6" agent-base "6"
debug "4" debug "4"
iconv-lite@0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
dependencies:
safer-buffer ">= 2.1.2 < 3"
inflight@^1.0.4: inflight@^1.0.4:
version "1.0.6" version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
@ -1201,6 +1481,11 @@ inherits@2, inherits@2.0.4, inherits@^2.0.3:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
ipaddr.js@1.9.1:
version "1.9.1"
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
is-arrayish@^0.2.1: is-arrayish@^0.2.1:
version "0.2.1" version "0.2.1"
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
@ -1410,6 +1695,33 @@ md5@^2.1.0:
crypt "0.0.2" crypt "0.0.2"
is-buffer "~1.1.6" is-buffer "~1.1.6"
media-typer@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
merge-descriptors@1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5"
integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==
methods@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==
mime-db@1.52.0:
version "1.52.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
mime-types@~2.1.24, mime-types@~2.1.34:
version "2.1.35"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
dependencies:
mime-db "1.52.0"
mime@1.6.0: mime@1.6.0:
version "1.6.0" version "1.6.0"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
@ -1563,6 +1875,11 @@ ms@2.1.3:
nan@2.x, nan@^2.17.0, "nan@file:../../third_party/nan": nan@2.x, nan@^2.17.0, "nan@file:../../third_party/nan":
version "2.18.0" version "2.18.0"
negotiator@0.6.3:
version "0.6.3"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
nise@^4.0.4: nise@^4.0.4:
version "4.1.0" version "4.1.0"
resolved "https://registry.yarnpkg.com/nise/-/nise-4.1.0.tgz#8fb75a26e90b99202fa1e63f448f58efbcdedaf6" resolved "https://registry.yarnpkg.com/nise/-/nise-4.1.0.tgz#8fb75a26e90b99202fa1e63f448f58efbcdedaf6"
@ -1628,6 +1945,11 @@ object-assign@^4.1.1:
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
object-inspect@^1.13.1:
version "1.13.2"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff"
integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==
object-keys@^1.1.1: object-keys@^1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
@ -1707,6 +2029,11 @@ parse-json@^2.2.0:
dependencies: dependencies:
error-ex "^1.2.0" error-ex "^1.2.0"
parseurl@~1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
path-exists@^3.0.0: path-exists@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
@ -1732,6 +2059,11 @@ path-parse@^1.0.7:
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
path-to-regexp@0.1.10:
version "0.1.10"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.10.tgz#67e9108c5c0551b9e5326064387de4763c4d5f8b"
integrity sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==
path-to-regexp@^1.7.0: path-to-regexp@^1.7.0:
version "1.9.0" version "1.9.0"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.9.0.tgz#5dc0753acbf8521ca2e0f137b4578b917b10cf24" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.9.0.tgz#5dc0753acbf8521ca2e0f137b4578b917b10cf24"
@ -1820,6 +2152,14 @@ promise-retry@^2.0.1:
err-code "^2.0.2" err-code "^2.0.2"
retry "^0.12.0" retry "^0.12.0"
proxy-addr@~2.0.7:
version "2.0.7"
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
dependencies:
forwarded "0.2.0"
ipaddr.js "1.9.1"
ps-list@^7.0.0: ps-list@^7.0.0:
version "7.2.0" version "7.2.0"
resolved "https://registry.yarnpkg.com/ps-list/-/ps-list-7.2.0.tgz#3d110e1de8249a4b178c9b1cf2a215d1e4e42fc0" resolved "https://registry.yarnpkg.com/ps-list/-/ps-list-7.2.0.tgz#3d110e1de8249a4b178c9b1cf2a215d1e4e42fc0"
@ -1838,6 +2178,13 @@ q@^1.5.1:
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==
qs@6.13.0:
version "6.13.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906"
integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==
dependencies:
side-channel "^1.0.6"
quick-lru@^5.1.1: quick-lru@^5.1.1:
version "5.1.1" version "5.1.1"
resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
@ -1855,6 +2202,16 @@ range-parser@~1.2.1:
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
raw-body@2.5.2:
version "2.5.2"
resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a"
integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==
dependencies:
bytes "3.1.2"
http-errors "2.0.0"
iconv-lite "0.4.24"
unpipe "1.0.0"
read-pkg-up@^2.0.0: read-pkg-up@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
@ -1933,13 +2290,6 @@ rimraf@^3.0.2:
dependencies: dependencies:
glob "^7.1.3" glob "^7.1.3"
rimraf@~2.6.2:
version "2.6.3"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
dependencies:
glob "^7.1.3"
roarr@^2.15.3: roarr@^2.15.3:
version "2.15.4" version "2.15.4"
resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd" resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd"
@ -1957,11 +2307,16 @@ safe-buffer@5.1.2:
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.2.0: safe-buffer@5.2.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.2.0:
version "5.2.1" version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
"safer-buffer@>= 2.1.2 < 3":
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
sax@>=0.6.0: sax@>=0.6.0:
version "1.3.0" version "1.3.0"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0" resolved "https://registry.yarnpkg.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0"
@ -1992,7 +2347,7 @@ semver@^7.3.5:
resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
send@^0.19.0: send@0.19.0, send@^0.19.0:
version "0.19.0" version "0.19.0"
resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8"
integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==
@ -2025,11 +2380,33 @@ serialize-javascript@6.0.0:
dependencies: dependencies:
randombytes "^2.1.0" randombytes "^2.1.0"
serve-static@1.16.2:
version "1.16.2"
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296"
integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==
dependencies:
encodeurl "~2.0.0"
escape-html "~1.0.3"
parseurl "~1.3.3"
send "0.19.0"
set-blocking@^2.0.0: set-blocking@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
set-function-length@^1.2.1:
version "1.2.2"
resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449"
integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==
dependencies:
define-data-property "^1.1.4"
es-errors "^1.3.0"
function-bind "^1.1.2"
get-intrinsic "^1.2.4"
gopd "^1.0.1"
has-property-descriptors "^1.0.2"
setprototypeof@1.2.0: setprototypeof@1.2.0:
version "1.2.0" version "1.2.0"
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
@ -2047,6 +2424,16 @@ shebang-regex@^3.0.0:
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
side-channel@^1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2"
integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==
dependencies:
call-bind "^1.0.7"
es-errors "^1.3.0"
get-intrinsic "^1.2.4"
object-inspect "^1.13.1"
signal-exit@^3.0.0: signal-exit@^3.0.0:
version "3.0.7" version "3.0.7"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
@ -2219,14 +2606,6 @@ tar@^6.1.11:
mkdirp "^1.0.3" mkdirp "^1.0.3"
yallist "^4.0.0" yallist "^4.0.0"
temp@^0.9.0:
version "0.9.4"
resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.4.tgz#cd20a8580cb63635d0e4e9d4bd989d44286e7620"
integrity sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==
dependencies:
mkdirp "^0.5.1"
rimraf "~2.6.2"
through@2, through@^2.3.8, through@~2.3, through@~2.3.4: through@2, through@^2.3.8, through@~2.3, through@~2.3.4:
version "2.3.8" version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
@ -2266,6 +2645,14 @@ type-fest@^0.13.1:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"
integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==
type-is@~1.6.18:
version "1.6.18"
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
dependencies:
media-typer "0.3.0"
mime-types "~2.1.24"
undici-types@~5.26.4: undici-types@~5.26.4:
version "5.26.5" version "5.26.5"
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
@ -2281,11 +2668,21 @@ universalify@^2.0.0:
resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d"
integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==
unpipe@1.0.0, unpipe@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
util-deprecate@^1.0.1: util-deprecate@^1.0.1:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
utils-merge@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
uuid@^3.3.3: uuid@^3.3.3:
version "3.4.0" version "3.4.0"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
@ -2299,6 +2696,11 @@ validate-npm-package-license@^3.0.1:
spdx-correct "^3.0.0" spdx-correct "^3.0.0"
spdx-expression-parse "^3.0.0" spdx-expression-parse "^3.0.0"
vary@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
webidl-conversions@^3.0.0: webidl-conversions@^3.0.0:
version "3.0.1" version "3.0.1"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"

Просмотреть файл

@ -14,7 +14,7 @@
"allowJs": true, "allowJs": true,
"noUnusedLocals": true, "noUnusedLocals": true,
"outDir": "ts-gen", "outDir": "ts-gen",
"typeRoots" : ["./node_modules/@types"], "typeRoots" : ["./node_modules/@types", "./spec/node_modules/@types"],
"paths": { "paths": {
"@electron/internal/*": ["lib/*"] "@electron/internal/*": ["lib/*"]
} }

22
typings/internal-electron.d.ts поставляемый
Просмотреть файл

@ -203,6 +203,28 @@ declare namespace Electron {
registerProtocol(scheme: string, handler: any): boolean; registerProtocol(scheme: string, handler: any): boolean;
interceptProtocol(scheme: string, handler: any): boolean; interceptProtocol(scheme: string, handler: any): boolean;
} }
interface WebContents {
on(event: '-new-window', listener: (event: Electron.Event, url: string, frameName: string, disposition: Electron.HandlerDetails['disposition'],
rawFeatures: string, referrer: Electron.Referrer, postData: LoadURLOptions['postData']) => void): this;
on(event: '-add-new-contents', listener: (event: Event, webContents: Electron.WebContents, disposition: string,
_userGesture: boolean, _left: number, _top: number, _width: number, _height: number, url: string, frameName: string,
referrer: Electron.Referrer, rawFeatures: string, postData: LoadURLOptions['postData']) => void): this;
on(event: '-will-add-new-contents', listener: (event: Electron.Event, url: string, frameName: string, rawFeatures: string, disposition: Electron.HandlerDetails['disposition'], referrer: Electron.Referrer, postData: LoadURLOptions['postData']) => void): this;
on(event: '-ipc-message', listener: (event: Electron.IpcMainEvent, internal: boolean, channel: string, args: any[]) => void): this;
on(event: '-ipc-message-sync', listener: (event: Electron.IpcMainEvent, internal: boolean, channel: string, args: any[]) => void): this;
on(event: '-ipc-invoke', listener: (event: Electron.IpcMainInvokeEvent, internal: boolean, channel: string, args: any[]) => void): this;
on(event: '-ipc-ports', listener: (event: Electron.IpcMainEvent, internal: boolean, channel: string, message: any, ports: any[]) => void): this;
on(event: '-run-dialog', listener: (info: {frame: WebFrameMain, dialogType: 'prompt' | 'confirm' | 'alert', messageText: string, defaultPromptText: string}, callback: (success: boolean, user_input: string) => void) => void): this;
on(event: '-cancel-dialogs', listener: () => void): this;
on(event: 'ready-to-show', listener: () => void): this;
on(event: '-before-unload-fired', listener: (event: Electron.Event, proceed: boolean) => void): this;
on(event: '-window-visibility-change', listener: (visibilityState: 'hidden' | 'visible') => void): this;
removeListener(event: '-window-visibility-change', listener: (visibilityState: 'hidden' | 'visible') => void): this;
once(event: 'destroyed', listener: (event: Electron.Event) => void): this;
}
} }
declare namespace ElectronInternal { declare namespace ElectronInternal {

2020
yarn.lock

Разница между файлами не показана из-за своего большого размера Загрузить разницу