├── .gitignore ├── LICENSE ├── README.md ├── local.html ├── local.js ├── local_preload.js ├── main.mjs ├── package-lock.json ├── package.json ├── tabbar.html ├── tabbar.js └── tabbar_preload.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Mamezou Co., LTD. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # electron-example-browserview 2 | 3 | Example of Electron app that registers and switches between multiple WebContentsViews. 4 | 5 | > [!Note] 6 | > This repository was originally meant to show examples using BrowserView, but since BrowserView has been deprecated in favor of WebContentsView as its replacement, it has now become a repository that shows examples using WebContentsView (even though it still has BrowserView in the repository name). 7 | 8 | ## To Use 9 | 10 | You need to install Git and Node.js as prerequisites. 11 | 12 | ```bash 13 | # Clone this repository 14 | git clone https://github.com/mamezou-tech/electron-example-browserview 15 | # Go into the repository 16 | cd electron-example-browserview 17 | # Install dependencies 18 | npm install 19 | # Run the app 20 | npm start 21 | ``` 22 | -------------------------------------------------------------------------------- /local.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 |
11 |

Local html page

12 | 15 |
16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /local.js: -------------------------------------------------------------------------------- 1 | onload = () => { 2 | document.querySelector('#button1').addEventListener('click', e => { 3 | console.log("local js event"); 4 | console.log(window.localApi.switchPage()); 5 | }); 6 | } 7 | -------------------------------------------------------------------------------- /local_preload.js: -------------------------------------------------------------------------------- 1 | const { contextBridge, ipcRenderer } = require('electron'); 2 | 3 | contextBridge.exposeInMainWorld( 4 | 'localApi', { 5 | switchPage: async () => { 6 | await ipcRenderer.invoke('switch-to-electronjs', 'switch'); 7 | } 8 | } 9 | ); 10 | -------------------------------------------------------------------------------- /main.mjs: -------------------------------------------------------------------------------- 1 | import { app, WebContentsView, BaseWindow, Menu, ipcMain } from 'electron'; 2 | import { fileURLToPath } from "node:url"; 3 | import path from 'node:path'; 4 | import { assert } from 'node:console'; 5 | 6 | let mainWindow; 7 | 8 | const __filename = fileURLToPath(import.meta.url); 9 | const __dirname = path.dirname(__filename); 10 | 11 | function createWindow () { 12 | mainWindow = new BaseWindow({ 13 | width: 800, 14 | height: 600, 15 | }); 16 | const view = new WebContentsView({ 17 | webPreferences: { 18 | preload: path.join(__dirname, 'tabbar_preload.js') 19 | } 20 | }); 21 | view.webContents.loadFile('tabbar.html'); 22 | mainWindow.contentView.addChildView(view); 23 | view.setBounds({ x: 0, y: 0, width: 800, height: 40 }); 24 | 25 | view.webContents.on('did-finish-load', () => { 26 | // view.webContents.openDevTools({ mode: 'detach' }); 27 | setupView('https://electronjs.org'); 28 | setupViewLocal('local.html'); 29 | }); 30 | 31 | mainWindow.on('resize', () => { 32 | const views = mainWindow.contentView.children; 33 | assert(views.length === 3); 34 | resizeViews(views[1], views[2]); 35 | }); 36 | 37 | createMenu(); 38 | } 39 | 40 | function setupView(url) { 41 | const view = new WebContentsView(); 42 | resizeViews(view); 43 | view.webContents.loadURL(url); 44 | mainWindow.contentView.addChildView(view); 45 | } 46 | 47 | function setupViewLocal(file) { 48 | const view = new WebContentsView({ 49 | webPreferences: { 50 | preload: path.join(__dirname, 'local_preload.js') 51 | } 52 | }); 53 | resizeViews(view); 54 | view.webContents.loadFile(file); 55 | view.setBackgroundColor('white'); 56 | mainWindow.contentView.addChildView(view); 57 | // view.webContents.openDevTools({ mode: 'detach' }); 58 | } 59 | 60 | function resizeViews(...views) { 61 | const bound = mainWindow.getBounds(); 62 | const height = process.platform !== 'win32' ? 60 : 40 63 | views.forEach(view => view.setBounds({ x: 0, y: height, width: bound.width, height: bound.height - height })); 64 | } 65 | 66 | app.whenReady().then(() => { 67 | createWindow(); 68 | 69 | app.on('activate', function () { 70 | if (mainWindow.contentView.children.length === 0) createWindow(); 71 | }); 72 | }); 73 | 74 | app.on('window-all-closed', function () { 75 | if (process.platform !== 'darwin') app.quit(); 76 | }); 77 | 78 | function createMenu() { 79 | const template = [ 80 | { 81 | label: 'View', 82 | submenu: [ 83 | { 84 | label: 'open dev tool', 85 | click() { 86 | mainWindow.webContents.openDevTools({ mode: 'detach' }); 87 | } 88 | }, 89 | { role: 'quit' } 90 | ] 91 | } 92 | ]; 93 | if (!app.isPackaged) { 94 | template.unshift({ 95 | label: 'Debug', 96 | submenu: [ 97 | { role: 'forceReload' } 98 | ] 99 | }); 100 | } 101 | const menu = Menu.buildFromTemplate(template); 102 | Menu.setApplicationMenu(menu); 103 | } 104 | 105 | function switchView(url) { 106 | const views = mainWindow.contentView.children.filter(view => view.webContents.getURL().includes(url)); 107 | console.assert(views.length === 1); 108 | setTopWebContentsView(views[0]); 109 | } 110 | 111 | function setTopWebContentsView(view) { 112 | mainWindow.contentView.removeChildView(view); 113 | mainWindow.contentView.addChildView(view); 114 | } 115 | 116 | ipcMain.handle('tab1', e => { 117 | console.log('tab1'); 118 | switchView('electronjs'); 119 | }); 120 | 121 | ipcMain.handle('tab2', e => { 122 | console.log('tab2'); 123 | switchView('local.html'); 124 | }); 125 | 126 | ipcMain.handle('switch-to-electronjs', (e, message) => { 127 | console.log('from local.mjs', message); 128 | switchView('electronjs'); 129 | }); 130 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "electron-example-browserview", 3 | "version": "0.1.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "electron-example-browserview", 9 | "version": "0.1.0", 10 | "license": "MIT", 11 | "devDependencies": { 12 | "electron": "^32.0.1" 13 | } 14 | }, 15 | "node_modules/@electron/get": { 16 | "version": "2.0.2", 17 | "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.2.tgz", 18 | "integrity": "sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g==", 19 | "dev": true, 20 | "dependencies": { 21 | "debug": "^4.1.1", 22 | "env-paths": "^2.2.0", 23 | "fs-extra": "^8.1.0", 24 | "got": "^11.8.5", 25 | "progress": "^2.0.3", 26 | "semver": "^6.2.0", 27 | "sumchecker": "^3.0.1" 28 | }, 29 | "engines": { 30 | "node": ">=12" 31 | }, 32 | "optionalDependencies": { 33 | "global-agent": "^3.0.0" 34 | } 35 | }, 36 | "node_modules/@sindresorhus/is": { 37 | "version": "4.6.0", 38 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", 39 | "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", 40 | "dev": true, 41 | "engines": { 42 | "node": ">=10" 43 | }, 44 | "funding": { 45 | "url": "https://github.com/sindresorhus/is?sponsor=1" 46 | } 47 | }, 48 | "node_modules/@szmarczak/http-timer": { 49 | "version": "4.0.6", 50 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", 51 | "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", 52 | "dev": true, 53 | "dependencies": { 54 | "defer-to-connect": "^2.0.0" 55 | }, 56 | "engines": { 57 | "node": ">=10" 58 | } 59 | }, 60 | "node_modules/@types/cacheable-request": { 61 | "version": "6.0.3", 62 | "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", 63 | "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", 64 | "dev": true, 65 | "dependencies": { 66 | "@types/http-cache-semantics": "*", 67 | "@types/keyv": "^3.1.4", 68 | "@types/node": "*", 69 | "@types/responselike": "^1.0.0" 70 | } 71 | }, 72 | "node_modules/@types/http-cache-semantics": { 73 | "version": "4.0.1", 74 | "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", 75 | "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", 76 | "dev": true 77 | }, 78 | "node_modules/@types/keyv": { 79 | "version": "3.1.4", 80 | "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", 81 | "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", 82 | "dev": true, 83 | "dependencies": { 84 | "@types/node": "*" 85 | } 86 | }, 87 | "node_modules/@types/node": { 88 | "version": "20.16.1", 89 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.1.tgz", 90 | "integrity": "sha512-zJDo7wEadFtSyNz5QITDfRcrhqDvQI1xQNQ0VoizPjM/dVAODqqIUWbJPkvsxmTI0MYRGRikcdjMPhOssnPejQ==", 91 | "dev": true, 92 | "license": "MIT", 93 | "dependencies": { 94 | "undici-types": "~6.19.2" 95 | } 96 | }, 97 | "node_modules/@types/responselike": { 98 | "version": "1.0.0", 99 | "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", 100 | "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", 101 | "dev": true, 102 | "dependencies": { 103 | "@types/node": "*" 104 | } 105 | }, 106 | "node_modules/@types/yauzl": { 107 | "version": "2.10.0", 108 | "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", 109 | "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", 110 | "dev": true, 111 | "optional": true, 112 | "dependencies": { 113 | "@types/node": "*" 114 | } 115 | }, 116 | "node_modules/boolean": { 117 | "version": "3.2.0", 118 | "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", 119 | "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", 120 | "dev": true, 121 | "optional": true 122 | }, 123 | "node_modules/buffer-crc32": { 124 | "version": "0.2.13", 125 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 126 | "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", 127 | "dev": true, 128 | "engines": { 129 | "node": "*" 130 | } 131 | }, 132 | "node_modules/cacheable-lookup": { 133 | "version": "5.0.4", 134 | "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", 135 | "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", 136 | "dev": true, 137 | "engines": { 138 | "node": ">=10.6.0" 139 | } 140 | }, 141 | "node_modules/cacheable-request": { 142 | "version": "7.0.2", 143 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", 144 | "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", 145 | "dev": true, 146 | "dependencies": { 147 | "clone-response": "^1.0.2", 148 | "get-stream": "^5.1.0", 149 | "http-cache-semantics": "^4.0.0", 150 | "keyv": "^4.0.0", 151 | "lowercase-keys": "^2.0.0", 152 | "normalize-url": "^6.0.1", 153 | "responselike": "^2.0.0" 154 | }, 155 | "engines": { 156 | "node": ">=8" 157 | } 158 | }, 159 | "node_modules/clone-response": { 160 | "version": "1.0.3", 161 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", 162 | "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", 163 | "dev": true, 164 | "dependencies": { 165 | "mimic-response": "^1.0.0" 166 | }, 167 | "funding": { 168 | "url": "https://github.com/sponsors/sindresorhus" 169 | } 170 | }, 171 | "node_modules/debug": { 172 | "version": "4.3.4", 173 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 174 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 175 | "dev": true, 176 | "dependencies": { 177 | "ms": "2.1.2" 178 | }, 179 | "engines": { 180 | "node": ">=6.0" 181 | }, 182 | "peerDependenciesMeta": { 183 | "supports-color": { 184 | "optional": true 185 | } 186 | } 187 | }, 188 | "node_modules/decompress-response": { 189 | "version": "6.0.0", 190 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", 191 | "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", 192 | "dev": true, 193 | "dependencies": { 194 | "mimic-response": "^3.1.0" 195 | }, 196 | "engines": { 197 | "node": ">=10" 198 | }, 199 | "funding": { 200 | "url": "https://github.com/sponsors/sindresorhus" 201 | } 202 | }, 203 | "node_modules/decompress-response/node_modules/mimic-response": { 204 | "version": "3.1.0", 205 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", 206 | "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", 207 | "dev": true, 208 | "engines": { 209 | "node": ">=10" 210 | }, 211 | "funding": { 212 | "url": "https://github.com/sponsors/sindresorhus" 213 | } 214 | }, 215 | "node_modules/defer-to-connect": { 216 | "version": "2.0.1", 217 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", 218 | "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", 219 | "dev": true, 220 | "engines": { 221 | "node": ">=10" 222 | } 223 | }, 224 | "node_modules/define-properties": { 225 | "version": "1.2.0", 226 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", 227 | "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", 228 | "dev": true, 229 | "optional": true, 230 | "dependencies": { 231 | "has-property-descriptors": "^1.0.0", 232 | "object-keys": "^1.1.1" 233 | }, 234 | "engines": { 235 | "node": ">= 0.4" 236 | }, 237 | "funding": { 238 | "url": "https://github.com/sponsors/ljharb" 239 | } 240 | }, 241 | "node_modules/detect-node": { 242 | "version": "2.1.0", 243 | "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", 244 | "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", 245 | "dev": true, 246 | "optional": true 247 | }, 248 | "node_modules/electron": { 249 | "version": "32.0.1", 250 | "resolved": "https://registry.npmjs.org/electron/-/electron-32.0.1.tgz", 251 | "integrity": "sha512-5Hd5Jaf9niYVR2hZxoRd3gOrcxPOxQV1XPV5WaoSfT9jLJHFadhlKtuSDIk3U6rQZke+aC7GqPPAv55nWFCMsA==", 252 | "dev": true, 253 | "hasInstallScript": true, 254 | "license": "MIT", 255 | "dependencies": { 256 | "@electron/get": "^2.0.0", 257 | "@types/node": "^20.9.0", 258 | "extract-zip": "^2.0.1" 259 | }, 260 | "bin": { 261 | "electron": "cli.js" 262 | }, 263 | "engines": { 264 | "node": ">= 12.20.55" 265 | } 266 | }, 267 | "node_modules/end-of-stream": { 268 | "version": "1.4.4", 269 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 270 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 271 | "dev": true, 272 | "dependencies": { 273 | "once": "^1.4.0" 274 | } 275 | }, 276 | "node_modules/env-paths": { 277 | "version": "2.2.1", 278 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", 279 | "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", 280 | "dev": true, 281 | "engines": { 282 | "node": ">=6" 283 | } 284 | }, 285 | "node_modules/es6-error": { 286 | "version": "4.1.1", 287 | "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", 288 | "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", 289 | "dev": true, 290 | "optional": true 291 | }, 292 | "node_modules/escape-string-regexp": { 293 | "version": "4.0.0", 294 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 295 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 296 | "dev": true, 297 | "optional": true, 298 | "engines": { 299 | "node": ">=10" 300 | }, 301 | "funding": { 302 | "url": "https://github.com/sponsors/sindresorhus" 303 | } 304 | }, 305 | "node_modules/extract-zip": { 306 | "version": "2.0.1", 307 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", 308 | "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", 309 | "dev": true, 310 | "dependencies": { 311 | "debug": "^4.1.1", 312 | "get-stream": "^5.1.0", 313 | "yauzl": "^2.10.0" 314 | }, 315 | "bin": { 316 | "extract-zip": "cli.js" 317 | }, 318 | "engines": { 319 | "node": ">= 10.17.0" 320 | }, 321 | "optionalDependencies": { 322 | "@types/yauzl": "^2.9.1" 323 | } 324 | }, 325 | "node_modules/fd-slicer": { 326 | "version": "1.1.0", 327 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 328 | "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", 329 | "dev": true, 330 | "dependencies": { 331 | "pend": "~1.2.0" 332 | } 333 | }, 334 | "node_modules/fs-extra": { 335 | "version": "8.1.0", 336 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 337 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 338 | "dev": true, 339 | "dependencies": { 340 | "graceful-fs": "^4.2.0", 341 | "jsonfile": "^4.0.0", 342 | "universalify": "^0.1.0" 343 | }, 344 | "engines": { 345 | "node": ">=6 <7 || >=8" 346 | } 347 | }, 348 | "node_modules/function-bind": { 349 | "version": "1.1.1", 350 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 351 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 352 | "dev": true, 353 | "optional": true 354 | }, 355 | "node_modules/get-intrinsic": { 356 | "version": "1.2.0", 357 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", 358 | "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", 359 | "dev": true, 360 | "optional": true, 361 | "dependencies": { 362 | "function-bind": "^1.1.1", 363 | "has": "^1.0.3", 364 | "has-symbols": "^1.0.3" 365 | }, 366 | "funding": { 367 | "url": "https://github.com/sponsors/ljharb" 368 | } 369 | }, 370 | "node_modules/get-stream": { 371 | "version": "5.2.0", 372 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 373 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 374 | "dev": true, 375 | "dependencies": { 376 | "pump": "^3.0.0" 377 | }, 378 | "engines": { 379 | "node": ">=8" 380 | }, 381 | "funding": { 382 | "url": "https://github.com/sponsors/sindresorhus" 383 | } 384 | }, 385 | "node_modules/global-agent": { 386 | "version": "3.0.0", 387 | "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", 388 | "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", 389 | "dev": true, 390 | "optional": true, 391 | "dependencies": { 392 | "boolean": "^3.0.1", 393 | "es6-error": "^4.1.1", 394 | "matcher": "^3.0.0", 395 | "roarr": "^2.15.3", 396 | "semver": "^7.3.2", 397 | "serialize-error": "^7.0.1" 398 | }, 399 | "engines": { 400 | "node": ">=10.0" 401 | } 402 | }, 403 | "node_modules/global-agent/node_modules/semver": { 404 | "version": "7.3.8", 405 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", 406 | "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", 407 | "dev": true, 408 | "optional": true, 409 | "dependencies": { 410 | "lru-cache": "^6.0.0" 411 | }, 412 | "bin": { 413 | "semver": "bin/semver.js" 414 | }, 415 | "engines": { 416 | "node": ">=10" 417 | } 418 | }, 419 | "node_modules/globalthis": { 420 | "version": "1.0.3", 421 | "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", 422 | "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", 423 | "dev": true, 424 | "optional": true, 425 | "dependencies": { 426 | "define-properties": "^1.1.3" 427 | }, 428 | "engines": { 429 | "node": ">= 0.4" 430 | }, 431 | "funding": { 432 | "url": "https://github.com/sponsors/ljharb" 433 | } 434 | }, 435 | "node_modules/got": { 436 | "version": "11.8.6", 437 | "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", 438 | "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", 439 | "dev": true, 440 | "dependencies": { 441 | "@sindresorhus/is": "^4.0.0", 442 | "@szmarczak/http-timer": "^4.0.5", 443 | "@types/cacheable-request": "^6.0.1", 444 | "@types/responselike": "^1.0.0", 445 | "cacheable-lookup": "^5.0.3", 446 | "cacheable-request": "^7.0.2", 447 | "decompress-response": "^6.0.0", 448 | "http2-wrapper": "^1.0.0-beta.5.2", 449 | "lowercase-keys": "^2.0.0", 450 | "p-cancelable": "^2.0.0", 451 | "responselike": "^2.0.0" 452 | }, 453 | "engines": { 454 | "node": ">=10.19.0" 455 | }, 456 | "funding": { 457 | "url": "https://github.com/sindresorhus/got?sponsor=1" 458 | } 459 | }, 460 | "node_modules/graceful-fs": { 461 | "version": "4.2.11", 462 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 463 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 464 | "dev": true 465 | }, 466 | "node_modules/has": { 467 | "version": "1.0.3", 468 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 469 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 470 | "dev": true, 471 | "optional": true, 472 | "dependencies": { 473 | "function-bind": "^1.1.1" 474 | }, 475 | "engines": { 476 | "node": ">= 0.4.0" 477 | } 478 | }, 479 | "node_modules/has-property-descriptors": { 480 | "version": "1.0.0", 481 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", 482 | "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", 483 | "dev": true, 484 | "optional": true, 485 | "dependencies": { 486 | "get-intrinsic": "^1.1.1" 487 | }, 488 | "funding": { 489 | "url": "https://github.com/sponsors/ljharb" 490 | } 491 | }, 492 | "node_modules/has-symbols": { 493 | "version": "1.0.3", 494 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 495 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 496 | "dev": true, 497 | "optional": true, 498 | "engines": { 499 | "node": ">= 0.4" 500 | }, 501 | "funding": { 502 | "url": "https://github.com/sponsors/ljharb" 503 | } 504 | }, 505 | "node_modules/http-cache-semantics": { 506 | "version": "4.1.1", 507 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", 508 | "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", 509 | "dev": true 510 | }, 511 | "node_modules/http2-wrapper": { 512 | "version": "1.0.3", 513 | "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", 514 | "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", 515 | "dev": true, 516 | "dependencies": { 517 | "quick-lru": "^5.1.1", 518 | "resolve-alpn": "^1.0.0" 519 | }, 520 | "engines": { 521 | "node": ">=10.19.0" 522 | } 523 | }, 524 | "node_modules/json-buffer": { 525 | "version": "3.0.1", 526 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 527 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 528 | "dev": true 529 | }, 530 | "node_modules/json-stringify-safe": { 531 | "version": "5.0.1", 532 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 533 | "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", 534 | "dev": true, 535 | "optional": true 536 | }, 537 | "node_modules/jsonfile": { 538 | "version": "4.0.0", 539 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 540 | "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", 541 | "dev": true, 542 | "optionalDependencies": { 543 | "graceful-fs": "^4.1.6" 544 | } 545 | }, 546 | "node_modules/keyv": { 547 | "version": "4.5.2", 548 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", 549 | "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", 550 | "dev": true, 551 | "dependencies": { 552 | "json-buffer": "3.0.1" 553 | } 554 | }, 555 | "node_modules/lowercase-keys": { 556 | "version": "2.0.0", 557 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 558 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 559 | "dev": true, 560 | "engines": { 561 | "node": ">=8" 562 | } 563 | }, 564 | "node_modules/lru-cache": { 565 | "version": "6.0.0", 566 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 567 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 568 | "dev": true, 569 | "optional": true, 570 | "dependencies": { 571 | "yallist": "^4.0.0" 572 | }, 573 | "engines": { 574 | "node": ">=10" 575 | } 576 | }, 577 | "node_modules/matcher": { 578 | "version": "3.0.0", 579 | "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", 580 | "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", 581 | "dev": true, 582 | "optional": true, 583 | "dependencies": { 584 | "escape-string-regexp": "^4.0.0" 585 | }, 586 | "engines": { 587 | "node": ">=10" 588 | } 589 | }, 590 | "node_modules/mimic-response": { 591 | "version": "1.0.1", 592 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 593 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 594 | "dev": true, 595 | "engines": { 596 | "node": ">=4" 597 | } 598 | }, 599 | "node_modules/ms": { 600 | "version": "2.1.2", 601 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 602 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 603 | "dev": true 604 | }, 605 | "node_modules/normalize-url": { 606 | "version": "6.1.0", 607 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", 608 | "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", 609 | "dev": true, 610 | "engines": { 611 | "node": ">=10" 612 | }, 613 | "funding": { 614 | "url": "https://github.com/sponsors/sindresorhus" 615 | } 616 | }, 617 | "node_modules/object-keys": { 618 | "version": "1.1.1", 619 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 620 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 621 | "dev": true, 622 | "optional": true, 623 | "engines": { 624 | "node": ">= 0.4" 625 | } 626 | }, 627 | "node_modules/once": { 628 | "version": "1.4.0", 629 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 630 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 631 | "dev": true, 632 | "dependencies": { 633 | "wrappy": "1" 634 | } 635 | }, 636 | "node_modules/p-cancelable": { 637 | "version": "2.1.1", 638 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", 639 | "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", 640 | "dev": true, 641 | "engines": { 642 | "node": ">=8" 643 | } 644 | }, 645 | "node_modules/pend": { 646 | "version": "1.2.0", 647 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 648 | "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", 649 | "dev": true 650 | }, 651 | "node_modules/progress": { 652 | "version": "2.0.3", 653 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 654 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 655 | "dev": true, 656 | "engines": { 657 | "node": ">=0.4.0" 658 | } 659 | }, 660 | "node_modules/pump": { 661 | "version": "3.0.0", 662 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 663 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 664 | "dev": true, 665 | "dependencies": { 666 | "end-of-stream": "^1.1.0", 667 | "once": "^1.3.1" 668 | } 669 | }, 670 | "node_modules/quick-lru": { 671 | "version": "5.1.1", 672 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", 673 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", 674 | "dev": true, 675 | "engines": { 676 | "node": ">=10" 677 | }, 678 | "funding": { 679 | "url": "https://github.com/sponsors/sindresorhus" 680 | } 681 | }, 682 | "node_modules/resolve-alpn": { 683 | "version": "1.2.1", 684 | "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", 685 | "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", 686 | "dev": true 687 | }, 688 | "node_modules/responselike": { 689 | "version": "2.0.1", 690 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", 691 | "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", 692 | "dev": true, 693 | "dependencies": { 694 | "lowercase-keys": "^2.0.0" 695 | }, 696 | "funding": { 697 | "url": "https://github.com/sponsors/sindresorhus" 698 | } 699 | }, 700 | "node_modules/roarr": { 701 | "version": "2.15.4", 702 | "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", 703 | "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", 704 | "dev": true, 705 | "optional": true, 706 | "dependencies": { 707 | "boolean": "^3.0.1", 708 | "detect-node": "^2.0.4", 709 | "globalthis": "^1.0.1", 710 | "json-stringify-safe": "^5.0.1", 711 | "semver-compare": "^1.0.0", 712 | "sprintf-js": "^1.1.2" 713 | }, 714 | "engines": { 715 | "node": ">=8.0" 716 | } 717 | }, 718 | "node_modules/semver": { 719 | "version": "6.3.0", 720 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 721 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 722 | "dev": true, 723 | "bin": { 724 | "semver": "bin/semver.js" 725 | } 726 | }, 727 | "node_modules/semver-compare": { 728 | "version": "1.0.0", 729 | "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", 730 | "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", 731 | "dev": true, 732 | "optional": true 733 | }, 734 | "node_modules/serialize-error": { 735 | "version": "7.0.1", 736 | "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", 737 | "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", 738 | "dev": true, 739 | "optional": true, 740 | "dependencies": { 741 | "type-fest": "^0.13.1" 742 | }, 743 | "engines": { 744 | "node": ">=10" 745 | }, 746 | "funding": { 747 | "url": "https://github.com/sponsors/sindresorhus" 748 | } 749 | }, 750 | "node_modules/sprintf-js": { 751 | "version": "1.1.2", 752 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", 753 | "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", 754 | "dev": true, 755 | "optional": true 756 | }, 757 | "node_modules/sumchecker": { 758 | "version": "3.0.1", 759 | "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", 760 | "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", 761 | "dev": true, 762 | "dependencies": { 763 | "debug": "^4.1.0" 764 | }, 765 | "engines": { 766 | "node": ">= 8.0" 767 | } 768 | }, 769 | "node_modules/type-fest": { 770 | "version": "0.13.1", 771 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", 772 | "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", 773 | "dev": true, 774 | "optional": true, 775 | "engines": { 776 | "node": ">=10" 777 | }, 778 | "funding": { 779 | "url": "https://github.com/sponsors/sindresorhus" 780 | } 781 | }, 782 | "node_modules/undici-types": { 783 | "version": "6.19.8", 784 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", 785 | "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", 786 | "dev": true, 787 | "license": "MIT" 788 | }, 789 | "node_modules/universalify": { 790 | "version": "0.1.2", 791 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 792 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 793 | "dev": true, 794 | "engines": { 795 | "node": ">= 4.0.0" 796 | } 797 | }, 798 | "node_modules/wrappy": { 799 | "version": "1.0.2", 800 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 801 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 802 | "dev": true 803 | }, 804 | "node_modules/yallist": { 805 | "version": "4.0.0", 806 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 807 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 808 | "dev": true, 809 | "optional": true 810 | }, 811 | "node_modules/yauzl": { 812 | "version": "2.10.0", 813 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 814 | "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", 815 | "dev": true, 816 | "dependencies": { 817 | "buffer-crc32": "~0.2.3", 818 | "fd-slicer": "~1.1.0" 819 | } 820 | } 821 | }, 822 | "dependencies": { 823 | "@electron/get": { 824 | "version": "2.0.2", 825 | "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.2.tgz", 826 | "integrity": "sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g==", 827 | "dev": true, 828 | "requires": { 829 | "debug": "^4.1.1", 830 | "env-paths": "^2.2.0", 831 | "fs-extra": "^8.1.0", 832 | "global-agent": "^3.0.0", 833 | "got": "^11.8.5", 834 | "progress": "^2.0.3", 835 | "semver": "^6.2.0", 836 | "sumchecker": "^3.0.1" 837 | } 838 | }, 839 | "@sindresorhus/is": { 840 | "version": "4.6.0", 841 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", 842 | "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", 843 | "dev": true 844 | }, 845 | "@szmarczak/http-timer": { 846 | "version": "4.0.6", 847 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", 848 | "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", 849 | "dev": true, 850 | "requires": { 851 | "defer-to-connect": "^2.0.0" 852 | } 853 | }, 854 | "@types/cacheable-request": { 855 | "version": "6.0.3", 856 | "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", 857 | "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", 858 | "dev": true, 859 | "requires": { 860 | "@types/http-cache-semantics": "*", 861 | "@types/keyv": "^3.1.4", 862 | "@types/node": "*", 863 | "@types/responselike": "^1.0.0" 864 | } 865 | }, 866 | "@types/http-cache-semantics": { 867 | "version": "4.0.1", 868 | "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", 869 | "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", 870 | "dev": true 871 | }, 872 | "@types/keyv": { 873 | "version": "3.1.4", 874 | "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", 875 | "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", 876 | "dev": true, 877 | "requires": { 878 | "@types/node": "*" 879 | } 880 | }, 881 | "@types/node": { 882 | "version": "20.16.1", 883 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.1.tgz", 884 | "integrity": "sha512-zJDo7wEadFtSyNz5QITDfRcrhqDvQI1xQNQ0VoizPjM/dVAODqqIUWbJPkvsxmTI0MYRGRikcdjMPhOssnPejQ==", 885 | "dev": true, 886 | "requires": { 887 | "undici-types": "~6.19.2" 888 | } 889 | }, 890 | "@types/responselike": { 891 | "version": "1.0.0", 892 | "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", 893 | "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", 894 | "dev": true, 895 | "requires": { 896 | "@types/node": "*" 897 | } 898 | }, 899 | "@types/yauzl": { 900 | "version": "2.10.0", 901 | "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", 902 | "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", 903 | "dev": true, 904 | "optional": true, 905 | "requires": { 906 | "@types/node": "*" 907 | } 908 | }, 909 | "boolean": { 910 | "version": "3.2.0", 911 | "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", 912 | "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", 913 | "dev": true, 914 | "optional": true 915 | }, 916 | "buffer-crc32": { 917 | "version": "0.2.13", 918 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 919 | "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", 920 | "dev": true 921 | }, 922 | "cacheable-lookup": { 923 | "version": "5.0.4", 924 | "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", 925 | "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", 926 | "dev": true 927 | }, 928 | "cacheable-request": { 929 | "version": "7.0.2", 930 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", 931 | "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", 932 | "dev": true, 933 | "requires": { 934 | "clone-response": "^1.0.2", 935 | "get-stream": "^5.1.0", 936 | "http-cache-semantics": "^4.0.0", 937 | "keyv": "^4.0.0", 938 | "lowercase-keys": "^2.0.0", 939 | "normalize-url": "^6.0.1", 940 | "responselike": "^2.0.0" 941 | } 942 | }, 943 | "clone-response": { 944 | "version": "1.0.3", 945 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", 946 | "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", 947 | "dev": true, 948 | "requires": { 949 | "mimic-response": "^1.0.0" 950 | } 951 | }, 952 | "debug": { 953 | "version": "4.3.4", 954 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 955 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 956 | "dev": true, 957 | "requires": { 958 | "ms": "2.1.2" 959 | } 960 | }, 961 | "decompress-response": { 962 | "version": "6.0.0", 963 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", 964 | "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", 965 | "dev": true, 966 | "requires": { 967 | "mimic-response": "^3.1.0" 968 | }, 969 | "dependencies": { 970 | "mimic-response": { 971 | "version": "3.1.0", 972 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", 973 | "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", 974 | "dev": true 975 | } 976 | } 977 | }, 978 | "defer-to-connect": { 979 | "version": "2.0.1", 980 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", 981 | "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", 982 | "dev": true 983 | }, 984 | "define-properties": { 985 | "version": "1.2.0", 986 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", 987 | "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", 988 | "dev": true, 989 | "optional": true, 990 | "requires": { 991 | "has-property-descriptors": "^1.0.0", 992 | "object-keys": "^1.1.1" 993 | } 994 | }, 995 | "detect-node": { 996 | "version": "2.1.0", 997 | "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", 998 | "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", 999 | "dev": true, 1000 | "optional": true 1001 | }, 1002 | "electron": { 1003 | "version": "32.0.1", 1004 | "resolved": "https://registry.npmjs.org/electron/-/electron-32.0.1.tgz", 1005 | "integrity": "sha512-5Hd5Jaf9niYVR2hZxoRd3gOrcxPOxQV1XPV5WaoSfT9jLJHFadhlKtuSDIk3U6rQZke+aC7GqPPAv55nWFCMsA==", 1006 | "dev": true, 1007 | "requires": { 1008 | "@electron/get": "^2.0.0", 1009 | "@types/node": "^20.9.0", 1010 | "extract-zip": "^2.0.1" 1011 | } 1012 | }, 1013 | "end-of-stream": { 1014 | "version": "1.4.4", 1015 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 1016 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 1017 | "dev": true, 1018 | "requires": { 1019 | "once": "^1.4.0" 1020 | } 1021 | }, 1022 | "env-paths": { 1023 | "version": "2.2.1", 1024 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", 1025 | "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", 1026 | "dev": true 1027 | }, 1028 | "es6-error": { 1029 | "version": "4.1.1", 1030 | "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", 1031 | "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", 1032 | "dev": true, 1033 | "optional": true 1034 | }, 1035 | "escape-string-regexp": { 1036 | "version": "4.0.0", 1037 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1038 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1039 | "dev": true, 1040 | "optional": true 1041 | }, 1042 | "extract-zip": { 1043 | "version": "2.0.1", 1044 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", 1045 | "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", 1046 | "dev": true, 1047 | "requires": { 1048 | "@types/yauzl": "^2.9.1", 1049 | "debug": "^4.1.1", 1050 | "get-stream": "^5.1.0", 1051 | "yauzl": "^2.10.0" 1052 | } 1053 | }, 1054 | "fd-slicer": { 1055 | "version": "1.1.0", 1056 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 1057 | "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", 1058 | "dev": true, 1059 | "requires": { 1060 | "pend": "~1.2.0" 1061 | } 1062 | }, 1063 | "fs-extra": { 1064 | "version": "8.1.0", 1065 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 1066 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 1067 | "dev": true, 1068 | "requires": { 1069 | "graceful-fs": "^4.2.0", 1070 | "jsonfile": "^4.0.0", 1071 | "universalify": "^0.1.0" 1072 | } 1073 | }, 1074 | "function-bind": { 1075 | "version": "1.1.1", 1076 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1077 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1078 | "dev": true, 1079 | "optional": true 1080 | }, 1081 | "get-intrinsic": { 1082 | "version": "1.2.0", 1083 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", 1084 | "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", 1085 | "dev": true, 1086 | "optional": true, 1087 | "requires": { 1088 | "function-bind": "^1.1.1", 1089 | "has": "^1.0.3", 1090 | "has-symbols": "^1.0.3" 1091 | } 1092 | }, 1093 | "get-stream": { 1094 | "version": "5.2.0", 1095 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 1096 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 1097 | "dev": true, 1098 | "requires": { 1099 | "pump": "^3.0.0" 1100 | } 1101 | }, 1102 | "global-agent": { 1103 | "version": "3.0.0", 1104 | "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", 1105 | "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", 1106 | "dev": true, 1107 | "optional": true, 1108 | "requires": { 1109 | "boolean": "^3.0.1", 1110 | "es6-error": "^4.1.1", 1111 | "matcher": "^3.0.0", 1112 | "roarr": "^2.15.3", 1113 | "semver": "^7.3.2", 1114 | "serialize-error": "^7.0.1" 1115 | }, 1116 | "dependencies": { 1117 | "semver": { 1118 | "version": "7.3.8", 1119 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", 1120 | "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", 1121 | "dev": true, 1122 | "optional": true, 1123 | "requires": { 1124 | "lru-cache": "^6.0.0" 1125 | } 1126 | } 1127 | } 1128 | }, 1129 | "globalthis": { 1130 | "version": "1.0.3", 1131 | "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", 1132 | "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", 1133 | "dev": true, 1134 | "optional": true, 1135 | "requires": { 1136 | "define-properties": "^1.1.3" 1137 | } 1138 | }, 1139 | "got": { 1140 | "version": "11.8.6", 1141 | "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", 1142 | "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", 1143 | "dev": true, 1144 | "requires": { 1145 | "@sindresorhus/is": "^4.0.0", 1146 | "@szmarczak/http-timer": "^4.0.5", 1147 | "@types/cacheable-request": "^6.0.1", 1148 | "@types/responselike": "^1.0.0", 1149 | "cacheable-lookup": "^5.0.3", 1150 | "cacheable-request": "^7.0.2", 1151 | "decompress-response": "^6.0.0", 1152 | "http2-wrapper": "^1.0.0-beta.5.2", 1153 | "lowercase-keys": "^2.0.0", 1154 | "p-cancelable": "^2.0.0", 1155 | "responselike": "^2.0.0" 1156 | } 1157 | }, 1158 | "graceful-fs": { 1159 | "version": "4.2.11", 1160 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 1161 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 1162 | "dev": true 1163 | }, 1164 | "has": { 1165 | "version": "1.0.3", 1166 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1167 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1168 | "dev": true, 1169 | "optional": true, 1170 | "requires": { 1171 | "function-bind": "^1.1.1" 1172 | } 1173 | }, 1174 | "has-property-descriptors": { 1175 | "version": "1.0.0", 1176 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", 1177 | "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", 1178 | "dev": true, 1179 | "optional": true, 1180 | "requires": { 1181 | "get-intrinsic": "^1.1.1" 1182 | } 1183 | }, 1184 | "has-symbols": { 1185 | "version": "1.0.3", 1186 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 1187 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 1188 | "dev": true, 1189 | "optional": true 1190 | }, 1191 | "http-cache-semantics": { 1192 | "version": "4.1.1", 1193 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", 1194 | "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", 1195 | "dev": true 1196 | }, 1197 | "http2-wrapper": { 1198 | "version": "1.0.3", 1199 | "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", 1200 | "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", 1201 | "dev": true, 1202 | "requires": { 1203 | "quick-lru": "^5.1.1", 1204 | "resolve-alpn": "^1.0.0" 1205 | } 1206 | }, 1207 | "json-buffer": { 1208 | "version": "3.0.1", 1209 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 1210 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 1211 | "dev": true 1212 | }, 1213 | "json-stringify-safe": { 1214 | "version": "5.0.1", 1215 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1216 | "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", 1217 | "dev": true, 1218 | "optional": true 1219 | }, 1220 | "jsonfile": { 1221 | "version": "4.0.0", 1222 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 1223 | "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", 1224 | "dev": true, 1225 | "requires": { 1226 | "graceful-fs": "^4.1.6" 1227 | } 1228 | }, 1229 | "keyv": { 1230 | "version": "4.5.2", 1231 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", 1232 | "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", 1233 | "dev": true, 1234 | "requires": { 1235 | "json-buffer": "3.0.1" 1236 | } 1237 | }, 1238 | "lowercase-keys": { 1239 | "version": "2.0.0", 1240 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 1241 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 1242 | "dev": true 1243 | }, 1244 | "lru-cache": { 1245 | "version": "6.0.0", 1246 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1247 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1248 | "dev": true, 1249 | "optional": true, 1250 | "requires": { 1251 | "yallist": "^4.0.0" 1252 | } 1253 | }, 1254 | "matcher": { 1255 | "version": "3.0.0", 1256 | "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", 1257 | "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", 1258 | "dev": true, 1259 | "optional": true, 1260 | "requires": { 1261 | "escape-string-regexp": "^4.0.0" 1262 | } 1263 | }, 1264 | "mimic-response": { 1265 | "version": "1.0.1", 1266 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 1267 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 1268 | "dev": true 1269 | }, 1270 | "ms": { 1271 | "version": "2.1.2", 1272 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1273 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1274 | "dev": true 1275 | }, 1276 | "normalize-url": { 1277 | "version": "6.1.0", 1278 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", 1279 | "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", 1280 | "dev": true 1281 | }, 1282 | "object-keys": { 1283 | "version": "1.1.1", 1284 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1285 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 1286 | "dev": true, 1287 | "optional": true 1288 | }, 1289 | "once": { 1290 | "version": "1.4.0", 1291 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1292 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1293 | "dev": true, 1294 | "requires": { 1295 | "wrappy": "1" 1296 | } 1297 | }, 1298 | "p-cancelable": { 1299 | "version": "2.1.1", 1300 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", 1301 | "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", 1302 | "dev": true 1303 | }, 1304 | "pend": { 1305 | "version": "1.2.0", 1306 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 1307 | "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", 1308 | "dev": true 1309 | }, 1310 | "progress": { 1311 | "version": "2.0.3", 1312 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 1313 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 1314 | "dev": true 1315 | }, 1316 | "pump": { 1317 | "version": "3.0.0", 1318 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 1319 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 1320 | "dev": true, 1321 | "requires": { 1322 | "end-of-stream": "^1.1.0", 1323 | "once": "^1.3.1" 1324 | } 1325 | }, 1326 | "quick-lru": { 1327 | "version": "5.1.1", 1328 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", 1329 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", 1330 | "dev": true 1331 | }, 1332 | "resolve-alpn": { 1333 | "version": "1.2.1", 1334 | "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", 1335 | "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", 1336 | "dev": true 1337 | }, 1338 | "responselike": { 1339 | "version": "2.0.1", 1340 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", 1341 | "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", 1342 | "dev": true, 1343 | "requires": { 1344 | "lowercase-keys": "^2.0.0" 1345 | } 1346 | }, 1347 | "roarr": { 1348 | "version": "2.15.4", 1349 | "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", 1350 | "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", 1351 | "dev": true, 1352 | "optional": true, 1353 | "requires": { 1354 | "boolean": "^3.0.1", 1355 | "detect-node": "^2.0.4", 1356 | "globalthis": "^1.0.1", 1357 | "json-stringify-safe": "^5.0.1", 1358 | "semver-compare": "^1.0.0", 1359 | "sprintf-js": "^1.1.2" 1360 | } 1361 | }, 1362 | "semver": { 1363 | "version": "6.3.0", 1364 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1365 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1366 | "dev": true 1367 | }, 1368 | "semver-compare": { 1369 | "version": "1.0.0", 1370 | "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", 1371 | "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", 1372 | "dev": true, 1373 | "optional": true 1374 | }, 1375 | "serialize-error": { 1376 | "version": "7.0.1", 1377 | "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", 1378 | "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", 1379 | "dev": true, 1380 | "optional": true, 1381 | "requires": { 1382 | "type-fest": "^0.13.1" 1383 | } 1384 | }, 1385 | "sprintf-js": { 1386 | "version": "1.1.2", 1387 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", 1388 | "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", 1389 | "dev": true, 1390 | "optional": true 1391 | }, 1392 | "sumchecker": { 1393 | "version": "3.0.1", 1394 | "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", 1395 | "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", 1396 | "dev": true, 1397 | "requires": { 1398 | "debug": "^4.1.0" 1399 | } 1400 | }, 1401 | "type-fest": { 1402 | "version": "0.13.1", 1403 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", 1404 | "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", 1405 | "dev": true, 1406 | "optional": true 1407 | }, 1408 | "undici-types": { 1409 | "version": "6.19.8", 1410 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", 1411 | "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", 1412 | "dev": true 1413 | }, 1414 | "universalify": { 1415 | "version": "0.1.2", 1416 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 1417 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 1418 | "dev": true 1419 | }, 1420 | "wrappy": { 1421 | "version": "1.0.2", 1422 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1423 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1424 | "dev": true 1425 | }, 1426 | "yallist": { 1427 | "version": "4.0.0", 1428 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1429 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 1430 | "dev": true, 1431 | "optional": true 1432 | }, 1433 | "yauzl": { 1434 | "version": "2.10.0", 1435 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 1436 | "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", 1437 | "dev": true, 1438 | "requires": { 1439 | "buffer-crc32": "~0.2.3", 1440 | "fd-slicer": "~1.1.0" 1441 | } 1442 | } 1443 | } 1444 | } 1445 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "electron-example-browserview", 3 | "version": "0.1.0", 4 | "description": "Example of Electron app that registers and switches between multiple BrowserViews.", 5 | "type": "module", 6 | "main": "main.mjs", 7 | "scripts": { 8 | "start": "electron ." 9 | }, 10 | "repository": "https://github.com/mamezou-tech/electron-example-browserview", 11 | "author": "kondoumh", 12 | "license": "MIT", 13 | "devDependencies": { 14 | "electron": "^32.0.1" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tabbar.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 16 | 17 | 18 |
19 | 22 | 25 |
26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /tabbar.js: -------------------------------------------------------------------------------- 1 | onload = () => { 2 | document.querySelector('#tab1').addEventListener('click', e => { 3 | window.api.tab1(); 4 | }); 5 | document.querySelector('#tab2').addEventListener('click', e => { 6 | window.api.tab2(); 7 | }); 8 | } 9 | -------------------------------------------------------------------------------- /tabbar_preload.js: -------------------------------------------------------------------------------- 1 | const { contextBridge, ipcRenderer } = require('electron'); 2 | 3 | contextBridge.exposeInMainWorld( 4 | 'api', { 5 | tab1: async () => await ipcRenderer.invoke('tab1'), 6 | tab2: async () => await ipcRenderer.invoke('tab2') 7 | } 8 | ); 9 | --------------------------------------------------------------------------------