├── .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 | [![NPM version](https://img.shields.io/npm/v/vite-electron-plugin.svg)](https://npmjs.com/package/vite-electron-plugin) 6 | [![NPM Downloads](https://img.shields.io/npm/dm/vite-electron-plugin.svg)](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 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 |
KeyTypeDescriptionRequiredDefault
includeArray 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 |
rootstringprocess.cwd()
outDirstringOutput Directory.dist-electron
apiRecord<string, any>Useful if you want to pass some payload to the plugin.
pluginsPlugin[]See the Plugin API.
logger{ [type: string], (...message: string[]) => void }Custom log. If logger is passed, all logs will be input this option
transformOptionsimport('esbuild').TransformOptionsOptions of esbuild.transform()
watchimport('chokidar').WatchOptionsOptions of chokidar.watch()
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 | --------------------------------------------------------------------------------