├── .gitignore
├── .npmrc
├── CHANGELOG.md
├── LICENSE
├── README.md
├── electron-env.d.ts
├── examples
├── alias
│ ├── .gitignore
│ ├── common
│ │ └── foo.js
│ ├── electron-env.d.ts
│ ├── electron
│ │ └── main.ts
│ ├── index.html
│ ├── package.json
│ ├── renderer.ts
│ ├── tsconfig.json
│ └── vite.config.ts
├── copy
│ ├── .gitignore
│ ├── electron-env.d.ts
│ ├── electron
│ │ └── main.ts
│ ├── index.html
│ ├── package.json
│ ├── renderer.ts
│ ├── static
│ │ ├── foo
│ │ │ ├── bar
│ │ │ │ └── screenshort.png
│ │ │ └── screenshort.png
│ │ └── screenshort.png
│ ├── tsconfig.json
│ └── vite.config.ts
├── custom-start-electron-app
│ ├── .gitignore
│ ├── electron-env.d.ts
│ ├── electron
│ │ └── main.ts
│ ├── index.html
│ ├── package.json
│ ├── renderer.ts
│ └── vite.config.ts
├── esmodule
│ ├── .gitignore
│ ├── electron-builder.json5
│ ├── electron-env.d.ts
│ ├── electron
│ │ ├── main.ts
│ │ └── preload.ts
│ ├── index.html
│ ├── package.json
│ ├── renderer.ts
│ └── vite.config.ts
└── quick-start
│ ├── .env
│ ├── .gitignore
│ ├── common.ts
│ ├── electron-builder.json5
│ ├── electron-env.d.ts
│ ├── electron
│ ├── main
│ │ └── index.ts
│ └── preload.ts
│ ├── index.html
│ ├── package.json
│ ├── public
│ ├── logo.svg
│ └── screenshort.png
│ ├── src
│ ├── counter.ts
│ ├── main.ts
│ ├── style.css
│ ├── typescript.svg
│ └── vite-env.d.ts
│ ├── tsconfig.json
│ └── vite.config.ts
├── package.json
├── pnpm-lock.yaml
├── pnpm-workspace.yaml
├── src-plugin
├── alias.ts
├── copy.ts
├── custom-start.ts
├── dest.ts
├── esmodule.ts
├── index.ts
├── load-vite-env.ts
└── utils.ts
├── src
├── config.ts
└── index.ts
├── test
└── config.test.ts
├── tsconfig.build.json
├── tsconfig.json
├── tsconfig.plugin.json
└── vite.config.ts
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 |
9 | # Diagnostic reports (https://nodejs.org/api/report.html)
10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
11 |
12 | # Runtime data
13 | pids
14 | *.pid
15 | *.seed
16 | *.pid.lock
17 |
18 | # Directory for instrumented libs generated by jscoverage/JSCover
19 | lib-cov
20 |
21 | # Coverage directory used by tools like istanbul
22 | coverage
23 | *.lcov
24 |
25 | # nyc test coverage
26 | .nyc_output
27 |
28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
29 | .grunt
30 |
31 | # Bower dependency directory (https://bower.io/)
32 | bower_components
33 |
34 | # node-waf configuration
35 | .lock-wscript
36 |
37 | # Compiled binary addons (https://nodejs.org/api/addons.html)
38 | build/Release
39 |
40 | # Dependency directories
41 | node_modules/
42 | jspm_packages/
43 |
44 | # TypeScript v1 declaration files
45 | typings/
46 |
47 | # TypeScript cache
48 | *.tsbuildinfo
49 |
50 | # Optional npm cache directory
51 | .npm
52 |
53 | # Optional eslint cache
54 | .eslintcache
55 |
56 | # Microbundle cache
57 | .rpt2_cache/
58 | .rts2_cache_cjs/
59 | .rts2_cache_es/
60 | .rts2_cache_umd/
61 |
62 | # Optional REPL history
63 | .node_repl_history
64 |
65 | # Output of 'npm pack'
66 | *.tgz
67 |
68 | # Yarn Integrity file
69 | .yarn-integrity
70 |
71 | # dotenv environment variables file
72 | .env
73 | .env.test
74 |
75 | # parcel-bundler cache (https://parceljs.org/)
76 | .cache
77 |
78 | # Next.js build output
79 | .next
80 |
81 | # Nuxt.js build / generate output
82 | .nuxt
83 | dist
84 |
85 | # Gatsby files
86 | .cache/
87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js
88 | # https://nextjs.org/blog/next-9-1#public-directory-support
89 | # public
90 |
91 | # vuepress build output
92 | .vuepress/dist
93 |
94 | # Serverless directories
95 | .serverless/
96 |
97 | # FuseBox cache
98 | .fusebox/
99 |
100 | # DynamoDB Local files
101 | .dynamodb/
102 |
103 | # TernJS port file
104 | .tern-port
105 |
106 | .DS_Store
107 | release/
108 |
109 | package-lock.json
110 | # pnpm-lock.yaml
111 | yarn.lock
112 |
113 | /index.js
114 | /index.mjs
115 | /types
116 | /plugin
117 |
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | shamefully-hoist=true
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | ## 0.8.3 (2023-12-03)
2 |
3 | - 0a33562 feat(plugin/alias): add `acornOptions` for #59
4 | - a45237c chore: bump vite-plugin-electron to 0.14.1
5 | - 30acf9c chore(deps): optional esbuild
6 |
7 | ## 0.8.2 (2023-02-22)
8 |
9 | - f6cd34d feat: customStart with debounce
10 |
11 | ## 0.8.1 (2023-02-21)
12 |
13 | - e67fcd0 fix: safe custom start
14 |
15 | ## 0.8.0 (2023-02-18)
16 |
17 | - cf76b6d feat(plugin/esmodule): reuse cache
18 | - 3bf1a29 feat(plugin): add dest
19 |
20 | ## 0.7.4 (2023-01-19)
21 |
22 | - 1390a35 refactor: remove `Configuration.api.vite.config`
23 | - 89bdbdd refactor: use `startup()` from vite-plugin-electron
24 | - 1f73941 chore: compatible `acorn7.x`
25 |
26 | ## 0.7.3 (2023-01-06)
27 |
28 | - 5a4c8db fix: acorn.parse use `ecmaVersion: 2022`
29 |
30 | ## 0.7.2 (2023-01-01)
31 |
32 | - f80b98a chore: update examples/esmodule
33 | - 201547c feat(plugin/alias): support dynamic `import()`
34 | - b1a33c6 chore: cleanup, use `vite-plugin-utils`
35 | - a78371b chore(deps): add `acorn`, `vite-plugin-utils`
36 |
37 | ## 0.7.1 (2022-12-30)
38 |
39 | - ed4993c fix: include types
40 |
41 | ## 0.7.0 (2022-12-30)
42 |
43 | #### Features
44 |
45 | Support use ESM npm-package in Electron-Main.
46 |
47 | ```ts
48 | import { esmodule } from 'vite-electron-plugin/plugin'
49 | ```
50 |
51 | 👉 [example](https://github.com/electron-vite/vite-electron-plugin/tree/main/examples/esmodule)
52 |
53 | - 1879a2e feat: examples/esmodule
54 | - c47bc38 feat: support ESM npm-package | electron-vite-react#98
55 | - 8441b06 refactor: cleanup plugin -> src-plugin
56 |
57 | ## 0.6.4 (2022-12-27)
58 |
59 | - 7071a1c fix: bump notbundle to 0.3.3 #44
60 |
61 | ## 0.6.3 (2022-12-27)
62 |
63 | - 4d008ff fix: correct `transformOptions`
64 |
65 | ## 0.6.2 (2022-12-26)
66 |
67 | - 9ce7a2e chore: bump notbundle to 0.3.2
68 | - 7eba408 feat: add test 🌱
69 | - f6dea8f chore: remove console.log
70 | - 0d5b382 refactor: cleanup
71 |
72 | ## 0.6.1 (2022-12-25)
73 |
74 | - 55e4c75 chore: bump vite to 4.0.3
75 | - befb032 feat: bump notbundle to 0.3.1, `esbuildPlugin`
76 | - 4617849 feat: startup
77 |
78 | ## 0.6.0 (2022-12-23)
79 |
80 | #### Features
81 |
82 | **JavaScript API**
83 |
84 | ```ts
85 | import {
86 | type Configuration,
87 | type ResolvedConfig,
88 | type Plugin,
89 | build,
90 | watch,
91 | startup,
92 | defineConfig,
93 | default as electron,
94 | } from 'vite-electron-plugin'
95 | ```
96 |
97 | Example:
98 |
99 | ```js
100 | // dev
101 | watch({
102 | include: [
103 | // The Electron source codes directory
104 | 'electron',
105 | ],
106 | plugins: [
107 | {
108 | name: 'plugin-electron-startup',
109 | ondone() {
110 | // Startup Electron App
111 | startup()
112 | },
113 | },
114 | ],
115 | })
116 |
117 | // build
118 | build({
119 | include: ['electron'],
120 | })
121 | ```
122 |
123 | #### Commit
124 |
125 | - ffe8e8b refactor: based notbundle
126 | - 79d8dee chore: bump deps
127 | - e36d86e refactor: better build
128 | - 97e53fa refactor!: use `notbundle`, export JavaScript API 🌱
129 |
130 | ## 0.5.2 (2022-11-20)
131 |
132 | - b0a21c1 refactor(build): better scripts
133 | - 0d689fe Merge pull request #38 from thepiper/main
134 |
135 | ## 0.5.1 (2022-11-07)
136 |
137 | - 11223b0 v0.5.1
138 | - 963c283 feat(#33): generate types
139 | - 4dcccee feat: polyfill `import.meta.env`
140 | - 1fb98b4 feat: reuse sourcemap 🌱
141 |
142 | ## 0.5.0 (2022-10-31)
143 |
144 | - c53008c fix(#26): normalizePath
145 | - 9a243ff v0.5.0
146 | - 6806356 docs: v0.5.0
147 | - 05bd414 chore: cleanup
148 | - d0c67a5 refactor(plugin): `process.env.XXX` -> `import.meta.env.XXX`
149 | - 7666a05 chore(deps): bump vite to 3.2.1
150 | - f82007a feat(examples): quick-start v0.5.0
151 | - f5ff091 chore: backup
152 | - 75eb4b5 chore: `"target": "ES2022"`
153 | - ca726f5 feat(plugin): `loadViteEnv()`
154 | - fa86b10 feat: add `ResolvedConfig['viteResolvedConfig']`
155 |
156 | ## 0.4.7 (2022-10-28)
157 |
158 | - db5e1a7 v0.4.7
159 | - 554d772 (main) chore: cleanup
160 | - f67afd8 chore: update types
161 | - 6dbf474 chore: implements `normalizePath()`
162 | - 36485b5 chore: `node:` prefix
163 | - 78f64f3 (github/main) Merge pull request #20 from keyiis/main
164 | - f103920 Resolve path resolution errors in Windows environment
165 | - 5dd82a3 docs: update
166 | - ac398e2 chore: update comments
167 |
168 | ## 0.4.6 (2022-10-10)
169 |
170 | - df59e2a v0.4.6
171 | - bdda85a fix(🐞): electron-vite-react/issues/72
172 |
173 | ## 0.4.5 (2022-10-10)
174 |
175 | - 030906f v0.4.5
176 | - 07714bc docs: v0.4.5
177 | - 2e24e98 chore(examples): update usage case
178 | - a54f44a chore: bump vite to 3.2.0-beta.0
179 | - 774d226 chore: cleanup
180 | - 909116b feat: `reload()` 🌱
181 |
182 | ## 0.4.4 (2022-10-06)
183 |
184 | - 6ba1147 v0.4.4
185 | - 76487a3 fix(#12): Windows path 🐞
186 |
187 | ## 0.4.3 (2022-10-05)
188 |
189 | - 895d4e6 v0.4.3
190 | - ae21cd9 fix(#10): `index.js` -> `index.mjs`, `index.cjs` -> `index.js`
191 | - dc41b53 chore(examples): bump dependencies
192 | - 5fd7797 chore(examples): add typescript
193 |
194 | ## 0.4.2 (2022-10-04)
195 |
196 | - 2a34af1 v0.4.2
197 | - 32bf379 (main) chore: rename
198 | - bcf26f2 chore(🤔): remove `ensureDir.cache`
199 | - 5af7dc1 fix(examples): correct reference types path
200 |
201 | ## 0.4.1 (2022-10-03)
202 |
203 | - 4e43983 v0.4.1
204 | - 736c66d chore: log info
205 | - 1c5668d chore(utils): add `colours.gary`
206 | - b3712ae fix(plugin): API incorrect
207 |
208 | ## 0.4.0 (2022-10-02)
209 |
210 | - 471f71b v0.4.0
211 | - 84ee5b3 fix(plugin): correct copy path
212 | - b4b03a9 chore: use `logger`
213 | - f43fbbb choer: ignore warning
214 | - c78f604 feat: support sourcemap
215 | - 599a6b7 feat: `logger`
216 | - 0ee1ec9 feat: ensureDir.cache
217 |
218 | ## 0.3.3 (2022-10-01)
219 |
220 | - 5d76ce1 v0.3.3
221 | - 8d659a7 docs: v0.3.3
222 | - a2c50e8 feat: examples/copy
223 | - 3c8c9b5 feat(plugin): copy 🌱
224 | - 2c1906d chore: optimize
225 | - 4abefa2 feat: `colours.green`
226 | - 4ee34d4 docs: update
227 |
228 | ## 0.3.2 (2022-09-30)
229 |
230 | - b7dc155 `index.js` -> `index.cjs`, `index.mjs` -> `index.js`
231 | - 20f32a1 upate
232 | - e0fc882 add plugin/index.js
233 | - a244e52 chore: U transform ReturnType
234 | - 1501c5d chore(plugin): comments
235 | - cc326f2 feat: examples/alias
236 | - 7a00f7b feat(plugin): alias 🌱
237 | - 1423687 fix(🐞): exclude `.d.ts`
238 | - 5d1fef1 chore: optimize
239 | - 3a737e9 ignore `plugin/index.js`
240 |
241 | ## 0.3.1 (2022-09-29)
242 |
243 | - e6615ec v0.3.1
244 | - d6759a3 docs: v0.3.1
245 | - d783812 chore: update deps
246 | - 4003da5 chore: update custom-start-electron-app
247 | - 00d9cd0 refactor(plugin): better `customStart()`
248 | - 345dc90 fix(🐞): `ondone` not work
249 | - d715d0c chore(plugin): optimize
250 | - 9d4925a docs: update
251 |
252 | ## 0.3.0 (2022-09-28)
253 |
254 | - f2a9600 v0.3.0
255 | - 62496b4 docs: v0.3.0
256 | - f160da6 refactor: custom start APP with v0.3.0
257 | - f23a007 feat: build plugin
258 | - 2a14f4c update
259 | - 76733a0 feat(plugin): `customStart()`
260 | - 1b9477b feat(🌱): support plugin
261 |
262 | ## 0.2.1 (2022-09-27)
263 |
264 | - 51a7027 v0.2.1
265 | - b5e30c8 docs: v0.2.1
266 | - 9ff0305 refactor: transform `args.stop()` -> `args.done()`
267 | - 9ba3d8e fix(🐞): use `normalizePath()`
268 |
269 | ## 0.2.0 (2022-09-26)
270 |
271 | - 77a7ad0 v0.2.0
272 | - 8a7a1ee docs: v0.2.0
273 | - 28ee010 chore: update `ResolvedConfig`
274 | - f6ea9c0 feat: examples/custom-start-electron-app
275 | - cc8a30a feat(🌱): v0.2.0
276 | - 2cdd3c8 refactor: cleanup
277 |
278 | ## 0.1.0 (2022-09-25)
279 |
280 | - 340f988 v0.1.0
281 | - 5a4fce4 `demo` -> `examples`
282 | - dfd5c33 updat quick-start vite.config.ts
283 | - cc80d05 feat(🌱): `configResolved()` `onwatch()` `transform()`
284 | - fa3d287 chore: optimize
285 | - bf63350 Merge branch 'main' of github.com:caoxiemeihao/vite-plugin-electron-unbuild into main
286 | - e796014 Initial commit
287 | - cb41f49 feat: demo/quick-start
288 | - f6e5c4b feat(🌱): core code
289 | - f5acd94 first commit
290 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 草鞋没号
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 | # vite-electron-plugin
2 |
3 | High-performance, esbuild-based Vite Electron plugin
4 |
5 | [](https://npmjs.com/package/vite-electron-plugin)
6 | [](https://npmjs.com/package/vite-electron-plugin)
7 |
8 | - 🚀 High-performance (Not Bundle, based on esbuild)
9 | - 🎯 Support Plugin (Like Vite's plugin)
10 | - 🌱 What you see is what you get
11 | - 🔥 Hot restart
12 |
13 | ## Quick Setup
14 |
15 | 1. Add dependency to project
16 |
17 | ```sh
18 | npm i -D vite-electron-plugin
19 | ```
20 |
21 | 2. Add `vite-electron-plugin` into `vite.config.ts`
22 |
23 | ```js
24 | import electron from 'vite-electron-plugin'
25 |
26 | export default {
27 | plugins: [
28 | electron({
29 | include: [
30 | // The Electron source codes directory
31 | 'electron',
32 | ],
33 | }),
34 | ],
35 | }
36 | ```
37 |
38 | 3. Create `electron/main.ts` and type the following code
39 |
40 | ```js
41 | import { app, BrowserWindow } from 'electron'
42 |
43 | app.whenReady().then(() => {
44 | const win = new BrowserWindow()
45 |
46 | if (process.env.VITE_DEV_SERVER_URL) {
47 | win.loadURL(process.env.VITE_DEV_SERVER_URL)
48 | } else {
49 | win.loadFile('dist/index.html')
50 | }
51 | })
52 | ```
53 |
54 | 4. Add entry into `package.json`
55 |
56 | ```diff
57 | {
58 | + "main": "dist-electron/main.js"
59 | }
60 | ```
61 |
62 | ## [Examples](https://github.com/electron-vite/vite-electron-plugin/tree/main/examples)
63 |
64 | - [quick-start](https://github.com/electron-vite/vite-electron-plugin/tree/main/examples/quick-start)
65 |
66 | ## Recommend Structure
67 |
68 | Let's use the official [template-vanilla-ts](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-vanilla-ts) created based on `create vite` as an example
69 |
70 | ```diff
71 | + ├─┬ electron
72 | + │ └── main.ts
73 | ├─┬ src
74 | │ ├── main.ts
75 | │ ├── style.css
76 | │ └── vite-env.d.ts
77 | ├── .gitignore
78 | ├── favicon.svg
79 | ├── index.html
80 | ├── package.json
81 | ├── tsconfig.json
82 | + └── vite.config.ts
83 | ```
84 | ## Conventions
85 |
86 | - Any file ending with `reload.ext` *(e.g. `foo.reload.js`, `preload.ts`)* after an update,
87 | will trigger a reload of the Electron-Renderer process, instead of an entire Electron App restart.
88 | **Which is useful when updating Preload-Scripts.**
89 |
90 | ## Configuration
91 |
92 | ###### `electron(config: Configuration)`
93 |
94 |
95 |
96 | Key
97 | Type
98 | Description
99 | Required
100 | Default
101 |
102 |
103 |
104 | include
105 | Array
106 |
107 | directory
or filename
or glob
Array.
108 | Must be a relative path, which will be calculated based on the root
.
109 | If it is an absolute path, it can only be a subpath of root.
110 | Otherwise it will cause the output file path to be calculated incorrectly.
111 |
112 | ✅
113 |
114 |
115 |
116 | root
117 | string
118 |
119 |
120 | process.cwd()
121 |
122 |
123 | outDir
124 | string
125 | Output Directory.
126 |
127 | dist-electron
128 |
129 |
130 | api
131 | Record<string, any>
132 | Useful if you want to pass some payload to the plugin.
133 |
134 |
135 |
136 |
137 | plugins
138 | Plugin[]
139 | See the Plugin API.
140 |
141 |
142 |
143 |
144 | logger
145 | { [type: string], (...message: string[]) => void }
146 | Custom log. If logger
is passed, all logs will be input this option
147 |
148 |
149 |
150 |
151 | transformOptions
152 | import('esbuild').TransformOptions
153 | Options of esbuild.transform()
154 |
155 |
156 |
157 |
158 | watch
159 | import('chokidar').WatchOptions
160 | Options of chokidar.watch()
161 |
162 |
163 |
164 |
165 |
166 |
167 | ## Plugin API
168 |
169 | > The design of plugin is similar to [Vite's plugin](https://vitejs.dev/guide/api-plugin.html). But simpler, only 4 hooks in total.
170 |
171 | #### `configResolved`
172 |
173 | - **Type**: `(config: ResolvedConfig) => void | Promise`
174 | - **Kind**: `async`, `sequential`
175 |
176 | You can freely modify the `config` argument in ths hooks or use.
177 |
178 | #### `onwatch` serve only
179 |
180 | - **Type**: `(envet: 'add' | 'change' | 'addDir' | 'unlink' | 'unlinkDir', path: string) => void`
181 | - **Kind**: `async`, `parallel`
182 |
183 | Triggered by `include` file changes. You can emit some files in this hooks. Even restart the Electron App.
184 |
185 | #### `transform`
186 |
187 | - **Type**: `(args: { filename: string, code: string, done: () => void }) => string | import('esbuild').TransformResult | void | Promise`
188 | - **Kind**: `async`, `sequential`
189 |
190 | Triggered by changes in `extensions` files in include.
191 |
192 | #### `ondone`
193 |
194 | - **Type**: `(args: { filename: string, distname: string }) => void`
195 | - **Kind**: `async`, `parallel`
196 |
197 | Triggered when `transform()` ends or a file in `extensions` is removed.
198 |
199 | ## Builtin Plugin
200 |
201 | ```ts
202 | import path from 'node:path'
203 | import electron from 'vite-electron-plugin'
204 | import {
205 | alias,
206 | copy,
207 | dest,
208 | esmodule,
209 | customStart,
210 | loadViteEnv,
211 | } from 'vite-electron-plugin/plugin'
212 |
213 | export default {
214 | plugins: [
215 | electron({
216 | plugins: [
217 | alias([
218 | // `replacement` is recommented to use absolute path,
219 | // it will be automatically calculated as relative path.
220 | { find: '@', replacement: path.join(__dirname, 'src') },
221 | ]),
222 |
223 | copy([
224 | // filename, glob
225 | { from: 'foo/*.ext', to: 'dest' },
226 | ]),
227 |
228 | // Dynamic change the build dist path.
229 | dest((_from, to) => to?.replace('dist-electron', 'dist-other')),
230 |
231 | customStart(({ startup }) => {
232 | // If you want to control the launch of Electron App yourself.
233 | startup()
234 | }),
235 |
236 | // Support use ESM npm-package in Electron-Main.
237 | esmodule({
238 | // e.g. `execa`, `node-fetch`, `got`, etc.
239 | include: ['execa', 'node-fetch', 'got'],
240 | }),
241 |
242 | // https://vitejs.dev/guide/env-and-mode.html#env-files
243 | // Support use `import.meta.env.VITE_SOME_KEY` in Electron-Main
244 | loadViteEnv(),
245 | ],
246 | }),
247 | ],
248 | }
249 | ```
250 |
251 | ## JavaScript API
252 |
253 | ```ts
254 | import {
255 | type Configuration,
256 | type ResolvedConfig,
257 | type Plugin,
258 | build,
259 | watch,
260 | startup,
261 | defineConfig,
262 | default as electron,
263 | } from 'vite-electron-plugin'
264 | ```
265 |
266 | **Example**
267 |
268 | ```js
269 | // dev
270 | watch({
271 | include: [
272 | // The Electron source codes directory
273 | 'electron',
274 | ],
275 | plugins: [
276 | {
277 | name: 'plugin-electron-startup',
278 | ondone() {
279 | // Startup Electron App
280 | startup()
281 | },
282 | },
283 | ],
284 | })
285 |
286 | // build
287 | build({
288 | include: ['electron'],
289 | })
290 | ```
291 |
--------------------------------------------------------------------------------
/electron-env.d.ts:
--------------------------------------------------------------------------------
1 |
2 | declare namespace NodeJS {
3 | interface ProcessEnv {
4 | NODE_ENV: string
5 | VITE_DEV_SERVER_URL: string
6 | }
7 |
8 | interface Process {
9 | electronApp?: import('node:child_process').ChildProcess
10 | _plugin_watcher?: import('notbundle').FSWatcher
11 | }
12 | }
13 |
14 | interface ImportMeta {
15 | /** shims Vite */
16 | env: Record
17 | }
18 |
--------------------------------------------------------------------------------
/examples/alias/.gitignore:
--------------------------------------------------------------------------------
1 | dist-electron
--------------------------------------------------------------------------------
/examples/alias/common/foo.js:
--------------------------------------------------------------------------------
1 |
2 | exports.message = '@common/foo.js'
3 |
--------------------------------------------------------------------------------
/examples/alias/electron-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | declare namespace NodeJS {
4 | interface ProcessEnv {
5 | NODE_ENV: string
6 | VITE_DEV_SERVER_URL: string
7 |
8 | ROOT: string
9 | DIST: string
10 | VITE_PUBLIC: string
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/examples/alias/electron/main.ts:
--------------------------------------------------------------------------------
1 | import { app, BrowserWindow } from 'electron'
2 | import foo from '@common/foo'
3 |
4 | app.whenReady().then(() => {
5 | new BrowserWindow().loadURL(process.env.VITE_DEV_SERVER_URL)
6 | console.log('Alias module -', foo)
7 | })
8 |
--------------------------------------------------------------------------------
/examples/alias/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite + TS
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/examples/alias/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vite-electron-plugin-custom-start-electron-app",
3 | "version": "0.0.0",
4 | "private": true,
5 | "author": "草鞋没号 <308487730@qq.com>",
6 | "license": "MIT",
7 | "main": "dist-electron/main.js",
8 | "scripts": {
9 | "dev": "vite",
10 | "build": "vite build"
11 | },
12 | "devDependencies": {
13 | "electron": "^22.0.0",
14 | "typescript": "^4.9.4",
15 | "vite": "^4.0.3",
16 | "vite-electron-plugin": "workspace:*"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/examples/alias/renderer.ts:
--------------------------------------------------------------------------------
1 | document.getElementById('app')!.innerHTML = `
2 | examples/alias
3 | `
--------------------------------------------------------------------------------
/examples/alias/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2019",
4 | "module": "CommonJS",
5 | "esModuleInterop": true,
6 | "moduleResolution": "Node",
7 | "resolveJsonModule": true,
8 | "allowJs": true,
9 | "declaration": true,
10 | "skipLibCheck": true,
11 | "allowSyntheticDefaultImports": true,
12 | "baseUrl": ".",
13 | "outDir": "dist",
14 | "strict": true,
15 | "paths": {
16 | "@common/*": ["common/*"]
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/examples/alias/vite.config.ts:
--------------------------------------------------------------------------------
1 | import path from 'node:path'
2 | import { rmSync } from 'node:fs'
3 | import { defineConfig } from 'vite'
4 | import electron from 'vite-electron-plugin'
5 | import { alias } from 'vite-electron-plugin/plugin'
6 |
7 | rmSync(path.join(__dirname, 'dist-electron'), { recursive: true, force: true })
8 |
9 | export default defineConfig({
10 | plugins: [electron({
11 | include: [
12 | 'electron',
13 | ],
14 | plugins: [
15 | alias(
16 | [
17 | { find: '@common', replacement: path.join(__dirname, 'common') },
18 | ],
19 | {
20 | acornOptions: { ecmaVersion: 2022 },
21 | },
22 | ),
23 | ],
24 | })],
25 | })
26 |
--------------------------------------------------------------------------------
/examples/copy/.gitignore:
--------------------------------------------------------------------------------
1 | dist-electron
--------------------------------------------------------------------------------
/examples/copy/electron-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | declare namespace NodeJS {
4 | interface ProcessEnv {
5 | NODE_ENV: string
6 | VITE_DEV_SERVER_URL: string
7 |
8 | ROOT: string
9 | DIST: string
10 | VITE_PUBLIC: string
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/examples/copy/electron/main.ts:
--------------------------------------------------------------------------------
1 | import { app, BrowserWindow } from 'electron'
2 |
3 | app.whenReady().then(() => {
4 | new BrowserWindow().loadURL(process.env.VITE_DEV_SERVER_URL)
5 | })
6 |
--------------------------------------------------------------------------------
/examples/copy/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite + TS
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/examples/copy/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vite-electron-plugin-custom-start-electron-app",
3 | "version": "0.0.0",
4 | "private": true,
5 | "author": "草鞋没号 <308487730@qq.com>",
6 | "license": "MIT",
7 | "main": "dist-electron/main.js",
8 | "scripts": {
9 | "dev": "vite",
10 | "build": "vite build"
11 | },
12 | "devDependencies": {
13 | "electron": "^22.0.0",
14 | "typescript": "^4.9.4",
15 | "vite": "^4.0.3",
16 | "vite-electron-plugin": "workspace:*"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/examples/copy/renderer.ts:
--------------------------------------------------------------------------------
1 | document.getElementById('app')!.innerHTML = `
2 | examples/copy
3 | `
--------------------------------------------------------------------------------
/examples/copy/static/foo/bar/screenshort.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/caoxiemeihao/vite-electron-plugin/b2dd5e6511d6a9d81f11c98c4a61415a2d3e0388/examples/copy/static/foo/bar/screenshort.png
--------------------------------------------------------------------------------
/examples/copy/static/foo/screenshort.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/caoxiemeihao/vite-electron-plugin/b2dd5e6511d6a9d81f11c98c4a61415a2d3e0388/examples/copy/static/foo/screenshort.png
--------------------------------------------------------------------------------
/examples/copy/static/screenshort.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/caoxiemeihao/vite-electron-plugin/b2dd5e6511d6a9d81f11c98c4a61415a2d3e0388/examples/copy/static/screenshort.png
--------------------------------------------------------------------------------
/examples/copy/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2019",
4 | "module": "CommonJS",
5 | "esModuleInterop": true,
6 | "moduleResolution": "Node",
7 | "resolveJsonModule": true,
8 | "allowJs": true,
9 | "declaration": true,
10 | "skipLibCheck": true,
11 | "allowSyntheticDefaultImports": true,
12 | "baseUrl": ".",
13 | "outDir": "dist",
14 | "strict": true
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/examples/copy/vite.config.ts:
--------------------------------------------------------------------------------
1 | import path from 'node:path'
2 | import { rmSync } from 'node:fs'
3 | import { defineConfig } from 'vite'
4 | import electron from 'vite-electron-plugin'
5 | import { copy } from 'vite-electron-plugin/plugin'
6 |
7 | rmSync(path.join(__dirname, 'dist-electron'), { recursive: true, force: true })
8 |
9 | export default defineConfig({
10 | plugins: [electron({
11 | include: [
12 | 'electron',
13 | ],
14 | plugins: [
15 | copy([
16 | { from: 'static/**/*', to: 'dist-electron/static' },
17 | ]),
18 | ],
19 | })],
20 | })
21 |
--------------------------------------------------------------------------------
/examples/custom-start-electron-app/.gitignore:
--------------------------------------------------------------------------------
1 | dist-electron
--------------------------------------------------------------------------------
/examples/custom-start-electron-app/electron-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | declare namespace NodeJS {
4 | interface ProcessEnv {
5 | NODE_ENV: string
6 | VITE_DEV_SERVER_URL: string
7 |
8 | ROOT: string
9 | DIST: string
10 | VITE_PUBLIC: string
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/examples/custom-start-electron-app/electron/main.ts:
--------------------------------------------------------------------------------
1 | import { app, BrowserWindow } from 'electron'
2 |
3 | app.whenReady().then(() => {
4 | new BrowserWindow().loadURL(process.env.VITE_DEV_SERVER_URL)
5 | })
6 |
--------------------------------------------------------------------------------
/examples/custom-start-electron-app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite + TS
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/examples/custom-start-electron-app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vite-electron-plugin-custom-start-electron-app",
3 | "version": "0.0.0",
4 | "private": true,
5 | "author": "草鞋没号 <308487730@qq.com>",
6 | "license": "MIT",
7 | "main": "dist-electron/main.js",
8 | "scripts": {
9 | "dev": "vite",
10 | "build": "vite build"
11 | },
12 | "devDependencies": {
13 | "electron": "^22.0.0",
14 | "typescript": "^4.9.4",
15 | "vite": "^4.0.3",
16 | "vite-electron-plugin": "workspace:*"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/examples/custom-start-electron-app/renderer.ts:
--------------------------------------------------------------------------------
1 | document.getElementById('app')!.innerHTML = `
2 | examples/custom-start-electron-app
3 | `
--------------------------------------------------------------------------------
/examples/custom-start-electron-app/vite.config.ts:
--------------------------------------------------------------------------------
1 | import path from 'node:path'
2 | import { rmSync } from 'node:fs'
3 | import { defineConfig } from 'vite'
4 | import electron from 'vite-electron-plugin'
5 | import { customStart } from 'vite-electron-plugin/plugin'
6 |
7 | rmSync(path.join(__dirname, 'dist-electron'), { recursive: true, force: true })
8 |
9 | export default defineConfig({
10 | plugins: [electron({
11 | include: [
12 | 'electron',
13 | ],
14 | plugins: [
15 | customStart(debounce(args => {
16 | if (['.ts', '.js'].some(ext => args.filename.endsWith('reload' + ext))) {
17 | // Any file ending with `reload.ext` *(e.g. `foo.reload.js`, `preload.ts`)* after an update,
18 | // will trigger a reload of the Electron-Renderer process, instead of an entire Electron App restart.
19 | // Which is useful when updating Preload-Scripts.
20 | args.reload()
21 | } else {
22 | // This callback function will be called when the "js" files in the include changes
23 | // Equivalent to - `electron . --no-sandbox` (make sure the "main" field in package.json is correct)
24 | args?.startup(['.', '--no-sandbox'])
25 | }
26 | })),
27 | ],
28 | })],
29 | })
30 |
31 | function debounce void>(fn: Fn, delay = 299) {
32 | let t: NodeJS.Timeout
33 | return ((...args) => {
34 | // !t && fn(...args) // first call
35 | clearTimeout(t)
36 | t = setTimeout(() => fn(...args), delay)
37 | }) as Fn
38 | }
39 |
--------------------------------------------------------------------------------
/examples/esmodule/.gitignore:
--------------------------------------------------------------------------------
1 | dist-electron
2 | .esmodule
--------------------------------------------------------------------------------
/examples/esmodule/electron-builder.json5:
--------------------------------------------------------------------------------
1 | /**
2 | * @see https://www.electron.build/configuration/configuration
3 | */
4 | {
5 | "appId": "YourAppID",
6 | "asar": false,
7 | "directories": {
8 | "output": "release/${version}"
9 | },
10 | "files": [
11 | "dist",
12 | "dist-electron",
13 | ".esmodule/**",
14 | ],
15 | "mac": {
16 | "artifactName": "${productName}_${version}.${ext}",
17 | "target": [
18 | "dmg"
19 | ]
20 | },
21 | "win": {
22 | "target": [
23 | {
24 | "target": "nsis",
25 | "arch": [
26 | "x64"
27 | ]
28 | }
29 | ],
30 | "artifactName": "${productName}_${version}.${ext}"
31 | },
32 | "nsis": {
33 | "oneClick": false,
34 | "perMachine": false,
35 | "allowToChangeInstallationDirectory": true,
36 | "deleteAppDataOnUninstall": false
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/examples/esmodule/electron-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | declare namespace NodeJS {
4 | interface ProcessEnv {
5 | NODE_ENV: string
6 | VITE_DEV_SERVER_URL: string
7 |
8 | ROOT: string
9 | DIST: string
10 | VITE_PUBLIC: string
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/examples/esmodule/electron/main.ts:
--------------------------------------------------------------------------------
1 | process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true'
2 |
3 | import path from 'node:path'
4 | import { app, BrowserWindow } from 'electron'
5 | import { execa } from 'execa'
6 |
7 | let win: BrowserWindow | null
8 |
9 | app.whenReady().then(() => {
10 | win = new BrowserWindow({
11 | webPreferences: {
12 | preload: path.join(__dirname, './preload.js')
13 | },
14 | })
15 |
16 | win.webContents.on('did-finish-load', async () => {
17 | const { stdout } = await execa('echo', ['unicorns'])
18 | console.log(stdout)
19 |
20 | // Test actively push message to the Electron-Renderer
21 | win?.webContents.send('main-process-message', `execa.echo -> ${stdout}`)
22 |
23 | await import('execa').then(async ({ execa }) => {
24 | const { stdout } = await execa('echo', ["async import('execa')"])
25 | console.log(stdout)
26 |
27 | win?.webContents.send('main-process-message', `execa.echo -> ${stdout}`)
28 | })
29 | })
30 | win.webContents.openDevTools()
31 |
32 | if (process.env.VITE_DEV_SERVER_URL) {
33 | win.loadURL(process.env.VITE_DEV_SERVER_URL)
34 | } else {
35 | win.loadFile(path.join(__dirname, '../dist/index.html'))
36 | }
37 | })
38 |
39 | app.on('window-all-closed', () => {
40 | win = null
41 | })
42 |
--------------------------------------------------------------------------------
/examples/esmodule/electron/preload.ts:
--------------------------------------------------------------------------------
1 | import { ipcRenderer } from 'electron'
2 |
3 | ipcRenderer.on('main-process-message', (_event, ...args) => {
4 | console.log('[Receive Main-process message]:', ...args)
5 | })
6 |
--------------------------------------------------------------------------------
/examples/esmodule/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite + TS
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/examples/esmodule/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vite-electron-plugin-custom-start-electron-app",
3 | "version": "0.0.0",
4 | "private": true,
5 | "author": "草鞋没号 <308487730@qq.com>",
6 | "license": "MIT",
7 | "main": "dist-electron/main.js",
8 | "scripts": {
9 | "dev": "vite",
10 | "build": "vite build && electron-builder"
11 | },
12 | "dependencies": {},
13 | "devDependencies": {
14 | "electron": "^22.0.0",
15 | "electron-builder": "^23.6.0",
16 | "execa": "^6.1.0",
17 | "typescript": "^4.9.4",
18 | "vite": "^4.0.3",
19 | "vite-electron-plugin": "workspace:*"
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/examples/esmodule/renderer.ts:
--------------------------------------------------------------------------------
1 | document.getElementById('app')!.innerHTML = `
2 | examples/esmodule
3 | `
--------------------------------------------------------------------------------
/examples/esmodule/vite.config.ts:
--------------------------------------------------------------------------------
1 | import path from 'node:path'
2 | import { rmSync } from 'node:fs'
3 | import { defineConfig } from 'vite'
4 | import electron from 'vite-electron-plugin'
5 | import { esmodule } from 'vite-electron-plugin/plugin'
6 |
7 | rmSync(path.join(__dirname, 'dist-electron'), { recursive: true, force: true })
8 |
9 | export default defineConfig({
10 | plugins: [electron({
11 | include: [
12 | 'electron',
13 | ],
14 | plugins: [
15 | esmodule({
16 | include: ['execa'],
17 | }),
18 | ],
19 | })],
20 | })
21 |
22 | function debounce void>(fn: Fn, delay = 299) {
23 | let t: NodeJS.Timeout
24 | return ((...args) => {
25 | // !t && fn(...args) // first call
26 | clearTimeout(t)
27 | t = setTimeout(() => fn(...args), delay)
28 | }) as Fn
29 | }
30 |
--------------------------------------------------------------------------------
/examples/quick-start/.env:
--------------------------------------------------------------------------------
1 | VITE_TEST_STRING=vite-test-env
2 | VITE_TEST_NUMVER=123
3 | VITE_TEST_BOOLEAN=true
--------------------------------------------------------------------------------
/examples/quick-start/.gitignore:
--------------------------------------------------------------------------------
1 | dist-electron
2 | !.env
--------------------------------------------------------------------------------
/examples/quick-start/common.ts:
--------------------------------------------------------------------------------
1 | console.log('---- common.ts ----')
2 |
--------------------------------------------------------------------------------
/examples/quick-start/electron-builder.json5:
--------------------------------------------------------------------------------
1 | /**
2 | * @see https://www.electron.build/configuration/configuration
3 | */
4 | {
5 | "appId": "YourAppID",
6 | "asar": true,
7 | "directories": {
8 | "output": "release/${version}"
9 | },
10 | "files": [
11 | "dist",
12 | "dist-electron",
13 | ],
14 | "mac": {
15 | "artifactName": "${productName}_${version}.${ext}",
16 | "target": [
17 | "dmg"
18 | ]
19 | },
20 | "win": {
21 | "target": [
22 | {
23 | "target": "nsis",
24 | "arch": [
25 | "x64"
26 | ]
27 | }
28 | ],
29 | "artifactName": "${productName}_${version}.${ext}"
30 | },
31 | "nsis": {
32 | "oneClick": false,
33 | "perMachine": false,
34 | "allowToChangeInstallationDirectory": true,
35 | "deleteAppDataOnUninstall": false
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/examples/quick-start/electron-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | declare namespace NodeJS {
4 | interface ProcessEnv {
5 | NODE_ENV: string
6 | VITE_DEV_SERVER_URL: string
7 |
8 | ROOT: string
9 | DIST: string
10 | VITE_PUBLIC: string
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/examples/quick-start/electron/main/index.ts:
--------------------------------------------------------------------------------
1 | import { app, BrowserWindow } from 'electron'
2 | import path from 'node:path'
3 |
4 | // The built directory structure
5 | //
6 | // ├─┬ dist-electron
7 | // │ ├─┬ main
8 | // │ │ └── index.js
9 | // │ ├─┬ preload
10 | // │ │ └── index.js
11 | // │ ├─┬ renderer
12 | // │ │ └── index.html
13 |
14 | process.env.ROOT = path.join(__dirname, '../..')
15 | process.env.DIST = path.join(process.env.ROOT, 'dist-electron')
16 | process.env.VITE_PUBLIC = process.env.VITE_DEV_SERVER_UR
17 | ? path.join(process.env.ROOT, 'public')
18 | : path.join(process.env.ROOT, 'dist')
19 | process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true'
20 |
21 | let win: BrowserWindow
22 | const preload = path.join(process.env.DIST, 'preload.js')
23 |
24 | // From .env files
25 | import.meta.env.VITE_TEST_STRING
26 | import.meta.env.VITE_TEST_NUMVER
27 | import.meta.env.VITE_TEST_BOOLEAN
28 |
29 | function bootstrap() {
30 | win = new BrowserWindow({
31 | webPreferences: {
32 | preload,
33 | },
34 | })
35 |
36 | if (process.env.VITE_DEV_SERVER_URL) {
37 | win.loadURL(process.env.VITE_DEV_SERVER_URL)
38 | win.webContents.openDevTools()
39 | } else {
40 | win.loadFile(path.join(process.env.VITE_PUBLIC, 'index.html'))
41 | }
42 | }
43 |
44 | app.whenReady().then(bootstrap)
45 |
--------------------------------------------------------------------------------
/examples/quick-start/electron/preload.ts:
--------------------------------------------------------------------------------
1 | console.log('---- electron/preload.ts ----')
2 |
--------------------------------------------------------------------------------
/examples/quick-start/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite + TS
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/examples/quick-start/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vite-electron-plugin-quick-start",
3 | "version": "0.0.0",
4 | "private": true,
5 | "author": "草鞋没号 <308487730@qq.com>",
6 | "license": "MIT",
7 | "main": "dist-electron/main/index.js",
8 | "scripts": {
9 | "dev": "vite",
10 | "build": "vite build && electron-builder"
11 | },
12 | "devDependencies": {
13 | "electron": "^22.0.0",
14 | "electron-builder": "^23.6.0",
15 | "typescript": "^4.9.4",
16 | "vite": "^4.0.3",
17 | "vite-electron-plugin": "workspace:*"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/examples/quick-start/public/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/examples/quick-start/public/screenshort.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/caoxiemeihao/vite-electron-plugin/b2dd5e6511d6a9d81f11c98c4a61415a2d3e0388/examples/quick-start/public/screenshort.png
--------------------------------------------------------------------------------
/examples/quick-start/src/counter.ts:
--------------------------------------------------------------------------------
1 | export function setupCounter(element: HTMLButtonElement) {
2 | let counter = 0
3 | const setCounter = (count: number) => {
4 | counter = count
5 | element.innerHTML = `count is ${counter}`
6 | }
7 | element.addEventListener('click', () => setCounter(++counter))
8 | setCounter(0)
9 | }
10 |
--------------------------------------------------------------------------------
/examples/quick-start/src/main.ts:
--------------------------------------------------------------------------------
1 | import './style.css'
2 | import viteLogo from '/logo.svg'
3 | import typescriptLogo from './typescript.svg'
4 | import { setupCounter } from './counter'
5 |
6 | document.querySelector('#app')!.innerHTML = `
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
Vite + TypeScript
15 |
16 |
17 |
18 |
19 | Click on the Vite and TypeScript logos to learn more
20 |
21 |
22 | `
23 |
24 | setupCounter(document.querySelector('#counter')!)
25 |
26 | postMessage({ payload: 'removeLoading' }, '*')
27 |
--------------------------------------------------------------------------------
/examples/quick-start/src/style.css:
--------------------------------------------------------------------------------
1 | :root {
2 | font-family: Inter, Avenir, Helvetica, Arial, sans-serif;
3 | font-size: 16px;
4 | line-height: 24px;
5 | font-weight: 400;
6 |
7 | color-scheme: light dark;
8 | color: rgba(255, 255, 255, 0.87);
9 | background-color: #242424;
10 |
11 | font-synthesis: none;
12 | text-rendering: optimizeLegibility;
13 | -webkit-font-smoothing: antialiased;
14 | -moz-osx-font-smoothing: grayscale;
15 | -webkit-text-size-adjust: 100%;
16 | }
17 |
18 | a {
19 | font-weight: 500;
20 | color: #646cff;
21 | text-decoration: inherit;
22 | }
23 | a:hover {
24 | color: #535bf2;
25 | }
26 |
27 | body {
28 | margin: 0;
29 | display: flex;
30 | place-items: center;
31 | min-width: 320px;
32 | min-height: 100vh;
33 | }
34 |
35 | h1 {
36 | font-size: 3.2em;
37 | line-height: 1.1;
38 | }
39 |
40 | #app {
41 | max-width: 1280px;
42 | margin: 0 auto;
43 | padding: 2rem;
44 | text-align: center;
45 | }
46 |
47 | .logo {
48 | height: 6em;
49 | padding: 1.5em;
50 | will-change: filter;
51 | }
52 | .logo:hover {
53 | filter: drop-shadow(0 0 2em #646cffaa);
54 | }
55 | .logo.vanilla:hover {
56 | filter: drop-shadow(0 0 2em #f7df1eaa);
57 | }
58 |
59 | .card {
60 | padding: 2em;
61 | }
62 |
63 | .read-the-docs {
64 | color: #888;
65 | }
66 |
67 | button {
68 | border-radius: 8px;
69 | border: 1px solid transparent;
70 | padding: 0.6em 1.2em;
71 | font-size: 1em;
72 | font-weight: 500;
73 | font-family: inherit;
74 | background-color: #1a1a1a;
75 | cursor: pointer;
76 | transition: border-color 0.25s;
77 | }
78 | button:hover {
79 | border-color: #646cff;
80 | }
81 | button:focus,
82 | button:focus-visible {
83 | outline: 4px auto -webkit-focus-ring-color;
84 | }
85 |
86 | @media (prefers-color-scheme: light) {
87 | :root {
88 | color: #213547;
89 | background-color: #ffffff;
90 | }
91 | a:hover {
92 | color: #747bff;
93 | }
94 | button {
95 | background-color: #f9f9f9;
96 | }
97 | }
98 |
--------------------------------------------------------------------------------
/examples/quick-start/src/typescript.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/examples/quick-start/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/quick-start/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2019",
4 | "module": "CommonJS",
5 | "esModuleInterop": true,
6 | "moduleResolution": "Node",
7 | "resolveJsonModule": true,
8 | "allowJs": true,
9 | "jsx": "react-jsx",
10 | "declaration": true,
11 | "skipLibCheck": true,
12 | "allowSyntheticDefaultImports": true,
13 | "baseUrl": ".",
14 | "outDir": "dist",
15 | "strict": true
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/examples/quick-start/vite.config.ts:
--------------------------------------------------------------------------------
1 | import path from 'node:path'
2 | import { rmSync } from 'node:fs'
3 | import { defineConfig } from 'vite'
4 | import electron from 'vite-electron-plugin'
5 | import { loadViteEnv } from 'vite-electron-plugin/plugin'
6 |
7 | rmSync(path.join(__dirname, 'dist-electron'), { recursive: true, force: true })
8 |
9 | export default defineConfig({
10 | plugins: [electron({
11 | include: [
12 | 'electron',
13 | // 'common.ts',
14 | ],
15 | plugins: [loadViteEnv()],
16 | })],
17 | })
18 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vite-electron-plugin",
3 | "version": "0.8.3",
4 | "description": "High-performance, esbuild-based Vite Electron plugin",
5 | "main": "index.js",
6 | "types": "types",
7 | "exports": {
8 | ".": {
9 | "import": "./index.mjs",
10 | "require": "./index.js"
11 | },
12 | "./plugin": {
13 | "import": "./plugin/index.mjs",
14 | "require": "./plugin/index.js"
15 | }
16 | },
17 | "repository": {
18 | "type": "git",
19 | "url": "git+https://github.com/electron-vite/vite-electron-plugin.git"
20 | },
21 | "author": "草鞋没号 <308487730@qq.com>",
22 | "license": "MIT",
23 | "scripts": {
24 | "build": "vite build",
25 | "dev": "vite build --watch",
26 | "types": "tsc -p tsconfig.build.json && tsc -p tsconfig.plugin.json",
27 | "prepublishOnly": "npm run test && npm run build",
28 | "test": "vitest run"
29 | },
30 | "peerDependencies": {
31 | "acorn": "*",
32 | "esbuild": "*"
33 | },
34 | "peerDependenciesMeta": {
35 | "acorn": {
36 | "optional": true
37 | },
38 | "esbuild": {
39 | "optional": true
40 | }
41 | },
42 | "dependencies": {
43 | "fast-glob": "^3.2.12",
44 | "notbundle": "~0.4.0",
45 | "vite-plugin-electron": "~0.14.1"
46 | },
47 | "devDependencies": {
48 | "@types/node": "^18.11.18",
49 | "acorn": "^8.8.1",
50 | "esbuild": "^0.16.12",
51 | "rollup": "^3.9.0",
52 | "typescript": "^4.9.4",
53 | "vite": "^4.0.3",
54 | "vite-plugin-utils": "^0.3.6",
55 | "vitest": "^0.26.2"
56 | },
57 | "files": [
58 | "plugin",
59 | "electron-env.d.ts",
60 | "types",
61 | "index.mjs",
62 | "index.js"
63 | ],
64 | "keywords": [
65 | "vite",
66 | "plugin",
67 | "electron",
68 | "unbuild"
69 | ]
70 | }
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '6.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | dependencies:
11 | fast-glob:
12 | specifier: ^3.2.12
13 | version: 3.2.12
14 | notbundle:
15 | specifier: ~0.4.0
16 | version: 0.4.0
17 | vite-plugin-electron:
18 | specifier: ~0.14.1
19 | version: 0.14.1
20 | devDependencies:
21 | '@types/node':
22 | specifier: ^18.11.18
23 | version: 18.11.18
24 | acorn:
25 | specifier: ^8.8.1
26 | version: 8.8.1
27 | esbuild:
28 | specifier: ^0.16.12
29 | version: 0.16.12
30 | rollup:
31 | specifier: ^3.9.0
32 | version: 3.9.0
33 | typescript:
34 | specifier: ^4.9.4
35 | version: 4.9.4
36 | vite:
37 | specifier: ^4.0.3
38 | version: 4.0.3(@types/node@18.11.18)
39 | vite-plugin-utils:
40 | specifier: ^0.3.6
41 | version: 0.3.6
42 | vitest:
43 | specifier: ^0.26.2
44 | version: 0.26.2
45 |
46 | examples/alias:
47 | devDependencies:
48 | electron:
49 | specifier: ^22.0.0
50 | version: 22.0.0
51 | typescript:
52 | specifier: ^4.9.4
53 | version: 4.9.4
54 | vite:
55 | specifier: ^4.0.3
56 | version: 4.0.3(@types/node@18.11.18)
57 | vite-electron-plugin:
58 | specifier: workspace:*
59 | version: link:../..
60 |
61 | examples/copy:
62 | devDependencies:
63 | electron:
64 | specifier: ^22.0.0
65 | version: 22.0.0
66 | typescript:
67 | specifier: ^4.9.4
68 | version: 4.9.4
69 | vite:
70 | specifier: ^4.0.3
71 | version: 4.0.3(@types/node@18.11.18)
72 | vite-electron-plugin:
73 | specifier: workspace:*
74 | version: link:../..
75 |
76 | examples/custom-start-electron-app:
77 | devDependencies:
78 | electron:
79 | specifier: ^22.0.0
80 | version: 22.0.0
81 | typescript:
82 | specifier: ^4.9.4
83 | version: 4.9.4
84 | vite:
85 | specifier: ^4.0.3
86 | version: 4.0.3(@types/node@18.11.18)
87 | vite-electron-plugin:
88 | specifier: workspace:*
89 | version: link:../..
90 |
91 | examples/esmodule:
92 | devDependencies:
93 | electron:
94 | specifier: ^22.0.0
95 | version: 22.0.0
96 | electron-builder:
97 | specifier: ^23.6.0
98 | version: 23.6.0
99 | execa:
100 | specifier: ^6.1.0
101 | version: 6.1.0
102 | typescript:
103 | specifier: ^4.9.4
104 | version: 4.9.4
105 | vite:
106 | specifier: ^4.0.3
107 | version: 4.0.3(@types/node@18.11.18)
108 | vite-electron-plugin:
109 | specifier: workspace:*
110 | version: link:../..
111 |
112 | examples/quick-start:
113 | devDependencies:
114 | electron:
115 | specifier: ^22.0.0
116 | version: 22.0.0
117 | electron-builder:
118 | specifier: ^23.6.0
119 | version: 23.6.0
120 | typescript:
121 | specifier: ^4.9.4
122 | version: 4.9.4
123 | vite:
124 | specifier: ^4.0.3
125 | version: 4.0.3(@types/node@18.11.18)
126 | vite-electron-plugin:
127 | specifier: workspace:*
128 | version: link:../..
129 |
130 | packages:
131 |
132 | /7zip-bin@5.1.1:
133 | resolution: {integrity: sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==}
134 | dev: true
135 |
136 | /@develar/schema-utils@2.6.5:
137 | resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==}
138 | engines: {node: '>= 8.9.0'}
139 | dependencies:
140 | ajv: 6.12.6
141 | ajv-keywords: 3.5.2(ajv@6.12.6)
142 | dev: true
143 |
144 | /@electron/get@2.0.2:
145 | resolution: {integrity: sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g==}
146 | engines: {node: '>=12'}
147 | dependencies:
148 | debug: 4.3.4
149 | env-paths: 2.2.1
150 | fs-extra: 8.1.0
151 | got: 11.8.6
152 | progress: 2.0.3
153 | semver: 6.3.0
154 | sumchecker: 3.0.1
155 | optionalDependencies:
156 | global-agent: 3.0.0
157 | transitivePeerDependencies:
158 | - supports-color
159 | dev: true
160 |
161 | /@electron/universal@1.2.1:
162 | resolution: {integrity: sha512-7323HyMh7KBAl/nPDppdLsC87G6RwRU02dy5FPeGB1eS7rUePh55+WNWiDPLhFQqqVPHzh77M69uhmoT8XnwMQ==}
163 | engines: {node: '>=8.6'}
164 | dependencies:
165 | '@malept/cross-spawn-promise': 1.1.1
166 | asar: 3.2.0
167 | debug: 4.3.4
168 | dir-compare: 2.4.0
169 | fs-extra: 9.1.0
170 | minimatch: 3.1.2
171 | plist: 3.0.6
172 | transitivePeerDependencies:
173 | - supports-color
174 | dev: true
175 |
176 | /@esbuild/android-arm64@0.16.10:
177 | resolution: {integrity: sha512-47Y+NwVKTldTlDhSgJHZ/RpvBQMUDG7eKihqaF/u6g7s0ZPz4J1vy8A3rwnnUOF2CuDn7w7Gj/QcMoWz3U3SJw==}
178 | engines: {node: '>=12'}
179 | cpu: [arm64]
180 | os: [android]
181 | requiresBuild: true
182 | dev: true
183 | optional: true
184 |
185 | /@esbuild/android-arm64@0.16.12:
186 | resolution: {integrity: sha512-0LacmiIW+X0/LOLMZqYtZ7d4uY9fxYABAYhSSOu+OGQVBqH4N5eIYgkT7bBFnR4Nm3qo6qS3RpHKVrDASqj/uQ==}
187 | engines: {node: '>=12'}
188 | cpu: [arm64]
189 | os: [android]
190 | requiresBuild: true
191 | dev: true
192 | optional: true
193 |
194 | /@esbuild/android-arm@0.16.10:
195 | resolution: {integrity: sha512-RmJjQTRrO6VwUWDrzTBLmV4OJZTarYsiepLGlF2rYTVB701hSorPywPGvP6d8HCuuRibyXa5JX4s3jN2kHEtjQ==}
196 | engines: {node: '>=12'}
197 | cpu: [arm]
198 | os: [android]
199 | requiresBuild: true
200 | dev: true
201 | optional: true
202 |
203 | /@esbuild/android-arm@0.16.12:
204 | resolution: {integrity: sha512-CTWgMJtpCyCltrvipZrrcjjRu+rzm6pf9V8muCsJqtKujR3kPmU4ffbckvugNNaRmhxAF1ZI3J+0FUIFLFg8KA==}
205 | engines: {node: '>=12'}
206 | cpu: [arm]
207 | os: [android]
208 | requiresBuild: true
209 | dev: true
210 | optional: true
211 |
212 | /@esbuild/android-x64@0.16.10:
213 | resolution: {integrity: sha512-C4PfnrBMcuAcOurQzpF1tTtZz94IXO5JmICJJ3NFJRHbXXsQUg9RFG45KvydKqtFfBaFLCHpduUkUfXwIvGnRg==}
214 | engines: {node: '>=12'}
215 | cpu: [x64]
216 | os: [android]
217 | requiresBuild: true
218 | dev: true
219 | optional: true
220 |
221 | /@esbuild/android-x64@0.16.12:
222 | resolution: {integrity: sha512-sS5CR3XBKQXYpSGMM28VuiUnbX83Z+aWPZzClW+OB2JquKqxoiwdqucJ5qvXS8pM6Up3RtJfDnRQZkz3en2z5g==}
223 | engines: {node: '>=12'}
224 | cpu: [x64]
225 | os: [android]
226 | requiresBuild: true
227 | dev: true
228 | optional: true
229 |
230 | /@esbuild/darwin-arm64@0.16.10:
231 | resolution: {integrity: sha512-bH/bpFwldyOKdi9HSLCLhhKeVgRYr9KblchwXgY2NeUHBB/BzTUHtUSBgGBmpydB1/4E37m+ggXXfSrnD7/E7g==}
232 | engines: {node: '>=12'}
233 | cpu: [arm64]
234 | os: [darwin]
235 | requiresBuild: true
236 | dev: true
237 | optional: true
238 |
239 | /@esbuild/darwin-arm64@0.16.12:
240 | resolution: {integrity: sha512-Dpe5hOAQiQRH20YkFAg+wOpcd4PEuXud+aGgKBQa/VriPJA8zuVlgCOSTwna1CgYl05lf6o5els4dtuyk1qJxQ==}
241 | engines: {node: '>=12'}
242 | cpu: [arm64]
243 | os: [darwin]
244 | requiresBuild: true
245 | dev: true
246 | optional: true
247 |
248 | /@esbuild/darwin-x64@0.16.10:
249 | resolution: {integrity: sha512-OXt7ijoLuy+AjDSKQWu+KdDFMBbdeaL6wtgMKtDUXKWHiAMKHan5+R1QAG6HD4+K0nnOvEJXKHeA9QhXNAjOTQ==}
250 | engines: {node: '>=12'}
251 | cpu: [x64]
252 | os: [darwin]
253 | requiresBuild: true
254 | dev: true
255 | optional: true
256 |
257 | /@esbuild/darwin-x64@0.16.12:
258 | resolution: {integrity: sha512-ApGRA6X5txIcxV0095X4e4KKv87HAEXfuDRcGTniDWUUN+qPia8sl/BqG/0IomytQWajnUn4C7TOwHduk/FXBQ==}
259 | engines: {node: '>=12'}
260 | cpu: [x64]
261 | os: [darwin]
262 | requiresBuild: true
263 | dev: true
264 | optional: true
265 |
266 | /@esbuild/freebsd-arm64@0.16.10:
267 | resolution: {integrity: sha512-shSQX/3GHuspE3Uxtq5kcFG/zqC+VuMnJkqV7LczO41cIe6CQaXHD3QdMLA4ziRq/m0vZo7JdterlgbmgNIAlQ==}
268 | engines: {node: '>=12'}
269 | cpu: [arm64]
270 | os: [freebsd]
271 | requiresBuild: true
272 | dev: true
273 | optional: true
274 |
275 | /@esbuild/freebsd-arm64@0.16.12:
276 | resolution: {integrity: sha512-AMdK2gA9EU83ccXCWS1B/KcWYZCj4P3vDofZZkl/F/sBv/fphi2oUqUTox/g5GMcIxk8CF1CVYTC82+iBSyiUg==}
277 | engines: {node: '>=12'}
278 | cpu: [arm64]
279 | os: [freebsd]
280 | requiresBuild: true
281 | dev: true
282 | optional: true
283 |
284 | /@esbuild/freebsd-x64@0.16.10:
285 | resolution: {integrity: sha512-5YVc1zdeaJGASijZmTzSO4h6uKzsQGG3pkjI6fuXvolhm3hVRhZwnHJkforaZLmzvNv5Tb7a3QL2FAVmrgySIA==}
286 | engines: {node: '>=12'}
287 | cpu: [x64]
288 | os: [freebsd]
289 | requiresBuild: true
290 | dev: true
291 | optional: true
292 |
293 | /@esbuild/freebsd-x64@0.16.12:
294 | resolution: {integrity: sha512-KUKB9w8G/xaAbD39t6gnRBuhQ8vIYYlxGT2I+mT6UGRnCGRr1+ePFIGBQmf5V16nxylgUuuWVW1zU2ktKkf6WQ==}
295 | engines: {node: '>=12'}
296 | cpu: [x64]
297 | os: [freebsd]
298 | requiresBuild: true
299 | dev: true
300 | optional: true
301 |
302 | /@esbuild/linux-arm64@0.16.10:
303 | resolution: {integrity: sha512-2aqeNVxIaRfPcIaMZIFoblLh588sWyCbmj1HHCCs9WmeNWm+EIN0SmvsmPvTa/TsNZFKnxTcvkX2eszTcCqIrA==}
304 | engines: {node: '>=12'}
305 | cpu: [arm64]
306 | os: [linux]
307 | requiresBuild: true
308 | dev: true
309 | optional: true
310 |
311 | /@esbuild/linux-arm64@0.16.12:
312 | resolution: {integrity: sha512-29HXMLpLklDfmw7T2buGqq3HImSUaZ1ArmrPOMaNiZZQptOSZs32SQtOHEl8xWX5vfdwZqrBfNf8Te4nArVzKQ==}
313 | engines: {node: '>=12'}
314 | cpu: [arm64]
315 | os: [linux]
316 | requiresBuild: true
317 | dev: true
318 | optional: true
319 |
320 | /@esbuild/linux-arm@0.16.10:
321 | resolution: {integrity: sha512-c360287ZWI2miBnvIj23bPyVctgzeMT2kQKR+x94pVqIN44h3GF8VMEs1SFPH1UgyDr3yBbx3vowDS1SVhyVhA==}
322 | engines: {node: '>=12'}
323 | cpu: [arm]
324 | os: [linux]
325 | requiresBuild: true
326 | dev: true
327 | optional: true
328 |
329 | /@esbuild/linux-arm@0.16.12:
330 | resolution: {integrity: sha512-vhDdIv6z4eL0FJyNVfdr3C/vdd/Wc6h1683GJsFoJzfKb92dU/v88FhWdigg0i6+3TsbSDeWbsPUXb4dif2abg==}
331 | engines: {node: '>=12'}
332 | cpu: [arm]
333 | os: [linux]
334 | requiresBuild: true
335 | dev: true
336 | optional: true
337 |
338 | /@esbuild/linux-ia32@0.16.10:
339 | resolution: {integrity: sha512-sqMIEWeyrLGU7J5RB5fTkLRIFwsgsQ7ieWXlDLEmC2HblPYGb3AucD7inw2OrKFpRPKsec1l+lssiM3+NV5aOw==}
340 | engines: {node: '>=12'}
341 | cpu: [ia32]
342 | os: [linux]
343 | requiresBuild: true
344 | dev: true
345 | optional: true
346 |
347 | /@esbuild/linux-ia32@0.16.12:
348 | resolution: {integrity: sha512-JFDuNDTTfgD1LJg7wHA42o2uAO/9VzHYK0leAVnCQE/FdMB599YMH73ux+nS0xGr79pv/BK+hrmdRin3iLgQjg==}
349 | engines: {node: '>=12'}
350 | cpu: [ia32]
351 | os: [linux]
352 | requiresBuild: true
353 | dev: true
354 | optional: true
355 |
356 | /@esbuild/linux-loong64@0.16.10:
357 | resolution: {integrity: sha512-O7Pd5hLEtTg37NC73pfhUOGTjx/+aXu5YoSq3ahCxcN7Bcr2F47mv+kG5t840thnsEzrv0oB70+LJu3gUgchvg==}
358 | engines: {node: '>=12'}
359 | cpu: [loong64]
360 | os: [linux]
361 | requiresBuild: true
362 | dev: true
363 | optional: true
364 |
365 | /@esbuild/linux-loong64@0.16.12:
366 | resolution: {integrity: sha512-xTGzVPqm6WKfCC0iuj1fryIWr1NWEM8DMhAIo+4rFgUtwy/lfHl+Obvus4oddzRDbBetLLmojfVZGmt/g/g+Rw==}
367 | engines: {node: '>=12'}
368 | cpu: [loong64]
369 | os: [linux]
370 | requiresBuild: true
371 | dev: true
372 | optional: true
373 |
374 | /@esbuild/linux-mips64el@0.16.10:
375 | resolution: {integrity: sha512-FN8mZOH7531iPHM0kaFhAOqqNHoAb6r/YHW2ZIxNi0a85UBi2DO4Vuyn7t1p4UN8a4LoAnLOT1PqNgHkgBJgbA==}
376 | engines: {node: '>=12'}
377 | cpu: [mips64el]
378 | os: [linux]
379 | requiresBuild: true
380 | dev: true
381 | optional: true
382 |
383 | /@esbuild/linux-mips64el@0.16.12:
384 | resolution: {integrity: sha512-zI1cNgHa3Gol+vPYjIYHzKhU6qMyOQrvZ82REr5Fv7rlh5PG6SkkuCoH7IryPqR+BK2c/7oISGsvPJPGnO2bHQ==}
385 | engines: {node: '>=12'}
386 | cpu: [mips64el]
387 | os: [linux]
388 | requiresBuild: true
389 | dev: true
390 | optional: true
391 |
392 | /@esbuild/linux-ppc64@0.16.10:
393 | resolution: {integrity: sha512-Dg9RiqdvHOAWnOKIOTsIx8dFX9EDlY2IbPEY7YFzchrCiTZmMkD7jWA9UdZbNUygPjdmQBVPRCrLydReFlX9yg==}
394 | engines: {node: '>=12'}
395 | cpu: [ppc64]
396 | os: [linux]
397 | requiresBuild: true
398 | dev: true
399 | optional: true
400 |
401 | /@esbuild/linux-ppc64@0.16.12:
402 | resolution: {integrity: sha512-/C8OFXExoMmvTDIOAM54AhtmmuDHKoedUd0Otpfw3+AuuVGemA1nQK99oN909uZbLEU6Bi+7JheFMG3xGfZluQ==}
403 | engines: {node: '>=12'}
404 | cpu: [ppc64]
405 | os: [linux]
406 | requiresBuild: true
407 | dev: true
408 | optional: true
409 |
410 | /@esbuild/linux-riscv64@0.16.10:
411 | resolution: {integrity: sha512-XMqtpjwzbmlar0BJIxmzu/RZ7EWlfVfH68Vadrva0Wj5UKOdKvqskuev2jY2oPV3aoQUyXwnMbMrFmloO2GfAw==}
412 | engines: {node: '>=12'}
413 | cpu: [riscv64]
414 | os: [linux]
415 | requiresBuild: true
416 | dev: true
417 | optional: true
418 |
419 | /@esbuild/linux-riscv64@0.16.12:
420 | resolution: {integrity: sha512-qeouyyc8kAGV6Ni6Isz8hUsKMr00EHgVwUKWNp1r4l88fHEoNTDB8mmestvykW6MrstoGI7g2EAsgr0nxmuGYg==}
421 | engines: {node: '>=12'}
422 | cpu: [riscv64]
423 | os: [linux]
424 | requiresBuild: true
425 | dev: true
426 | optional: true
427 |
428 | /@esbuild/linux-s390x@0.16.10:
429 | resolution: {integrity: sha512-fu7XtnoeRNFMx8DjK3gPWpFBDM2u5ba+FYwg27SjMJwKvJr4bDyKz5c+FLXLUSSAkMAt/UL+cUbEbra+rYtUgw==}
430 | engines: {node: '>=12'}
431 | cpu: [s390x]
432 | os: [linux]
433 | requiresBuild: true
434 | dev: true
435 | optional: true
436 |
437 | /@esbuild/linux-s390x@0.16.12:
438 | resolution: {integrity: sha512-s9AyI/5vz1U4NNqnacEGFElqwnHusWa81pskAf8JNDM2eb6b2E6PpBmT8RzeZv6/TxE6/TADn2g9bb0jOUmXwQ==}
439 | engines: {node: '>=12'}
440 | cpu: [s390x]
441 | os: [linux]
442 | requiresBuild: true
443 | dev: true
444 | optional: true
445 |
446 | /@esbuild/linux-x64@0.16.10:
447 | resolution: {integrity: sha512-61lcjVC/RldNNMUzQQdyCWjCxp9YLEQgIxErxU9XluX7juBdGKb0pvddS0vPNuCvotRbzijZ1pzII+26haWzbA==}
448 | engines: {node: '>=12'}
449 | cpu: [x64]
450 | os: [linux]
451 | requiresBuild: true
452 | dev: true
453 | optional: true
454 |
455 | /@esbuild/linux-x64@0.16.12:
456 | resolution: {integrity: sha512-e8YA7GQGLWhvakBecLptUiKxOk4E/EPtSckS1i0MGYctW8ouvNUoh7xnU15PGO2jz7BYl8q1R6g0gE5HFtzpqQ==}
457 | engines: {node: '>=12'}
458 | cpu: [x64]
459 | os: [linux]
460 | requiresBuild: true
461 | dev: true
462 | optional: true
463 |
464 | /@esbuild/netbsd-x64@0.16.10:
465 | resolution: {integrity: sha512-JeZXCX3viSA9j4HqSoygjssdqYdfHd6yCFWyfSekLbz4Ef+D2EjvsN02ZQPwYl5a5gg/ehdHgegHhlfOFP0HCA==}
466 | engines: {node: '>=12'}
467 | cpu: [x64]
468 | os: [netbsd]
469 | requiresBuild: true
470 | dev: true
471 | optional: true
472 |
473 | /@esbuild/netbsd-x64@0.16.12:
474 | resolution: {integrity: sha512-z2+kUxmOqBS+6SRVd57iOLIHE8oGOoEnGVAmwjm2aENSP35HPS+5cK+FL1l+rhrsJOFIPrNHqDUNechpuG96Sg==}
475 | engines: {node: '>=12'}
476 | cpu: [x64]
477 | os: [netbsd]
478 | requiresBuild: true
479 | dev: true
480 | optional: true
481 |
482 | /@esbuild/openbsd-x64@0.16.10:
483 | resolution: {integrity: sha512-3qpxQKuEVIIg8SebpXsp82OBrqjPV/OwNWmG+TnZDr3VGyChNnGMHccC1xkbxCHDQNnnXjxhMQNyHmdFJbmbRA==}
484 | engines: {node: '>=12'}
485 | cpu: [x64]
486 | os: [openbsd]
487 | requiresBuild: true
488 | dev: true
489 | optional: true
490 |
491 | /@esbuild/openbsd-x64@0.16.12:
492 | resolution: {integrity: sha512-PAonw4LqIybwn2/vJujhbg1N9W2W8lw9RtXIvvZoyzoA/4rA4CpiuahVbASmQohiytRsixbNoIOUSjRygKXpyA==}
493 | engines: {node: '>=12'}
494 | cpu: [x64]
495 | os: [openbsd]
496 | requiresBuild: true
497 | dev: true
498 | optional: true
499 |
500 | /@esbuild/sunos-x64@0.16.10:
501 | resolution: {integrity: sha512-z+q0xZ+et/7etz7WoMyXTHZ1rB8PMSNp/FOqURLJLOPb3GWJ2aj4oCqFCjPwEbW1rsT7JPpxeH/DwGAWk/I1Bg==}
502 | engines: {node: '>=12'}
503 | cpu: [x64]
504 | os: [sunos]
505 | requiresBuild: true
506 | dev: true
507 | optional: true
508 |
509 | /@esbuild/sunos-x64@0.16.12:
510 | resolution: {integrity: sha512-+wr1tkt1RERi+Zi/iQtkzmMH4nS8+7UIRxjcyRz7lur84wCkAITT50Olq/HiT4JN2X2bjtlOV6vt7ptW5Gw60Q==}
511 | engines: {node: '>=12'}
512 | cpu: [x64]
513 | os: [sunos]
514 | requiresBuild: true
515 | dev: true
516 | optional: true
517 |
518 | /@esbuild/win32-arm64@0.16.10:
519 | resolution: {integrity: sha512-+YYu5sbQ9npkNT9Dec+tn1F/kjg6SMgr6bfi/6FpXYZvCRfu2YFPZGb+3x8K30s8eRxFpoG4sGhiSUkr1xbHEw==}
520 | engines: {node: '>=12'}
521 | cpu: [arm64]
522 | os: [win32]
523 | requiresBuild: true
524 | dev: true
525 | optional: true
526 |
527 | /@esbuild/win32-arm64@0.16.12:
528 | resolution: {integrity: sha512-XEjeUSHmjsAOJk8+pXJu9pFY2O5KKQbHXZWQylJzQuIBeiGrpMeq9sTVrHefHxMOyxUgoKQTcaTS+VK/K5SviA==}
529 | engines: {node: '>=12'}
530 | cpu: [arm64]
531 | os: [win32]
532 | requiresBuild: true
533 | dev: true
534 | optional: true
535 |
536 | /@esbuild/win32-ia32@0.16.10:
537 | resolution: {integrity: sha512-Aw7Fupk7XNehR1ftHGYwUteyJ2q+em/aE+fVU3YMTBN2V5A7Z4aVCSV+SvCp9HIIHZavPFBpbdP3VfjQpdf6Xg==}
538 | engines: {node: '>=12'}
539 | cpu: [ia32]
540 | os: [win32]
541 | requiresBuild: true
542 | dev: true
543 | optional: true
544 |
545 | /@esbuild/win32-ia32@0.16.12:
546 | resolution: {integrity: sha512-eRKPM7e0IecUAUYr2alW7JGDejrFJXmpjt4MlfonmQ5Rz9HWpKFGCjuuIRgKO7W9C/CWVFXdJ2GjddsBXqQI4A==}
547 | engines: {node: '>=12'}
548 | cpu: [ia32]
549 | os: [win32]
550 | requiresBuild: true
551 | dev: true
552 | optional: true
553 |
554 | /@esbuild/win32-x64@0.16.10:
555 | resolution: {integrity: sha512-qddWullt3sC1EIpfHvCRBq3H4g3L86DZpD6n8k2XFjFVyp01D++uNbN1hT/JRsHxTbyyemZcpwL5aRlJwc/zFw==}
556 | engines: {node: '>=12'}
557 | cpu: [x64]
558 | os: [win32]
559 | requiresBuild: true
560 | dev: true
561 | optional: true
562 |
563 | /@esbuild/win32-x64@0.16.12:
564 | resolution: {integrity: sha512-iPYKN78t3op2+erv2frW568j1q0RpqX6JOLZ7oPPaAV1VaF7dDstOrNw37PVOYoTWE11pV4A1XUitpdEFNIsPg==}
565 | engines: {node: '>=12'}
566 | cpu: [x64]
567 | os: [win32]
568 | requiresBuild: true
569 | dev: true
570 | optional: true
571 |
572 | /@malept/cross-spawn-promise@1.1.1:
573 | resolution: {integrity: sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==}
574 | engines: {node: '>= 10'}
575 | dependencies:
576 | cross-spawn: 7.0.3
577 | dev: true
578 |
579 | /@malept/flatpak-bundler@0.4.0:
580 | resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==}
581 | engines: {node: '>= 10.0.0'}
582 | dependencies:
583 | debug: 4.3.4
584 | fs-extra: 9.1.0
585 | lodash: 4.17.21
586 | tmp-promise: 3.0.3
587 | transitivePeerDependencies:
588 | - supports-color
589 | dev: true
590 |
591 | /@nodelib/fs.scandir@2.1.5:
592 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
593 | engines: {node: '>= 8'}
594 | dependencies:
595 | '@nodelib/fs.stat': 2.0.5
596 | run-parallel: 1.2.0
597 | dev: false
598 |
599 | /@nodelib/fs.stat@2.0.5:
600 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
601 | engines: {node: '>= 8'}
602 | dev: false
603 |
604 | /@nodelib/fs.walk@1.2.8:
605 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
606 | engines: {node: '>= 8'}
607 | dependencies:
608 | '@nodelib/fs.scandir': 2.1.5
609 | fastq: 1.13.0
610 | dev: false
611 |
612 | /@sindresorhus/is@4.6.0:
613 | resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
614 | engines: {node: '>=10'}
615 | dev: true
616 |
617 | /@szmarczak/http-timer@4.0.6:
618 | resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==}
619 | engines: {node: '>=10'}
620 | dependencies:
621 | defer-to-connect: 2.0.1
622 | dev: true
623 |
624 | /@tootallnate/once@2.0.0:
625 | resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
626 | engines: {node: '>= 10'}
627 | dev: true
628 |
629 | /@types/cacheable-request@6.0.3:
630 | resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==}
631 | dependencies:
632 | '@types/http-cache-semantics': 4.0.1
633 | '@types/keyv': 3.1.4
634 | '@types/node': 18.11.18
635 | '@types/responselike': 1.0.0
636 | dev: true
637 |
638 | /@types/chai-subset@1.3.3:
639 | resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==}
640 | dependencies:
641 | '@types/chai': 4.3.4
642 | dev: true
643 |
644 | /@types/chai@4.3.4:
645 | resolution: {integrity: sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==}
646 | dev: true
647 |
648 | /@types/debug@4.1.7:
649 | resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==}
650 | dependencies:
651 | '@types/ms': 0.7.31
652 | dev: true
653 |
654 | /@types/fs-extra@9.0.13:
655 | resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==}
656 | dependencies:
657 | '@types/node': 18.11.18
658 | dev: true
659 |
660 | /@types/glob@7.2.0:
661 | resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==}
662 | requiresBuild: true
663 | dependencies:
664 | '@types/minimatch': 5.1.2
665 | '@types/node': 18.11.18
666 | dev: true
667 | optional: true
668 |
669 | /@types/http-cache-semantics@4.0.1:
670 | resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==}
671 | dev: true
672 |
673 | /@types/keyv@3.1.4:
674 | resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
675 | dependencies:
676 | '@types/node': 18.11.18
677 | dev: true
678 |
679 | /@types/minimatch@5.1.2:
680 | resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
681 | requiresBuild: true
682 | dev: true
683 | optional: true
684 |
685 | /@types/ms@0.7.31:
686 | resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==}
687 | dev: true
688 |
689 | /@types/node@16.18.3:
690 | resolution: {integrity: sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==}
691 | dev: true
692 |
693 | /@types/node@18.11.18:
694 | resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==}
695 | dev: true
696 |
697 | /@types/plist@3.0.2:
698 | resolution: {integrity: sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw==}
699 | requiresBuild: true
700 | dependencies:
701 | '@types/node': 18.11.18
702 | xmlbuilder: 15.1.1
703 | dev: true
704 | optional: true
705 |
706 | /@types/responselike@1.0.0:
707 | resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==}
708 | dependencies:
709 | '@types/node': 18.11.18
710 | dev: true
711 |
712 | /@types/verror@1.10.6:
713 | resolution: {integrity: sha512-NNm+gdePAX1VGvPcGZCDKQZKYSiAWigKhKaz5KF94hG6f2s8de9Ow5+7AbXoeKxL8gavZfk4UquSAygOF2duEQ==}
714 | requiresBuild: true
715 | dev: true
716 | optional: true
717 |
718 | /@types/yargs-parser@21.0.0:
719 | resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==}
720 | dev: true
721 |
722 | /@types/yargs@17.0.13:
723 | resolution: {integrity: sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==}
724 | dependencies:
725 | '@types/yargs-parser': 21.0.0
726 | dev: true
727 |
728 | /@types/yauzl@2.10.0:
729 | resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==}
730 | requiresBuild: true
731 | dependencies:
732 | '@types/node': 18.11.18
733 | dev: true
734 | optional: true
735 |
736 | /acorn-walk@8.2.0:
737 | resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
738 | engines: {node: '>=0.4.0'}
739 | dev: true
740 |
741 | /acorn@8.8.1:
742 | resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==}
743 | engines: {node: '>=0.4.0'}
744 | hasBin: true
745 | dev: true
746 |
747 | /agent-base@6.0.2:
748 | resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
749 | engines: {node: '>= 6.0.0'}
750 | dependencies:
751 | debug: 4.3.4
752 | transitivePeerDependencies:
753 | - supports-color
754 | dev: true
755 |
756 | /ajv-keywords@3.5.2(ajv@6.12.6):
757 | resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
758 | peerDependencies:
759 | ajv: ^6.9.1
760 | dependencies:
761 | ajv: 6.12.6
762 | dev: true
763 |
764 | /ajv@6.12.6:
765 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
766 | dependencies:
767 | fast-deep-equal: 3.1.3
768 | fast-json-stable-stringify: 2.1.0
769 | json-schema-traverse: 0.4.1
770 | uri-js: 4.4.1
771 | dev: true
772 |
773 | /ansi-regex@5.0.1:
774 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
775 | engines: {node: '>=8'}
776 | dev: true
777 |
778 | /ansi-styles@4.3.0:
779 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
780 | engines: {node: '>=8'}
781 | dependencies:
782 | color-convert: 2.0.1
783 | dev: true
784 |
785 | /anymatch@3.1.2:
786 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==}
787 | engines: {node: '>= 8'}
788 | dependencies:
789 | normalize-path: 3.0.0
790 | picomatch: 2.3.1
791 | dev: false
792 |
793 | /app-builder-bin@4.0.0:
794 | resolution: {integrity: sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==}
795 | dev: true
796 |
797 | /app-builder-lib@23.6.0:
798 | resolution: {integrity: sha512-dQYDuqm/rmy8GSCE6Xl/3ShJg6Ab4bZJMT8KaTKGzT436gl1DN4REP3FCWfXoh75qGTJ+u+WsdnnpO9Jl8nyMA==}
799 | engines: {node: '>=14.0.0'}
800 | dependencies:
801 | 7zip-bin: 5.1.1
802 | '@develar/schema-utils': 2.6.5
803 | '@electron/universal': 1.2.1
804 | '@malept/flatpak-bundler': 0.4.0
805 | async-exit-hook: 2.0.1
806 | bluebird-lst: 1.0.9
807 | builder-util: 23.6.0
808 | builder-util-runtime: 9.1.1
809 | chromium-pickle-js: 0.2.0
810 | debug: 4.3.4
811 | ejs: 3.1.8
812 | electron-osx-sign: 0.6.0
813 | electron-publish: 23.6.0
814 | form-data: 4.0.0
815 | fs-extra: 10.1.0
816 | hosted-git-info: 4.1.0
817 | is-ci: 3.0.1
818 | isbinaryfile: 4.0.10
819 | js-yaml: 4.1.0
820 | lazy-val: 1.0.5
821 | minimatch: 3.1.2
822 | read-config-file: 6.2.0
823 | sanitize-filename: 1.6.3
824 | semver: 7.3.8
825 | tar: 6.1.12
826 | temp-file: 3.4.0
827 | transitivePeerDependencies:
828 | - supports-color
829 | dev: true
830 |
831 | /argparse@2.0.1:
832 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
833 | dev: true
834 |
835 | /asar@3.2.0:
836 | resolution: {integrity: sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg==}
837 | engines: {node: '>=10.12.0'}
838 | deprecated: Please use @electron/asar moving forward. There is no API change, just a package name change
839 | hasBin: true
840 | dependencies:
841 | chromium-pickle-js: 0.2.0
842 | commander: 5.1.0
843 | glob: 7.2.3
844 | minimatch: 3.1.2
845 | optionalDependencies:
846 | '@types/glob': 7.2.0
847 | dev: true
848 |
849 | /assert-plus@1.0.0:
850 | resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==}
851 | engines: {node: '>=0.8'}
852 | requiresBuild: true
853 | dev: true
854 | optional: true
855 |
856 | /assertion-error@1.1.0:
857 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
858 | dev: true
859 |
860 | /astral-regex@2.0.0:
861 | resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
862 | engines: {node: '>=8'}
863 | requiresBuild: true
864 | dev: true
865 | optional: true
866 |
867 | /async-exit-hook@2.0.1:
868 | resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==}
869 | engines: {node: '>=0.12.0'}
870 | dev: true
871 |
872 | /async@3.2.4:
873 | resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==}
874 | dev: true
875 |
876 | /asynckit@0.4.0:
877 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
878 | dev: true
879 |
880 | /at-least-node@1.0.0:
881 | resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
882 | engines: {node: '>= 4.0.0'}
883 | dev: true
884 |
885 | /balanced-match@1.0.2:
886 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
887 | dev: true
888 |
889 | /base64-js@1.5.1:
890 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
891 | requiresBuild: true
892 | dev: true
893 |
894 | /binary-extensions@2.2.0:
895 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
896 | engines: {node: '>=8'}
897 | dev: false
898 |
899 | /bluebird-lst@1.0.9:
900 | resolution: {integrity: sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==}
901 | dependencies:
902 | bluebird: 3.7.2
903 | dev: true
904 |
905 | /bluebird@3.7.2:
906 | resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
907 | dev: true
908 |
909 | /boolean@3.2.0:
910 | resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==}
911 | requiresBuild: true
912 | dev: true
913 | optional: true
914 |
915 | /brace-expansion@1.1.11:
916 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
917 | dependencies:
918 | balanced-match: 1.0.2
919 | concat-map: 0.0.1
920 | dev: true
921 |
922 | /brace-expansion@2.0.1:
923 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
924 | dependencies:
925 | balanced-match: 1.0.2
926 | dev: true
927 |
928 | /braces@3.0.2:
929 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
930 | engines: {node: '>=8'}
931 | dependencies:
932 | fill-range: 7.0.1
933 | dev: false
934 |
935 | /buffer-alloc-unsafe@1.1.0:
936 | resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==}
937 | dev: true
938 |
939 | /buffer-alloc@1.2.0:
940 | resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==}
941 | dependencies:
942 | buffer-alloc-unsafe: 1.1.0
943 | buffer-fill: 1.0.0
944 | dev: true
945 |
946 | /buffer-crc32@0.2.13:
947 | resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
948 | dev: true
949 |
950 | /buffer-equal@1.0.0:
951 | resolution: {integrity: sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ==}
952 | engines: {node: '>=0.4.0'}
953 | dev: true
954 |
955 | /buffer-fill@1.0.0:
956 | resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==}
957 | dev: true
958 |
959 | /buffer-from@1.1.2:
960 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
961 | dev: true
962 |
963 | /buffer@5.7.1:
964 | resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
965 | requiresBuild: true
966 | dependencies:
967 | base64-js: 1.5.1
968 | ieee754: 1.2.1
969 | dev: true
970 | optional: true
971 |
972 | /builder-util-runtime@9.1.1:
973 | resolution: {integrity: sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==}
974 | engines: {node: '>=12.0.0'}
975 | dependencies:
976 | debug: 4.3.4
977 | sax: 1.2.4
978 | transitivePeerDependencies:
979 | - supports-color
980 | dev: true
981 |
982 | /builder-util@23.6.0:
983 | resolution: {integrity: sha512-QiQHweYsh8o+U/KNCZFSvISRnvRctb8m/2rB2I1JdByzvNKxPeFLlHFRPQRXab6aYeXc18j9LpsDLJ3sGQmWTQ==}
984 | dependencies:
985 | 7zip-bin: 5.1.1
986 | '@types/debug': 4.1.7
987 | '@types/fs-extra': 9.0.13
988 | app-builder-bin: 4.0.0
989 | bluebird-lst: 1.0.9
990 | builder-util-runtime: 9.1.1
991 | chalk: 4.1.2
992 | cross-spawn: 7.0.3
993 | debug: 4.3.4
994 | fs-extra: 10.1.0
995 | http-proxy-agent: 5.0.0
996 | https-proxy-agent: 5.0.1
997 | is-ci: 3.0.1
998 | js-yaml: 4.1.0
999 | source-map-support: 0.5.21
1000 | stat-mode: 1.0.0
1001 | temp-file: 3.4.0
1002 | transitivePeerDependencies:
1003 | - supports-color
1004 | dev: true
1005 |
1006 | /cacheable-lookup@5.0.4:
1007 | resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==}
1008 | engines: {node: '>=10.6.0'}
1009 | dev: true
1010 |
1011 | /cacheable-request@7.0.2:
1012 | resolution: {integrity: sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==}
1013 | engines: {node: '>=8'}
1014 | dependencies:
1015 | clone-response: 1.0.3
1016 | get-stream: 5.2.0
1017 | http-cache-semantics: 4.1.0
1018 | keyv: 4.5.2
1019 | lowercase-keys: 2.0.0
1020 | normalize-url: 6.1.0
1021 | responselike: 2.0.1
1022 | dev: true
1023 |
1024 | /chai@4.3.7:
1025 | resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==}
1026 | engines: {node: '>=4'}
1027 | dependencies:
1028 | assertion-error: 1.1.0
1029 | check-error: 1.0.2
1030 | deep-eql: 4.1.3
1031 | get-func-name: 2.0.0
1032 | loupe: 2.3.6
1033 | pathval: 1.1.1
1034 | type-detect: 4.0.8
1035 | dev: true
1036 |
1037 | /chalk@4.1.2:
1038 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
1039 | engines: {node: '>=10'}
1040 | dependencies:
1041 | ansi-styles: 4.3.0
1042 | supports-color: 7.2.0
1043 | dev: true
1044 |
1045 | /check-error@1.0.2:
1046 | resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==}
1047 | dev: true
1048 |
1049 | /chokidar@3.5.3:
1050 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
1051 | engines: {node: '>= 8.10.0'}
1052 | dependencies:
1053 | anymatch: 3.1.2
1054 | braces: 3.0.2
1055 | glob-parent: 5.1.2
1056 | is-binary-path: 2.1.0
1057 | is-glob: 4.0.3
1058 | normalize-path: 3.0.0
1059 | readdirp: 3.6.0
1060 | optionalDependencies:
1061 | fsevents: 2.3.2
1062 | dev: false
1063 |
1064 | /chownr@2.0.0:
1065 | resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
1066 | engines: {node: '>=10'}
1067 | dev: true
1068 |
1069 | /chromium-pickle-js@0.2.0:
1070 | resolution: {integrity: sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==}
1071 | dev: true
1072 |
1073 | /ci-info@3.6.1:
1074 | resolution: {integrity: sha512-up5ggbaDqOqJ4UqLKZ2naVkyqSJQgJi5lwD6b6mM748ysrghDBX0bx/qJTUHzw7zu6Mq4gycviSF5hJnwceD8w==}
1075 | engines: {node: '>=8'}
1076 | dev: true
1077 |
1078 | /cli-truncate@2.1.0:
1079 | resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==}
1080 | engines: {node: '>=8'}
1081 | requiresBuild: true
1082 | dependencies:
1083 | slice-ansi: 3.0.0
1084 | string-width: 4.2.3
1085 | dev: true
1086 | optional: true
1087 |
1088 | /cliui@8.0.1:
1089 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
1090 | engines: {node: '>=12'}
1091 | dependencies:
1092 | string-width: 4.2.3
1093 | strip-ansi: 6.0.1
1094 | wrap-ansi: 7.0.0
1095 | dev: true
1096 |
1097 | /clone-response@1.0.3:
1098 | resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==}
1099 | dependencies:
1100 | mimic-response: 1.0.1
1101 | dev: true
1102 |
1103 | /color-convert@2.0.1:
1104 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
1105 | engines: {node: '>=7.0.0'}
1106 | dependencies:
1107 | color-name: 1.1.4
1108 | dev: true
1109 |
1110 | /color-name@1.1.4:
1111 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
1112 | dev: true
1113 |
1114 | /colors@1.0.3:
1115 | resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==}
1116 | engines: {node: '>=0.1.90'}
1117 | dev: true
1118 |
1119 | /combined-stream@1.0.8:
1120 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
1121 | engines: {node: '>= 0.8'}
1122 | dependencies:
1123 | delayed-stream: 1.0.0
1124 | dev: true
1125 |
1126 | /commander@2.9.0:
1127 | resolution: {integrity: sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==}
1128 | engines: {node: '>= 0.6.x'}
1129 | dependencies:
1130 | graceful-readlink: 1.0.1
1131 | dev: true
1132 |
1133 | /commander@5.1.0:
1134 | resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==}
1135 | engines: {node: '>= 6'}
1136 | dev: true
1137 |
1138 | /compare-version@0.1.2:
1139 | resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==}
1140 | engines: {node: '>=0.10.0'}
1141 | dev: true
1142 |
1143 | /concat-map@0.0.1:
1144 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
1145 | dev: true
1146 |
1147 | /core-util-is@1.0.2:
1148 | resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==}
1149 | requiresBuild: true
1150 | dev: true
1151 | optional: true
1152 |
1153 | /crc@3.8.0:
1154 | resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==}
1155 | requiresBuild: true
1156 | dependencies:
1157 | buffer: 5.7.1
1158 | dev: true
1159 | optional: true
1160 |
1161 | /cross-spawn@7.0.3:
1162 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
1163 | engines: {node: '>= 8'}
1164 | dependencies:
1165 | path-key: 3.1.1
1166 | shebang-command: 2.0.0
1167 | which: 2.0.2
1168 | dev: true
1169 |
1170 | /debug@2.6.9:
1171 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
1172 | peerDependencies:
1173 | supports-color: '*'
1174 | peerDependenciesMeta:
1175 | supports-color:
1176 | optional: true
1177 | dependencies:
1178 | ms: 2.0.0
1179 | dev: true
1180 |
1181 | /debug@4.3.4:
1182 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
1183 | engines: {node: '>=6.0'}
1184 | peerDependencies:
1185 | supports-color: '*'
1186 | peerDependenciesMeta:
1187 | supports-color:
1188 | optional: true
1189 | dependencies:
1190 | ms: 2.1.2
1191 | dev: true
1192 |
1193 | /decompress-response@6.0.0:
1194 | resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
1195 | engines: {node: '>=10'}
1196 | dependencies:
1197 | mimic-response: 3.1.0
1198 | dev: true
1199 |
1200 | /deep-eql@4.1.3:
1201 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
1202 | engines: {node: '>=6'}
1203 | dependencies:
1204 | type-detect: 4.0.8
1205 | dev: true
1206 |
1207 | /defer-to-connect@2.0.1:
1208 | resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==}
1209 | engines: {node: '>=10'}
1210 | dev: true
1211 |
1212 | /define-properties@1.1.4:
1213 | resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==}
1214 | engines: {node: '>= 0.4'}
1215 | requiresBuild: true
1216 | dependencies:
1217 | has-property-descriptors: 1.0.0
1218 | object-keys: 1.1.1
1219 | dev: true
1220 | optional: true
1221 |
1222 | /delayed-stream@1.0.0:
1223 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
1224 | engines: {node: '>=0.4.0'}
1225 | dev: true
1226 |
1227 | /detect-node@2.1.0:
1228 | resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
1229 | requiresBuild: true
1230 | dev: true
1231 | optional: true
1232 |
1233 | /dir-compare@2.4.0:
1234 | resolution: {integrity: sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA==}
1235 | hasBin: true
1236 | dependencies:
1237 | buffer-equal: 1.0.0
1238 | colors: 1.0.3
1239 | commander: 2.9.0
1240 | minimatch: 3.0.4
1241 | dev: true
1242 |
1243 | /dmg-builder@23.6.0:
1244 | resolution: {integrity: sha512-jFZvY1JohyHarIAlTbfQOk+HnceGjjAdFjVn3n8xlDWKsYNqbO4muca6qXEZTfGXeQMG7TYim6CeS5XKSfSsGA==}
1245 | dependencies:
1246 | app-builder-lib: 23.6.0
1247 | builder-util: 23.6.0
1248 | builder-util-runtime: 9.1.1
1249 | fs-extra: 10.1.0
1250 | iconv-lite: 0.6.3
1251 | js-yaml: 4.1.0
1252 | optionalDependencies:
1253 | dmg-license: 1.0.11
1254 | transitivePeerDependencies:
1255 | - supports-color
1256 | dev: true
1257 |
1258 | /dmg-license@1.0.11:
1259 | resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==}
1260 | engines: {node: '>=8'}
1261 | os: [darwin]
1262 | hasBin: true
1263 | requiresBuild: true
1264 | dependencies:
1265 | '@types/plist': 3.0.2
1266 | '@types/verror': 1.10.6
1267 | ajv: 6.12.6
1268 | crc: 3.8.0
1269 | iconv-corefoundation: 1.1.7
1270 | plist: 3.0.6
1271 | smart-buffer: 4.2.0
1272 | verror: 1.10.1
1273 | dev: true
1274 | optional: true
1275 |
1276 | /dotenv-expand@5.1.0:
1277 | resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==}
1278 | dev: true
1279 |
1280 | /dotenv@9.0.2:
1281 | resolution: {integrity: sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==}
1282 | engines: {node: '>=10'}
1283 | dev: true
1284 |
1285 | /ejs@3.1.8:
1286 | resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==}
1287 | engines: {node: '>=0.10.0'}
1288 | hasBin: true
1289 | dependencies:
1290 | jake: 10.8.5
1291 | dev: true
1292 |
1293 | /electron-builder@23.6.0:
1294 | resolution: {integrity: sha512-y8D4zO+HXGCNxFBV/JlyhFnoQ0Y0K7/sFH+XwIbj47pqaW8S6PGYQbjoObolKBR1ddQFPt4rwp4CnwMJrW3HAw==}
1295 | engines: {node: '>=14.0.0'}
1296 | hasBin: true
1297 | dependencies:
1298 | '@types/yargs': 17.0.13
1299 | app-builder-lib: 23.6.0
1300 | builder-util: 23.6.0
1301 | builder-util-runtime: 9.1.1
1302 | chalk: 4.1.2
1303 | dmg-builder: 23.6.0
1304 | fs-extra: 10.1.0
1305 | is-ci: 3.0.1
1306 | lazy-val: 1.0.5
1307 | read-config-file: 6.2.0
1308 | simple-update-notifier: 1.0.7
1309 | yargs: 17.6.2
1310 | transitivePeerDependencies:
1311 | - supports-color
1312 | dev: true
1313 |
1314 | /electron-osx-sign@0.6.0:
1315 | resolution: {integrity: sha512-+hiIEb2Xxk6eDKJ2FFlpofCnemCbjbT5jz+BKGpVBrRNT3kWTGs4DfNX6IzGwgi33hUcXF+kFs9JW+r6Wc1LRg==}
1316 | engines: {node: '>=4.0.0'}
1317 | deprecated: Please use @electron/osx-sign moving forward. Be aware the API is slightly different
1318 | hasBin: true
1319 | dependencies:
1320 | bluebird: 3.7.2
1321 | compare-version: 0.1.2
1322 | debug: 2.6.9
1323 | isbinaryfile: 3.0.3
1324 | minimist: 1.2.7
1325 | plist: 3.0.6
1326 | transitivePeerDependencies:
1327 | - supports-color
1328 | dev: true
1329 |
1330 | /electron-publish@23.6.0:
1331 | resolution: {integrity: sha512-jPj3y+eIZQJF/+t5SLvsI5eS4mazCbNYqatv5JihbqOstIM13k0d1Z3vAWntvtt13Itl61SO6seicWdioOU5dg==}
1332 | dependencies:
1333 | '@types/fs-extra': 9.0.13
1334 | builder-util: 23.6.0
1335 | builder-util-runtime: 9.1.1
1336 | chalk: 4.1.2
1337 | fs-extra: 10.1.0
1338 | lazy-val: 1.0.5
1339 | mime: 2.6.0
1340 | transitivePeerDependencies:
1341 | - supports-color
1342 | dev: true
1343 |
1344 | /electron@22.0.0:
1345 | resolution: {integrity: sha512-cgRc4wjyM+81A0E8UGv1HNJjL1HBI5cWNh/DUIjzYvoUuiEM0SS0hAH/zaFQ18xOz2ced6Yih8SybpOiOYJhdg==}
1346 | engines: {node: '>= 12.20.55'}
1347 | hasBin: true
1348 | requiresBuild: true
1349 | dependencies:
1350 | '@electron/get': 2.0.2
1351 | '@types/node': 16.18.3
1352 | extract-zip: 2.0.1
1353 | transitivePeerDependencies:
1354 | - supports-color
1355 | dev: true
1356 |
1357 | /emoji-regex@8.0.0:
1358 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
1359 | dev: true
1360 |
1361 | /end-of-stream@1.4.4:
1362 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
1363 | dependencies:
1364 | once: 1.4.0
1365 | dev: true
1366 |
1367 | /env-paths@2.2.1:
1368 | resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
1369 | engines: {node: '>=6'}
1370 | dev: true
1371 |
1372 | /es6-error@4.1.1:
1373 | resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==}
1374 | requiresBuild: true
1375 | dev: true
1376 | optional: true
1377 |
1378 | /esbuild@0.16.10:
1379 | resolution: {integrity: sha512-z5dIViHoVnw2l+NCJ3zj5behdXjYvXne9gL18OOivCadXDUhyDkeSvEtLcGVAJW2fNmh33TDUpsi704XYlDodw==}
1380 | engines: {node: '>=12'}
1381 | hasBin: true
1382 | requiresBuild: true
1383 | optionalDependencies:
1384 | '@esbuild/android-arm': 0.16.10
1385 | '@esbuild/android-arm64': 0.16.10
1386 | '@esbuild/android-x64': 0.16.10
1387 | '@esbuild/darwin-arm64': 0.16.10
1388 | '@esbuild/darwin-x64': 0.16.10
1389 | '@esbuild/freebsd-arm64': 0.16.10
1390 | '@esbuild/freebsd-x64': 0.16.10
1391 | '@esbuild/linux-arm': 0.16.10
1392 | '@esbuild/linux-arm64': 0.16.10
1393 | '@esbuild/linux-ia32': 0.16.10
1394 | '@esbuild/linux-loong64': 0.16.10
1395 | '@esbuild/linux-mips64el': 0.16.10
1396 | '@esbuild/linux-ppc64': 0.16.10
1397 | '@esbuild/linux-riscv64': 0.16.10
1398 | '@esbuild/linux-s390x': 0.16.10
1399 | '@esbuild/linux-x64': 0.16.10
1400 | '@esbuild/netbsd-x64': 0.16.10
1401 | '@esbuild/openbsd-x64': 0.16.10
1402 | '@esbuild/sunos-x64': 0.16.10
1403 | '@esbuild/win32-arm64': 0.16.10
1404 | '@esbuild/win32-ia32': 0.16.10
1405 | '@esbuild/win32-x64': 0.16.10
1406 | dev: true
1407 |
1408 | /esbuild@0.16.12:
1409 | resolution: {integrity: sha512-eq5KcuXajf2OmivCl4e89AD3j8fbV+UTE9vczEzq5haA07U9oOTzBWlh3+6ZdjJR7Rz2QfWZ2uxZyhZxBgJ4+g==}
1410 | engines: {node: '>=12'}
1411 | hasBin: true
1412 | requiresBuild: true
1413 | optionalDependencies:
1414 | '@esbuild/android-arm': 0.16.12
1415 | '@esbuild/android-arm64': 0.16.12
1416 | '@esbuild/android-x64': 0.16.12
1417 | '@esbuild/darwin-arm64': 0.16.12
1418 | '@esbuild/darwin-x64': 0.16.12
1419 | '@esbuild/freebsd-arm64': 0.16.12
1420 | '@esbuild/freebsd-x64': 0.16.12
1421 | '@esbuild/linux-arm': 0.16.12
1422 | '@esbuild/linux-arm64': 0.16.12
1423 | '@esbuild/linux-ia32': 0.16.12
1424 | '@esbuild/linux-loong64': 0.16.12
1425 | '@esbuild/linux-mips64el': 0.16.12
1426 | '@esbuild/linux-ppc64': 0.16.12
1427 | '@esbuild/linux-riscv64': 0.16.12
1428 | '@esbuild/linux-s390x': 0.16.12
1429 | '@esbuild/linux-x64': 0.16.12
1430 | '@esbuild/netbsd-x64': 0.16.12
1431 | '@esbuild/openbsd-x64': 0.16.12
1432 | '@esbuild/sunos-x64': 0.16.12
1433 | '@esbuild/win32-arm64': 0.16.12
1434 | '@esbuild/win32-ia32': 0.16.12
1435 | '@esbuild/win32-x64': 0.16.12
1436 | dev: true
1437 |
1438 | /escalade@3.1.1:
1439 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
1440 | engines: {node: '>=6'}
1441 | dev: true
1442 |
1443 | /escape-string-regexp@4.0.0:
1444 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
1445 | engines: {node: '>=10'}
1446 | requiresBuild: true
1447 | dev: true
1448 | optional: true
1449 |
1450 | /execa@6.1.0:
1451 | resolution: {integrity: sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==}
1452 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1453 | dependencies:
1454 | cross-spawn: 7.0.3
1455 | get-stream: 6.0.1
1456 | human-signals: 3.0.1
1457 | is-stream: 3.0.0
1458 | merge-stream: 2.0.0
1459 | npm-run-path: 5.1.0
1460 | onetime: 6.0.0
1461 | signal-exit: 3.0.7
1462 | strip-final-newline: 3.0.0
1463 | dev: true
1464 |
1465 | /extract-zip@2.0.1:
1466 | resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==}
1467 | engines: {node: '>= 10.17.0'}
1468 | hasBin: true
1469 | dependencies:
1470 | debug: 4.3.4
1471 | get-stream: 5.2.0
1472 | yauzl: 2.10.0
1473 | optionalDependencies:
1474 | '@types/yauzl': 2.10.0
1475 | transitivePeerDependencies:
1476 | - supports-color
1477 | dev: true
1478 |
1479 | /extsprintf@1.4.1:
1480 | resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==}
1481 | engines: {'0': node >=0.6.0}
1482 | requiresBuild: true
1483 | dev: true
1484 | optional: true
1485 |
1486 | /fast-deep-equal@3.1.3:
1487 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
1488 | requiresBuild: true
1489 | dev: true
1490 |
1491 | /fast-glob@3.2.12:
1492 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
1493 | engines: {node: '>=8.6.0'}
1494 | dependencies:
1495 | '@nodelib/fs.stat': 2.0.5
1496 | '@nodelib/fs.walk': 1.2.8
1497 | glob-parent: 5.1.2
1498 | merge2: 1.4.1
1499 | micromatch: 4.0.5
1500 | dev: false
1501 |
1502 | /fast-json-stable-stringify@2.1.0:
1503 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
1504 | requiresBuild: true
1505 | dev: true
1506 |
1507 | /fastq@1.13.0:
1508 | resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==}
1509 | dependencies:
1510 | reusify: 1.0.4
1511 | dev: false
1512 |
1513 | /fd-slicer@1.1.0:
1514 | resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
1515 | dependencies:
1516 | pend: 1.2.0
1517 | dev: true
1518 |
1519 | /filelist@1.0.4:
1520 | resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
1521 | dependencies:
1522 | minimatch: 5.1.0
1523 | dev: true
1524 |
1525 | /fill-range@7.0.1:
1526 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
1527 | engines: {node: '>=8'}
1528 | dependencies:
1529 | to-regex-range: 5.0.1
1530 | dev: false
1531 |
1532 | /form-data@4.0.0:
1533 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
1534 | engines: {node: '>= 6'}
1535 | dependencies:
1536 | asynckit: 0.4.0
1537 | combined-stream: 1.0.8
1538 | mime-types: 2.1.35
1539 | dev: true
1540 |
1541 | /fs-extra@10.1.0:
1542 | resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
1543 | engines: {node: '>=12'}
1544 | dependencies:
1545 | graceful-fs: 4.2.10
1546 | jsonfile: 6.1.0
1547 | universalify: 2.0.0
1548 | dev: true
1549 |
1550 | /fs-extra@8.1.0:
1551 | resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
1552 | engines: {node: '>=6 <7 || >=8'}
1553 | dependencies:
1554 | graceful-fs: 4.2.10
1555 | jsonfile: 4.0.0
1556 | universalify: 0.1.2
1557 | dev: true
1558 |
1559 | /fs-extra@9.1.0:
1560 | resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
1561 | engines: {node: '>=10'}
1562 | dependencies:
1563 | at-least-node: 1.0.0
1564 | graceful-fs: 4.2.10
1565 | jsonfile: 6.1.0
1566 | universalify: 2.0.0
1567 | dev: true
1568 |
1569 | /fs-minipass@2.1.0:
1570 | resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
1571 | engines: {node: '>= 8'}
1572 | dependencies:
1573 | minipass: 3.3.4
1574 | dev: true
1575 |
1576 | /fs.realpath@1.0.0:
1577 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
1578 | dev: true
1579 |
1580 | /fsevents@2.3.2:
1581 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
1582 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1583 | os: [darwin]
1584 | requiresBuild: true
1585 | optional: true
1586 |
1587 | /function-bind@1.1.1:
1588 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
1589 | requiresBuild: true
1590 | dev: true
1591 |
1592 | /get-caller-file@2.0.5:
1593 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
1594 | engines: {node: 6.* || 8.* || >= 10.*}
1595 | dev: true
1596 |
1597 | /get-func-name@2.0.0:
1598 | resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==}
1599 | dev: true
1600 |
1601 | /get-intrinsic@1.1.3:
1602 | resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==}
1603 | requiresBuild: true
1604 | dependencies:
1605 | function-bind: 1.1.1
1606 | has: 1.0.3
1607 | has-symbols: 1.0.3
1608 | dev: true
1609 | optional: true
1610 |
1611 | /get-stream@5.2.0:
1612 | resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
1613 | engines: {node: '>=8'}
1614 | dependencies:
1615 | pump: 3.0.0
1616 | dev: true
1617 |
1618 | /get-stream@6.0.1:
1619 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
1620 | engines: {node: '>=10'}
1621 | dev: true
1622 |
1623 | /glob-parent@5.1.2:
1624 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
1625 | engines: {node: '>= 6'}
1626 | dependencies:
1627 | is-glob: 4.0.3
1628 | dev: false
1629 |
1630 | /glob@7.2.3:
1631 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
1632 | dependencies:
1633 | fs.realpath: 1.0.0
1634 | inflight: 1.0.6
1635 | inherits: 2.0.4
1636 | minimatch: 3.1.2
1637 | once: 1.4.0
1638 | path-is-absolute: 1.0.1
1639 | dev: true
1640 |
1641 | /global-agent@3.0.0:
1642 | resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==}
1643 | engines: {node: '>=10.0'}
1644 | requiresBuild: true
1645 | dependencies:
1646 | boolean: 3.2.0
1647 | es6-error: 4.1.1
1648 | matcher: 3.0.0
1649 | roarr: 2.15.4
1650 | semver: 7.3.8
1651 | serialize-error: 7.0.1
1652 | dev: true
1653 | optional: true
1654 |
1655 | /globalthis@1.0.3:
1656 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
1657 | engines: {node: '>= 0.4'}
1658 | requiresBuild: true
1659 | dependencies:
1660 | define-properties: 1.1.4
1661 | dev: true
1662 | optional: true
1663 |
1664 | /got@11.8.6:
1665 | resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==}
1666 | engines: {node: '>=10.19.0'}
1667 | dependencies:
1668 | '@sindresorhus/is': 4.6.0
1669 | '@szmarczak/http-timer': 4.0.6
1670 | '@types/cacheable-request': 6.0.3
1671 | '@types/responselike': 1.0.0
1672 | cacheable-lookup: 5.0.4
1673 | cacheable-request: 7.0.2
1674 | decompress-response: 6.0.0
1675 | http2-wrapper: 1.0.3
1676 | lowercase-keys: 2.0.0
1677 | p-cancelable: 2.1.1
1678 | responselike: 2.0.1
1679 | dev: true
1680 |
1681 | /graceful-fs@4.2.10:
1682 | resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
1683 | dev: true
1684 |
1685 | /graceful-readlink@1.0.1:
1686 | resolution: {integrity: sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==}
1687 | dev: true
1688 |
1689 | /has-flag@4.0.0:
1690 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1691 | engines: {node: '>=8'}
1692 | dev: true
1693 |
1694 | /has-property-descriptors@1.0.0:
1695 | resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
1696 | requiresBuild: true
1697 | dependencies:
1698 | get-intrinsic: 1.1.3
1699 | dev: true
1700 | optional: true
1701 |
1702 | /has-symbols@1.0.3:
1703 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
1704 | engines: {node: '>= 0.4'}
1705 | requiresBuild: true
1706 | dev: true
1707 | optional: true
1708 |
1709 | /has@1.0.3:
1710 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
1711 | engines: {node: '>= 0.4.0'}
1712 | dependencies:
1713 | function-bind: 1.1.1
1714 | dev: true
1715 |
1716 | /hosted-git-info@4.1.0:
1717 | resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==}
1718 | engines: {node: '>=10'}
1719 | dependencies:
1720 | lru-cache: 6.0.0
1721 | dev: true
1722 |
1723 | /http-cache-semantics@4.1.0:
1724 | resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==}
1725 | dev: true
1726 |
1727 | /http-proxy-agent@5.0.0:
1728 | resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==}
1729 | engines: {node: '>= 6'}
1730 | dependencies:
1731 | '@tootallnate/once': 2.0.0
1732 | agent-base: 6.0.2
1733 | debug: 4.3.4
1734 | transitivePeerDependencies:
1735 | - supports-color
1736 | dev: true
1737 |
1738 | /http2-wrapper@1.0.3:
1739 | resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==}
1740 | engines: {node: '>=10.19.0'}
1741 | dependencies:
1742 | quick-lru: 5.1.1
1743 | resolve-alpn: 1.2.1
1744 | dev: true
1745 |
1746 | /https-proxy-agent@5.0.1:
1747 | resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
1748 | engines: {node: '>= 6'}
1749 | dependencies:
1750 | agent-base: 6.0.2
1751 | debug: 4.3.4
1752 | transitivePeerDependencies:
1753 | - supports-color
1754 | dev: true
1755 |
1756 | /human-signals@3.0.1:
1757 | resolution: {integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==}
1758 | engines: {node: '>=12.20.0'}
1759 | dev: true
1760 |
1761 | /iconv-corefoundation@1.1.7:
1762 | resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==}
1763 | engines: {node: ^8.11.2 || >=10}
1764 | os: [darwin]
1765 | requiresBuild: true
1766 | dependencies:
1767 | cli-truncate: 2.1.0
1768 | node-addon-api: 1.7.2
1769 | dev: true
1770 | optional: true
1771 |
1772 | /iconv-lite@0.6.3:
1773 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
1774 | engines: {node: '>=0.10.0'}
1775 | dependencies:
1776 | safer-buffer: 2.1.2
1777 | dev: true
1778 |
1779 | /ieee754@1.2.1:
1780 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
1781 | requiresBuild: true
1782 | dev: true
1783 | optional: true
1784 |
1785 | /inflight@1.0.6:
1786 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
1787 | dependencies:
1788 | once: 1.4.0
1789 | wrappy: 1.0.2
1790 | dev: true
1791 |
1792 | /inherits@2.0.4:
1793 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1794 | dev: true
1795 |
1796 | /is-binary-path@2.1.0:
1797 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
1798 | engines: {node: '>=8'}
1799 | dependencies:
1800 | binary-extensions: 2.2.0
1801 | dev: false
1802 |
1803 | /is-ci@3.0.1:
1804 | resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==}
1805 | hasBin: true
1806 | dependencies:
1807 | ci-info: 3.6.1
1808 | dev: true
1809 |
1810 | /is-core-module@2.10.0:
1811 | resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==}
1812 | dependencies:
1813 | has: 1.0.3
1814 | dev: true
1815 |
1816 | /is-extglob@2.1.1:
1817 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1818 | engines: {node: '>=0.10.0'}
1819 | dev: false
1820 |
1821 | /is-fullwidth-code-point@3.0.0:
1822 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
1823 | engines: {node: '>=8'}
1824 | dev: true
1825 |
1826 | /is-glob@4.0.3:
1827 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1828 | engines: {node: '>=0.10.0'}
1829 | dependencies:
1830 | is-extglob: 2.1.1
1831 | dev: false
1832 |
1833 | /is-number@7.0.0:
1834 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1835 | engines: {node: '>=0.12.0'}
1836 | dev: false
1837 |
1838 | /is-stream@3.0.0:
1839 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
1840 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1841 | dev: true
1842 |
1843 | /isbinaryfile@3.0.3:
1844 | resolution: {integrity: sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==}
1845 | engines: {node: '>=0.6.0'}
1846 | dependencies:
1847 | buffer-alloc: 1.2.0
1848 | dev: true
1849 |
1850 | /isbinaryfile@4.0.10:
1851 | resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==}
1852 | engines: {node: '>= 8.0.0'}
1853 | dev: true
1854 |
1855 | /isexe@2.0.0:
1856 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1857 | dev: true
1858 |
1859 | /jake@10.8.5:
1860 | resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==}
1861 | engines: {node: '>=10'}
1862 | hasBin: true
1863 | dependencies:
1864 | async: 3.2.4
1865 | chalk: 4.1.2
1866 | filelist: 1.0.4
1867 | minimatch: 3.1.2
1868 | dev: true
1869 |
1870 | /js-yaml@4.1.0:
1871 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
1872 | hasBin: true
1873 | dependencies:
1874 | argparse: 2.0.1
1875 | dev: true
1876 |
1877 | /json-buffer@3.0.1:
1878 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
1879 | dev: true
1880 |
1881 | /json-schema-traverse@0.4.1:
1882 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
1883 | requiresBuild: true
1884 | dev: true
1885 |
1886 | /json-stringify-safe@5.0.1:
1887 | resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
1888 | requiresBuild: true
1889 | dev: true
1890 | optional: true
1891 |
1892 | /json5@2.2.1:
1893 | resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==}
1894 | engines: {node: '>=6'}
1895 | hasBin: true
1896 | dev: true
1897 |
1898 | /jsonc-parser@3.2.0:
1899 | resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
1900 | dev: true
1901 |
1902 | /jsonfile@4.0.0:
1903 | resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
1904 | optionalDependencies:
1905 | graceful-fs: 4.2.10
1906 | dev: true
1907 |
1908 | /jsonfile@6.1.0:
1909 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
1910 | dependencies:
1911 | universalify: 2.0.0
1912 | optionalDependencies:
1913 | graceful-fs: 4.2.10
1914 | dev: true
1915 |
1916 | /keyv@4.5.2:
1917 | resolution: {integrity: sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==}
1918 | dependencies:
1919 | json-buffer: 3.0.1
1920 | dev: true
1921 |
1922 | /lazy-val@1.0.5:
1923 | resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==}
1924 | dev: true
1925 |
1926 | /local-pkg@0.4.2:
1927 | resolution: {integrity: sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==}
1928 | engines: {node: '>=14'}
1929 | dev: true
1930 |
1931 | /lodash@4.17.21:
1932 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
1933 | dev: true
1934 |
1935 | /loupe@2.3.6:
1936 | resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==}
1937 | dependencies:
1938 | get-func-name: 2.0.0
1939 | dev: true
1940 |
1941 | /lowercase-keys@2.0.0:
1942 | resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==}
1943 | engines: {node: '>=8'}
1944 | dev: true
1945 |
1946 | /lru-cache@6.0.0:
1947 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
1948 | engines: {node: '>=10'}
1949 | dependencies:
1950 | yallist: 4.0.0
1951 | dev: true
1952 |
1953 | /matcher@3.0.0:
1954 | resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==}
1955 | engines: {node: '>=10'}
1956 | requiresBuild: true
1957 | dependencies:
1958 | escape-string-regexp: 4.0.0
1959 | dev: true
1960 | optional: true
1961 |
1962 | /merge-stream@2.0.0:
1963 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
1964 | dev: true
1965 |
1966 | /merge2@1.4.1:
1967 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1968 | engines: {node: '>= 8'}
1969 | dev: false
1970 |
1971 | /micromatch@4.0.5:
1972 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
1973 | engines: {node: '>=8.6'}
1974 | dependencies:
1975 | braces: 3.0.2
1976 | picomatch: 2.3.1
1977 | dev: false
1978 |
1979 | /mime-db@1.52.0:
1980 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
1981 | engines: {node: '>= 0.6'}
1982 | dev: true
1983 |
1984 | /mime-types@2.1.35:
1985 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
1986 | engines: {node: '>= 0.6'}
1987 | dependencies:
1988 | mime-db: 1.52.0
1989 | dev: true
1990 |
1991 | /mime@2.6.0:
1992 | resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==}
1993 | engines: {node: '>=4.0.0'}
1994 | hasBin: true
1995 | dev: true
1996 |
1997 | /mimic-fn@4.0.0:
1998 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
1999 | engines: {node: '>=12'}
2000 | dev: true
2001 |
2002 | /mimic-response@1.0.1:
2003 | resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==}
2004 | engines: {node: '>=4'}
2005 | dev: true
2006 |
2007 | /mimic-response@3.1.0:
2008 | resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
2009 | engines: {node: '>=10'}
2010 | dev: true
2011 |
2012 | /minimatch@3.0.4:
2013 | resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==}
2014 | dependencies:
2015 | brace-expansion: 1.1.11
2016 | dev: true
2017 |
2018 | /minimatch@3.1.2:
2019 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
2020 | dependencies:
2021 | brace-expansion: 1.1.11
2022 | dev: true
2023 |
2024 | /minimatch@5.1.0:
2025 | resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==}
2026 | engines: {node: '>=10'}
2027 | dependencies:
2028 | brace-expansion: 2.0.1
2029 | dev: true
2030 |
2031 | /minimist@1.2.7:
2032 | resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==}
2033 | dev: true
2034 |
2035 | /minipass@3.3.4:
2036 | resolution: {integrity: sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==}
2037 | engines: {node: '>=8'}
2038 | dependencies:
2039 | yallist: 4.0.0
2040 | dev: true
2041 |
2042 | /minizlib@2.1.2:
2043 | resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
2044 | engines: {node: '>= 8'}
2045 | dependencies:
2046 | minipass: 3.3.4
2047 | yallist: 4.0.0
2048 | dev: true
2049 |
2050 | /mkdirp@1.0.4:
2051 | resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
2052 | engines: {node: '>=10'}
2053 | hasBin: true
2054 | dev: true
2055 |
2056 | /mlly@1.0.0:
2057 | resolution: {integrity: sha512-QL108Hwt+u9bXdWgOI0dhzZfACovn5Aen4Xvc8Jasd9ouRH4NjnrXEiyP3nVvJo91zPlYjVRckta0Nt2zfoR6g==}
2058 | dependencies:
2059 | acorn: 8.8.1
2060 | pathe: 1.0.0
2061 | pkg-types: 1.0.1
2062 | ufo: 1.0.1
2063 | dev: true
2064 |
2065 | /ms@2.0.0:
2066 | resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
2067 | dev: true
2068 |
2069 | /ms@2.1.2:
2070 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
2071 | dev: true
2072 |
2073 | /nanoid@3.3.4:
2074 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
2075 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
2076 | hasBin: true
2077 | dev: true
2078 |
2079 | /node-addon-api@1.7.2:
2080 | resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==}
2081 | requiresBuild: true
2082 | dev: true
2083 | optional: true
2084 |
2085 | /normalize-path@3.0.0:
2086 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
2087 | engines: {node: '>=0.10.0'}
2088 | dev: false
2089 |
2090 | /normalize-url@6.1.0:
2091 | resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==}
2092 | engines: {node: '>=10'}
2093 | dev: true
2094 |
2095 | /notbundle@0.4.0:
2096 | resolution: {integrity: sha512-fstkCyAyt5nqHch1GESWqkW9i/D2p80SacBEAoPNoRS0U6qBT6ZSUp2BayS+dbEWTHqheSzwxQwEEK/jpPObHw==}
2097 | peerDependencies:
2098 | '@swc/core': '*'
2099 | peerDependenciesMeta:
2100 | '@swc/core':
2101 | optional: true
2102 | dependencies:
2103 | chokidar: 3.5.3
2104 | fast-glob: 3.2.12
2105 | dev: false
2106 |
2107 | /npm-run-path@5.1.0:
2108 | resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==}
2109 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
2110 | dependencies:
2111 | path-key: 4.0.0
2112 | dev: true
2113 |
2114 | /object-keys@1.1.1:
2115 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
2116 | engines: {node: '>= 0.4'}
2117 | requiresBuild: true
2118 | dev: true
2119 | optional: true
2120 |
2121 | /once@1.4.0:
2122 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
2123 | dependencies:
2124 | wrappy: 1.0.2
2125 | dev: true
2126 |
2127 | /onetime@6.0.0:
2128 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
2129 | engines: {node: '>=12'}
2130 | dependencies:
2131 | mimic-fn: 4.0.0
2132 | dev: true
2133 |
2134 | /p-cancelable@2.1.1:
2135 | resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==}
2136 | engines: {node: '>=8'}
2137 | dev: true
2138 |
2139 | /path-is-absolute@1.0.1:
2140 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
2141 | engines: {node: '>=0.10.0'}
2142 | dev: true
2143 |
2144 | /path-key@3.1.1:
2145 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
2146 | engines: {node: '>=8'}
2147 | dev: true
2148 |
2149 | /path-key@4.0.0:
2150 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
2151 | engines: {node: '>=12'}
2152 | dev: true
2153 |
2154 | /path-parse@1.0.7:
2155 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
2156 | dev: true
2157 |
2158 | /pathe@0.2.0:
2159 | resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==}
2160 | dev: true
2161 |
2162 | /pathe@1.0.0:
2163 | resolution: {integrity: sha512-nPdMG0Pd09HuSsr7QOKUXO2Jr9eqaDiZvDwdyIhNG5SHYujkQHYKDfGQkulBxvbDHz8oHLsTgKN86LSwYzSHAg==}
2164 | dev: true
2165 |
2166 | /pathval@1.1.1:
2167 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
2168 | dev: true
2169 |
2170 | /pend@1.2.0:
2171 | resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
2172 | dev: true
2173 |
2174 | /picocolors@1.0.0:
2175 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
2176 | dev: true
2177 |
2178 | /picomatch@2.3.1:
2179 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
2180 | engines: {node: '>=8.6'}
2181 | dev: false
2182 |
2183 | /pkg-types@1.0.1:
2184 | resolution: {integrity: sha512-jHv9HB+Ho7dj6ItwppRDDl0iZRYBD0jsakHXtFgoLr+cHSF6xC+QL54sJmWxyGxOLYSHm0afhXhXcQDQqH9z8g==}
2185 | dependencies:
2186 | jsonc-parser: 3.2.0
2187 | mlly: 1.0.0
2188 | pathe: 1.0.0
2189 | dev: true
2190 |
2191 | /plist@3.0.6:
2192 | resolution: {integrity: sha512-WiIVYyrp8TD4w8yCvyeIr+lkmrGRd5u0VbRnU+tP/aRLxP/YadJUYOMZJ/6hIa3oUyVCsycXvtNRgd5XBJIbiA==}
2193 | engines: {node: '>=6'}
2194 | dependencies:
2195 | base64-js: 1.5.1
2196 | xmlbuilder: 15.1.1
2197 | dev: true
2198 |
2199 | /postcss@8.4.20:
2200 | resolution: {integrity: sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==}
2201 | engines: {node: ^10 || ^12 || >=14}
2202 | dependencies:
2203 | nanoid: 3.3.4
2204 | picocolors: 1.0.0
2205 | source-map-js: 1.0.2
2206 | dev: true
2207 |
2208 | /progress@2.0.3:
2209 | resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
2210 | engines: {node: '>=0.4.0'}
2211 | dev: true
2212 |
2213 | /pump@3.0.0:
2214 | resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
2215 | dependencies:
2216 | end-of-stream: 1.4.4
2217 | once: 1.4.0
2218 | dev: true
2219 |
2220 | /punycode@2.1.1:
2221 | resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
2222 | engines: {node: '>=6'}
2223 | requiresBuild: true
2224 | dev: true
2225 |
2226 | /queue-microtask@1.2.3:
2227 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
2228 | dev: false
2229 |
2230 | /quick-lru@5.1.1:
2231 | resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
2232 | engines: {node: '>=10'}
2233 | dev: true
2234 |
2235 | /read-config-file@6.2.0:
2236 | resolution: {integrity: sha512-gx7Pgr5I56JtYz+WuqEbQHj/xWo+5Vwua2jhb1VwM4Wid5PqYmZ4i00ZB0YEGIfkVBsCv9UrjgyqCiQfS/Oosg==}
2237 | engines: {node: '>=12.0.0'}
2238 | dependencies:
2239 | dotenv: 9.0.2
2240 | dotenv-expand: 5.1.0
2241 | js-yaml: 4.1.0
2242 | json5: 2.2.1
2243 | lazy-val: 1.0.5
2244 | dev: true
2245 |
2246 | /readdirp@3.6.0:
2247 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
2248 | engines: {node: '>=8.10.0'}
2249 | dependencies:
2250 | picomatch: 2.3.1
2251 | dev: false
2252 |
2253 | /require-directory@2.1.1:
2254 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
2255 | engines: {node: '>=0.10.0'}
2256 | dev: true
2257 |
2258 | /resolve-alpn@1.2.1:
2259 | resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==}
2260 | dev: true
2261 |
2262 | /resolve@1.22.1:
2263 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
2264 | hasBin: true
2265 | dependencies:
2266 | is-core-module: 2.10.0
2267 | path-parse: 1.0.7
2268 | supports-preserve-symlinks-flag: 1.0.0
2269 | dev: true
2270 |
2271 | /responselike@2.0.1:
2272 | resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==}
2273 | dependencies:
2274 | lowercase-keys: 2.0.0
2275 | dev: true
2276 |
2277 | /reusify@1.0.4:
2278 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
2279 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
2280 | dev: false
2281 |
2282 | /rimraf@3.0.2:
2283 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
2284 | hasBin: true
2285 | dependencies:
2286 | glob: 7.2.3
2287 | dev: true
2288 |
2289 | /roarr@2.15.4:
2290 | resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==}
2291 | engines: {node: '>=8.0'}
2292 | requiresBuild: true
2293 | dependencies:
2294 | boolean: 3.2.0
2295 | detect-node: 2.1.0
2296 | globalthis: 1.0.3
2297 | json-stringify-safe: 5.0.1
2298 | semver-compare: 1.0.0
2299 | sprintf-js: 1.1.2
2300 | dev: true
2301 | optional: true
2302 |
2303 | /rollup@3.7.5:
2304 | resolution: {integrity: sha512-z0ZbqHBtS/et2EEUKMrAl2CoSdwN7ZPzL17UMiKN9RjjqHShTlv7F9J6ZJZJNREYjBh3TvBrdfjkFDIXFNeuiQ==}
2305 | engines: {node: '>=14.18.0', npm: '>=8.0.0'}
2306 | hasBin: true
2307 | optionalDependencies:
2308 | fsevents: 2.3.2
2309 | dev: true
2310 |
2311 | /rollup@3.9.0:
2312 | resolution: {integrity: sha512-nGGylpmblyjTpF4lEUPgmOw6OVxRvnI6Iuuh6Lz4O/X66cVOX1XJSsqP1YamxQ+mPuFE7qJxLFDSCk8rNv5dDw==}
2313 | engines: {node: '>=14.18.0', npm: '>=8.0.0'}
2314 | hasBin: true
2315 | optionalDependencies:
2316 | fsevents: 2.3.2
2317 | dev: true
2318 |
2319 | /run-parallel@1.2.0:
2320 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
2321 | dependencies:
2322 | queue-microtask: 1.2.3
2323 | dev: false
2324 |
2325 | /safer-buffer@2.1.2:
2326 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
2327 | dev: true
2328 |
2329 | /sanitize-filename@1.6.3:
2330 | resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==}
2331 | dependencies:
2332 | truncate-utf8-bytes: 1.0.2
2333 | dev: true
2334 |
2335 | /sax@1.2.4:
2336 | resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==}
2337 | dev: true
2338 |
2339 | /semver-compare@1.0.0:
2340 | resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==}
2341 | requiresBuild: true
2342 | dev: true
2343 | optional: true
2344 |
2345 | /semver@6.3.0:
2346 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
2347 | hasBin: true
2348 | dev: true
2349 |
2350 | /semver@7.0.0:
2351 | resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==}
2352 | hasBin: true
2353 | dev: true
2354 |
2355 | /semver@7.3.8:
2356 | resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==}
2357 | engines: {node: '>=10'}
2358 | hasBin: true
2359 | dependencies:
2360 | lru-cache: 6.0.0
2361 | dev: true
2362 |
2363 | /serialize-error@7.0.1:
2364 | resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==}
2365 | engines: {node: '>=10'}
2366 | requiresBuild: true
2367 | dependencies:
2368 | type-fest: 0.13.1
2369 | dev: true
2370 | optional: true
2371 |
2372 | /shebang-command@2.0.0:
2373 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
2374 | engines: {node: '>=8'}
2375 | dependencies:
2376 | shebang-regex: 3.0.0
2377 | dev: true
2378 |
2379 | /shebang-regex@3.0.0:
2380 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
2381 | engines: {node: '>=8'}
2382 | dev: true
2383 |
2384 | /signal-exit@3.0.7:
2385 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
2386 | dev: true
2387 |
2388 | /simple-update-notifier@1.0.7:
2389 | resolution: {integrity: sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==}
2390 | engines: {node: '>=8.10.0'}
2391 | dependencies:
2392 | semver: 7.0.0
2393 | dev: true
2394 |
2395 | /slice-ansi@3.0.0:
2396 | resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==}
2397 | engines: {node: '>=8'}
2398 | requiresBuild: true
2399 | dependencies:
2400 | ansi-styles: 4.3.0
2401 | astral-regex: 2.0.0
2402 | is-fullwidth-code-point: 3.0.0
2403 | dev: true
2404 | optional: true
2405 |
2406 | /smart-buffer@4.2.0:
2407 | resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
2408 | engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
2409 | requiresBuild: true
2410 | dev: true
2411 | optional: true
2412 |
2413 | /source-map-js@1.0.2:
2414 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
2415 | engines: {node: '>=0.10.0'}
2416 | dev: true
2417 |
2418 | /source-map-support@0.5.21:
2419 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
2420 | dependencies:
2421 | buffer-from: 1.1.2
2422 | source-map: 0.6.1
2423 | dev: true
2424 |
2425 | /source-map@0.6.1:
2426 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
2427 | engines: {node: '>=0.10.0'}
2428 | dev: true
2429 |
2430 | /sprintf-js@1.1.2:
2431 | resolution: {integrity: sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==}
2432 | requiresBuild: true
2433 | dev: true
2434 | optional: true
2435 |
2436 | /stat-mode@1.0.0:
2437 | resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==}
2438 | engines: {node: '>= 6'}
2439 | dev: true
2440 |
2441 | /string-width@4.2.3:
2442 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
2443 | engines: {node: '>=8'}
2444 | dependencies:
2445 | emoji-regex: 8.0.0
2446 | is-fullwidth-code-point: 3.0.0
2447 | strip-ansi: 6.0.1
2448 | dev: true
2449 |
2450 | /strip-ansi@6.0.1:
2451 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
2452 | engines: {node: '>=8'}
2453 | dependencies:
2454 | ansi-regex: 5.0.1
2455 | dev: true
2456 |
2457 | /strip-final-newline@3.0.0:
2458 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
2459 | engines: {node: '>=12'}
2460 | dev: true
2461 |
2462 | /strip-literal@1.0.0:
2463 | resolution: {integrity: sha512-5o4LsH1lzBzO9UFH63AJ2ad2/S2AVx6NtjOcaz+VTT2h1RiRvbipW72z8M/lxEhcPHDBQwpDrnTF7sXy/7OwCQ==}
2464 | dependencies:
2465 | acorn: 8.8.1
2466 | dev: true
2467 |
2468 | /sumchecker@3.0.1:
2469 | resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==}
2470 | engines: {node: '>= 8.0'}
2471 | dependencies:
2472 | debug: 4.3.4
2473 | transitivePeerDependencies:
2474 | - supports-color
2475 | dev: true
2476 |
2477 | /supports-color@7.2.0:
2478 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
2479 | engines: {node: '>=8'}
2480 | dependencies:
2481 | has-flag: 4.0.0
2482 | dev: true
2483 |
2484 | /supports-preserve-symlinks-flag@1.0.0:
2485 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
2486 | engines: {node: '>= 0.4'}
2487 | dev: true
2488 |
2489 | /tar@6.1.12:
2490 | resolution: {integrity: sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==}
2491 | engines: {node: '>=10'}
2492 | dependencies:
2493 | chownr: 2.0.0
2494 | fs-minipass: 2.1.0
2495 | minipass: 3.3.4
2496 | minizlib: 2.1.2
2497 | mkdirp: 1.0.4
2498 | yallist: 4.0.0
2499 | dev: true
2500 |
2501 | /temp-file@3.4.0:
2502 | resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==}
2503 | dependencies:
2504 | async-exit-hook: 2.0.1
2505 | fs-extra: 10.1.0
2506 | dev: true
2507 |
2508 | /tinybench@2.3.1:
2509 | resolution: {integrity: sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA==}
2510 | dev: true
2511 |
2512 | /tinypool@0.3.0:
2513 | resolution: {integrity: sha512-NX5KeqHOBZU6Bc0xj9Vr5Szbb1j8tUHIeD18s41aDJaPeC5QTdEhK0SpdpUrZlj2nv5cctNcSjaKNanXlfcVEQ==}
2514 | engines: {node: '>=14.0.0'}
2515 | dev: true
2516 |
2517 | /tinyspy@1.0.2:
2518 | resolution: {integrity: sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==}
2519 | engines: {node: '>=14.0.0'}
2520 | dev: true
2521 |
2522 | /tmp-promise@3.0.3:
2523 | resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==}
2524 | dependencies:
2525 | tmp: 0.2.1
2526 | dev: true
2527 |
2528 | /tmp@0.2.1:
2529 | resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==}
2530 | engines: {node: '>=8.17.0'}
2531 | dependencies:
2532 | rimraf: 3.0.2
2533 | dev: true
2534 |
2535 | /to-regex-range@5.0.1:
2536 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
2537 | engines: {node: '>=8.0'}
2538 | dependencies:
2539 | is-number: 7.0.0
2540 | dev: false
2541 |
2542 | /truncate-utf8-bytes@1.0.2:
2543 | resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==}
2544 | dependencies:
2545 | utf8-byte-length: 1.0.4
2546 | dev: true
2547 |
2548 | /type-detect@4.0.8:
2549 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
2550 | engines: {node: '>=4'}
2551 | dev: true
2552 |
2553 | /type-fest@0.13.1:
2554 | resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==}
2555 | engines: {node: '>=10'}
2556 | requiresBuild: true
2557 | dev: true
2558 | optional: true
2559 |
2560 | /typescript@4.9.4:
2561 | resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==}
2562 | engines: {node: '>=4.2.0'}
2563 | hasBin: true
2564 | dev: true
2565 |
2566 | /ufo@1.0.1:
2567 | resolution: {integrity: sha512-boAm74ubXHY7KJQZLlXrtMz52qFvpsbOxDcZOnw/Wf+LS4Mmyu7JxmzD4tDLtUQtmZECypJ0FrCz4QIe6dvKRA==}
2568 | dev: true
2569 |
2570 | /universalify@0.1.2:
2571 | resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
2572 | engines: {node: '>= 4.0.0'}
2573 | dev: true
2574 |
2575 | /universalify@2.0.0:
2576 | resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
2577 | engines: {node: '>= 10.0.0'}
2578 | dev: true
2579 |
2580 | /uri-js@4.4.1:
2581 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
2582 | requiresBuild: true
2583 | dependencies:
2584 | punycode: 2.1.1
2585 | dev: true
2586 |
2587 | /utf8-byte-length@1.0.4:
2588 | resolution: {integrity: sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==}
2589 | dev: true
2590 |
2591 | /verror@1.10.1:
2592 | resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==}
2593 | engines: {node: '>=0.6.0'}
2594 | requiresBuild: true
2595 | dependencies:
2596 | assert-plus: 1.0.0
2597 | core-util-is: 1.0.2
2598 | extsprintf: 1.4.1
2599 | dev: true
2600 | optional: true
2601 |
2602 | /vite-node@0.26.2(@types/node@18.11.18):
2603 | resolution: {integrity: sha512-4M/zlatItZAyvrQG+82zQBhgDjRZRhVJYFW4T9wcAKh7eMmSiPOVSeI5zsV9UzHXgCcIDKX0o0r3s4OxExTHqg==}
2604 | engines: {node: '>=v14.16.0'}
2605 | hasBin: true
2606 | dependencies:
2607 | debug: 4.3.4
2608 | mlly: 1.0.0
2609 | pathe: 0.2.0
2610 | source-map: 0.6.1
2611 | source-map-support: 0.5.21
2612 | vite: 4.0.3(@types/node@18.11.18)
2613 | transitivePeerDependencies:
2614 | - '@types/node'
2615 | - less
2616 | - sass
2617 | - stylus
2618 | - sugarss
2619 | - supports-color
2620 | - terser
2621 | dev: true
2622 |
2623 | /vite-plugin-electron@0.14.1:
2624 | resolution: {integrity: sha512-QGQ2nJ4wjMf1FaDSkdoC/UskQGiYGcAToATJqJXvqrL4Jmt0CFaZqoDjh1xLicUWEo/X7urHYjhKTqwEeP7F7g==}
2625 | peerDependencies:
2626 | vite-plugin-electron-renderer: '*'
2627 | peerDependenciesMeta:
2628 | vite-plugin-electron-renderer:
2629 | optional: true
2630 | dev: false
2631 |
2632 | /vite-plugin-utils@0.3.6:
2633 | resolution: {integrity: sha512-+tZdnTxrDdjPzrlPUyvm52SvOVRibDEnA9NdzQt85UoqXwLGJp4RAkT9fK11KdLMTdJlb9DxCvHrDfsn/lSKug==}
2634 | dev: true
2635 |
2636 | /vite@4.0.3(@types/node@18.11.18):
2637 | resolution: {integrity: sha512-HvuNv1RdE7deIfQb8mPk51UKjqptO/4RXZ5yXSAvurd5xOckwS/gg8h9Tky3uSbnjYTgUm0hVCet1cyhKd73ZA==}
2638 | engines: {node: ^14.18.0 || >=16.0.0}
2639 | hasBin: true
2640 | peerDependencies:
2641 | '@types/node': '>= 14'
2642 | less: '*'
2643 | sass: '*'
2644 | stylus: '*'
2645 | sugarss: '*'
2646 | terser: ^5.4.0
2647 | peerDependenciesMeta:
2648 | '@types/node':
2649 | optional: true
2650 | less:
2651 | optional: true
2652 | sass:
2653 | optional: true
2654 | stylus:
2655 | optional: true
2656 | sugarss:
2657 | optional: true
2658 | terser:
2659 | optional: true
2660 | dependencies:
2661 | '@types/node': 18.11.18
2662 | esbuild: 0.16.10
2663 | postcss: 8.4.20
2664 | resolve: 1.22.1
2665 | rollup: 3.7.5
2666 | optionalDependencies:
2667 | fsevents: 2.3.2
2668 | dev: true
2669 |
2670 | /vitest@0.26.2:
2671 | resolution: {integrity: sha512-Jvqxh6SDy9SsuslkDjts0iDewDIdq4rveEt69YgDuAb1tVDGV0lDepVaeAFraoySWqneJmOt4TngFFNhlw7GfA==}
2672 | engines: {node: '>=v14.16.0'}
2673 | hasBin: true
2674 | peerDependencies:
2675 | '@edge-runtime/vm': '*'
2676 | '@vitest/browser': '*'
2677 | '@vitest/ui': '*'
2678 | happy-dom: '*'
2679 | jsdom: '*'
2680 | peerDependenciesMeta:
2681 | '@edge-runtime/vm':
2682 | optional: true
2683 | '@vitest/browser':
2684 | optional: true
2685 | '@vitest/ui':
2686 | optional: true
2687 | happy-dom:
2688 | optional: true
2689 | jsdom:
2690 | optional: true
2691 | dependencies:
2692 | '@types/chai': 4.3.4
2693 | '@types/chai-subset': 1.3.3
2694 | '@types/node': 18.11.18
2695 | acorn: 8.8.1
2696 | acorn-walk: 8.2.0
2697 | chai: 4.3.7
2698 | debug: 4.3.4
2699 | local-pkg: 0.4.2
2700 | source-map: 0.6.1
2701 | strip-literal: 1.0.0
2702 | tinybench: 2.3.1
2703 | tinypool: 0.3.0
2704 | tinyspy: 1.0.2
2705 | vite: 4.0.3(@types/node@18.11.18)
2706 | vite-node: 0.26.2(@types/node@18.11.18)
2707 | transitivePeerDependencies:
2708 | - less
2709 | - sass
2710 | - stylus
2711 | - sugarss
2712 | - supports-color
2713 | - terser
2714 | dev: true
2715 |
2716 | /which@2.0.2:
2717 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
2718 | engines: {node: '>= 8'}
2719 | hasBin: true
2720 | dependencies:
2721 | isexe: 2.0.0
2722 | dev: true
2723 |
2724 | /wrap-ansi@7.0.0:
2725 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
2726 | engines: {node: '>=10'}
2727 | dependencies:
2728 | ansi-styles: 4.3.0
2729 | string-width: 4.2.3
2730 | strip-ansi: 6.0.1
2731 | dev: true
2732 |
2733 | /wrappy@1.0.2:
2734 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
2735 | dev: true
2736 |
2737 | /xmlbuilder@15.1.1:
2738 | resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==}
2739 | engines: {node: '>=8.0'}
2740 | requiresBuild: true
2741 | dev: true
2742 |
2743 | /y18n@5.0.8:
2744 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
2745 | engines: {node: '>=10'}
2746 | dev: true
2747 |
2748 | /yallist@4.0.0:
2749 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
2750 | dev: true
2751 |
2752 | /yargs-parser@21.1.1:
2753 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
2754 | engines: {node: '>=12'}
2755 | dev: true
2756 |
2757 | /yargs@17.6.2:
2758 | resolution: {integrity: sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==}
2759 | engines: {node: '>=12'}
2760 | dependencies:
2761 | cliui: 8.0.1
2762 | escalade: 3.1.1
2763 | get-caller-file: 2.0.5
2764 | require-directory: 2.1.1
2765 | string-width: 4.2.3
2766 | y18n: 5.0.8
2767 | yargs-parser: 21.1.1
2768 | dev: true
2769 |
2770 | /yauzl@2.10.0:
2771 | resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==}
2772 | dependencies:
2773 | buffer-crc32: 0.2.13
2774 | fd-slicer: 1.1.0
2775 | dev: true
2776 |
--------------------------------------------------------------------------------
/pnpm-workspace.yaml:
--------------------------------------------------------------------------------
1 | packages:
2 | - '.'
3 | - 'examples/*'
4 |
--------------------------------------------------------------------------------
/src-plugin/alias.ts:
--------------------------------------------------------------------------------
1 | import path from 'node:path'
2 | import {
3 | MagicString,
4 | normalizePath,
5 | relativeify,
6 | walk,
7 | } from 'vite-plugin-utils/function'
8 | import type { Plugin } from '..'
9 |
10 | export interface AliasNode {
11 | type: 'require' | 'import'
12 | start: number
13 | end: number
14 | importee: {
15 | start: number
16 | end: number
17 | raw: string
18 | }
19 | }
20 |
21 | export function alias(
22 | aliases: {
23 | find: string | RegExp
24 | replacement: string
25 | }[],
26 | options?: {
27 | acornOptions?: Partial
28 | },
29 | ): Plugin {
30 | let acorn: typeof import('acorn')
31 | return {
32 | name: 'plugin-alias',
33 | async transform({ code, filename: importer }) {
34 | if (!/require|import/.test(code)) return
35 |
36 | try {
37 | acorn ??= await import('acorn')
38 | } catch {
39 | throw new Error('[plugin/alias] dependency "acorn". Did you install it?')
40 | }
41 |
42 | const ast = acorn.parse(
43 | code,
44 | Object.assign({
45 | // acorn7.x Last supported 2020
46 | ecmaVersion: 2020
47 | }, options?.acornOptions),
48 | )
49 | const ms = new MagicString(code)
50 | const nodes: AliasNode[] = []
51 |
52 | // Electron only support cjs. So here only convert `require()`, `import()`.
53 | walk.sync(ast as Record, {
54 | CallExpression(node) {
55 | if (node.callee.name !== 'require') return
56 | const { start, end, arguments: args } = node
57 | if (args.length === 1 && args[0].type === 'Literal') {
58 | // TODO: other arguments[0].type
59 | const literal = args[0]
60 | nodes.push({
61 | type: 'require',
62 | start,
63 | end,
64 | importee: {
65 | start: literal.start,
66 | end: literal.end,
67 | raw: literal.raw,
68 | },
69 | })
70 | }
71 | },
72 | ImportExpression(node) {
73 | const { start, end, source } = node
74 | nodes.push({
75 | type: 'import',
76 | start,
77 | end,
78 | importee: {
79 | start: source.start,
80 | end: source.end,
81 | raw: source.raw,
82 | },
83 | })
84 | },
85 | })
86 |
87 | for (const node of nodes) {
88 | const {
89 | start,
90 | end,
91 | importee,
92 | type,
93 | } = node
94 |
95 | const source = importee.raw.slice(1, -1)
96 | const option = aliases.find(opt => opt.find instanceof RegExp
97 | ? opt.find.test(source)
98 | : source.startsWith(opt.find + '/'))
99 | if (!option) continue
100 |
101 | let { find, replacement } = option
102 | if (path.isAbsolute(replacement)) {
103 | replacement = path.relative(path.dirname(importer), replacement)
104 | }
105 | // Convert to POSIX path
106 | replacement = relativeify(normalizePath(replacement))
107 | replacement = 'require("' + source.replace(find, replacement) + '")'
108 | if (type === 'import') {
109 | replacement = `new Promise((resolve, reject) => {try {resolve(${replacement})} catch (error) {reject(error)}})`
110 | }
111 | ms.overwrite(start, end, replacement)
112 | }
113 |
114 | return ms.toString()
115 | },
116 | }
117 | }
118 |
--------------------------------------------------------------------------------
/src-plugin/copy.ts:
--------------------------------------------------------------------------------
1 | import fs from 'node:fs'
2 | import path from 'node:path'
3 | import { COLOURS, normalizePath } from 'vite-plugin-utils/function'
4 | import type { Plugin } from '..'
5 | import { ensureDir } from './utils'
6 |
7 | export function copy(options: {
8 | from: string
9 | to: string
10 | }[]): Plugin {
11 | const copyStream = (filename: string, destname: string) => fs
12 | .createReadStream(filename)
13 | .pipe(fs.createWriteStream(destname))
14 | .on('error', error => console.log(COLOURS.red(error.message)))
15 |
16 | return {
17 | name: 'plugin-copy',
18 | configResolved(config) {
19 | ; (async () => {
20 | const { default: fastGlob } = await import('fast-glob')
21 |
22 | for (const option of options) {
23 | option.from = normalizePath(option.from)
24 | option.to = normalizePath(option.to)
25 |
26 | fastGlob((option.from), { cwd: config.root }).then(files => {
27 | for (const filename of files) {
28 |
29 | let copyRoot: string
30 | if (option.from.includes('*')) {
31 | // /root/foo/bar-*/* -> /root/foo
32 | // /root/foo/**/* -> /root/foo
33 | // /root/* -> /root
34 | const paths = option.from.split('/')
35 | copyRoot = paths.slice(0, paths.findIndex(p => p.includes('*'))).join('/')
36 | } else {
37 | copyRoot = option.from
38 | }
39 |
40 | option.to = path.isAbsolute(option.to) ? option.to : path.posix.join(config.root, option.to)
41 | const destname = path.posix.join(option.to, filename.replace(copyRoot, ''))
42 |
43 | ensureDir(destname)
44 | copyStream(filename, destname).on('finish', () =>
45 | console.log(COLOURS.green('[plugin/copy]'), destname.replace(config.root + '/', '')),
46 | )
47 | }
48 | })
49 | }
50 | })()
51 | },
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/src-plugin/custom-start.ts:
--------------------------------------------------------------------------------
1 | import type { Plugin, ResolvedConfig } from '..'
2 |
3 | function debounce void>(fn: Fn, delay = 299) {
4 | let t: NodeJS.Timeout
5 | return ((...args) => {
6 | // !t && fn(...args) // first call
7 | clearTimeout(t)
8 | t = setTimeout(() => fn(...args), delay)
9 | })
10 | }
11 |
12 | export function customStart(
13 | callback?: (args?: {
14 | startup: ResolvedConfig['experimental']['startup']
15 | reload: ResolvedConfig['experimental']['reload']
16 | filename: string
17 | // arguments should be side-effect free
18 | // viteDevServer: ViteDevServer
19 | }) => void,
20 | debounceDelay = 300,
21 | ): Plugin {
22 | let config: ResolvedConfig
23 | if (callback) {
24 | callback = debounceDelay > 0 ? debounce(callback, debounceDelay) : callback
25 | }
26 |
27 | return {
28 | name: 'plugin-custom-start',
29 | configResolved(_config) {
30 | config = _config
31 | const index = _config.plugins.findIndex(plugin => plugin.name === ':startup')
32 | if (index > -1) {
33 | // Remove internal startup plugin
34 | config.plugins.splice(index, 1)
35 | }
36 | },
37 | ondone({ filename }) {
38 | const { api: { vite }, experimental } = config
39 | if (vite?.resolvedConfig?.command === 'serve' && callback) {
40 | callback({
41 | startup: experimental.startup,
42 | reload: experimental.reload,
43 | filename,
44 | })
45 | }
46 | },
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/src-plugin/dest.ts:
--------------------------------------------------------------------------------
1 | import fs from 'node:fs'
2 | import path from 'node:path'
3 | import { COLOURS } from 'vite-plugin-utils/function'
4 | import type { Plugin, ResolvedConfig } from '..'
5 | import { ensureDir } from './utils'
6 |
7 | export function dest(
8 | callback: (form: string, to?: string) => string | undefined | Promise
9 | ): Plugin {
10 | let config: ResolvedConfig
11 | let output: string
12 |
13 | return {
14 | name: 'plugin-dest',
15 | async configResolved(_config) {
16 | config = _config
17 | output = _config.outDir
18 | // @ts-ignore
19 | // https://github.com/caoxiemeihao/notbundle/blob/v0.3.4/src/config.ts#L22-L26
20 | _config.output = undefined
21 | },
22 | async ondone({ code, filename }) {
23 | const { experimental } = config
24 | const destname = await callback?.(
25 | filename,
26 | // @ts-ignore
27 | experimental.input2output({ ...config, output, }, filename),
28 | )
29 |
30 | if (!destname) return
31 | if (destname === filename) {
32 | const message = `Input and output are the same file\n ${filename} -> ${destname}`
33 | throw new Error(message)
34 | }
35 |
36 | fs.writeFileSync(ensureDir(destname), code)
37 | console.log(COLOURS.green('[plugin/dest]'), new Date().toLocaleTimeString(), `${path.relative(config.root, destname)}`)
38 | },
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/src-plugin/esmodule.ts:
--------------------------------------------------------------------------------
1 | import fs from 'node:fs'
2 | import path from 'node:path'
3 | import { createRequire, builtinModules } from 'node:module'
4 | import esbuild from 'esbuild'
5 | import { COLOURS, normalizePath } from 'vite-plugin-utils/function'
6 | import type { Plugin } from '..'
7 | import { alias } from './alias'
8 | import { ensureDir, node_modules } from './utils'
9 |
10 | const CACHE_DIR = '.esmodule'
11 |
12 | export type ESModuleOptions = {
13 | /**
14 | * ESM npm-package names
15 | */
16 | include: string[]
17 | /**
18 | * Options of esbuild.build()
19 | */
20 | buildOptions?: import('esbuild').BuildOptions
21 | /**
22 | * @default ".esmodule"
23 | */
24 | cacheDir?: string
25 | }
26 |
27 | /**
28 | * Support use ESM npm-package in Electron-Main.
29 | * e.g. `execa`, `node-fetch`, `got`, etc.
30 | */
31 | export function esmodule(options: ESModuleOptions): Plugin {
32 | return {
33 | name: 'plugin-esmodule',
34 | async configResolved(config) {
35 | const { root } = config
36 | let { include, cacheDir, buildOptions = {} } = options
37 |
38 | cacheDir = normalizePath(path.resolve(root, cacheDir ?? CACHE_DIR))
39 | // TODO: cache check
40 | // fs.rmSync(cacheDir, { recursive: true, force: true })
41 |
42 | const aliasOptions: Parameters[0] = []
43 |
44 | await Promise.all(include.map(name => {
45 | aliasOptions.push({ find: new RegExp(`^${name}$`), replacement: [cacheDir!, name].join('/') })
46 |
47 | const outfile = path.join(cacheDir!, name + '.js')
48 | if (fs.existsSync(outfile)) {
49 | // Reuse cache
50 | // TODO: Check reusable
51 | return
52 | }
53 | return esmBundling({
54 | name,
55 | root,
56 | cacheDir: cacheDir!,
57 | buildOptions,
58 | })
59 | }))
60 |
61 | const aliasPlugin = alias(aliasOptions)
62 | aliasPlugin.configResolved?.call(aliasPlugin, config)
63 | config.plugins.push(aliasPlugin)
64 | },
65 | }
66 | }
67 |
68 | async function esmBundling(args: {
69 | name: string,
70 | root: string,
71 | cacheDir: string,
72 | buildOptions?: esbuild.BuildOptions,
73 | }) {
74 | const {
75 | name,
76 | root,
77 | cacheDir,
78 | buildOptions = {},
79 | } = args
80 | const cjs_require = createRequire(import.meta.url)
81 |
82 | buildOptions.format ??= 'cjs'
83 | buildOptions.target ??= 'node14'
84 |
85 | const pkgPath = path.join(node_modules(root), name)
86 | let entry: string
87 | try {
88 | entry = cjs_require.resolve(pkgPath)
89 | } catch (error: any) {
90 | console.log(COLOURS.red(error))
91 | return
92 | }
93 |
94 | const outfile = path.join(cacheDir, name + '.js')
95 | ensureDir(outfile)
96 |
97 | const result = await esbuild.build({
98 | entryPoints: [entry],
99 | outfile,
100 | target: 'node14',
101 | format: 'cjs',
102 | bundle: true,
103 | sourcemap: true,
104 | external: [
105 | ...builtinModules,
106 | ...builtinModules.map(mod => `node:${mod}`),
107 | ],
108 | ...buildOptions,
109 | })
110 |
111 | if (!result.errors.length) {
112 | console.log(COLOURS.green('[plugin/esmodule]'), path.posix.relative(root, outfile))
113 | }
114 |
115 | return result
116 | }
117 |
--------------------------------------------------------------------------------
/src-plugin/index.ts:
--------------------------------------------------------------------------------
1 | export { alias } from './alias'
2 | export { copy } from './copy'
3 | export { customStart } from './custom-start'
4 | export { dest } from './dest'
5 | export { esmodule } from './esmodule'
6 | export { loadViteEnv } from './load-vite-env'
7 |
--------------------------------------------------------------------------------
/src-plugin/load-vite-env.ts:
--------------------------------------------------------------------------------
1 | import type { Plugin } from '..'
2 |
3 | export function loadViteEnv(): Plugin {
4 | return {
5 | name: 'plugin-load-vite-env',
6 | async configResolved(config) {
7 | const { api: { vite } } = config
8 | let env = {}
9 | if (vite?.resolvedConfig) {
10 | env = vite.resolvedConfig.env ?? env
11 | }
12 | // Use words array instead `import.meta.env` for avoid esbuild transform. 🤔
13 | const words = ['import', 'meta', 'env']
14 | config.transformOptions.define = Object.fromEntries(Object
15 | .entries(env)
16 | .map(([key, value]) => [words.concat(key).join('.'), JSON.stringify(value)]))
17 | },
18 | transform({ code }) {
19 | const import_meta = 'const import_meta = {}'
20 | const import_meta_polyfill = 'const import_meta = { url: "file:" + __filename, env: {/* Vite shims */} }'
21 | if (code.includes(import_meta)) {
22 | // https://github.com/evanw/esbuild/issues/2441
23 | return code.replace(import_meta, import_meta_polyfill)
24 | }
25 | },
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src-plugin/utils.ts:
--------------------------------------------------------------------------------
1 | import fs from 'node:fs'
2 | import path from 'node:path'
3 |
4 | export function ensureDir(filename: string): string {
5 | const dir = path.dirname(filename)
6 | !fs.existsSync(dir) && fs.mkdirSync(dir, { recursive: true })
7 | return filename
8 | }
9 |
10 | export function node_modules(root: string, count = 0): string {
11 | if (node_modules.p) {
12 | return node_modules.p
13 | }
14 | const p = path.join(root, 'node_modules')
15 | if (fs.existsSync(p)) {
16 | return node_modules.p = p
17 | }
18 | if (count >= 19) {
19 | throw new Error('Can not found node_modules directory.')
20 | }
21 | return node_modules(path.join(root, '..'), count + 1)
22 | }
23 | // For ts-check
24 | node_modules.p = ''
25 |
--------------------------------------------------------------------------------
/src/config.ts:
--------------------------------------------------------------------------------
1 | import path from 'node:path'
2 | import type { ViteDevServer, ResolvedConfig as ViteResolvedConfig } from 'vite'
3 | import {
4 | type Configuration as Configuration2,
5 | type ResolvedConfig as ResolvedConfig2,
6 | normalizePath,
7 | } from 'notbundle'
8 | import { startup } from '.'
9 |
10 | export interface Configuration extends Omit {
11 | /** @default 'dist-electron' */
12 | outDir?: string
13 | api?: {
14 | // `vite` only passes some readonly members, because the `notbundle` plugin-system runs with Vite already fully loaded.
15 | vite?: {
16 | resolvedConfig?: ViteResolvedConfig
17 | server?: ViteDevServer
18 | }
19 | [key: string]: any
20 | }
21 | plugins?: (Omit[number], 'configResolved'> &
22 | {
23 | // Overwrite `ResolvedConfig`
24 | configResolved?: (config: ResolvedConfig) => void | Promise
25 | })[]
26 | transformOptions?: import('esbuild').TransformOptions
27 | }
28 |
29 | export interface ResolvedConfig extends Omit {
30 | config: Configuration
31 | /** Absolute path */
32 | outDir: string
33 | api: NonNullable
34 | plugins: NonNullable
35 | transformOptions: import('esbuild').TransformOptions
36 | /** Internal functions (🚨 Experimental) */
37 | experimental: Omit & {
38 | // Overwrite `ResolvedConfig`
39 | include2files: (config: ResolvedConfig, include?: string[]) => string[]
40 | include2globs: (config: ResolvedConfig, include?: string[]) => string[]
41 | /** Electron App startup function */
42 | startup: (args?: string[]) => void
43 | /** Reload Electron-Renderer */
44 | reload: () => void
45 | }
46 | }
47 |
48 | export type Plugin = NonNullable[number]
49 |
50 | export function polyfillConfig(config: Configuration): Configuration {
51 | const {
52 | outDir = 'dist-electron',
53 | plugins = [],
54 | } = config
55 | config.plugins = [{
56 | name: 'electron:polyfill-config',
57 | configResolved(_config) {
58 | _config.outDir = normalizePath(path.isAbsolute(outDir) ? outDir : path.join(_config.root, outDir))
59 | _config.api = config.api ?? {}
60 | _config.experimental.startup = startup
61 | _config.experimental.reload = () => {
62 | _config.config.api?.vite?.server?.ws.send({ type: 'full-reload' })
63 | }
64 | // @ts-ignore
65 | // https://github.com/caoxiemeihao/notbundle/blob/v0.2.0/src/config.ts#L22-L26
66 | _config.output = _config.outDir
67 |
68 | // Use esbuild instead swc.
69 | const swc = _config.plugins.findIndex(c => c.name === ':swc')
70 | swc !== -1 && _config.plugins.splice(swc, 1, esbuildPlugin(_config))
71 | },
72 | }].concat(plugins)
73 | return config
74 | }
75 |
76 | function esbuildPlugin(config: ResolvedConfig): Plugin {
77 | // Remove swc config
78 | // @ts-ignore
79 | delete config.transformOptions.env; delete config.transformOptions.module
80 | // Electron only support cjs.
81 | config.transformOptions.format ??= 'cjs'
82 | config.transformOptions.target ??= 'node14'
83 |
84 | let esbuild: typeof import('esbuild')
85 | return {
86 | name: 'electron:esbuild',
87 | async transform({ filename, code }) {
88 | esbuild ??= (await import('esbuild'))
89 | const { transformOptions } = config
90 | return esbuild.transformSync(code, {
91 | loader: path.extname(filename).slice(1) as import('esbuild').Loader,
92 | ...transformOptions,
93 | })
94 | },
95 | }
96 | }
97 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import type { AddressInfo } from 'node:net'
2 | import type {
3 | ResolvedConfig as ViteResolvedConfig,
4 | Plugin as VitePlugin,
5 | ViteDevServer,
6 | } from 'vite'
7 | import { startup } from 'vite-plugin-electron'
8 | import {
9 | type Configuration,
10 | type ResolvedConfig,
11 | type Plugin,
12 | polyfillConfig,
13 | } from './config'
14 |
15 | import {
16 | build as notbundleBuild,
17 | watch as notbundleWatch,
18 | } from 'notbundle'
19 |
20 | // public export
21 | export {
22 | type Configuration,
23 | type ResolvedConfig,
24 | type Plugin,
25 | build,
26 | watch,
27 | startup,
28 | defineConfig,
29 | electron as default,
30 | }
31 |
32 | function defineConfig(config: Configuration) {
33 | return config
34 | }
35 |
36 | function build(config: Configuration) {
37 | return notbundleBuild(polyfillConfig(config) as any)
38 | }
39 |
40 | function watch(config: Configuration) {
41 | return notbundleWatch(polyfillConfig(config) as any)
42 | }
43 |
44 | function electron(config: Configuration): VitePlugin[] {
45 | let resolvedConfig: ViteResolvedConfig
46 | let viteDevServer: ViteDevServer
47 | const getConfig = (_config = config) => {
48 | _config.api ??= {}
49 | _config.api.vite ??= {}
50 | _config.api.vite.resolvedConfig ??= resolvedConfig
51 | _config.api.vite.server ??= viteDevServer
52 | return _config
53 | }
54 | const options: Partial = {
55 | config(_config) {
56 | // Make sure that Electron App can be loaded into the local file using `loadFile` after build
57 | _config.base ??= './'
58 | },
59 | configResolved(_config) {
60 | resolvedConfig = _config
61 | },
62 | }
63 |
64 | return [
65 | {
66 | name: 'vite-electron-plugin',
67 | apply: 'serve',
68 | ...options,
69 | configureServer(server) {
70 | viteDevServer = server
71 | server.httpServer?.once('listening', async () => {
72 | const addressInfo = server.httpServer!.address() as AddressInfo
73 | Object.assign(process.env, {
74 | // For `vite serve` command
75 | VITE_DEV_SERVER_URL: `http://localhost:${addressInfo.port}`,
76 | })
77 |
78 | const _config = getConfig()
79 | _config.plugins ??= []
80 | _config.plugins.push(startupPlugin())
81 |
82 | // @ts-ignore
83 | process._plugin_watcher?.close(); process._plugin_watcher = await watch(_config)
84 | })
85 | },
86 | },
87 | {
88 | name: 'vite-electron-plugin',
89 | apply: 'build',
90 | ...options,
91 | closeBundle() {
92 | build(getConfig())
93 | },
94 | },
95 | ]
96 | }
97 |
98 | function startupPlugin(): Plugin {
99 | let config: ViteResolvedConfig | undefined
100 | let startup_fn: () => void
101 | const files: string[] = []
102 |
103 | return {
104 | name: ':startup',
105 | configResolved(_config) {
106 | const { api: { vite }, experimental } = _config
107 | config = vite?.resolvedConfig
108 | if (config?.command === 'serve') {
109 | startup_fn = debounce(() => {
110 | /**
111 | * e.g.
112 | * - `foo.reload.js`
113 | * - `preload.ts`
114 | */
115 | const reload = _config.extensions.some(ext => files.every(file => file.endsWith('reload' + ext)))
116 | files.length = 0
117 |
118 | if (reload) {
119 | experimental.reload()
120 | } else {
121 | experimental.startup()
122 | }
123 | })
124 | }
125 | },
126 | ondone({ filename }) {
127 | if (config?.command === 'serve') {
128 | files.push(filename)
129 | startup_fn()
130 | }
131 | },
132 | }
133 | }
134 |
135 | function debounce void>(fn: Fn, delay = 299) {
136 | let t: NodeJS.Timeout
137 | return ((...args) => {
138 | // !t && fn(...args) // first call
139 | clearTimeout(t)
140 | t = setTimeout(() => fn(...args), delay)
141 | })
142 | }
143 |
--------------------------------------------------------------------------------
/test/config.test.ts:
--------------------------------------------------------------------------------
1 | import path from 'node:path'
2 | import {
3 | describe,
4 | expect,
5 | expectTypeOf,
6 | it,
7 | } from 'vitest'
8 | import { resolveConfig } from 'notbundle'
9 | import {
10 | type ResolvedConfig,
11 | polyfillConfig,
12 | } from '../src/config'
13 |
14 | describe('src/config', async () => {
15 | it('polyfillConfig', async () => {
16 | const {
17 | root,
18 | outDir,
19 | api,
20 | plugins,
21 | experimental,
22 | // @ts-ignore
23 | output,
24 | transformOptions,
25 | } = await resolveConfig(polyfillConfig({ include: [] }) as any) as unknown as ResolvedConfig
26 | const dist_electron = path.posix.join(root, 'dist-electron')
27 |
28 | expect(outDir).eq(dist_electron)
29 | expect(output).eq(dist_electron)
30 | expect(api).toEqual({})
31 | expect(plugins[0].name).eq('electron:esbuild')
32 | expect(plugins[1].name).eq('electron:polyfill-config')
33 | expect(transformOptions).toEqual({ format: 'cjs', target: 'node14' })
34 | expectTypeOf(experimental.startup).toBeFunction()
35 | expectTypeOf(experimental.reload).toBeFunction()
36 | })
37 | })
38 |
--------------------------------------------------------------------------------
/tsconfig.build.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "types"
5 | },
6 | "include": ["src/*.ts", "electron-env.d.ts"]
7 | }
8 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2022",
4 | "module": "ESNext",
5 | "esModuleInterop": true,
6 | "moduleResolution": "Node",
7 | "resolveJsonModule": true,
8 | "emitDeclarationOnly": true,
9 | "declaration": true,
10 | "skipLibCheck": true,
11 | "allowSyntheticDefaultImports": true,
12 | "strict": true
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/tsconfig.plugin.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "plugin"
5 | },
6 | "include": ["src-plugin/*.ts"]
7 | }
8 |
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import fs from 'node:fs'
2 | import { spawn } from 'node:child_process'
3 | import { builtinModules } from 'module'
4 | import { defineConfig } from 'vite'
5 | import pkg from './package.json'
6 |
7 | export default defineConfig({
8 | build: {
9 | emptyOutDir: false,
10 | minify: false,
11 | outDir: '',
12 | target: 'node14',
13 | lib: {
14 | entry: {
15 | plugin: 'src-plugin/index.ts',
16 | src: 'src/index.ts',
17 | },
18 | formats: ['cjs', 'es'],
19 | fileName: (format, entryName) => entryName === 'plugin'
20 | ? (format === 'es' ? 'plugin/index.mjs' : 'plugin/index.js')
21 | : (format === 'es' ? 'index.mjs' : 'index.js'),
22 | },
23 | rollupOptions: {
24 | external: [
25 | 'electron',
26 | 'esbuild',
27 | 'vite',
28 | 'acorn',
29 | ...builtinModules,
30 | ...builtinModules.map(m => `node:${m}`),
31 | ...Object.keys('dependencies' in pkg ? pkg.dependencies as {} : {}),
32 | ],
33 | output: {
34 | // Entry module "src/index.ts" is using named and default exports together.
35 | // Consumers of your bundle will have to use `chunk["default"]` to access the default export, which may not be what you want.
36 | // Use `output.exports: "named"` to disable this warning
37 | exports: 'named',
38 | },
39 | },
40 | },
41 | })
42 |
43 | function generateTypes() {
44 | return new Promise(resolve => {
45 | const cp = spawn(
46 | process.platform === 'win32' ? 'npm.cmd' : 'npm',
47 | ['run', 'types'],
48 | { stdio: 'inherit' },
49 | )
50 | cp.on('exit', code => {
51 | !code && console.log('[types]', 'declaration generated')
52 | resolve(code)
53 | })
54 | cp.on('error', process.exit)
55 | })
56 | }
57 |
58 | if (process.env.NODE_ENV !== 'test') {
59 | fs.rmSync('plugin', { recursive: true, force: true })
60 | fs.rmSync('types', { recursive: true, force: true })
61 | generateTypes()
62 | }
63 |
--------------------------------------------------------------------------------