├── .github
├── CODEOWNERS
├── dependabot.yml
└── workflows
│ └── add-to-project.yml
├── .gitignore
├── LICENSE.md
├── README.md
├── index.html
├── main.js
├── package-lock.json
├── package.json
├── preload.js
├── renderer.js
└── styles.css
/.github/CODEOWNERS:
--------------------------------------------------------------------------------
1 | * @electron/wg-ecosystem
2 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 | - package-ecosystem: npm
4 | directory: "/"
5 | schedule:
6 | interval: daily
7 | time: "13:00"
8 | open-pull-requests-limit: 99
9 | versioning-strategy: increase
10 |
--------------------------------------------------------------------------------
/.github/workflows/add-to-project.yml:
--------------------------------------------------------------------------------
1 | name: Add to Ecosystem WG Project
2 |
3 | on:
4 | issues:
5 | types:
6 | - opened
7 | pull_request_target:
8 | types:
9 | - opened
10 |
11 | permissions: {}
12 |
13 | jobs:
14 | add-to-project:
15 | runs-on: ubuntu-latest
16 | steps:
17 | - name: Generate GitHub App token
18 | uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
19 | id: generate-token
20 | with:
21 | creds: ${{ secrets.ECOSYSTEM_ISSUE_TRIAGE_GH_APP_CREDS }}
22 | org: electron
23 | - name: Add to Project
24 | uses: dsanders11/project-actions/add-item@3a81985616963f32fae17d1d1b406c631f3201a1 # v1.1.0
25 | with:
26 | field: Opened
27 | field-value: ${{ github.event.pull_request.created_at || github.event.issue.created_at }}
28 | project-number: 89
29 | token: ${{ steps.generate-token.outputs.token }}
30 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | CC0 1.0 Universal
2 | ==================
3 |
4 | Statement of Purpose
5 | ---------------------
6 |
7 | The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work").
8 |
9 | Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.
10 |
11 | For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.
12 |
13 | 1. Copyright and Related Rights.
14 | --------------------------------
15 | A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following:
16 |
17 | i. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;
18 | ii. moral rights retained by the original author(s) and/or performer(s);
19 | iii. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work;
20 | iv. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below;
21 | v. rights protecting the extraction, dissemination, use and reuse of data in a Work;
22 | vi. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and
23 | vii. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.
24 |
25 | 2. Waiver.
26 | -----------
27 | To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose.
28 |
29 | 3. Public License Fallback.
30 | ----------------------------
31 | Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose.
32 |
33 | 4. Limitations and Disclaimers.
34 | --------------------------------
35 |
36 | a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.
37 | b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.
38 | c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.
39 | d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work.
40 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # minimal-repro
2 |
3 | **Quickly create and share examples of Electron app behaviors or bugs.**
4 |
5 | > [!NOTE]
6 | > This repro was renamed from `electron-quick-start` to clarify its purpose as a repro template. If you're looking to boostrap a new Electron app, check out the [Electron Forge](https://www.electronforge.io/) docs instead to get started!
7 |
8 | Creating a minimal reproduction (or "minimal repro") is essential when troubleshooting Electron apps. By stripping away everything except the code needed to demonstrate a specific behavior or bug, it becomes easier for others to understand, debug, and fix issues. This focused approach saves time and ensures that everyone involved is looking at exactly the same problem without distractions.
9 |
10 | A basic Electron application contains:
11 |
12 | - `package.json` - Points to the app's main file and lists its details and dependencies.
13 | - `main.js` - Starts the app and creates a browser window to render HTML. This is the app's **main process**.
14 | - `index.html` - A web page to render. This is the app's **renderer process**.
15 | - `preload.js` - A content script that runs before the renderer process loads.
16 |
17 | You can learn more about each of these components in depth within the [Tutorial](https://electronjs.org/docs/latest/tutorial/tutorial-prerequisites).
18 |
19 | ## To Use
20 |
21 | To clone and run this repository you'll need [Git](https://git-scm.com) and [Node.js](https://nodejs.org/en/download/) (which comes with [npm](http://npmjs.com)) installed on your computer. From your command line:
22 |
23 | ```bash
24 | # Clone this repository
25 | git clone https://github.com/electron/minimal-repro
26 | # Go into the repository
27 | cd minimal-repro
28 | # Install dependencies
29 | npm install
30 | # Run the app
31 | npm start
32 | ```
33 |
34 | Note: If you're using Linux Bash for Windows, [see this guide](https://www.howtogeek.com/261575/how-to-run-graphical-linux-desktop-applications-from-windows-10s-bash-shell/) or use `node` from the command prompt.
35 |
36 | ## Resources for Learning Electron
37 |
38 | - [electronjs.org/docs](https://electronjs.org/docs) - all of Electron's documentation
39 | - [Electron Fiddle](https://electronjs.org/fiddle) - Electron Fiddle, an app to test small Electron experiments
40 | - [Electron Forge](https://www.electronforge.io/) - Looking to bootstrap a new Electron app? Check out the Electron Forge docs to get started
41 |
42 | ## License
43 |
44 | [CC0 1.0 (Public Domain)](LICENSE.md)
45 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Hello World!
9 |
10 |
11 | Hello World!
12 | We are using Node.js ,
13 | Chromium ,
14 | and Electron .
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/main.js:
--------------------------------------------------------------------------------
1 | // Modules to control application life and create native browser window
2 | const { app, BrowserWindow } = require('electron')
3 | const path = require('node:path')
4 |
5 | function createWindow () {
6 | // Create the browser window.
7 | const mainWindow = new BrowserWindow({
8 | width: 800,
9 | height: 600,
10 | webPreferences: {
11 | preload: path.join(__dirname, 'preload.js')
12 | }
13 | })
14 |
15 | // and load the index.html of the app.
16 | mainWindow.loadFile('index.html')
17 |
18 | // Open the DevTools.
19 | // mainWindow.webContents.openDevTools()
20 | }
21 |
22 | // This method will be called when Electron has finished
23 | // initialization and is ready to create browser windows.
24 | // Some APIs can only be used after this event occurs.
25 | app.whenReady().then(() => {
26 | createWindow()
27 |
28 | app.on('activate', function () {
29 | // On macOS it's common to re-create a window in the app when the
30 | // dock icon is clicked and there are no other windows open.
31 | if (BrowserWindow.getAllWindows().length === 0) createWindow()
32 | })
33 | })
34 |
35 | // Quit when all windows are closed, except on macOS. There, it's common
36 | // for applications and their menu bar to stay active until the user quits
37 | // explicitly with Cmd + Q.
38 | app.on('window-all-closed', function () {
39 | if (process.platform !== 'darwin') app.quit()
40 | })
41 |
42 | // In this file you can include the rest of your app's specific main process
43 | // code. You can also put them in separate files and require them here.
44 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "minimal-repro",
3 | "version": "1.0.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "minimal-repro",
9 | "version": "1.0.0",
10 | "license": "CC0-1.0",
11 | "devDependencies": {
12 | "electron": "^36.4.0"
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": "22.13.9",
89 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.9.tgz",
90 | "integrity": "sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==",
91 | "dev": true,
92 | "license": "MIT",
93 | "dependencies": {
94 | "undici-types": "~6.20.0"
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.1.4",
226 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
227 | "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
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": "36.4.0",
250 | "resolved": "https://registry.npmjs.org/electron/-/electron-36.4.0.tgz",
251 | "integrity": "sha512-LLOOZEuW5oqvnjC7HBQhIqjIIJAZCIFjQxltQGLfEC7XFsBoZgQ3u3iFj+Kzw68Xj97u1n57Jdt7P98qLvUibQ==",
252 | "dev": true,
253 | "hasInstallScript": true,
254 | "license": "MIT",
255 | "dependencies": {
256 | "@electron/get": "^2.0.0",
257 | "@types/node": "^22.7.7",
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.1.3",
357 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
358 | "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
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.5.4",
405 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
406 | "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
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.5",
437 | "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz",
438 | "integrity": "sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==",
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.10",
462 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
463 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
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": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
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.1",
720 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
721 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
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.20.0",
784 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
785 | "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
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": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
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": "22.13.9",
883 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.9.tgz",
884 | "integrity": "sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==",
885 | "dev": true,
886 | "requires": {
887 | "undici-types": "~6.20.0"
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.1.4",
986 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
987 | "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
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": "36.4.0",
1004 | "resolved": "https://registry.npmjs.org/electron/-/electron-36.4.0.tgz",
1005 | "integrity": "sha512-LLOOZEuW5oqvnjC7HBQhIqjIIJAZCIFjQxltQGLfEC7XFsBoZgQ3u3iFj+Kzw68Xj97u1n57Jdt7P98qLvUibQ==",
1006 | "dev": true,
1007 | "requires": {
1008 | "@electron/get": "^2.0.0",
1009 | "@types/node": "^22.7.7",
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.1.3",
1083 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
1084 | "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
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.5.4",
1119 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
1120 | "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
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.5",
1141 | "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz",
1142 | "integrity": "sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==",
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.10",
1160 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
1161 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
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": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
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.1",
1364 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
1365 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
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.20.0",
1410 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
1411 | "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
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": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
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": "minimal-repro",
3 | "version": "1.0.0",
4 | "description": "A minimal Electron application",
5 | "main": "main.js",
6 | "scripts": {
7 | "start": "electron ."
8 | },
9 | "repository": "https://github.com/electron/minimal-repro",
10 | "keywords": [
11 | "Electron",
12 | "quick",
13 | "start",
14 | "tutorial",
15 | "demo"
16 | ],
17 | "author": "GitHub",
18 | "license": "CC0-1.0",
19 | "devDependencies": {
20 | "electron": "^36.4.0"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/preload.js:
--------------------------------------------------------------------------------
1 | /**
2 | * The preload script runs before `index.html` is loaded
3 | * in the renderer. It has access to web APIs as well as
4 | * Electron's renderer process modules and some polyfilled
5 | * Node.js functions.
6 | *
7 | * https://www.electronjs.org/docs/latest/tutorial/sandbox
8 | */
9 | window.addEventListener('DOMContentLoaded', () => {
10 | const replaceText = (selector, text) => {
11 | const element = document.getElementById(selector)
12 | if (element) element.innerText = text
13 | }
14 |
15 | for (const type of ['chrome', 'node', 'electron']) {
16 | replaceText(`${type}-version`, process.versions[type])
17 | }
18 | })
19 |
--------------------------------------------------------------------------------
/renderer.js:
--------------------------------------------------------------------------------
1 | /**
2 | * This file is loaded via the