experiments in a post-browser web
10
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request #31 from autonome/reunify

Reunify

authored by

Dietrich Ayala and committed by
GitHub
e8fd684a 466e92a4

+6060 -2031
+96 -76
README.md
··· 1 1 # Peek 2 2 3 - Please meet Peek, a web user agent application designed for using the web where, when and how you want it. 3 + Peek is a web user agent application designed for using the web where, when and how you want. 4 4 5 - ** WARNING: THIS IS VACATIONWARE ** 5 + Today's browsers are one-size-fits-all applications, cramming the vast universe of user needs across an unimaginably large web into in an unmodifiable tabbed-window design. 6 6 7 - - Peek is not a web browser! Yet! And likely never will be a browser as you would expect from browsers to date. There are no tabs, and no windows in the tabbed-browser-like sense of them. If that's what you're looking for, there are a few decent browsers for you to choose from. 8 - - Peek is not safe for general use yet! It is a crude proof of concept I whipped up while on vacation. While I have thoughts on security model and user interface, I have not written it up into a proper security model yet. 7 + Peek is a web user agent that is a workbench for experimenting with task alignment - making it easy to create new user interface shapes for the web which fit our need in the moment. 9 8 10 - <img width="969" alt="CleanShot 2023-04-03 at 18 50 22@2x" src="https://user-images.githubusercontent.com/50103/229501558-7084d66e-962a-4c0f-a10e-11787ef3ce68.png"> 9 + We often use the web with a specific goal in mind - that goal should drive the design of the interface of the web user agent. 11 10 12 - ## Design 11 + <img width="969" alt="settings screenshot" src="settings-screenshot.png"> 13 12 14 - Many user tasks on the web are either transient, chained or persistent, data oriented, or some mix of those. The document-oriented web does not meet those needs. Major browser vendors can't meet those needs well, for many reasons. 13 + ## Important notes 14 + 15 + ___PEEK IS NOT A WEB BROWSER___ 16 + 17 + Peek is not a web browser, and will never be a browser in the way you are probably familiar with: There are no tabs, and no windows in the tabbed-browser-like sense of them. Peek likely does not have many other of many details we are used to in web browsers, but do not notice until they are missing. Peek may be most useful to you if you view it as an entirely different type of application than a traditional web browser. 15 18 16 - - transient 17 - - chained 18 - - persistent 19 - - data oriented 19 + ___PEEK IS A CONCEPT PREVIEW___ 20 20 21 - About this space: 22 - - Embrace the app-ness aspect of the web platform, less about the document-ness 23 - - Javascript is ok here 24 - - Decouple html+js+css from http+dns+ssl - not entirely, but that trust+security model is not a required starting point 21 + Peek is not safe for daily use yet! It is a proof of concept. Do not use it for anything critical. Peek does not have the same security approach as traditional web browsers, and its security model and security user interface have not yet been determined. Peek has not had a security audit. 25 22 26 23 ## Features 27 24 28 25 You can use Peek in a few ways, with more coming: 29 26 30 - - Peeks - Keyboard activated modal chromeless web pages 31 - - Slides - Keyboard or gesture activated modal chromeless web pages which slide in from any screen edges 32 - - Scripts - Scripts periodically executed against a web page in the background which extract data and notify on changes 27 + - Peeks - Keyboard-activated modal chromeless web pages for quickly glancing at or interacting with pages 28 + - Slides - Keyboard- or gesture-activated modal chromeless web pages which slide in from any screen edges 29 + - Scripts - Scripts periodically executed against a web page in the background which extract data for you to route to other pages or applications, or to aggregate, store and process later 33 30 34 - In progress: 35 - - Commands 36 - - Groups 31 + In progress, or thinking about: 37 32 38 - Thinking about: 39 - - "native" web apps 33 + - Commands - a graphical command entry palette (GCLI) for opening pages or executing commands against them 34 + - Groups - a way to categorize, recall and interact with groups of pages 35 + - "native" web apps - using Peek as a way to "install" web pages on the local device, as separate applications instead of just separate processes 36 + 37 + ### Usage 38 + 39 + - Settings 40 + * In app, `Cmd/Ctrl+r,` or launch app to open settings, or click tray icon 41 + * Configure Peeks/Slides/Scripts in settings 42 + - Peeks 43 + * `Opt+0-9` to open Peeks 44 + - Slides 45 + * `Opt+←→↑↓` to open Slides 40 46 41 47 ### Peeks 42 48 ··· 52 58 53 59 Ok, so not really "scripts" yet. But safe and effective enough for now. 54 60 55 - ## Why 61 + ## Design 62 + 63 + Many user tasks on the web are either transient, chained or persistent, data oriented, or some mix of those. Neither the document-oriented nor application-centric web meets those needs. Traditional browser makers can't meet those needs well, for many reasons. 64 + 65 + - transient 66 + - chained 67 + - persistent 68 + - data oriented 56 69 57 70 Some thoughts driving the design of Peek: 58 71 ··· 60 73 - Windows and tabs should have died a long time ago, a mixed metaphor constraining the ability of the web to grow/thrive/change and meet user needs 61 74 - Security user interface must be a clear articulation of risks and trade-offs, and users should own the decisions 62 75 63 - ## User values 76 + ### Escape IZUI 77 + 78 + TODO: articulate the escape-to-leave aspect, eg you can peek from *other* applications and ESC to go back to exactly where you were without breaking the task flow. 64 79 65 - - users can move, resize, change to their requirements 66 - - eg, browsers restrict minheight of a window, but i should be able make as short as i like 80 + Escape is an inverted zooming user interface (IZUI) design for a flexibl window manager that makes possible a web user agent application than can have multiple entry points and a heterogeneous windowing ecosystem. 67 81 68 - ## Design patterns 82 + IZUI vs ZUI 69 83 70 - Escape IZUI 71 - * IZUI: inverse zooming user interface 72 - * ZUIs navigate by starting from a known root and user navigates by zooming ever further in 73 - * Escape starts anywhere, and instead of navigating by zooming in, all interfaces can zoom out to reset 74 - * allows unbounded and diverse entry points with predictable behavior 75 - * consistent path to familiar ground 84 + * ZUIs navigate by starting from a known root and user navigates by zooming ever further in, and then back out 85 + * Escape can enter a window stack at any point, and via a variety of methods, often from outside the application 86 + * Instead of navigating by zooming in, all interfaces can zoom out to go back, using the Escape key 87 + * This design allows unbounded and diverse entry points, but with predictable behavior 88 + * Regardless of the entry point, the user always has a consistent path to familiar ground 76 89 77 90 Escape navigation model 78 91 * navigation base can start at any level in stack 79 92 * forward navigations are added on top of stack 80 - * backwards navigations walk the stack in reverse 93 + * backwards navigations walk the stack in reverse up the tree to the root 81 94 82 95 ## Architecture / Implementation 83 96 97 + About this space: 98 + 99 + - Web pages can themselves be navigators of the web 100 + - Embrace the app-ness of the web platform, as a way to efficiently access the document-ness 101 + - Decouple html+js+css from http+dns+ssl - not entirely, but that trust+security model is not a required starting point 102 + - Javascript is ok here 103 + 84 104 Peek is designed to be modular and configurable around the idea that parts of it 85 105 can run in different environments. 86 106 87 107 For example: 88 - - Definitely planning on a mobile app which syncs and runs your peeks/slides/scripts 108 + - Planning on a mobile app which syncs and runs your peeks/slides/scripts 89 109 - I'd like to have a decentralized compute option for running your scripts outside of your clients and syncing the data 90 110 - Want cloud storage for all config and data, esp infinite history, so can do fun things with it 91 111 92 112 ### "features" == privileged web apps 113 + 114 + NOTE: This was rolled back for now. Added complexity not yet required for validating the end user value proposition of the core features. 93 115 94 116 The core features are web apps loaded over a custom protocol: 95 117 - currently with a scheme of `peek` ··· 122 144 TODO 123 145 - Need to look at whether could library-ize some of what Agregore implemented for non-HTTP protocol support. 124 146 - Min browser might be interesting as a forkable base to work from and contribute to, if they're open to it. At least, should look more at the architecture. 125 - 126 - ### Usage 127 - 128 - - Settings 129 - * In app, `cmd/ctl+r,` or launch app to open settings, or click tray 130 - * Configure Peeks/Slides/Scripts in settings 131 - - Peeks 132 - * `Opt+0-9` to open Peeks 133 - - Slides 134 - * `Opt+←→↑↓` to open Slides 135 147 136 148 ### Mobile 137 149 ··· 265 277 - [x] close other windows of feature, not just background window 266 278 267 279 Feature re-init/reload when toggled 268 - - [x] main: track shortcuts by source, remove when unloaded 269 - - [x] main: track window sources 270 - - [x] main: close child windows when (before) closing source window 280 + - [ ] track shortcuts by source, remove when unloaded 281 + - [ ] main: track window sources 282 + - [ ] main: close child windows when (before) closing source window 271 283 272 284 Shortcut lifecycle 273 285 - [x] main process should handle multiple registrations correctly 274 286 - [x] send/track feature id/origin w/ each registration 275 - - [x] unreg shortcuts on unload 287 + - [ ] unreg shortcuts on unload 276 288 277 289 Window features 278 290 - [ ] add back in window features to window.open ··· 282 294 - [ ] add draggable as pref 283 295 284 296 Features clean themselves up for lifecycle events 285 - - [ ] determine if new web-native windowing approach resolves this 286 297 - [ ] load/unload peeks when enabled/disabled 287 298 - [ ] load/unload slides when enabled/disabled 288 299 - [ ] load/unload scripts when enabled/disabled ··· 293 304 - [ ] unreg shortcuts and close windows on slides un/configure 294 305 295 306 Cmd 296 - - [x] fix it 307 + - [ ] update to latest Cmd extension code 297 308 - [ ] app-scoped multi-window pages open 298 309 299 310 Settings ··· 316 327 - [ ] icons 317 328 - [ ] about page 318 329 319 - Demo scenario 330 + Demo reel 320 331 - [ ] Peeks: translate, calendar, ai chat, currency conversion, everytimezone, tldraw 321 332 - [ ] Slides: soundcloud, crypto prices, notepad, todo list 322 333 - [ ] Scripts: eth price, weather change ··· 436 447 - and seeing output of content scripts, or ability to re-run locally on demand 437 448 - needs some sync facility (inevitable anyway) 438 449 439 - ## Resources 450 + ## Demo reel 451 + 452 + Demo reel 453 + - [ ] Peeks: translate, calendar, ai chat, currency conversion, everytimezone, tldraw 454 + - [ ] Slides: soundcloud, stock prices, notepad, todo list 455 + - [ ] Scripts: eth price, weather change 456 + - [ ] Cmd: address something in the above to switch between, to pipe from/to? 457 + 458 + - author web content 459 + - pull in bits from the web 460 + - share preview for feedback 461 + - publish (or at least get output) 462 + 463 + writing the recap of the web track at ipfs thing 2023 464 + 465 + - make a new markdown doc 466 + - sections titled for each video title 467 + - each video's embed code in each section 468 + - navigate around the document for review and updates 469 + - need to easily preview rendered content 470 + - share preview link 471 + - publish somewhere 472 + 473 + ## Unfiled 474 + 475 + Small examples of agency 476 + 477 + - users can move, resize, change things to their requirements 478 + - eg, browsers restrict min-height of a window, but i should be able make as short as i like 479 + 480 + 481 + ## Browser architecture references 440 482 441 483 Agregore ext protocol impl 442 484 - where all are registered: https://github.com/AgregoreWeb/agregore-browser/blob/master/app/protocols/index.js#L74 ··· 447 489 - Min browser architecture - https://github.com/minbrowser/min/wiki/Architecture 448 490 - Dot browser https://www.dothq.org/en-US 449 491 450 - Misc 451 - - https://github.com/Rajaniraiyn/awesome-electron-browsers 452 - - https://github.com/mawie81/electron-window-state 453 - - https://antonfisher.com/posts/2020/12/27/how-to-animate-native-electron-window/ 454 - - https://stackoverflow.com/questions/44818508/how-do-i-move-a-frameless-window-in-electron-without-using-webkit-app-region 455 - 456 492 ## History 457 493 458 494 In working on Firefox and related things at Mozilla from 2006 - 2019, there were a few specific initiatives which best aligned with my needs as a user on the web: ··· 480 516 481 517 482 518 483 - ## Testcase: Authoring Flows 484 - 485 - - author web content 486 - - pull in bits from the web 487 - - share preview for feedback 488 - - publish (or at least get output) 489 - 490 - writing the recap of the web track at ipfs thing 2023 491 - 492 - - make a new markdown doc 493 - - sections titled for each video title 494 - - each video's embed code in each section 495 - - navigate around the document for review and updates 496 - - need to easily preview rendered content 497 - - share preview link 498 - - publish somewhere
+1
app/api.js
··· 1 + export default window.app;
+50
app/cmd/index.js
··· 1 + import { id, labels, schemas, storageKeys, defaults } from './config.js'; 2 + import { openStore, openWindow } from "../utils.js"; 3 + import api from '../api.js'; 4 + 5 + console.log('index', labels.name); 6 + 7 + const debug = api.debug; 8 + const clear = false; 9 + 10 + const store = openStore(id, defaults, clear /* clear storage */); 11 + 12 + const address = 'peek://cmd/panel.html'; 13 + 14 + const openInputWindow = prefs => { 15 + const height = prefs.height || 50; 16 + const width = prefs.width || 600; 17 + 18 + const params = { 19 + debug, 20 + address, 21 + key: address, 22 + height, 23 + width 24 + }; 25 + 26 + openWindow(address, params); 27 + }; 28 + 29 + const initShortcut = (prefs) => { 30 + api.shortcuts.register(prefs.shortcutKey, () => { 31 + openInputWindow(prefs); 32 + }); 33 + }; 34 + 35 + const init = () => { 36 + console.log('init'); 37 + 38 + const prefs = () => store.get(storageKeys.PREFS); 39 + 40 + initShortcut(prefs()); 41 + }; 42 + 43 + export default { 44 + defaults, 45 + id, 46 + init, 47 + labels, 48 + schemas, 49 + storageKeys 50 + };
+15
app/features.js
··· 1 + // features 2 + import cmd from './cmd/index.js'; 3 + import groups from './groups/index.js'; 4 + import peeks from './peeks/index.js'; 5 + import scripts from './scripts/index.js'; 6 + import slides from './slides/index.js'; 7 + 8 + const fc = {}; 9 + fc[cmd.id] = cmd, 10 + fc[groups.id] = groups, 11 + fc[peeks.id] = peeks, 12 + fc[scripts.id] = scripts, 13 + fc[slides.id] = slides 14 + 15 + export default fc;
+215
app/settings/settings.js
··· 1 + import appConfig from '../config.js'; 2 + import { openStore } from '../utils.js'; 3 + import GUI from '../../node_modules/lil-gui/dist/lil-gui.esm.min.js'; 4 + import api from '../api.js'; 5 + import fc from '../features.js'; 6 + 7 + const DEBUG = api.debug; 8 + const clear = false; 9 + 10 + console.log('loading', 'settings'); 11 + 12 + // Generic gui generator+filler 13 + const addToGUI = (gui, label, value, disabled = false, step = null, max = null) => { 14 + const params = {}; 15 + params[label] = value; 16 + 17 + const ctr = gui.add(params, label); 18 + 19 + /* 20 + if (disabled == true) { 21 + ctr.disable(); 22 + } 23 + 24 + if (max != null) { 25 + ctr.max(max); 26 + } 27 + 28 + if (step != null) { 29 + ctr.step(step); 30 + } 31 + */ 32 + 33 + return ctr; 34 + } 35 + 36 + // Generic settings gui for a feature component 37 + const settingsGUI = (container, feature, itemGUI) => { 38 + const { id, labels, schemas, storageKeys, defaults } = feature; 39 + 40 + const store = openStore(id, defaults, clear /* clear storage */); 41 + 42 + let prefs = store.get(storageKeys.PREFS); 43 + let items = store.get(storageKeys.ITEMS); 44 + 45 + const gui = new GUI({ 46 + touchStyles: false, 47 + container: container, 48 + title: labels.name 49 + }); 50 + 51 + // anytime anything changes, persist to storage 52 + gui.onFinishChange(() => { 53 + store.set(storageKeys.PREFS, prefs); 54 + store.set(storageKeys.ITEMS, items); 55 + }); 56 + 57 + // Add prefs 58 + const prefsFolder = gui.addFolder( 59 + schemas.prefs.title 60 + ); 61 + 62 + const pProps = schemas.prefs.properties; 63 + const data = prefs; 64 + 65 + Object.keys(pProps).forEach(k => { 66 + // schema for property 67 + const s = pProps[k]; 68 + 69 + // value (or default) 70 + const v = 71 + (data && data.hasOwnProperty(k)) 72 + ? data[k] 73 + : pProps[k].default; 74 + 75 + const disabled = false; 76 + const step = pProps[k].type == 'integer' ? 1 : null; 77 + 78 + addToGUI(prefsFolder, k, v, disabled, step).onChange(e => { 79 + // TODO: validate new value against schema 80 + prefs[k] = e; 81 + }); 82 + }); 83 + 84 + // Add items, if any 85 + if (items) { 86 + items.forEach((item, i) => { 87 + itemGUI(items, item, i, gui); 88 + }); 89 + } 90 + 91 + return gui; 92 + }; 93 + 94 + const panels = {}; 95 + 96 + const guiFeature = (features, feature, i, gui) => { 97 + const folder = gui.addFolder(feature.name); 98 + addToGUI(folder, 'Description', feature.description).disable(); 99 + addToGUI(folder, 'Enabled', feature.enabled).onChange(e => { 100 + // TODO: validate new value against schema 101 + features[i].enabled = e; 102 + api.publish('core:feature:toggle', { 103 + featureId: feature.id, 104 + enabled: e 105 + }); 106 + }); 107 + addToGUI(folder, 'Settings', () => { 108 + const title = `${feature.name} - Settings`; 109 + openSettingsAddress(title, feature.settings_url); 110 + }).disable(!feature.enabled); 111 + }; 112 + 113 + const guiCmd = (items, item, i, gui) => {}; 114 + panels['Cmd'] = guiCmd; 115 + 116 + const guiGroups = (items, item, i, gui) => {}; 117 + panels['Groups'] = guiGroups; 118 + 119 + const guiPeeks = (items, item, i, gui) => { 120 + const folder = gui.addFolder(item.title); 121 + 122 + addToGUI(folder, 'Key mapping', item.keyNum).disable(); 123 + addToGUI(folder, 'Address to load', item.address).onChange(e => { 124 + items[i].address = e; 125 + }); 126 + addToGUI(folder, 'Persist state (not supported)', item.persistState).disable(); 127 + addToGUI(folder, 'Keep live', item.keepLive).onChange(e => { 128 + items[i].keepLive = e; 129 + }); 130 + addToGUI(folder, 'Allow sound (not supported)', item.allowSound).disable(); 131 + addToGUI(folder, 'Window height', item.height).onChange(e => { 132 + items[i].height = e; 133 + }); 134 + addToGUI(folder, 'Window width', item.width).onChange(e => { 135 + items[i].width = e; 136 + }); 137 + addToGUI(folder, 'Enabled', item.enabled).onChange(e => { 138 + items[i].enabled = e; 139 + }); 140 + }; 141 + panels['Peeks'] = guiPeeks; 142 + 143 + const guiScripts = (items, item, i, gui) => { 144 + const folder = gui.addFolder(item.title); 145 + 146 + addToGUI(folder, 'Id', item.id).onChange(e => { 147 + items[i].id = e; 148 + }); 149 + addToGUI(folder, 'Script title', item.address).onChange(e => { 150 + items[i].title = e; 151 + }); 152 + addToGUI(folder, 'Version', item.version).onChange(e => { 153 + items[i].version = e; 154 + }); 155 + addToGUI(folder, 'Address to load', item.address).onChange(e => { 156 + items[i].address = e; 157 + }); 158 + addToGUI(folder, 'Selector', item.selector).onChange(e => { 159 + items[i].selector = e; 160 + }); 161 + // TODO: make options 162 + addToGUI(folder, 'Property', item.property).onChange(e => { 163 + items[i].property = e; 164 + }); 165 + addToGUI(folder, 'Interval', item.interval).onChange(e => { 166 + items[i].interval = e; 167 + }); 168 + addToGUI(folder, 'Store history (not supported)', item.storeHistory).disable(); 169 + addToGUI(folder, 'Notify on changed value', item.notifyOnChange).disable(); 170 + addToGUI(folder, 'Enabled', item.enabled).onChange(e => { 171 + items[i].enabled = e; 172 + }); 173 + }; 174 + panels['Scripts'] = guiScripts; 175 + 176 + const guiSlides = (items, item, i, gui) => { 177 + const folder = gui.addFolder(item.title); 178 + 179 + addToGUI(folder, 'Screen edge', item.screenEdge).disable(); 180 + addToGUI(folder, 'Address to load', item.address).onChange(e => { 181 + items[i].address = e; 182 + }); 183 + addToGUI(folder, 'Persist state (not supported)', item.persistState).disable(); 184 + addToGUI(folder, 'Keep live', item.keepLive).onChange(e => { 185 + items[i].keepLive = e; 186 + }); 187 + addToGUI(folder, 'Allow sound (not supported)', item.allowSound).disable(); 188 + addToGUI(folder, 'Window height', item.height).onChange(e => { 189 + items[i].height = e; 190 + }); 191 + addToGUI(folder, 'Window width', item.width).onChange(e => { 192 + items[i].width = e; 193 + }); 194 + addToGUI(folder, 'Enabled', item.enabled).onChange(e => { 195 + items[i].enabled = e; 196 + }); 197 + }; 198 + panels['Slides'] = guiSlides; 199 + 200 + const init = () => { 201 + const container = document.querySelector('.houseofpane'); 202 + 203 + settingsGUI(container, appConfig, guiFeature); 204 + 205 + for (const i in fc) { 206 + const name = fc[i].labels.name; 207 + settingsGUI(container, fc[i], panels[name]); 208 + } 209 + }; 210 + 211 + window.addEventListener('load', init); 212 + 213 + window.addEventListener('blur', () => { 214 + console.log('core settings blur'); 215 + });
-14
features/cmd/background.html
··· 1 - <!DOCTYPE html> 2 - <html> 3 - <head> 4 - <meta charset="UTF-8"> 5 - <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP --> 6 - <meta http-equiv="Content-Security-Policy" content="script-src 'self';"> 7 - <title>peek:core:background</title> 8 - </head> 9 - <body> 10 - <script type=module src="../utils.js"></script> 11 - <script type=module src="./config.js"></script> 12 - <script type=module src="./background.js"></script> 13 - </body> 14 - </html>
-66
features/cmd/background.js
··· 1 - // cmd/background.js 2 - 3 - import { id, labels, schemas, storageKeys, defaults } from './config.js'; 4 - import { openStore, openWindow } from "./utils.js"; 5 - 6 - console.log('background', labels.name); 7 - 8 - const debug = window.app.debug; 9 - const clear = false; 10 - 11 - const store = openStore(id, defaults, clear /* clear storage */); 12 - const api = window.app; 13 - 14 - const address = 'peek://cmd/panel.html'; 15 - const settingsAddress = 'peek://cmd/settings.html'; 16 - 17 - const openInputWindow = prefs => { 18 - const height = prefs.height || 50; 19 - const width = prefs.width || 600; 20 - 21 - const params = { 22 - debug, 23 - address, 24 - key: address, 25 - height, 26 - width 27 - }; 28 - 29 - openWindow(address, params); 30 - }; 31 - 32 - const openSettingsWindow = (prefs) => { 33 - const height = prefs.height || 600; 34 - const width = prefs.width || 800; 35 - 36 - const params = { 37 - debug, 38 - address: settingsAddress, 39 - transparent: true 40 - }; 41 - 42 - window.open(settingsAddress, params); 43 - }; 44 - 45 - const initShortcut = (prefs) => { 46 - api.shortcuts.register(prefs.shortcutKey, () => { 47 - openInputWindow(prefs); 48 - }); 49 - }; 50 - 51 - const init = () => { 52 - console.log('init'); 53 - 54 - const prefs = () => store.get(storageKeys.PREFS); 55 - 56 - initShortcut(prefs()); 57 - 58 - window.app.subscribe('open', msg => { 59 - if (msg.feature && msg.feature == `${id}/settings`) { 60 - openSettingsWindow(prefs()); 61 - } 62 - }); 63 - 64 - }; 65 - 66 - window.addEventListener('load', init);
+1 -1
features/cmd/commands.js app/cmd/commands.js
··· 1 1 import { id, labels, schemas, storageKeys, defaults } from './config.js'; 2 - import { openStore, flattenObj } from "./utils.js"; 2 + import { openStore, flattenObj } from '../utils.js'; 3 3 4 4 console.log('commands'); 5 5
+1 -1
features/cmd/config.js app/cmd/config.js
··· 33 33 34 34 const defaults = { 35 35 prefs: { 36 - shortcutKey: 'Option+Space' 36 + shortcutKey: 'Control+Space' 37 37 }, 38 38 }; 39 39
features/cmd/panel.css app/cmd/panel.css
features/cmd/panel.html app/cmd/panel.html
+1 -1
features/cmd/panel.js app/cmd/panel.js
··· 39 39 */ 40 40 41 41 import { id, labels, schemas, storageKeys, defaults } from './config.js'; 42 - import { log as l, openStore } from "./utils.js"; 42 + import { openStore } from "../utils.js"; 43 43 44 44 console.log('panel'); 45 45
-35
features/cmd/settings.css
··· 1 - body { 2 - font-family: -apple-system, BlinkMacSystemFont, helvetica neue, helvetica, sans-serif; 3 - font-feature-settings: "tnum"; 4 - font-size: 12.4px; 5 - font-variant-numeric: tabular-nums; 6 - /*margin: 12px;*/ 7 - } 8 - 9 - /* 10 - body > div { 11 - margin-bottom: 10px; 12 - } 13 - 14 - body > div > div { 15 - margin-bottom: 10px; 16 - } 17 - 18 - h1 { 19 - margin-top: 1px; 20 - margin-bottom: 2px; 21 - } 22 - 23 - .houseofpane { 24 - justify-content: space-between; 25 - columns: 2; 26 - } 27 - */ 28 - 29 - /* lil-gui */ 30 - .houseofpane > div { 31 - min-width: 380px; 32 - max-width: 380px; 33 - /*margin-bottom: 10px;*/ 34 - break-inside: avoid-column; 35 - }
-36
features/cmd/settings.html
··· 1 - <!DOCTYPE html> 2 - <html> 3 - <head> 4 - <title>peek:cmd:settings</title> 5 - <meta charset="UTF-8"> 6 - <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP --> 7 - <meta http-equiv="Content-Security-Policy" content="script-src 'self';"> 8 - <meta name="description" content=""> 9 - <meta name="viewport" content="width=device-width, initial-scale=1"> 10 - <link rel="stylesheet" href="settings.css"> 11 - <link rel="stylesheet" href="node_modules/lil-gui/dist/lil-gui.min.css"> 12 - </head> 13 - <body> 14 - <!-- 15 - <div> 16 - <h1>peek</h1> 17 - </div> 18 - --> 19 - 20 - <div class="houseofpane"> 21 - </div> 22 - 23 - <!-- 24 - <div> 25 - Node.js <span id="node-version"></span><br> 26 - Chromium <span id="chrome-version"></span><br> 27 - Electron <span id="electron-version"></span><br> 28 - </div> 29 - --> 30 - 31 - <script type=module src="./utils.js"></script> 32 - <script type=module src="./config.js"></script> 33 - <script type=module src="./settings.js"></script> 34 - 35 - </body> 36 - </html>
-63
features/cmd/settings.js
··· 1 - import { id, labels, schemas, storageKeys, defaults } from './config.js'; 2 - import { log as l, openStore, addToGUI } from "../utils.js"; 3 - import GUI from './../../node_modules/lil-gui/dist/lil-gui.esm.min.js'; 4 - 5 - const log = function(...args) { l(labels.name, args); }; 6 - 7 - log('loading', labels.name, 'settings'); 8 - 9 - const debug = window.app.debug; 10 - const clear = false; 11 - 12 - const store = openStore(id, defaults, clear /* clear storage */); 13 - const api = window.app; 14 - 15 - const container = document.querySelector('.houseofpane'); 16 - let prefs = store.get(storageKeys.PREFS); 17 - 18 - const persistToStorage = () => { 19 - store.set(storageKeys.PREFS, prefs); 20 - }; 21 - 22 - const init = () => { 23 - // Initialize settings UI 24 - const container = document.querySelector('.houseofpane'); 25 - 26 - const gui = new GUI({ 27 - touchStyles: false, 28 - container: container, 29 - title: labels.name 30 - }); 31 - 32 - // anytime anything changes, persist to storage 33 - gui.onFinishChange(persistToStorage); 34 - 35 - // Add prefs 36 - const prefsFolder = gui.addFolder( 37 - schemas.prefs.title 38 - ); 39 - 40 - const pProps = schemas.prefs.properties; 41 - const data = prefs; 42 - 43 - Object.keys(pProps).forEach(k => { 44 - // schema for property 45 - const s = pProps[k]; 46 - 47 - // value (or default) 48 - const v = 49 - (data && data.hasOwnProperty(k)) 50 - ? data[k] 51 - : pProps[k].default; 52 - 53 - const disabled = false; 54 - const step = pProps[k].type == 'integer' ? 1 : null; 55 - 56 - addToGUI(prefsFolder, k, v, disabled, step).onChange(e => { 57 - // TODO: validate new value against schema 58 - prefs[k] = e; 59 - });; 60 - }); 61 - }; 62 - 63 - window.addEventListener('load', init);
-89
features/cmd/utils.js
··· 1 - const id = 'features/utils'; 2 - 3 - const openStore = (prefix, defaults, clear = false) => { 4 - 5 - //log(id, 'openStore', prefix, (defaults ? Object.keys(defaults) : '')); 6 - 7 - // multiple contexts 8 - const keyify = k => `${prefix}+${k}`; 9 - 10 - // Simple localStorage abstraction/wrapper 11 - const store = { 12 - set: (k, v) => { 13 - const key = keyify(k); 14 - const value = JSON.stringify(v); 15 - //log(id, 'store.set', key) 16 - localStorage.setItem(key, value); 17 - }, 18 - get: (k) => { 19 - const key = keyify(k); 20 - //log(id, 'store.get', key) 21 - const r = localStorage.getItem(key); 22 - return r ? JSON.parse(r) : null; 23 - }, 24 - clear: () => localStorage.clear() 25 - }; 26 - 27 - if (window.app.debug 28 - && window.app.debugLevel == window.app.debugLevels.FIRST_RUN) { 29 - log(id, 'openStore(): clearing storage') 30 - store.clear(); 31 - } 32 - 33 - if (clear) { 34 - store.clear(); 35 - } 36 - 37 - const initStore = (store, data) => { 38 - Object.keys(data).forEach(k => { 39 - const v = store.get(k); 40 - if (!v) { 41 - //log(id, 'openStore(): init is setting', k, data[k]); 42 - store.set(k, data[k]); 43 - } 44 - }); 45 - }; 46 - 47 - if (defaults != null) { 48 - //log('UTILS/openStore()', 'initing'); 49 - initStore(store, defaults); 50 - } 51 - 52 - return store; 53 - }; 54 - 55 - const addToGUI = (gui, label, value, disabled = false, step = null, max = null) => { 56 - const params = {}; 57 - params[label] = value; 58 - 59 - const ctr = gui.add(params, label); 60 - 61 - /* 62 - if (disabled == true) { 63 - ctr.disable(); 64 - } 65 - 66 - if (max != null) { 67 - ctr.max(max); 68 - } 69 - 70 - if (step != null) { 71 - ctr.step(step); 72 - } 73 - */ 74 - 75 - return ctr; 76 - } 77 - 78 - const flattenObj = o => Object.keys(o).map(k => `${k}=${o[k]}`).join(','); 79 - 80 - const openWindow = (address, params) => { 81 - const target = params.hasOwnProperty('key') ? params.key : '_blank'; 82 - return window.open(address, target, flattenObj(params)); 83 - }; 84 - 85 - export { 86 - openStore, 87 - addToGUI, 88 - openWindow 89 - };
-14
features/core/background.html
··· 1 - <!DOCTYPE html> 2 - <html> 3 - <head> 4 - <meta charset="UTF-8"> 5 - <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP --> 6 - <meta http-equiv="Content-Security-Policy" content="script-src 'self';"> 7 - <title>peek:core:background</title> 8 - </head> 9 - <body> 10 - <script type=module src="./config.js"></script> 11 - <script type=module src="../utils.js"></script> 12 - <script type=module src="./background.js"></script> 13 - </body> 14 - </html>
+18 -24
features/core/background.js app/index.js
··· 1 - import { id, labels, schemas, storageKeys, defaults } from './config.js'; 1 + import appConfig from './config.js'; 2 2 import { openStore, openWindow } from "./utils.js"; 3 + import api from './api.js'; 4 + import fc from './features.js'; 5 + 6 + const { id, labels, schemas, storageKeys, defaults } = appConfig; 3 7 4 - console.log('background', labels.name); 8 + console.log('core', id, labels.name); 5 9 6 - const debug = window.app.debug; 10 + const debug = api.debug; 7 11 const clear = false; 8 12 9 13 const store = openStore(id, defaults, clear /* clear storage */); 10 - const api = window.app; 11 14 12 15 // maps app id to BrowserWindow id (background) 13 16 const windows = new Map(); 14 17 15 - const settingsAddress = 'peek://core/settings.html'; 18 + const settingsAddress = 'peek://app/settings/settings.html'; 16 19 const topicCorePrefs = 'topic:core:prefs'; 17 20 const topicFeatureToggle = 'core:feature:toggle'; 18 21 ··· 32 35 */ 33 36 34 37 const height = prefs.height || 600; 35 - const width = prefs.width || 380; 38 + const width = prefs.width || 800; 36 39 37 40 const params = { 38 41 debug, ··· 62 65 63 66 console.log('initializing feature ', f); 64 67 65 - const params = { 66 - debug, 67 - address: f.start_url, 68 - key: f.start_url, 69 - keepLive: true, 70 - show: false 71 - }; 72 - 73 - const w = openWindow(f.start_url, params); 74 - windows.set(w, params); 68 + fc[f.id].init(); 75 69 }; 76 70 77 71 const uninitFeature = f => { 78 72 const wid = windows.get(f.id); 79 73 if (wid) { 80 74 console.log('closing window for', f.name); 81 - window.app.closeWindow(wid, r => { 75 + api.closeWindow(wid, r => { 82 76 console.log(`uninitFeature(): win closed for ${f.name}`, r) 83 77 windows.delete(f.id); 84 78 }); ··· 101 95 }; 102 96 103 97 const prefs = () => store.get(storageKeys.PREFS); 104 - const features = () => store.get(storageKeys.FEATURES); 98 + const features = () => store.get(storageKeys.ITEMS); 105 99 106 100 const init = () => { 107 101 console.log('init'); ··· 111 105 console.log('prefs', p); 112 106 113 107 // main process uses these for initialization 114 - window.app.publish(topicCorePrefs, { 108 + api.publish(topicCorePrefs, { 115 109 id: id, 116 110 prefs: p 117 - }, window.app.scopes.SYSTEM); 111 + }, api.scopes.SYSTEM); 118 112 119 113 // Listen for system- or feature-level requests to open windows. 120 - window.app.subscribe('open', msg => { 114 + api.subscribe('open', msg => { 121 115 // eg from the tray icon. 122 116 if (msg.address && msg.address == settingsAddress) { 123 117 openSettingsWindow(p); ··· 129 123 } 130 124 131 125 // feature enable/disable 132 - window.app.subscribe(topicFeatureToggle, msg => { 126 + api.subscribe(topicFeatureToggle, msg => { 133 127 console.log('feature toggle', msg) 134 128 135 129 const f = features().find(f => f.id == msg.featureId); ··· 167 161 168 162 const w = openWindow(addy, params); 169 163 170 - window.app.subscribe('onWindowOpened', msg => { 164 + api.subscribe('onWindowOpened', msg => { 171 165 api.modifyWindow(params.key, { 172 166 hide: true 173 167 }); ··· 184 178 const old = JSON.parse(e.oldValue); 185 179 const now = JSON.parse(e.newValue); 186 180 187 - const featureKey = `${id}+${storageKeys.FEATURES}`; 181 + const featureKey = `${id}+${storageKeys.ITEMS}`; 188 182 //console.log('onStorageChane', e.key, featureKey) 189 183 if (e.key == featureKey) { 190 184 //console.log('STORAGE CHANGE', e.key, old[0].enabled, now[0].enabled);
+13 -13
features/core/config.js app/config.js
··· 1 1 const id = '8aadaae5-2594-4968-aba0-707f0d371cfb'; 2 2 3 3 const labels = { 4 - name: 'Peek → Settings', 4 + name: 'Settings', 5 5 prefs: { 6 6 shortcutKey: 'Settings shortcut', 7 7 } ··· 100 100 101 101 const storageKeys = { 102 102 PREFS: 'prefs', 103 - FEATURES: 'features', 103 + ITEMS: 'items', 104 104 }; 105 105 106 106 // defaults for user-modifiable preferences or data ··· 108 108 prefs: { 109 109 shortcutKey: 'Option+,', 110 110 height: 850, 111 - width: 380, 112 - startupFeature: 'peek://core/settings.html', 111 + width: 800, 112 + startupFeature: 'peek://app/settings/settings.html', 113 113 showTrayIcon: true, 114 114 showInTrayAndSwitcher: false 115 115 }, 116 - features: [ 116 + items: [ 117 117 { id: 'cee1225d-40ac-41e5-a34c-e2edba69d599', 118 118 name: 'Cmd', 119 - description: 'Command bar', 120 - start_url: 'peek://cmd/background.html', 119 + description: 'Command entry', 120 + start_url: 'peek://app/cmd/background.html', 121 121 enabled: false, 122 122 settings_url: 'peek://cmd/settings.html', 123 123 }, 124 124 { id: '82de735f-a4b7-4fe6-a458-ec29939ae00d', 125 125 name: 'Groups', 126 126 description: 'View your web in groups', 127 - start_url: 'peek://groups/background.html', 127 + start_url: 'peek://app/groups/background.html', 128 128 enabled: false, 129 129 settings_url: 'peek://groups/settings.html', 130 130 }, 131 131 { id: 'ef3bd271-d408-421f-9338-47b615571e43', 132 132 name: 'Peeks', 133 133 description: 'Peek at pages in a transient popup using keyboard shortcuts', 134 - start_url: 'peek://peeks/background.html', 134 + start_url: 'peek://app/peeks/background.html', 135 135 enabled: false, 136 136 settings_url: 'peek://peeks/settings.html', 137 137 }, 138 138 { id: '30c25027-d367-4595-b37f-9db3de853c37', 139 139 name: 'Scripts', 140 140 description: 'Create, manage and run content scripts', 141 - start_url: 'peek://scripts/background.html', 141 + start_url: 'peek://app/scripts/background.html', 142 142 enabled: false, 143 143 settings_url: 'peek://scripts/settings.html', 144 144 }, 145 145 { id: '434108f3-18a6-437a-b507-2f998f693bb2', 146 146 name: 'Slides', 147 - description: 'Open specific pages as side/top/bottom bars', 148 - start_url: 'peek://slides/background.html', 147 + description: 'Open web pages as side/top/bottom bars', 148 + start_url: 'peek://app/slides/background.html', 149 149 enabled: false, 150 150 settings_url: 'peek://slides/settings.html', 151 151 } 152 152 ] 153 153 }; 154 154 155 - export { 155 + export default { 156 156 id, 157 157 labels, 158 158 schemas,
+5 -3
features/core/settings.css app/settings/settings.css
··· 20 20 margin-bottom: 2px; 21 21 } 22 22 23 + */ 23 24 .houseofpane { 24 25 justify-content: space-between; 25 - columns: 2; 26 + columns: 3; 26 27 } 27 - */ 28 28 29 29 .houseofpane { 30 30 background-color: black; ··· 33 33 34 34 /* lil-gui */ 35 35 .houseofpane > div { 36 + /* 36 37 min-width: 380px; 37 - max-width: 380px; 38 + max-width: 800px; 39 + */ 38 40 /*margin-bottom: 10px;*/ 39 41 break-inside: avoid-column; 40 42 }
+1 -3
features/core/settings.html app/settings/settings.html
··· 8 8 <meta name="description" content=""> 9 9 <meta name="viewport" content="width=device-width, initial-scale=1"> 10 10 <link rel="stylesheet" href="settings.css"> 11 - <link rel="stylesheet" href="node_modules/lil-gui/dist/lil-gui.min.css"> 11 + <link rel="stylesheet" href="./../../node_modules/lil-gui/dist/lil-gui.min.css"> 12 12 </head> 13 13 <body> 14 14 <!-- ··· 28 28 </div> 29 29 --> 30 30 31 - <script type=module src="./utils.js"></script> 32 - <script type=module src="./config.js"></script> 33 31 <script type=module src="./settings.js"></script> 34 32 35 33 </body>
-93
features/core/settings.js
··· 1 - import { id, labels, schemas, storageKeys, defaults } from './config.js'; 2 - import { openStore, addToGUI, openWindow} from "../utils.js"; 3 - import GUI from './../../node_modules/lil-gui/dist/lil-gui.esm.min.js'; 4 - 5 - const DEBUG = window.app.debug; 6 - 7 - console.log('loading', labels.name, 'settings'); 8 - 9 - const store = openStore(id); 10 - const container = document.querySelector('.houseofpane'); 11 - let prefs = store.get(storageKeys.PREFS); 12 - let features = store.get(storageKeys.FEATURES); 13 - 14 - const persistToStorage = () => { 15 - store.set(storageKeys.PREFS, prefs); 16 - store.set(storageKeys.FEATURES, features); 17 - }; 18 - 19 - const init = () => { 20 - 21 - // Initialize settings UI 22 - const container = document.querySelector('.houseofpane'); 23 - 24 - const gui = new GUI({ 25 - touchStyles: false, 26 - container: container, 27 - title: labels.name 28 - }); 29 - 30 - // anytime anything changes, persist to storage 31 - gui.onFinishChange(persistToStorage); 32 - 33 - // Add prefs 34 - const prefsFolder = gui.addFolder( 35 - schemas.prefs.title 36 - ); 37 - 38 - const pProps = schemas.prefs.properties; 39 - const data = prefs; 40 - 41 - Object.keys(pProps).forEach(k => { 42 - // schema for property 43 - const s = pProps[k]; 44 - 45 - // value (or default) 46 - const v = 47 - (data && data.hasOwnProperty(k)) 48 - ? data[k] 49 - : pProps[k].default; 50 - 51 - const disabled = false; 52 - const step = pProps[k].type == 'integer' ? 1 : null; 53 - 54 - addToGUI(prefsFolder, k, v, disabled, step).onChange(e => { 55 - // TODO: validate new value against schema 56 - prefs[k] = e; 57 - });; 58 - }); 59 - 60 - // Add features 61 - features.forEach((feature, i) => { 62 - const folder = gui.addFolder(feature.name); 63 - addToGUI(folder, 'Description', feature.description).disable(); 64 - addToGUI(folder, 'Enabled', feature.enabled).onChange(e => { 65 - // TODO: validate new value against schema 66 - features[i].enabled = e; 67 - window.app.publish('core:feature:toggle', { 68 - featureId: feature.id, 69 - enabled: e 70 - }); 71 - }); 72 - addToGUI(folder, 'Settings', () => { 73 - const title = `${feature.name} - Settings`; 74 - openSettingsAddress(title, feature.settings_url); 75 - }).disable(!feature.enabled); 76 - }); 77 - }; 78 - 79 - const openSettingsAddress = (title, address) => { 80 - console.log('openSettingsAddress', title, address); 81 - const params = { 82 - address, 83 - transparent: true 84 - }; 85 - 86 - window.open(address, params); 87 - } 88 - 89 - window.addEventListener('load', init); 90 - 91 - window.addEventListener('blur', () => { 92 - console.log('core settings blur'); 93 - });
-89
features/core/utils.js
··· 1 - const id = 'features/utils'; 2 - 3 - const openStore = (prefix, defaults, clear = false) => { 4 - 5 - //log(id, 'openStore', prefix, (defaults ? Object.keys(defaults) : '')); 6 - 7 - // multiple contexts 8 - const keyify = k => `${prefix}+${k}`; 9 - 10 - // Simple localStorage abstraction/wrapper 11 - const store = { 12 - set: (k, v) => { 13 - const key = keyify(k); 14 - const value = JSON.stringify(v); 15 - //log(id, 'store.set', key) 16 - localStorage.setItem(key, value); 17 - }, 18 - get: (k) => { 19 - const key = keyify(k); 20 - //log(id, 'store.get', key) 21 - const r = localStorage.getItem(key); 22 - return r ? JSON.parse(r) : null; 23 - }, 24 - clear: () => localStorage.clear() 25 - }; 26 - 27 - if (window.app.debug 28 - && window.app.debugLevel == window.app.debugLevels.FIRST_RUN) { 29 - log(id, 'openStore(): clearing storage') 30 - store.clear(); 31 - } 32 - 33 - if (clear) { 34 - store.clear(); 35 - } 36 - 37 - const initStore = (store, data) => { 38 - Object.keys(data).forEach(k => { 39 - const v = store.get(k); 40 - if (!v) { 41 - //log(id, 'openStore(): init is setting', k, data[k]); 42 - store.set(k, data[k]); 43 - } 44 - }); 45 - }; 46 - 47 - if (defaults != null) { 48 - //log('UTILS/openStore()', 'initing'); 49 - initStore(store, defaults); 50 - } 51 - 52 - return store; 53 - }; 54 - 55 - const addToGUI = (gui, label, value, disabled = false, step = null, max = null) => { 56 - const params = {}; 57 - params[label] = value; 58 - 59 - const ctr = gui.add(params, label); 60 - 61 - /* 62 - if (disabled == true) { 63 - ctr.disable(); 64 - } 65 - 66 - if (max != null) { 67 - ctr.max(max); 68 - } 69 - 70 - if (step != null) { 71 - ctr.step(step); 72 - } 73 - */ 74 - 75 - return ctr; 76 - } 77 - 78 - const flattenObj = o => Object.keys(o).map(k => `${k}=${o[k]}`).join(','); 79 - 80 - const openWindow = (address, params) => { 81 - const target = params.hasOwnProperty('key') ? params.key : '_blank'; 82 - return window.open(address, target, flattenObj(params)); 83 - }; 84 - 85 - export { 86 - openStore, 87 - addToGUI, 88 - openWindow 89 - };
-14
features/groups/background.html
··· 1 - <!DOCTYPE html> 2 - <html> 3 - <head> 4 - <meta charset="UTF-8"> 5 - <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP --> 6 - <meta http-equiv="Content-Security-Policy" content="script-src 'self';"> 7 - <title>peek:core:background</title> 8 - </head> 9 - <body> 10 - <script type=module src="../utils.js"></script> 11 - <script type=module src="./config.js"></script> 12 - <script type=module src="./background.js"></script> 13 - </body> 14 - </html>
+11 -6
features/groups/background.js app/groups/index.js
··· 1 - // groups/background.js 2 - 3 1 import { id, labels, schemas, storageKeys, defaults } from './config.js'; 4 2 import { openStore, openWindow } from "../utils.js"; 3 + import api from '../api.js'; 5 4 6 5 console.log('background', labels.name); 7 6 8 - const debug = window.app.debug; 7 + const debug = api.debug; 9 8 const clear = false; 10 9 11 10 const store = openStore(id, defaults, clear /* clear storage */); 12 - const api = window.app; 13 11 14 12 const address = 'features/groups/home.html'; 15 13 ··· 24 22 width 25 23 }; 26 24 27 - window.open(address, params); 25 + openWindow(address, params); 28 26 }; 29 27 30 28 const initShortcut = shortcut => { ··· 61 59 */ 62 60 }; 63 61 64 - window.addEventListener('load', init); 62 + export default { 63 + defaults, 64 + id, 65 + init, 66 + labels, 67 + schemas, 68 + storageKeys 69 + };
features/groups/config.js app/groups/config.js
features/groups/home.css app/groups/home.css
features/groups/home.html app/groups/home.html
features/groups/home.js app/groups/home.js
-35
features/groups/settings.css
··· 1 - body { 2 - font-family: -apple-system, BlinkMacSystemFont, helvetica neue, helvetica, sans-serif; 3 - font-feature-settings: "tnum"; 4 - font-size: 12.4px; 5 - font-variant-numeric: tabular-nums; 6 - /*margin: 12px;*/ 7 - } 8 - 9 - /* 10 - body > div { 11 - margin-bottom: 10px; 12 - } 13 - 14 - body > div > div { 15 - margin-bottom: 10px; 16 - } 17 - 18 - h1 { 19 - margin-top: 1px; 20 - margin-bottom: 2px; 21 - } 22 - 23 - .houseofpane { 24 - justify-content: space-between; 25 - columns: 2; 26 - } 27 - */ 28 - 29 - /* lil-gui */ 30 - .houseofpane > div { 31 - min-width: 380px; 32 - max-width: 380px; 33 - /*margin-bottom: 10px;*/ 34 - break-inside: avoid-column; 35 - }
-36
features/groups/settings.html
··· 1 - <!DOCTYPE html> 2 - <html> 3 - <head> 4 - <title>peek:groups:settings</title> 5 - <meta charset="UTF-8"> 6 - <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP --> 7 - <meta http-equiv="Content-Security-Policy" content="script-src 'self';"> 8 - <meta name="description" content=""> 9 - <meta name="viewport" content="width=device-width, initial-scale=1"> 10 - <link rel="stylesheet" href="settings.css"> 11 - <link rel="stylesheet" href="node_modules/lil-gui/dist/lil-gui.min.css"> 12 - </head> 13 - <body> 14 - <!-- 15 - <div> 16 - <h1>peek</h1> 17 - </div> 18 - --> 19 - 20 - <div class="houseofpane"> 21 - </div> 22 - 23 - <!-- 24 - <div> 25 - Node.js <span id="node-version"></span><br> 26 - Chromium <span id="chrome-version"></span><br> 27 - Electron <span id="electron-version"></span><br> 28 - </div> 29 - --> 30 - 31 - <script type=module src="./utils.js"></script> 32 - <script type=module src="./config.js"></script> 33 - <script type=module src="./settings.js"></script> 34 - 35 - </body> 36 - </html>
-91
features/groups/settings.js
··· 1 - import { id, labels, schemas, storageKeys, defaults } from './config.js'; 2 - import { log as l, openStore, addToGUI } from "../utils.js"; 3 - import GUI from './../../node_modules/lil-gui/dist/lil-gui.esm.min.js'; 4 - 5 - const log = function(...args) { l(labels.name, args); }; 6 - 7 - log('loading', labels.name, 'settings'); 8 - 9 - const debug = window.app.debug; 10 - const clear = false; 11 - 12 - const store = openStore(id, defaults, clear /* clear storage */); 13 - const api = window.app; 14 - 15 - const container = document.querySelector('.houseofpane'); 16 - let prefs = store.get(storageKeys.PREFS); 17 - //let items = store.get(storageKeys.ITEMS); 18 - 19 - const persistToStorage = () => { 20 - store.set(storageKeys.PREFS, prefs); 21 - //store.set(storageKeys.ITEMS, items); 22 - }; 23 - 24 - const init = () => { 25 - // Initialize settings UI 26 - const container = document.querySelector('.houseofpane'); 27 - 28 - const gui = new GUI({ 29 - touchStyles: false, 30 - container: container, 31 - title: labels.name 32 - }); 33 - 34 - // anytime anything changes, persist to storage 35 - gui.onFinishChange(persistToStorage); 36 - 37 - // Add prefs 38 - const prefsFolder = gui.addFolder( 39 - schemas.prefs.title 40 - ); 41 - 42 - const pProps = schemas.prefs.properties; 43 - const data = prefs; 44 - 45 - Object.keys(pProps).forEach(k => { 46 - // schema for property 47 - const s = pProps[k]; 48 - 49 - // value (or default) 50 - const v = 51 - (data && data.hasOwnProperty(k)) 52 - ? data[k] 53 - : pProps[k].default; 54 - 55 - const disabled = false; 56 - const step = pProps[k].type == 'integer' ? 1 : null; 57 - 58 - addToGUI(prefsFolder, k, v, disabled, step).onChange(e => { 59 - // TODO: validate new value against schema 60 - prefs[k] = e; 61 - });; 62 - }); 63 - 64 - /* 65 - // Add items 66 - items.forEach((item, i) => { 67 - const folder = gui.addFolder(item.title); 68 - 69 - addToGUI(folder, 'Key mapping', item.keyNum).disable(); 70 - addToGUI(folder, 'Address to load', item.address).onChange(e => { 71 - items[i].address = e; 72 - }); 73 - addToGUI(folder, 'Persist state (not supported)', item.persistState).disable(); 74 - addToGUI(folder, 'Keep live', item.keepLive).onChange(e => { 75 - items[i].keepLive = e; 76 - }); 77 - addToGUI(folder, 'Allow sound (not supported)', item.allowSound).disable(); 78 - addToGUI(folder, 'Window height', item.height).onChange(e => { 79 - items[i].height = e; 80 - }); 81 - addToGUI(folder, 'Window width', item.width).onChange(e => { 82 - items[i].width = e; 83 - }); 84 - addToGUI(folder, 'Enabled', item.enabled).onChange(e => { 85 - items[i].enabled = e; 86 - }); 87 - }); 88 - */ 89 - }; 90 - 91 - window.addEventListener('load', init);
-89
features/groups/utils.js
··· 1 - const id = 'features/utils'; 2 - 3 - const openStore = (prefix, defaults, clear = false) => { 4 - 5 - //log(id, 'openStore', prefix, (defaults ? Object.keys(defaults) : '')); 6 - 7 - // multiple contexts 8 - const keyify = k => `${prefix}+${k}`; 9 - 10 - // Simple localStorage abstraction/wrapper 11 - const store = { 12 - set: (k, v) => { 13 - const key = keyify(k); 14 - const value = JSON.stringify(v); 15 - //log(id, 'store.set', key) 16 - localStorage.setItem(key, value); 17 - }, 18 - get: (k) => { 19 - const key = keyify(k); 20 - //log(id, 'store.get', key) 21 - const r = localStorage.getItem(key); 22 - return r ? JSON.parse(r) : null; 23 - }, 24 - clear: () => localStorage.clear() 25 - }; 26 - 27 - if (window.app.debug 28 - && window.app.debugLevel == window.app.debugLevels.FIRST_RUN) { 29 - log(id, 'openStore(): clearing storage') 30 - store.clear(); 31 - } 32 - 33 - if (clear) { 34 - store.clear(); 35 - } 36 - 37 - const initStore = (store, data) => { 38 - Object.keys(data).forEach(k => { 39 - const v = store.get(k); 40 - if (!v) { 41 - //log(id, 'openStore(): init is setting', k, data[k]); 42 - store.set(k, data[k]); 43 - } 44 - }); 45 - }; 46 - 47 - if (defaults != null) { 48 - //log('UTILS/openStore()', 'initing'); 49 - initStore(store, defaults); 50 - } 51 - 52 - return store; 53 - }; 54 - 55 - const addToGUI = (gui, label, value, disabled = false, step = null, max = null) => { 56 - const params = {}; 57 - params[label] = value; 58 - 59 - const ctr = gui.add(params, label); 60 - 61 - /* 62 - if (disabled == true) { 63 - ctr.disable(); 64 - } 65 - 66 - if (max != null) { 67 - ctr.max(max); 68 - } 69 - 70 - if (step != null) { 71 - ctr.step(step); 72 - } 73 - */ 74 - 75 - return ctr; 76 - } 77 - 78 - const flattenObj = o => Object.keys(o).map(k => `${k}=${o[k]}`).join(','); 79 - 80 - const openWindow = (address, params) => { 81 - const target = params.hasOwnProperty('key') ? params.key : '_blank'; 82 - return window.open(address, target, flattenObj(params)); 83 - }; 84 - 85 - export { 86 - openStore, 87 - addToGUI, 88 - openWindow 89 - };
-14
features/peeks/background.html
··· 1 - <!DOCTYPE html> 2 - <html> 3 - <head> 4 - <meta charset="UTF-8"> 5 - <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP --> 6 - <meta http-equiv="Content-Security-Policy" content="script-src 'self';"> 7 - <title>peek:core:background</title> 8 - </head> 9 - <body> 10 - <script type=module src="../utils.js"></script> 11 - <script type=module src="./config.js"></script> 12 - <script type=module src="./background.js"></script> 13 - </body> 14 - </html>
+11 -6
features/peeks/background.js app/peeks/index.js
··· 1 - // peeks/background.js 2 - 3 1 import { id, labels, schemas, storageKeys, defaults } from './config.js'; 4 2 import { openStore, openWindow } from "../utils.js"; 3 + import api from '../api.js'; 5 4 6 5 console.log('background', labels.name); 7 6 8 - const debug = window.app.debug; 7 + const debug = api.debug; 9 8 const clear = false; 10 9 11 10 const store = openStore(id, defaults, clear /* clear storage */); 12 - const api = window.app; 13 11 14 12 const executeItem = (item) => { 15 13 const height = item.height || 600; ··· 27 25 persistState: item.persistState || false 28 26 }; 29 27 30 - window.open(item.address, params); 28 + openWindow(item.address, params); 31 29 }; 32 30 33 31 const initItems = (prefs, items) => { ··· 57 55 } 58 56 }; 59 57 60 - window.addEventListener('load', init); 58 + export default { 59 + defaults, 60 + id, 61 + init, 62 + labels, 63 + schemas, 64 + storageKeys 65 + }
features/peeks/config.js app/peeks/config.js
-35
features/peeks/settings.css
··· 1 - body { 2 - font-family: -apple-system, BlinkMacSystemFont, helvetica neue, helvetica, sans-serif; 3 - font-feature-settings: "tnum"; 4 - font-size: 12.4px; 5 - font-variant-numeric: tabular-nums; 6 - /*margin: 12px;*/ 7 - } 8 - 9 - /* 10 - body > div { 11 - margin-bottom: 10px; 12 - } 13 - 14 - body > div > div { 15 - margin-bottom: 10px; 16 - } 17 - 18 - h1 { 19 - margin-top: 1px; 20 - margin-bottom: 2px; 21 - } 22 - 23 - .houseofpane { 24 - justify-content: space-between; 25 - columns: 2; 26 - } 27 - */ 28 - 29 - /* lil-gui */ 30 - .houseofpane > div { 31 - min-width: 380px; 32 - max-width: 380px; 33 - /*margin-bottom: 10px;*/ 34 - break-inside: avoid-column; 35 - }
-36
features/peeks/settings.html
··· 1 - <!DOCTYPE html> 2 - <html> 3 - <head> 4 - <title>peek:peeks:settings</title> 5 - <meta charset="UTF-8"> 6 - <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP --> 7 - <meta http-equiv="Content-Security-Policy" content="script-src 'self';"> 8 - <meta name="description" content=""> 9 - <meta name="viewport" content="width=device-width, initial-scale=1"> 10 - <link rel="stylesheet" href="settings.css"> 11 - <link rel="stylesheet" href="node_modules/lil-gui/dist/lil-gui.min.css"> 12 - </head> 13 - <body> 14 - <!-- 15 - <div> 16 - <h1>peek</h1> 17 - </div> 18 - --> 19 - 20 - <div class="houseofpane"> 21 - </div> 22 - 23 - <!-- 24 - <div> 25 - Node.js <span id="node-version"></span><br> 26 - Chromium <span id="chrome-version"></span><br> 27 - Electron <span id="electron-version"></span><br> 28 - </div> 29 - --> 30 - 31 - <script type=module src="./utils.js"></script> 32 - <script type=module src="./config.js"></script> 33 - <script type=module src="./settings.js"></script> 34 - 35 - </body> 36 - </html>
-89
features/peeks/settings.js
··· 1 - console.log('peek settings'); 2 - import { id, labels, schemas, storageKeys, defaults } from './config.js'; 3 - import { openStore, addToGUI } from "../utils.js"; 4 - import GUI from './../../node_modules/lil-gui/dist/lil-gui.esm.min.js'; 5 - 6 - console.log('loading', labels.name, 'settings'); 7 - 8 - //console.log('app', window.app); 9 - //const debug = window.app.debug; 10 - const clear = false; 11 - 12 - const store = openStore(id, defaults, clear /* clear storage */); 13 - //const api = window.app; 14 - 15 - const container = document.querySelector('.houseofpane'); 16 - let prefs = store.get(storageKeys.PREFS); 17 - let items = store.get(storageKeys.ITEMS); 18 - 19 - const persistToStorage = () => { 20 - store.set(storageKeys.PREFS, prefs); 21 - store.set(storageKeys.ITEMS, items); 22 - }; 23 - 24 - const init = () => { 25 - // Initialize settings UI 26 - const container = document.querySelector('.houseofpane'); 27 - 28 - const gui = new GUI({ 29 - touchStyles: false, 30 - container: container, 31 - title: labels.name 32 - }); 33 - 34 - // anytime anything changes, persist to storage 35 - gui.onFinishChange(persistToStorage); 36 - 37 - // Add prefs 38 - const prefsFolder = gui.addFolder( 39 - schemas.prefs.title 40 - ); 41 - 42 - const pProps = schemas.prefs.properties; 43 - const data = prefs; 44 - 45 - Object.keys(pProps).forEach(k => { 46 - // schema for property 47 - const s = pProps[k]; 48 - 49 - // value (or default) 50 - const v = 51 - (data && data.hasOwnProperty(k)) 52 - ? data[k] 53 - : pProps[k].default; 54 - 55 - const disabled = false; 56 - const step = pProps[k].type == 'integer' ? 1 : null; 57 - 58 - addToGUI(prefsFolder, k, v, disabled, step).onChange(e => { 59 - // TODO: validate new value against schema 60 - prefs[k] = e; 61 - });; 62 - }); 63 - 64 - // Add items 65 - items.forEach((item, i) => { 66 - const folder = gui.addFolder(item.title); 67 - 68 - addToGUI(folder, 'Key mapping', item.keyNum).disable(); 69 - addToGUI(folder, 'Address to load', item.address).onChange(e => { 70 - items[i].address = e; 71 - }); 72 - addToGUI(folder, 'Persist state (not supported)', item.persistState).disable(); 73 - addToGUI(folder, 'Keep live', item.keepLive).onChange(e => { 74 - items[i].keepLive = e; 75 - }); 76 - addToGUI(folder, 'Allow sound (not supported)', item.allowSound).disable(); 77 - addToGUI(folder, 'Window height', item.height).onChange(e => { 78 - items[i].height = e; 79 - }); 80 - addToGUI(folder, 'Window width', item.width).onChange(e => { 81 - items[i].width = e; 82 - }); 83 - addToGUI(folder, 'Enabled', item.enabled).onChange(e => { 84 - items[i].enabled = e; 85 - }); 86 - }); 87 - }; 88 - 89 - window.addEventListener('load', init);
-91
features/peeks/utils.js
··· 1 - const id = 'features/utils'; 2 - 3 - const openStore = (prefix, defaults, clear = false) => { 4 - 5 - //log(id, 'openStore', prefix, (defaults ? Object.keys(defaults) : '')); 6 - 7 - // multiple contexts 8 - const keyify = k => `${prefix}+${k}`; 9 - 10 - // Simple localStorage abstraction/wrapper 11 - const store = { 12 - set: (k, v) => { 13 - const key = keyify(k); 14 - const value = JSON.stringify(v); 15 - //log(id, 'store.set', key) 16 - localStorage.setItem(key, value); 17 - }, 18 - get: (k) => { 19 - const key = keyify(k); 20 - //log(id, 'store.get', key) 21 - const r = localStorage.getItem(key); 22 - return r ? JSON.parse(r) : null; 23 - }, 24 - clear: () => localStorage.clear() 25 - }; 26 - 27 - /* 28 - if (window.app.debug 29 - && window.app.debugLevel == window.app.debugLevels.FIRST_RUN) { 30 - log(id, 'openStore(): clearing storage') 31 - store.clear(); 32 - } 33 - */ 34 - 35 - if (clear) { 36 - store.clear(); 37 - } 38 - 39 - const initStore = (store, data) => { 40 - Object.keys(data).forEach(k => { 41 - const v = store.get(k); 42 - if (!v) { 43 - //log(id, 'openStore(): init is setting', k, data[k]); 44 - store.set(k, data[k]); 45 - } 46 - }); 47 - }; 48 - 49 - if (defaults != null) { 50 - //log('UTILS/openStore()', 'initing'); 51 - initStore(store, defaults); 52 - } 53 - 54 - return store; 55 - }; 56 - 57 - const addToGUI = (gui, label, value, disabled = false, step = null, max = null) => { 58 - const params = {}; 59 - params[label] = value; 60 - 61 - const ctr = gui.add(params, label); 62 - 63 - /* 64 - if (disabled == true) { 65 - ctr.disable(); 66 - } 67 - 68 - if (max != null) { 69 - ctr.max(max); 70 - } 71 - 72 - if (step != null) { 73 - ctr.step(step); 74 - } 75 - */ 76 - 77 - return ctr; 78 - } 79 - 80 - const flattenObj = o => Object.keys(o).map(k => `${k}=${o[k]}`).join(','); 81 - 82 - const openWindow = (address, params) => { 83 - const target = params.hasOwnProperty('key') ? params.key : '_blank'; 84 - return window.open(address, target, flattenObj(params)); 85 - }; 86 - 87 - export { 88 - openStore, 89 - addToGUI, 90 - openWindow 91 - };
-14
features/scripts/background.html
··· 1 - <!DOCTYPE html> 2 - <html> 3 - <head> 4 - <meta charset="UTF-8"> 5 - <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP --> 6 - <meta http-equiv="Content-Security-Policy" content="script-src 'self';"> 7 - <title>peek:core:background</title> 8 - </head> 9 - <body> 10 - <script type=module src="../utils.js"></script> 11 - <script type=module src="./config.js"></script> 12 - <script type=module src="./background.js"></script> 13 - </body> 14 - </html>
+12 -7
features/scripts/background.js app/scripts/index.js
··· 1 - // scripts/background.js 2 - 3 1 import { id, labels, schemas, storageKeys, defaults } from './config.js'; 4 2 import { openStore, openWindow } from "../utils.js"; 3 + import api from '../api.js'; 5 4 6 5 console.log('background', labels.name); 7 6 8 - const debug = window.app.debug; 7 + const debug = api.debug; 9 8 const clear = false; 10 9 11 10 const store = openStore(id, defaults, clear /* clear storage */); 12 - const api = window.app; 13 11 14 12 let _intervals = []; 15 13 ··· 32 30 } 33 31 }; 34 32 35 - window.open(script.address, params); 33 + openWindow(script.address, params); 36 34 }; 37 35 38 36 const initItems = (prefs, items) => { ··· 88 86 }; 89 87 90 88 const init = () => { 91 - log('init'); 89 + console.log('init'); 92 90 93 91 const prefs = () => store.get(storageKeys.PREFS); 94 92 const items = () => store.get(storageKeys.ITEMS); ··· 99 97 } 100 98 }; 101 99 102 - window.addEventListener('load', init); 100 + export default { 101 + defaults, 102 + id, 103 + init, 104 + labels, 105 + schemas, 106 + storageKeys 107 + }
features/scripts/config.js app/scripts/config.js
-35
features/scripts/settings.css
··· 1 - body { 2 - font-family: -apple-system, BlinkMacSystemFont, helvetica neue, helvetica, sans-serif; 3 - font-feature-settings: "tnum"; 4 - font-size: 12.4px; 5 - font-variant-numeric: tabular-nums; 6 - /*margin: 12px;*/ 7 - } 8 - 9 - /* 10 - body > div { 11 - margin-bottom: 10px; 12 - } 13 - 14 - body > div > div { 15 - margin-bottom: 10px; 16 - } 17 - 18 - h1 { 19 - margin-top: 1px; 20 - margin-bottom: 2px; 21 - } 22 - 23 - .houseofpane { 24 - justify-content: space-between; 25 - columns: 2; 26 - } 27 - */ 28 - 29 - /* lil-gui */ 30 - .houseofpane > div { 31 - min-width: 380px; 32 - max-width: 380px; 33 - /*margin-bottom: 10px;*/ 34 - break-inside: avoid-column; 35 - }
-36
features/scripts/settings.html
··· 1 - <!DOCTYPE html> 2 - <html> 3 - <head> 4 - <title>peek:scripts:settings</title> 5 - <meta charset="UTF-8"> 6 - <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP --> 7 - <meta http-equiv="Content-Security-Policy" content="script-src 'self';"> 8 - <meta name="description" content=""> 9 - <meta name="viewport" content="width=device-width, initial-scale=1"> 10 - <link rel="stylesheet" href="settings.css"> 11 - <link rel="stylesheet" href="node_modules/lil-gui/dist/lil-gui.min.css"> 12 - </head> 13 - <body> 14 - <!-- 15 - <div> 16 - <h1>peek</h1> 17 - </div> 18 - --> 19 - 20 - <div class="houseofpane"> 21 - </div> 22 - 23 - <!-- 24 - <div> 25 - Node.js <span id="node-version"></span><br> 26 - Chromium <span id="chrome-version"></span><br> 27 - Electron <span id="electron-version"></span><br> 28 - </div> 29 - --> 30 - 31 - <script type=module src="./utils.js"></script> 32 - <script type=module src="./config.js"></script> 33 - <script type=module src="./settings.js"></script> 34 - 35 - </body> 36 - </html>
-98
features/scripts/settings.js
··· 1 - import { id, labels, schemas, storageKeys, defaults } from './config.js'; 2 - import { log as l, openStore, addToGUI } from "../utils.js"; 3 - import GUI from './../../node_modules/lil-gui/dist/lil-gui.esm.min.js'; 4 - 5 - const log = function(...args) { l(labels.name, args); }; 6 - 7 - log('loading', labels.name, 'settings'); 8 - 9 - const debug = window.app.debug; 10 - const clear = false; 11 - 12 - const store = openStore(id, defaults, clear /* clear storage */); 13 - const api = window.app; 14 - 15 - const container = document.querySelector('.houseofpane'); 16 - let prefs = store.get(storageKeys.PREFS); 17 - let items = store.get(storageKeys.ITEMS); 18 - 19 - const persistToStorage = () => { 20 - store.set(storageKeys.PREFS, prefs); 21 - store.set(storageKeys.ITEMS, items); 22 - }; 23 - 24 - const init = () => { 25 - // Initialize settings UI 26 - const container = document.querySelector('.houseofpane'); 27 - 28 - const gui = new GUI({ 29 - touchStyles: false, 30 - container: container, 31 - title: labels.name 32 - }); 33 - 34 - // anytime anything changes, persist to storage 35 - gui.onFinishChange(persistToStorage); 36 - 37 - // Add prefs 38 - const prefsFolder = gui.addFolder( 39 - schemas.prefs.title 40 - ); 41 - 42 - const pProps = schemas.prefs.properties; 43 - const data = prefs; 44 - 45 - Object.keys(pProps).forEach(k => { 46 - // schema for property 47 - const s = pProps[k]; 48 - 49 - // value (or default) 50 - const v = 51 - (data && data.hasOwnProperty(k)) 52 - ? data[k] 53 - : pProps[k].default; 54 - 55 - const disabled = false; 56 - const step = pProps[k].type == 'integer' ? 1 : null; 57 - 58 - addToGUI(prefsFolder, k, v, disabled, step).onChange(e => { 59 - // TODO: validate new value against schema 60 - prefs[k] = e; 61 - });; 62 - }); 63 - 64 - // Add items 65 - items.forEach((item, i) => { 66 - const folder = gui.addFolder(item.title); 67 - 68 - addToGUI(folder, 'Id', item.id).onChange(e => { 69 - items[i].id = e; 70 - }); 71 - addToGUI(folder, 'Script title', item.address).onChange(e => { 72 - items[i].title = e; 73 - }); 74 - addToGUI(folder, 'Version', item.version).onChange(e => { 75 - items[i].version = e; 76 - }); 77 - addToGUI(folder, 'Address to load', item.address).onChange(e => { 78 - items[i].address = e; 79 - }); 80 - addToGUI(folder, 'Selector', item.selector).onChange(e => { 81 - items[i].selector = e; 82 - }); 83 - // TODO: make options 84 - addToGUI(folder, 'Property', item.property).onChange(e => { 85 - items[i].property = e; 86 - }); 87 - addToGUI(folder, 'Interval', item.interval).onChange(e => { 88 - items[i].interval = e; 89 - }); 90 - addToGUI(folder, 'Store history (not supported)', item.storeHistory).disable(); 91 - addToGUI(folder, 'Notify on changed value', item.notifyOnChange).disable(); 92 - addToGUI(folder, 'Enabled', item.enabled).onChange(e => { 93 - items[i].enabled = e; 94 - }); 95 - }); 96 - }; 97 - 98 - window.addEventListener('load', init);
-89
features/scripts/utils.js
··· 1 - const id = 'features/utils'; 2 - 3 - const openStore = (prefix, defaults, clear = false) => { 4 - 5 - //log(id, 'openStore', prefix, (defaults ? Object.keys(defaults) : '')); 6 - 7 - // multiple contexts 8 - const keyify = k => `${prefix}+${k}`; 9 - 10 - // Simple localStorage abstraction/wrapper 11 - const store = { 12 - set: (k, v) => { 13 - const key = keyify(k); 14 - const value = JSON.stringify(v); 15 - //log(id, 'store.set', key) 16 - localStorage.setItem(key, value); 17 - }, 18 - get: (k) => { 19 - const key = keyify(k); 20 - //log(id, 'store.get', key) 21 - const r = localStorage.getItem(key); 22 - return r ? JSON.parse(r) : null; 23 - }, 24 - clear: () => localStorage.clear() 25 - }; 26 - 27 - if (window.app.debug 28 - && window.app.debugLevel == window.app.debugLevels.FIRST_RUN) { 29 - log(id, 'openStore(): clearing storage') 30 - store.clear(); 31 - } 32 - 33 - if (clear) { 34 - store.clear(); 35 - } 36 - 37 - const initStore = (store, data) => { 38 - Object.keys(data).forEach(k => { 39 - const v = store.get(k); 40 - if (!v) { 41 - //log(id, 'openStore(): init is setting', k, data[k]); 42 - store.set(k, data[k]); 43 - } 44 - }); 45 - }; 46 - 47 - if (defaults != null) { 48 - //log('UTILS/openStore()', 'initing'); 49 - initStore(store, defaults); 50 - } 51 - 52 - return store; 53 - }; 54 - 55 - const addToGUI = (gui, label, value, disabled = false, step = null, max = null) => { 56 - const params = {}; 57 - params[label] = value; 58 - 59 - const ctr = gui.add(params, label); 60 - 61 - /* 62 - if (disabled == true) { 63 - ctr.disable(); 64 - } 65 - 66 - if (max != null) { 67 - ctr.max(max); 68 - } 69 - 70 - if (step != null) { 71 - ctr.step(step); 72 - } 73 - */ 74 - 75 - return ctr; 76 - } 77 - 78 - const flattenObj = o => Object.keys(o).map(k => `${k}=${o[k]}`).join(','); 79 - 80 - const openWindow = (address, params) => { 81 - const target = params.hasOwnProperty('key') ? params.key : '_blank'; 82 - return window.open(address, target, flattenObj(params)); 83 - }; 84 - 85 - export { 86 - openStore, 87 - addToGUI, 88 - openWindow 89 - };
-14
features/slides/background.html
··· 1 - <!DOCTYPE html> 2 - <html> 3 - <head> 4 - <meta charset="UTF-8"> 5 - <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP --> 6 - <meta http-equiv="Content-Security-Policy" content="script-src 'self';"> 7 - <title>peek:core:background</title> 8 - </head> 9 - <body> 10 - <script type=module src="../utils.js"></script> 11 - <script type=module src="./config.js"></script> 12 - <script type=module src="./background.js"></script> 13 - </body> 14 - </html>
+11 -6
features/slides/background.js app/slides/index.js
··· 1 - // slides/slides.js 2 - 3 1 import { id, labels, schemas, storageKeys, defaults } from './config.js'; 4 2 import { openStore, openWindow } from "../utils.js"; 3 + import api from '../api.js'; 5 4 6 5 console.log('background', labels.name); 7 6 8 - const debug = window.app.debug; 7 + const debug = api.debug; 9 8 const clear = false; 10 9 11 10 const store = openStore(id, defaults, clear /* clear storage */); 12 - const api = window.app; 13 11 14 12 const executeItem = (item) => { 15 13 const height = item.height || 600; ··· 97 95 y, 98 96 }; 99 97 100 - window.open(item.address, params); 98 + openWindow(item.address, params); 101 99 }; 102 100 103 101 const initItems = (prefs, items) => { ··· 127 125 } 128 126 }; 129 127 130 - window.addEventListener('load', init); 128 + export default { 129 + defaults, 130 + id, 131 + init, 132 + labels, 133 + schemas, 134 + storageKeys 135 + } 131 136 132 137 /* 133 138 const animateSlide = (win, slide) => {
features/slides/config.js app/slides/config.js
-35
features/slides/settings.css
··· 1 - body { 2 - font-family: -apple-system, BlinkMacSystemFont, helvetica neue, helvetica, sans-serif; 3 - font-feature-settings: "tnum"; 4 - font-size: 12.4px; 5 - font-variant-numeric: tabular-nums; 6 - /*margin: 12px;*/ 7 - } 8 - 9 - /* 10 - body > div { 11 - margin-bottom: 10px; 12 - } 13 - 14 - body > div > div { 15 - margin-bottom: 10px; 16 - } 17 - 18 - h1 { 19 - margin-top: 1px; 20 - margin-bottom: 2px; 21 - } 22 - 23 - .houseofpane { 24 - justify-content: space-between; 25 - columns: 2; 26 - } 27 - */ 28 - 29 - /* lil-gui */ 30 - .houseofpane > div { 31 - min-width: 380px; 32 - max-width: 380px; 33 - /*margin-bottom: 10px;*/ 34 - break-inside: avoid-column; 35 - }
-36
features/slides/settings.html
··· 1 - <!DOCTYPE html> 2 - <html> 3 - <head> 4 - <title>peek:slides:settings</title> 5 - <meta charset="UTF-8"> 6 - <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP --> 7 - <meta http-equiv="Content-Security-Policy" content="script-src 'self';"> 8 - <meta name="description" content=""> 9 - <meta name="viewport" content="width=device-width, initial-scale=1"> 10 - <link rel="stylesheet" href="settings.css"> 11 - <link rel="stylesheet" href="node_modules/lil-gui/dist/lil-gui.min.css"> 12 - </head> 13 - <body> 14 - <!-- 15 - <div> 16 - <h1>peek</h1> 17 - </div> 18 - --> 19 - 20 - <div class="houseofpane"> 21 - </div> 22 - 23 - <!-- 24 - <div> 25 - Node.js <span id="node-version"></span><br> 26 - Chromium <span id="chrome-version"></span><br> 27 - Electron <span id="electron-version"></span><br> 28 - </div> 29 - --> 30 - 31 - <script type=module src="./utils.js"></script> 32 - <script type=module src="./config.js"></script> 33 - <script type=module src="./settings.js"></script> 34 - 35 - </body> 36 - </html>
-90
features/slides/settings.js
··· 1 - import { id, labels, schemas, storageKeys, defaults } from './config.js'; 2 - import { log as l, openStore, addToGUI } from "../utils.js"; 3 - import GUI from './../../node_modules/lil-gui/dist/lil-gui.esm.min.js'; 4 - 5 - const log = function(...args) { l(labels.name, args); }; 6 - 7 - log('loading', labels.name, 'settings'); 8 - 9 - const debug = window.app.debug; 10 - const clear = false; 11 - 12 - const store = openStore(id, defaults, clear /* clear storage */); 13 - const api = window.app; 14 - 15 - const container = document.querySelector('.houseofpane'); 16 - let prefs = store.get(storageKeys.PREFS); 17 - let items = store.get(storageKeys.ITEMS); 18 - 19 - const persistToStorage = () => { 20 - store.set(storageKeys.PREFS, prefs); 21 - store.set(storageKeys.ITEMS, items); 22 - }; 23 - 24 - const init = () => { 25 - // Initialize settings UI 26 - const container = document.querySelector('.houseofpane'); 27 - 28 - const gui = new GUI({ 29 - touchStyles: false, 30 - container: container, 31 - title: labels.name 32 - }); 33 - 34 - // anytime anything changes, persist to storage 35 - gui.onFinishChange(persistToStorage); 36 - 37 - // Add prefs 38 - const prefsFolder = gui.addFolder( 39 - schemas.prefs.title 40 - ); 41 - 42 - const pProps = schemas.prefs.properties; 43 - const data = prefs; 44 - 45 - Object.keys(pProps).forEach(k => { 46 - // schema for property 47 - const s = pProps[k]; 48 - 49 - // value (or default) 50 - const v = 51 - (data && data.hasOwnProperty(k)) 52 - ? data[k] 53 - : pProps[k].default; 54 - 55 - const disabled = false; 56 - const step = pProps[k].type == 'integer' ? 1 : null; 57 - 58 - addToGUI(prefsFolder, k, v, disabled, step).onChange(e => { 59 - // TODO: validate new value against schema 60 - prefs[k] = e; 61 - });; 62 - }); 63 - 64 - // Add items 65 - items.forEach((item, i) => { 66 - console.log('adding slide', item); 67 - const folder = gui.addFolder(item.title); 68 - 69 - addToGUI(folder, 'Screen edge', item.screenEdge).disable(); 70 - addToGUI(folder, 'Address to load', item.address).onChange(e => { 71 - items[i].address = e; 72 - }); 73 - addToGUI(folder, 'Persist state (not supported)', item.persistState).disable(); 74 - addToGUI(folder, 'Keep live', item.keepLive).onChange(e => { 75 - items[i].keepLive = e; 76 - }); 77 - addToGUI(folder, 'Allow sound (not supported)', item.allowSound).disable(); 78 - addToGUI(folder, 'Window height', item.height).onChange(e => { 79 - items[i].height = e; 80 - }); 81 - addToGUI(folder, 'Window width', item.width).onChange(e => { 82 - items[i].width = e; 83 - }); 84 - addToGUI(folder, 'Enabled', item.enabled).onChange(e => { 85 - items[i].enabled = e; 86 - }); 87 - }); 88 - }; 89 - 90 - window.addEventListener('load', init);
-89
features/slides/utils.js
··· 1 - const id = 'features/utils'; 2 - 3 - const openStore = (prefix, defaults, clear = false) => { 4 - 5 - //log(id, 'openStore', prefix, (defaults ? Object.keys(defaults) : '')); 6 - 7 - // multiple contexts 8 - const keyify = k => `${prefix}+${k}`; 9 - 10 - // Simple localStorage abstraction/wrapper 11 - const store = { 12 - set: (k, v) => { 13 - const key = keyify(k); 14 - const value = JSON.stringify(v); 15 - //log(id, 'store.set', key) 16 - localStorage.setItem(key, value); 17 - }, 18 - get: (k) => { 19 - const key = keyify(k); 20 - //log(id, 'store.get', key) 21 - const r = localStorage.getItem(key); 22 - return r ? JSON.parse(r) : null; 23 - }, 24 - clear: () => localStorage.clear() 25 - }; 26 - 27 - if (window.app.debug 28 - && window.app.debugLevel == window.app.debugLevels.FIRST_RUN) { 29 - log(id, 'openStore(): clearing storage') 30 - store.clear(); 31 - } 32 - 33 - if (clear) { 34 - store.clear(); 35 - } 36 - 37 - const initStore = (store, data) => { 38 - Object.keys(data).forEach(k => { 39 - const v = store.get(k); 40 - if (!v) { 41 - //log(id, 'openStore(): init is setting', k, data[k]); 42 - store.set(k, data[k]); 43 - } 44 - }); 45 - }; 46 - 47 - if (defaults != null) { 48 - //log('UTILS/openStore()', 'initing'); 49 - initStore(store, defaults); 50 - } 51 - 52 - return store; 53 - }; 54 - 55 - const addToGUI = (gui, label, value, disabled = false, step = null, max = null) => { 56 - const params = {}; 57 - params[label] = value; 58 - 59 - const ctr = gui.add(params, label); 60 - 61 - /* 62 - if (disabled == true) { 63 - ctr.disable(); 64 - } 65 - 66 - if (max != null) { 67 - ctr.max(max); 68 - } 69 - 70 - if (step != null) { 71 - ctr.step(step); 72 - } 73 - */ 74 - 75 - return ctr; 76 - } 77 - 78 - const flattenObj = o => Object.keys(o).map(k => `${k}=${o[k]}`).join(','); 79 - 80 - const openWindow = (address, params) => { 81 - const target = params.hasOwnProperty('key') ? params.key : '_blank'; 82 - return window.open(address, target, flattenObj(params)); 83 - }; 84 - 85 - export { 86 - openStore, 87 - addToGUI, 88 - openWindow 89 - };
-151
features/test/app.js
··· 1 - console.log('test'); 2 - 3 - /* 4 - 5 - - windows 6 - - open window / is open 7 - - close window / is closed 8 - - hide window / is hidden 9 - - show window / is visible 10 - - move window / is moved 11 - - open hidden window 12 - - open web child window / is open 13 - - close web child window is closed 14 - - test ESC to close 15 - - test blur to close (and optional) 16 - - target singleton 17 - 18 - - multiple windows 19 - - commands routed to correct window 20 - 21 - - test window names 22 - */ 23 - 24 - const api = window.app; 25 - const debug = api.debug; 26 - const clear = false; 27 - 28 - // maps app id to BrowserWindow id (background) 29 - const windows = new Map(); 30 - 31 - const testShortcut = () => { 32 - const shortcut = 'Opt+0'; 33 - api.shortcuts.register(shortcut, () => { 34 - console.log('shortcut executed'); 35 - api.shortcuts.unregister(shortcut, () => { 36 - console.log('shortcut unregistered'); 37 - }); 38 - console.log('shortcut registered'); 39 - }); 40 - }; 41 - 42 - const testOpenCloseWindow = f => { 43 - console.log('test open/close window'); 44 - 45 - const url = 'http://localhost/'; 46 - const target = `prefix:${Date.now()}`; 47 - const params = {}; 48 - 49 - const w = window.open(url, target, {}); 50 - console.log('window is closed', w.closed); 51 - 52 - /* 53 - w.onload = () => { console.log('onload'); }; 54 - w.onclose = () => { console.log('onclose'); }; 55 - */ 56 - 57 - //api.window.close('_self'); 58 - api.window.close(target); 59 - console.log('window is closed', w.closed); 60 - 61 - /* 62 - // test hide/show window 63 - api.modifyWindow(target, { 64 - hide: true 65 - }); 66 - */ 67 - 68 - /* 69 - setTimeout(() => { 70 - w.close(); 71 - }, 1000); 72 - */ 73 - 74 - /* 75 - setTimeout(() => { 76 - window.app.closeWindow(target, r => { 77 - console.log('closeWindow() resp', r); 78 - }); 79 - }, 3000); 80 - */ 81 - 82 - }; 83 - 84 - const testPubSub = () => { 85 - console.log('test pubsub'); 86 - 87 - const topic = 'foo'; 88 - const msg = { value: 'bar' }; 89 - 90 - // Listen for system- or feature-level requests to open windows. 91 - window.app.subscribe(topic, msg => { 92 - console.log('received', msg.value === msg.value); 93 - }); 94 - 95 - // main process uses these for initialization 96 - window.app.publish(topic, msg, window.app.scopes.SYSTEM); 97 - console.log('published'); 98 - }; 99 - 100 - // unused, worth testing more tho 101 - const initIframeFeature = file => { 102 - const pathPrefix = 'file:///Users/dietrich/misc/peek/'; 103 - console.log('initiframe'); 104 - const i = document.createElement('iframe'); 105 - const src = pathPrefix + file; 106 - console.log('iframe src', src); 107 - document.body.appendChild(i); 108 - i.src = src; 109 - console.log('iframe inited'); 110 - i.addEventListener('load', () => { 111 - console.log('iframe loaded'); 112 - }); 113 - }; 114 - 115 - const init = () => { 116 - console.log('init'); 117 - 118 - testOpenCloseWindow(); 119 - }; 120 - 121 - window.addEventListener('load', init); 122 - 123 - /* 124 - const odiff = (a, b) => Object.entries(b).reduce((c, [k, v]) => Object.assign(c, a[k] ? {} : { [k]: v }), {}); 125 - 126 - const onStorageChange = (e) => { 127 - const old = JSON.parse(e.oldValue); 128 - const now = JSON.parse(e.newValue); 129 - 130 - const featureKey = `${id}+${storageKeys.FEATURES}`; 131 - //console.log('onStorageChane', e.key, featureKey) 132 - if (e.key == featureKey) { 133 - //console.log('STORAGE CHANGE', e.key, old[0].enabled, now[0].enabled); 134 - features().forEach((feat, i) => { 135 - console.log(feat.title, i, feat.enabled, old[i].enabled, now[i].enabled); 136 - // disabled, so unload 137 - if (old[i].enabled == true && now[i].enabled == false) { 138 - // TODO 139 - console.log('TODO: add unloading of features', feat) 140 - } 141 - // enabled, so load 142 - else if (old[i].enabled == false && now[i].enabled == true) { 143 - initFeature(feat); 144 - } 145 - }); 146 - } 147 - //JSON.stringify(e.storageArea); 148 - }; 149 - 150 - window.addEventListener('storage', onStorageChange); 151 - */
+2 -2
features/test/index.html app/background.html
··· 4 4 <meta charset="UTF-8"> 5 5 <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP --> 6 6 <meta http-equiv="Content-Security-Policy" content="script-src 'self';"> 7 - <title>peek:test:index</title> 7 + <title>peek:core:background</title> 8 8 </head> 9 9 <body> 10 - <script type=module src="./app.js"></script> 10 + <script type=module src="./index.js"></script> 11 11 </body> 12 12 </html>
+7 -31
features/test/utils.js app/utils.js
··· 1 - const id = 'features/utils'; 2 - 3 1 const openStore = (prefix, defaults, clear = false) => { 4 2 5 - //console.log(id, 'openStore', prefix, (defaults ? Object.keys(defaults) : '')); 3 + //console.log('openStore', prefix, (defaults ? Object.keys(defaults) : '')); 6 4 7 5 // multiple contexts 8 6 const keyify = k => `${prefix}+${k}`; ··· 12 10 set: (k, v) => { 13 11 const key = keyify(k); 14 12 const value = JSON.stringify(v); 15 - //console.log(id, 'store.set', key) 13 + //console.log('store.set', key, value) 16 14 localStorage.setItem(key, value); 17 15 }, 18 16 get: (k) => { 19 17 const key = keyify(k); 20 - //console.log(id, 'store.get', key) 18 + //console.log('store.get', key) 21 19 const r = localStorage.getItem(key); 22 20 return r ? JSON.parse(r) : null; 23 21 }, ··· 26 24 27 25 if (window.app.debug 28 26 && window.app.debugLevel == window.app.debugLevels.FIRST_RUN) { 29 - //console.log(id, 'openStore(): clearing storage') 27 + console.log('openStore(): clearing storage') 30 28 store.clear(); 31 29 } 32 30 33 31 if (clear) { 32 + console.log('openStore(): CLEARING'); 34 33 store.clear(); 35 34 } 36 35 ··· 38 37 Object.keys(data).forEach(k => { 39 38 const v = store.get(k); 40 39 if (!v) { 41 - //console.log(id, 'openStore(): init is setting', k, data[k]); 40 + //console.log('openStore(): init is setting', k, data[k]); 42 41 store.set(k, data[k]); 43 42 } 44 43 }); ··· 52 51 return store; 53 52 }; 54 53 55 - const addToGUI = (gui, label, value, disabled = false, step = null, max = null) => { 56 - const params = {}; 57 - params[label] = value; 58 - 59 - const ctr = gui.add(params, label); 60 - 61 - /* 62 - if (disabled == true) { 63 - ctr.disable(); 64 - } 65 - 66 - if (max != null) { 67 - ctr.max(max); 68 - } 69 - 70 - if (step != null) { 71 - ctr.step(step); 72 - } 73 - */ 74 - 75 - return ctr; 76 - } 77 - 78 54 const flattenObj = o => Object.keys(o).map(k => `${k}=${o[k]}`).join(','); 79 55 80 56 const openWindow = (address, params) => { ··· 83 59 }; 84 60 85 61 export { 62 + flattenObj, 86 63 openStore, 87 - addToGUI, 88 64 openWindow 89 65 };
-84
features/utils.js
··· 1 - const id = 'features/utils'; 2 - 3 - const openStore = (prefix, defaults, clear = false) => { 4 - 5 - //log(id, 'openStore', prefix, (defaults ? Object.keys(defaults) : '')); 6 - 7 - // multiple contexts 8 - const keyify = k => `${prefix}+${k}`; 9 - 10 - // Simple localStorage abstraction/wrapper 11 - const store = { 12 - set: (k, v) => { 13 - const key = keyify(k); 14 - const value = JSON.stringify(v); 15 - //log(id, 'store.set', key) 16 - localStorage.setItem(key, value); 17 - }, 18 - get: (k) => { 19 - const key = keyify(k); 20 - //log(id, 'store.get', key) 21 - const r = localStorage.getItem(key); 22 - return r ? JSON.parse(r) : null; 23 - }, 24 - clear: () => localStorage.clear() 25 - }; 26 - 27 - if (window.app.debug 28 - && window.app.debugLevel == window.app.debugLevels.FIRST_RUN) { 29 - log(id, 'openStore(): clearing storage') 30 - store.clear(); 31 - } 32 - 33 - if (clear) { 34 - store.clear(); 35 - } 36 - 37 - const initStore = (store, data) => { 38 - Object.keys(data).forEach(k => { 39 - const v = store.get(k); 40 - if (!v) { 41 - //log(id, 'openStore(): init is setting', k, data[k]); 42 - store.set(k, data[k]); 43 - } 44 - }); 45 - }; 46 - 47 - if (defaults != null) { 48 - //log('UTILS/openStore()', 'initing'); 49 - initStore(store, defaults); 50 - } 51 - 52 - return store; 53 - }; 54 - 55 - const addToGUI = (gui, label, value, disabled = false, step = null, max = null) => { 56 - const params = {}; 57 - params[label] = value; 58 - 59 - const ctr = gui.add(params, label); 60 - 61 - /* 62 - if (disabled == true) { 63 - ctr.disable(); 64 - } 65 - 66 - if (max != null) { 67 - ctr.max(max); 68 - } 69 - 70 - if (step != null) { 71 - ctr.step(step); 72 - } 73 - */ 74 - 75 - return ctr; 76 - } 77 - 78 - const flattenObj = o => Object.keys(o).map(k => `${k}=${o[k]}`).join(','); 79 - 80 - export { 81 - openStore, 82 - addToGUI, 83 - flattenObj 84 - };
+47 -32
index.js
··· 1 1 // main.js 2 2 3 - const { 4 - electron, 3 + import { 5 4 app, 6 5 BrowserWindow, 7 6 globalShortcut, ··· 11 10 net, 12 11 protocol, 13 12 Tray 14 - } = require('electron'); 13 + } from 'electron'; 15 14 16 - const fs = require('node:fs'); 17 - const path = require('node:path'); 18 - const { pathToFileURL } = require('url'); 15 + import fs from 'node:fs'; 16 + import path from 'node:path'; 17 + import { pathToFileURL } from 'url'; 18 + const __dirname = import.meta.dirname; 19 19 20 20 (async () => { 21 21 ··· 34 34 35 35 const APP_SCHEME = 'peek'; 36 36 const APP_PROTOCOL = `${APP_SCHEME}:`; 37 - const APP_CORE_PATH = 'features'; 37 + const APP_CORE_PATH = 'app'; 38 38 39 39 const APP_DEF_WIDTH = 1024; 40 40 const APP_DEF_HEIGHT = 768; 41 41 42 42 // app hidden window to load 43 43 // core application logic is here 44 - //const webCoreAddress = 'peek://core/background.html'; 45 - const webCoreAddress = 'peek://test/index.html'; 44 + const webCoreAddress = 'peek://app/background.html'; 45 + //const webCoreAddress = 'peek://test/index.html'; 46 46 47 47 const systemAddress = 'peek://system/'; 48 48 ··· 107 107 // configure Electron with these paths 108 108 app.setPath('userData', profileDataPath); 109 109 app.setPath('sessionData', sessionDataPath); 110 - 111 - // ***** Developer / Error handling / Etc ***** 112 - 113 - /* 114 - const isDev = require('electron-is-dev'); 115 - 116 - if (isDev) { 117 - } 118 - */ 119 - 120 - const unhandled = require('electron-unhandled'); 121 - unhandled(); 122 110 123 111 // ***** Features / Strings ***** 124 112 ··· 263 251 } 264 252 }]); 265 253 254 + // TODO: unhack all this trash fire 266 255 const initAppProtocol = () => { 267 - protocol.handle(APP_SCHEME, (req) => { 268 - const { host, pathname } = new URL(req.url); 256 + protocol.handle(APP_SCHEME, req => { 257 + let { host, pathname } = new URL(req.url); 258 + 259 + // trim trailing slash 260 + pathname = pathname.replace(/^\//, ''); 261 + 262 + const isBackground = host === 'background.html'; 263 + 264 + if (isBackground) { 265 + host = '/'; 269 266 270 - // TODO: nope 271 - if (pathname === '/') { 272 - pathname = 'background.html'; 267 + if (pathname.length == 0) { 268 + pathname = 'background.html'; 269 + } 273 270 } 274 - 275 - // TODO: unhack all this 271 + 276 272 const isNode = pathname.indexOf('node_modules') > -1; 277 273 278 - const hackedPath = isNode ? pathname.replace(/^\//, '') 279 - : path.join(APP_CORE_PATH, host, pathname.replace(/^\//,'')); 274 + const hackedPath = isNode 275 + ? pathname 276 + : path.join(APP_CORE_PATH, host, pathname); 280 277 281 278 const pathToServe = path.resolve(__dirname, hackedPath); 282 279 283 - const relativePath = path.relative(__dirname, pathToServe); 280 + let relativePath = path.relative(__dirname, pathToServe); 281 + 282 + try { 283 + const stat = fs.statSync(relativePath) 284 + // file exists 285 + } 286 + catch(ex) { 287 + // FIXME 288 + // file does not exist 289 + // but maybe it's in parent dir 290 + // b/c what the fuck is happening w/ custom 291 + // protocols and parent-relative path resolution?! 292 + relativePath = relativePath.replace(/\/[a-z]+\//,'/'); 293 + } 284 294 295 + // NOTE: commented out since relative paths seem to get 296 + // filtered out before this?! 297 + 285 298 // NB, this checks for paths that escape the bundle, e.g. 286 299 // app://bundle/../../secret_file.txt 300 + /* 287 301 const isSafe = relativePath && !relativePath.startsWith('..') 288 302 && !path.isAbsolute(relativePath); 289 303 ··· 295 309 headers: { 'content-type': 'text/html' } 296 310 }) 297 311 } 312 + */ 298 313 299 - const finalPath = pathToFileURL(pathToServe).toString(); 314 + const finalPath = pathToFileURL(relativePath).toString(); 300 315 301 316 return net.fetch(finalPath); 302 317 });
+5522
package-lock.json
··· 1 + { 2 + "name": "Peek", 3 + "version": "0.0.1", 4 + "lockfileVersion": 3, 5 + "requires": true, 6 + "packages": { 7 + "": { 8 + "name": "Peek", 9 + "version": "0.0.1", 10 + "license": "MIT", 11 + "dependencies": { 12 + "electron-squirrel-startup": "^1.0.1", 13 + "lil-gui": "^0.19.2", 14 + "update-electron-app": "^3.1.1" 15 + }, 16 + "devDependencies": { 17 + "@electron-forge/cli": "^7.7.0", 18 + "@electron-forge/maker-deb": "^7.7.0", 19 + "@electron-forge/maker-rpm": "^7.7.0", 20 + "@electron-forge/maker-squirrel": "^7.7.0", 21 + "@electron-forge/maker-zip": "^7.7.0", 22 + "@electron-forge/plugin-auto-unpack-natives": "^7.7.0", 23 + "@electron-forge/plugin-fuses": "^7.7.0", 24 + "@electron/fuses": "^1.8.0", 25 + "electron": "35.0.0" 26 + } 27 + }, 28 + "node_modules/@electron-forge/cli": { 29 + "version": "7.7.0", 30 + "resolved": "https://registry.npmjs.org/@electron-forge/cli/-/cli-7.7.0.tgz", 31 + "integrity": "sha512-QfnjghmlHMb7dyArR5cbPA+MP9ff/ulWZi6R/a5MkHlKyhrysRfjzDtZDsmkEv9mGQgRwylssgXrZrKHGlxFkw==", 32 + "dev": true, 33 + "funding": [ 34 + { 35 + "type": "individual", 36 + "url": "https://github.com/sponsors/malept" 37 + }, 38 + { 39 + "type": "tidelift", 40 + "url": "https://tidelift.com/subscription/pkg/npm-.electron-forge-cli?utm_medium=referral&utm_source=npm_fund" 41 + } 42 + ], 43 + "license": "MIT", 44 + "dependencies": { 45 + "@electron-forge/core": "7.7.0", 46 + "@electron-forge/core-utils": "7.7.0", 47 + "@electron-forge/shared-types": "7.7.0", 48 + "@electron/get": "^3.0.0", 49 + "chalk": "^4.0.0", 50 + "commander": "^11.1.0", 51 + "debug": "^4.3.1", 52 + "fs-extra": "^10.0.0", 53 + "listr2": "^7.0.2", 54 + "semver": "^7.2.1" 55 + }, 56 + "bin": { 57 + "electron-forge": "dist/electron-forge.js", 58 + "electron-forge-vscode-nix": "script/vscode.sh", 59 + "electron-forge-vscode-win": "script/vscode.cmd" 60 + }, 61 + "engines": { 62 + "node": ">= 16.4.0" 63 + } 64 + }, 65 + "node_modules/@electron-forge/cli/node_modules/@electron/get": { 66 + "version": "3.0.0", 67 + "resolved": "https://registry.npmjs.org/@electron/get/-/get-3.0.0.tgz", 68 + "integrity": "sha512-hLv4BYFiyrNRI+U0Mm2X7RxCCdJLkDUn8GCEp9QJzbLpZRko+UaLlCjOMkj6TEtirNLPyBA7y1SeGfnpOB21aQ==", 69 + "dev": true, 70 + "dependencies": { 71 + "debug": "^4.1.1", 72 + "env-paths": "^2.2.0", 73 + "fs-extra": "^8.1.0", 74 + "got": "^11.8.5", 75 + "progress": "^2.0.3", 76 + "semver": "^6.2.0", 77 + "sumchecker": "^3.0.1" 78 + }, 79 + "engines": { 80 + "node": ">=14" 81 + }, 82 + "optionalDependencies": { 83 + "global-agent": "^3.0.0" 84 + } 85 + }, 86 + "node_modules/@electron-forge/cli/node_modules/@electron/get/node_modules/fs-extra": { 87 + "version": "8.1.0", 88 + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 89 + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 90 + "dev": true, 91 + "dependencies": { 92 + "graceful-fs": "^4.2.0", 93 + "jsonfile": "^4.0.0", 94 + "universalify": "^0.1.0" 95 + }, 96 + "engines": { 97 + "node": ">=6 <7 || >=8" 98 + } 99 + }, 100 + "node_modules/@electron-forge/cli/node_modules/@electron/get/node_modules/semver": { 101 + "version": "6.3.1", 102 + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 103 + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 104 + "dev": true, 105 + "bin": { 106 + "semver": "bin/semver.js" 107 + } 108 + }, 109 + "node_modules/@electron-forge/cli/node_modules/jsonfile": { 110 + "version": "4.0.0", 111 + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 112 + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", 113 + "dev": true, 114 + "optionalDependencies": { 115 + "graceful-fs": "^4.1.6" 116 + } 117 + }, 118 + "node_modules/@electron-forge/cli/node_modules/universalify": { 119 + "version": "0.1.2", 120 + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 121 + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 122 + "dev": true, 123 + "engines": { 124 + "node": ">= 4.0.0" 125 + } 126 + }, 127 + "node_modules/@electron-forge/core": { 128 + "version": "7.7.0", 129 + "resolved": "https://registry.npmjs.org/@electron-forge/core/-/core-7.7.0.tgz", 130 + "integrity": "sha512-BWhg1Zw1bhpDuZowGH3lXDiL9zZBsYFNjtqyMqmkjcEm5xf9Dzs8mpRpNjtkpf3jit3LB4PNGMLj3c8ix0h4vQ==", 131 + "dev": true, 132 + "funding": [ 133 + { 134 + "type": "individual", 135 + "url": "https://github.com/sponsors/malept" 136 + }, 137 + { 138 + "type": "tidelift", 139 + "url": "https://tidelift.com/subscription/pkg/npm-.electron-forge-core?utm_medium=referral&utm_source=npm_fund" 140 + } 141 + ], 142 + "license": "MIT", 143 + "dependencies": { 144 + "@electron-forge/core-utils": "7.7.0", 145 + "@electron-forge/maker-base": "7.7.0", 146 + "@electron-forge/plugin-base": "7.7.0", 147 + "@electron-forge/publisher-base": "7.7.0", 148 + "@electron-forge/shared-types": "7.7.0", 149 + "@electron-forge/template-base": "7.7.0", 150 + "@electron-forge/template-vite": "7.7.0", 151 + "@electron-forge/template-vite-typescript": "7.7.0", 152 + "@electron-forge/template-webpack": "7.7.0", 153 + "@electron-forge/template-webpack-typescript": "7.7.0", 154 + "@electron-forge/tracer": "7.7.0", 155 + "@electron/get": "^3.0.0", 156 + "@electron/packager": "^18.3.5", 157 + "@electron/rebuild": "^3.7.0", 158 + "@malept/cross-spawn-promise": "^2.0.0", 159 + "chalk": "^4.0.0", 160 + "debug": "^4.3.1", 161 + "fast-glob": "^3.2.7", 162 + "filenamify": "^4.1.0", 163 + "find-up": "^5.0.0", 164 + "fs-extra": "^10.0.0", 165 + "global-dirs": "^3.0.0", 166 + "got": "^11.8.5", 167 + "interpret": "^3.1.1", 168 + "listr2": "^7.0.2", 169 + "lodash": "^4.17.20", 170 + "log-symbols": "^4.0.0", 171 + "node-fetch": "^2.6.7", 172 + "rechoir": "^0.8.0", 173 + "semver": "^7.2.1", 174 + "source-map-support": "^0.5.13", 175 + "sudo-prompt": "^9.1.1", 176 + "username": "^5.1.0" 177 + }, 178 + "engines": { 179 + "node": ">= 16.4.0" 180 + } 181 + }, 182 + "node_modules/@electron-forge/core-utils": { 183 + "version": "7.7.0", 184 + "resolved": "https://registry.npmjs.org/@electron-forge/core-utils/-/core-utils-7.7.0.tgz", 185 + "integrity": "sha512-kgOkiLzqnySkcpt26rBg8AoZsI1ID3f6s/dQlzfRJisWZTKTu4ryiMcaC0F07DVjaYFnEl9SQ86IvkTcyS97mQ==", 186 + "dev": true, 187 + "license": "MIT", 188 + "dependencies": { 189 + "@electron-forge/shared-types": "7.7.0", 190 + "@electron/rebuild": "^3.7.0", 191 + "@malept/cross-spawn-promise": "^2.0.0", 192 + "chalk": "^4.0.0", 193 + "debug": "^4.3.1", 194 + "find-up": "^5.0.0", 195 + "fs-extra": "^10.0.0", 196 + "log-symbols": "^4.0.0", 197 + "semver": "^7.2.1" 198 + }, 199 + "engines": { 200 + "node": ">= 16.4.0" 201 + } 202 + }, 203 + "node_modules/@electron-forge/core/node_modules/@electron/get": { 204 + "version": "3.1.0", 205 + "resolved": "https://registry.npmjs.org/@electron/get/-/get-3.1.0.tgz", 206 + "integrity": "sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ==", 207 + "dev": true, 208 + "license": "MIT", 209 + "dependencies": { 210 + "debug": "^4.1.1", 211 + "env-paths": "^2.2.0", 212 + "fs-extra": "^8.1.0", 213 + "got": "^11.8.5", 214 + "progress": "^2.0.3", 215 + "semver": "^6.2.0", 216 + "sumchecker": "^3.0.1" 217 + }, 218 + "engines": { 219 + "node": ">=14" 220 + }, 221 + "optionalDependencies": { 222 + "global-agent": "^3.0.0" 223 + } 224 + }, 225 + "node_modules/@electron-forge/core/node_modules/@electron/get/node_modules/fs-extra": { 226 + "version": "8.1.0", 227 + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 228 + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 229 + "dev": true, 230 + "license": "MIT", 231 + "dependencies": { 232 + "graceful-fs": "^4.2.0", 233 + "jsonfile": "^4.0.0", 234 + "universalify": "^0.1.0" 235 + }, 236 + "engines": { 237 + "node": ">=6 <7 || >=8" 238 + } 239 + }, 240 + "node_modules/@electron-forge/core/node_modules/@electron/get/node_modules/semver": { 241 + "version": "6.3.1", 242 + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 243 + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 244 + "dev": true, 245 + "license": "ISC", 246 + "bin": { 247 + "semver": "bin/semver.js" 248 + } 249 + }, 250 + "node_modules/@electron-forge/core/node_modules/jsonfile": { 251 + "version": "4.0.0", 252 + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 253 + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", 254 + "dev": true, 255 + "license": "MIT", 256 + "optionalDependencies": { 257 + "graceful-fs": "^4.1.6" 258 + } 259 + }, 260 + "node_modules/@electron-forge/core/node_modules/universalify": { 261 + "version": "0.1.2", 262 + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 263 + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 264 + "dev": true, 265 + "license": "MIT", 266 + "engines": { 267 + "node": ">= 4.0.0" 268 + } 269 + }, 270 + "node_modules/@electron-forge/maker-base": { 271 + "version": "7.7.0", 272 + "resolved": "https://registry.npmjs.org/@electron-forge/maker-base/-/maker-base-7.7.0.tgz", 273 + "integrity": "sha512-9u+mmBLBAUHuH0+IGw94EGVTDD4CPKX05h5pp5/PIaijy16ss5dymK4vEp3s2XJMFlza2PsCgLLYBgDcAE2Dqg==", 274 + "dev": true, 275 + "license": "MIT", 276 + "dependencies": { 277 + "@electron-forge/shared-types": "7.7.0", 278 + "fs-extra": "^10.0.0", 279 + "which": "^2.0.2" 280 + }, 281 + "engines": { 282 + "node": ">= 16.4.0" 283 + } 284 + }, 285 + "node_modules/@electron-forge/maker-deb": { 286 + "version": "7.7.0", 287 + "resolved": "https://registry.npmjs.org/@electron-forge/maker-deb/-/maker-deb-7.7.0.tgz", 288 + "integrity": "sha512-yMT0TWpCwXaC9+AYpSr9PBIhcZR297wdJUk5PnEnIROsvOW2y1sh7ny7YdHXTxkvhWdbqY8sLQruL3BE+CyE8w==", 289 + "dev": true, 290 + "license": "MIT", 291 + "dependencies": { 292 + "@electron-forge/maker-base": "7.7.0", 293 + "@electron-forge/shared-types": "7.7.0" 294 + }, 295 + "engines": { 296 + "node": ">= 16.4.0" 297 + }, 298 + "optionalDependencies": { 299 + "electron-installer-debian": "^3.2.0" 300 + } 301 + }, 302 + "node_modules/@electron-forge/maker-rpm": { 303 + "version": "7.7.0", 304 + "resolved": "https://registry.npmjs.org/@electron-forge/maker-rpm/-/maker-rpm-7.7.0.tgz", 305 + "integrity": "sha512-M9cFO6bCnOuA6BwBUUw35FrnWciWeFyLuByO0KOn3zEYeBDqG2fbBgXXS6OKcRHrpnJVTwiLY5S7eviyO1DJzQ==", 306 + "dev": true, 307 + "license": "MIT", 308 + "dependencies": { 309 + "@electron-forge/maker-base": "7.7.0", 310 + "@electron-forge/shared-types": "7.7.0" 311 + }, 312 + "engines": { 313 + "node": ">= 16.4.0" 314 + }, 315 + "optionalDependencies": { 316 + "electron-installer-redhat": "^3.2.0" 317 + } 318 + }, 319 + "node_modules/@electron-forge/maker-squirrel": { 320 + "version": "7.7.0", 321 + "resolved": "https://registry.npmjs.org/@electron-forge/maker-squirrel/-/maker-squirrel-7.7.0.tgz", 322 + "integrity": "sha512-9Gcq8e6+1MuXGeE7bEpk7VTd86c0riXTsDFKW8OqwVozeBYhoCd6GU59RmI3b7mcAIKOY1cBY97B+/5bnZ8ZYg==", 323 + "dev": true, 324 + "license": "MIT", 325 + "dependencies": { 326 + "@electron-forge/maker-base": "7.7.0", 327 + "@electron-forge/shared-types": "7.7.0", 328 + "fs-extra": "^10.0.0" 329 + }, 330 + "engines": { 331 + "node": ">= 16.4.0" 332 + }, 333 + "optionalDependencies": { 334 + "electron-winstaller": "^5.3.0" 335 + } 336 + }, 337 + "node_modules/@electron-forge/maker-zip": { 338 + "version": "7.7.0", 339 + "resolved": "https://registry.npmjs.org/@electron-forge/maker-zip/-/maker-zip-7.7.0.tgz", 340 + "integrity": "sha512-/rRFiPcojk0hcn+NOfHv2SlMNvghBk1RN0nuLHbbe8r+C0vG4LJV9ee/Y0HhVKkcpapJOQ+MasXJ86fzAp5uAg==", 341 + "dev": true, 342 + "license": "MIT", 343 + "dependencies": { 344 + "@electron-forge/maker-base": "7.7.0", 345 + "@electron-forge/shared-types": "7.7.0", 346 + "cross-zip": "^4.0.0", 347 + "fs-extra": "^10.0.0", 348 + "got": "^11.8.5" 349 + }, 350 + "engines": { 351 + "node": ">= 16.4.0" 352 + } 353 + }, 354 + "node_modules/@electron-forge/plugin-auto-unpack-natives": { 355 + "version": "7.7.0", 356 + "resolved": "https://registry.npmjs.org/@electron-forge/plugin-auto-unpack-natives/-/plugin-auto-unpack-natives-7.7.0.tgz", 357 + "integrity": "sha512-cYeD4x2oQXUyK4+DtIR6wMxcIHvyPgsJq1diEuBoQ+MFTh+s6DXZl6JvwtI3scD0XieCkzcmUmf8ygzqs124+w==", 358 + "dev": true, 359 + "license": "MIT", 360 + "dependencies": { 361 + "@electron-forge/plugin-base": "7.7.0", 362 + "@electron-forge/shared-types": "7.7.0" 363 + }, 364 + "engines": { 365 + "node": ">= 16.4.0" 366 + } 367 + }, 368 + "node_modules/@electron-forge/plugin-base": { 369 + "version": "7.7.0", 370 + "resolved": "https://registry.npmjs.org/@electron-forge/plugin-base/-/plugin-base-7.7.0.tgz", 371 + "integrity": "sha512-6wisQ4ZKOWey48wFF+JHzih7AuQuVma5KauwNEju2Dh2ibwDMJmPy0FWVolMSg7XUIMbGKLADGilxX6XRv8qNQ==", 372 + "dev": true, 373 + "license": "MIT", 374 + "dependencies": { 375 + "@electron-forge/shared-types": "7.7.0" 376 + }, 377 + "engines": { 378 + "node": ">= 16.4.0" 379 + } 380 + }, 381 + "node_modules/@electron-forge/plugin-fuses": { 382 + "version": "7.7.0", 383 + "resolved": "https://registry.npmjs.org/@electron-forge/plugin-fuses/-/plugin-fuses-7.7.0.tgz", 384 + "integrity": "sha512-Mg6JoCZ0rZIwnAp/jyawAQytFQZG/1BVahBYsaoWMMv7TISYCbauXdRvl2ja8VPaHymle2zE7WsTwZvKy+sp2A==", 385 + "dev": true, 386 + "license": "MIT", 387 + "dependencies": { 388 + "@electron-forge/plugin-base": "7.7.0", 389 + "@electron-forge/shared-types": "7.7.0" 390 + }, 391 + "engines": { 392 + "node": ">= 16.4.0" 393 + }, 394 + "peerDependencies": { 395 + "@electron/fuses": ">=1.0.0" 396 + } 397 + }, 398 + "node_modules/@electron-forge/publisher-base": { 399 + "version": "7.7.0", 400 + "resolved": "https://registry.npmjs.org/@electron-forge/publisher-base/-/publisher-base-7.7.0.tgz", 401 + "integrity": "sha512-jHKvUc1peBBSl2t5d1x6M3CNyCMyNB+NnTO9LmA1dWFQ3oRDFwromIH5KjRqPJj6l4AyH0/XJogdO7Nn4Eyn6Q==", 402 + "dev": true, 403 + "license": "MIT", 404 + "dependencies": { 405 + "@electron-forge/shared-types": "7.7.0" 406 + }, 407 + "engines": { 408 + "node": ">= 16.4.0" 409 + } 410 + }, 411 + "node_modules/@electron-forge/shared-types": { 412 + "version": "7.7.0", 413 + "resolved": "https://registry.npmjs.org/@electron-forge/shared-types/-/shared-types-7.7.0.tgz", 414 + "integrity": "sha512-1zQsmudkAuHv0HnJtSJY3pvTeuN3fnSa9BR6cbeUlcpOfrnG4OTG03FqerHfyIWaBRVy7jGgif0NhKKE9azKyg==", 415 + "dev": true, 416 + "license": "MIT", 417 + "dependencies": { 418 + "@electron-forge/tracer": "7.7.0", 419 + "@electron/packager": "^18.3.5", 420 + "@electron/rebuild": "^3.7.0", 421 + "listr2": "^7.0.2" 422 + }, 423 + "engines": { 424 + "node": ">= 16.4.0" 425 + } 426 + }, 427 + "node_modules/@electron-forge/template-base": { 428 + "version": "7.7.0", 429 + "resolved": "https://registry.npmjs.org/@electron-forge/template-base/-/template-base-7.7.0.tgz", 430 + "integrity": "sha512-jwnhEHNIyQfbwJ6R8SuZIJApHKBykDr/rSgUF3km9nr2qAUSoUUV7RaJa/uiQJMtvamXenuo5K84C2NzumzS3A==", 431 + "dev": true, 432 + "license": "MIT", 433 + "dependencies": { 434 + "@electron-forge/core-utils": "7.7.0", 435 + "@electron-forge/shared-types": "7.7.0", 436 + "@malept/cross-spawn-promise": "^2.0.0", 437 + "debug": "^4.3.1", 438 + "fs-extra": "^10.0.0", 439 + "username": "^5.1.0" 440 + }, 441 + "engines": { 442 + "node": ">= 16.4.0" 443 + } 444 + }, 445 + "node_modules/@electron-forge/template-vite": { 446 + "version": "7.7.0", 447 + "resolved": "https://registry.npmjs.org/@electron-forge/template-vite/-/template-vite-7.7.0.tgz", 448 + "integrity": "sha512-6p+U6FDWrmF7XgSLkrO07OOgJcrrrArbnExSckGJdBnupxmIDf1Y+exwfHHKdxX6/FfkA6JST5nRGjgA5CFqcw==", 449 + "dev": true, 450 + "license": "MIT", 451 + "dependencies": { 452 + "@electron-forge/shared-types": "7.7.0", 453 + "@electron-forge/template-base": "7.7.0", 454 + "fs-extra": "^10.0.0" 455 + }, 456 + "engines": { 457 + "node": ">= 16.4.0" 458 + } 459 + }, 460 + "node_modules/@electron-forge/template-vite-typescript": { 461 + "version": "7.7.0", 462 + "resolved": "https://registry.npmjs.org/@electron-forge/template-vite-typescript/-/template-vite-typescript-7.7.0.tgz", 463 + "integrity": "sha512-32C/+PF+hIloTdbRx7OutvqnTkkC7BHeQxNw4/zG2TfQ3cjl7JUD6A2UvTUHtv5KHkK2hDw6ZdahPwpJO41YSA==", 464 + "dev": true, 465 + "license": "MIT", 466 + "dependencies": { 467 + "@electron-forge/shared-types": "7.7.0", 468 + "@electron-forge/template-base": "7.7.0", 469 + "fs-extra": "^10.0.0" 470 + }, 471 + "engines": { 472 + "node": ">= 16.4.0" 473 + } 474 + }, 475 + "node_modules/@electron-forge/template-webpack": { 476 + "version": "7.7.0", 477 + "resolved": "https://registry.npmjs.org/@electron-forge/template-webpack/-/template-webpack-7.7.0.tgz", 478 + "integrity": "sha512-7Hb1wejKqtvPXqhelubUNAh39FtClB/4JDtWzyAsL2iC3XeB5qh6pITz8+nW/rF2qW/JAepc/lnreqKn34P2ig==", 479 + "dev": true, 480 + "license": "MIT", 481 + "dependencies": { 482 + "@electron-forge/shared-types": "7.7.0", 483 + "@electron-forge/template-base": "7.7.0", 484 + "fs-extra": "^10.0.0" 485 + }, 486 + "engines": { 487 + "node": ">= 16.4.0" 488 + } 489 + }, 490 + "node_modules/@electron-forge/template-webpack-typescript": { 491 + "version": "7.7.0", 492 + "resolved": "https://registry.npmjs.org/@electron-forge/template-webpack-typescript/-/template-webpack-typescript-7.7.0.tgz", 493 + "integrity": "sha512-w1vRAjGy0MjjdEDYPpZcpkMo2e3z5uEwfJdwVOpBeha7p2WM/Y6go21K+7pSqGp8Xmq4zlE20hq5MEx8Bs8eZg==", 494 + "dev": true, 495 + "license": "MIT", 496 + "dependencies": { 497 + "@electron-forge/shared-types": "7.7.0", 498 + "@electron-forge/template-base": "7.7.0", 499 + "fs-extra": "^10.0.0" 500 + }, 501 + "engines": { 502 + "node": ">= 16.4.0" 503 + } 504 + }, 505 + "node_modules/@electron-forge/tracer": { 506 + "version": "7.7.0", 507 + "resolved": "https://registry.npmjs.org/@electron-forge/tracer/-/tracer-7.7.0.tgz", 508 + "integrity": "sha512-R/JiGFzWhwfVyc6ioT4l5FFChRLS4Z2tWPeQfPcyoemdpzKpI1rvMHti42gzWXFW8GdzkhG0G3ZWfKiF3y3x/Q==", 509 + "dev": true, 510 + "license": "MIT", 511 + "dependencies": { 512 + "chrome-trace-event": "^1.0.3" 513 + }, 514 + "engines": { 515 + "node": ">= 14.17.5" 516 + } 517 + }, 518 + "node_modules/@electron/asar": { 519 + "version": "3.3.1", 520 + "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.3.1.tgz", 521 + "integrity": "sha512-WtpC/+34p0skWZiarRjLAyqaAX78DofhDxnREy/V5XHfu1XEXbFCSSMcDQ6hNCPJFaPy8/NnUgYuf9uiCkvKPg==", 522 + "dev": true, 523 + "license": "MIT", 524 + "dependencies": { 525 + "commander": "^5.0.0", 526 + "glob": "^7.1.6", 527 + "minimatch": "^3.0.4" 528 + }, 529 + "bin": { 530 + "asar": "bin/asar.js" 531 + }, 532 + "engines": { 533 + "node": ">=10.12.0" 534 + } 535 + }, 536 + "node_modules/@electron/asar/node_modules/commander": { 537 + "version": "5.1.0", 538 + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", 539 + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", 540 + "dev": true, 541 + "engines": { 542 + "node": ">= 6" 543 + } 544 + }, 545 + "node_modules/@electron/fuses": { 546 + "version": "1.8.0", 547 + "resolved": "https://registry.npmjs.org/@electron/fuses/-/fuses-1.8.0.tgz", 548 + "integrity": "sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==", 549 + "dev": true, 550 + "license": "MIT", 551 + "dependencies": { 552 + "chalk": "^4.1.1", 553 + "fs-extra": "^9.0.1", 554 + "minimist": "^1.2.5" 555 + }, 556 + "bin": { 557 + "electron-fuses": "dist/bin.js" 558 + } 559 + }, 560 + "node_modules/@electron/fuses/node_modules/fs-extra": { 561 + "version": "9.1.0", 562 + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", 563 + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", 564 + "dev": true, 565 + "license": "MIT", 566 + "dependencies": { 567 + "at-least-node": "^1.0.0", 568 + "graceful-fs": "^4.2.0", 569 + "jsonfile": "^6.0.1", 570 + "universalify": "^2.0.0" 571 + }, 572 + "engines": { 573 + "node": ">=10" 574 + } 575 + }, 576 + "node_modules/@electron/get": { 577 + "version": "2.0.3", 578 + "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", 579 + "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", 580 + "dev": true, 581 + "dependencies": { 582 + "debug": "^4.1.1", 583 + "env-paths": "^2.2.0", 584 + "fs-extra": "^8.1.0", 585 + "got": "^11.8.5", 586 + "progress": "^2.0.3", 587 + "semver": "^6.2.0", 588 + "sumchecker": "^3.0.1" 589 + }, 590 + "engines": { 591 + "node": ">=12" 592 + }, 593 + "optionalDependencies": { 594 + "global-agent": "^3.0.0" 595 + } 596 + }, 597 + "node_modules/@electron/get/node_modules/fs-extra": { 598 + "version": "8.1.0", 599 + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 600 + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 601 + "dev": true, 602 + "dependencies": { 603 + "graceful-fs": "^4.2.0", 604 + "jsonfile": "^4.0.0", 605 + "universalify": "^0.1.0" 606 + }, 607 + "engines": { 608 + "node": ">=6 <7 || >=8" 609 + } 610 + }, 611 + "node_modules/@electron/get/node_modules/jsonfile": { 612 + "version": "4.0.0", 613 + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 614 + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", 615 + "dev": true, 616 + "optionalDependencies": { 617 + "graceful-fs": "^4.1.6" 618 + } 619 + }, 620 + "node_modules/@electron/get/node_modules/semver": { 621 + "version": "6.3.1", 622 + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 623 + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 624 + "dev": true, 625 + "bin": { 626 + "semver": "bin/semver.js" 627 + } 628 + }, 629 + "node_modules/@electron/get/node_modules/universalify": { 630 + "version": "0.1.2", 631 + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 632 + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 633 + "dev": true, 634 + "engines": { 635 + "node": ">= 4.0.0" 636 + } 637 + }, 638 + "node_modules/@electron/node-gyp": { 639 + "version": "10.2.0-electron.1", 640 + "resolved": "git+ssh://git@github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2", 641 + "integrity": "sha512-CrYo6TntjpoMO1SHjl5Pa/JoUsECNqNdB7Kx49WLQpWzPw53eEITJ2Hs9fh/ryUYDn4pxZz11StaBYBrLFJdqg==", 642 + "dev": true, 643 + "license": "MIT", 644 + "dependencies": { 645 + "env-paths": "^2.2.0", 646 + "exponential-backoff": "^3.1.1", 647 + "glob": "^8.1.0", 648 + "graceful-fs": "^4.2.6", 649 + "make-fetch-happen": "^10.2.1", 650 + "nopt": "^6.0.0", 651 + "proc-log": "^2.0.1", 652 + "semver": "^7.3.5", 653 + "tar": "^6.2.1", 654 + "which": "^2.0.2" 655 + }, 656 + "bin": { 657 + "node-gyp": "bin/node-gyp.js" 658 + }, 659 + "engines": { 660 + "node": ">=12.13.0" 661 + } 662 + }, 663 + "node_modules/@electron/node-gyp/node_modules/brace-expansion": { 664 + "version": "2.0.1", 665 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 666 + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 667 + "dev": true, 668 + "license": "MIT", 669 + "dependencies": { 670 + "balanced-match": "^1.0.0" 671 + } 672 + }, 673 + "node_modules/@electron/node-gyp/node_modules/glob": { 674 + "version": "8.1.0", 675 + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", 676 + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", 677 + "deprecated": "Glob versions prior to v9 are no longer supported", 678 + "dev": true, 679 + "license": "ISC", 680 + "dependencies": { 681 + "fs.realpath": "^1.0.0", 682 + "inflight": "^1.0.4", 683 + "inherits": "2", 684 + "minimatch": "^5.0.1", 685 + "once": "^1.3.0" 686 + }, 687 + "engines": { 688 + "node": ">=12" 689 + }, 690 + "funding": { 691 + "url": "https://github.com/sponsors/isaacs" 692 + } 693 + }, 694 + "node_modules/@electron/node-gyp/node_modules/minimatch": { 695 + "version": "5.1.6", 696 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", 697 + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", 698 + "dev": true, 699 + "license": "ISC", 700 + "dependencies": { 701 + "brace-expansion": "^2.0.1" 702 + }, 703 + "engines": { 704 + "node": ">=10" 705 + } 706 + }, 707 + "node_modules/@electron/notarize": { 708 + "version": "2.5.0", 709 + "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.5.0.tgz", 710 + "integrity": "sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==", 711 + "dev": true, 712 + "license": "MIT", 713 + "dependencies": { 714 + "debug": "^4.1.1", 715 + "fs-extra": "^9.0.1", 716 + "promise-retry": "^2.0.1" 717 + }, 718 + "engines": { 719 + "node": ">= 10.0.0" 720 + } 721 + }, 722 + "node_modules/@electron/notarize/node_modules/fs-extra": { 723 + "version": "9.1.0", 724 + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", 725 + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", 726 + "dev": true, 727 + "license": "MIT", 728 + "dependencies": { 729 + "at-least-node": "^1.0.0", 730 + "graceful-fs": "^4.2.0", 731 + "jsonfile": "^6.0.1", 732 + "universalify": "^2.0.0" 733 + }, 734 + "engines": { 735 + "node": ">=10" 736 + } 737 + }, 738 + "node_modules/@electron/osx-sign": { 739 + "version": "1.3.2", 740 + "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.3.2.tgz", 741 + "integrity": "sha512-KqVlm9WMWq19lBpCXQoThC/Koaiji2zotUDYwZDaZlZZym+FXY9mQW8wN6sUQ93nkVc42f3TQ1S/XN9S1kjM5Q==", 742 + "dev": true, 743 + "license": "BSD-2-Clause", 744 + "dependencies": { 745 + "compare-version": "^0.1.2", 746 + "debug": "^4.3.4", 747 + "fs-extra": "^10.0.0", 748 + "isbinaryfile": "^4.0.8", 749 + "minimist": "^1.2.6", 750 + "plist": "^3.0.5" 751 + }, 752 + "bin": { 753 + "electron-osx-flat": "bin/electron-osx-flat.js", 754 + "electron-osx-sign": "bin/electron-osx-sign.js" 755 + }, 756 + "engines": { 757 + "node": ">=12.0.0" 758 + } 759 + }, 760 + "node_modules/@electron/packager": { 761 + "version": "18.3.6", 762 + "resolved": "https://registry.npmjs.org/@electron/packager/-/packager-18.3.6.tgz", 763 + "integrity": "sha512-1eXHB5t+SQKvUiDpWGpvr90ZSSbXj+isrh3YbjCTjKT4bE4SQrKSBfukEAaBvp67+GXHFtCHjQgN9qSTFIge+Q==", 764 + "dev": true, 765 + "license": "BSD-2-Clause", 766 + "dependencies": { 767 + "@electron/asar": "^3.2.13", 768 + "@electron/get": "^3.0.0", 769 + "@electron/notarize": "^2.1.0", 770 + "@electron/osx-sign": "^1.0.5", 771 + "@electron/universal": "^2.0.1", 772 + "@electron/windows-sign": "^1.0.0", 773 + "debug": "^4.0.1", 774 + "extract-zip": "^2.0.0", 775 + "filenamify": "^4.1.0", 776 + "fs-extra": "^11.1.0", 777 + "galactus": "^1.0.0", 778 + "get-package-info": "^1.0.0", 779 + "junk": "^3.1.0", 780 + "parse-author": "^2.0.0", 781 + "plist": "^3.0.0", 782 + "resedit": "^2.0.0", 783 + "resolve": "^1.1.6", 784 + "semver": "^7.1.3", 785 + "yargs-parser": "^21.1.1" 786 + }, 787 + "bin": { 788 + "electron-packager": "bin/electron-packager.js" 789 + }, 790 + "engines": { 791 + "node": ">= 16.13.0" 792 + }, 793 + "funding": { 794 + "url": "https://github.com/electron/packager?sponsor=1" 795 + } 796 + }, 797 + "node_modules/@electron/packager/node_modules/@electron/get": { 798 + "version": "3.1.0", 799 + "resolved": "https://registry.npmjs.org/@electron/get/-/get-3.1.0.tgz", 800 + "integrity": "sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ==", 801 + "dev": true, 802 + "license": "MIT", 803 + "dependencies": { 804 + "debug": "^4.1.1", 805 + "env-paths": "^2.2.0", 806 + "fs-extra": "^8.1.0", 807 + "got": "^11.8.5", 808 + "progress": "^2.0.3", 809 + "semver": "^6.2.0", 810 + "sumchecker": "^3.0.1" 811 + }, 812 + "engines": { 813 + "node": ">=14" 814 + }, 815 + "optionalDependencies": { 816 + "global-agent": "^3.0.0" 817 + } 818 + }, 819 + "node_modules/@electron/packager/node_modules/@electron/get/node_modules/fs-extra": { 820 + "version": "8.1.0", 821 + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 822 + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 823 + "dev": true, 824 + "license": "MIT", 825 + "dependencies": { 826 + "graceful-fs": "^4.2.0", 827 + "jsonfile": "^4.0.0", 828 + "universalify": "^0.1.0" 829 + }, 830 + "engines": { 831 + "node": ">=6 <7 || >=8" 832 + } 833 + }, 834 + "node_modules/@electron/packager/node_modules/@electron/get/node_modules/jsonfile": { 835 + "version": "4.0.0", 836 + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 837 + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", 838 + "dev": true, 839 + "license": "MIT", 840 + "optionalDependencies": { 841 + "graceful-fs": "^4.1.6" 842 + } 843 + }, 844 + "node_modules/@electron/packager/node_modules/@electron/get/node_modules/semver": { 845 + "version": "6.3.1", 846 + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 847 + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 848 + "dev": true, 849 + "license": "ISC", 850 + "bin": { 851 + "semver": "bin/semver.js" 852 + } 853 + }, 854 + "node_modules/@electron/packager/node_modules/@electron/get/node_modules/universalify": { 855 + "version": "0.1.2", 856 + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 857 + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 858 + "dev": true, 859 + "license": "MIT", 860 + "engines": { 861 + "node": ">= 4.0.0" 862 + } 863 + }, 864 + "node_modules/@electron/packager/node_modules/fs-extra": { 865 + "version": "11.3.0", 866 + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", 867 + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", 868 + "dev": true, 869 + "license": "MIT", 870 + "dependencies": { 871 + "graceful-fs": "^4.2.0", 872 + "jsonfile": "^6.0.1", 873 + "universalify": "^2.0.0" 874 + }, 875 + "engines": { 876 + "node": ">=14.14" 877 + } 878 + }, 879 + "node_modules/@electron/rebuild": { 880 + "version": "3.7.1", 881 + "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.7.1.tgz", 882 + "integrity": "sha512-sKGD+xav4Gh25+LcLY0rjIwcCFTw+f/HU1pB48UVbwxXXRGaXEqIH0AaYKN46dgd/7+6kuiDXzoyAEvx1zCsdw==", 883 + "dev": true, 884 + "license": "MIT", 885 + "dependencies": { 886 + "@electron/node-gyp": "git+https://github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2", 887 + "@malept/cross-spawn-promise": "^2.0.0", 888 + "chalk": "^4.0.0", 889 + "debug": "^4.1.1", 890 + "detect-libc": "^2.0.1", 891 + "fs-extra": "^10.0.0", 892 + "got": "^11.7.0", 893 + "node-abi": "^3.45.0", 894 + "node-api-version": "^0.2.0", 895 + "ora": "^5.1.0", 896 + "read-binary-file-arch": "^1.0.6", 897 + "semver": "^7.3.5", 898 + "tar": "^6.0.5", 899 + "yargs": "^17.0.1" 900 + }, 901 + "bin": { 902 + "electron-rebuild": "lib/cli.js" 903 + }, 904 + "engines": { 905 + "node": ">=12.13.0" 906 + } 907 + }, 908 + "node_modules/@electron/rebuild/node_modules/node-api-version": { 909 + "version": "0.2.0", 910 + "resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.2.0.tgz", 911 + "integrity": "sha512-fthTTsi8CxaBXMaBAD7ST2uylwvsnYxh2PfaScwpMhos6KlSFajXQPcM4ogNE1q2s3Lbz9GCGqeIHC+C6OZnKg==", 912 + "dev": true, 913 + "license": "MIT", 914 + "dependencies": { 915 + "semver": "^7.3.5" 916 + } 917 + }, 918 + "node_modules/@electron/universal": { 919 + "version": "2.0.2", 920 + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-2.0.2.tgz", 921 + "integrity": "sha512-mqY1szx5/d5YLvfCDWWoJdkSIjIz+NdWN4pN0r78lYiE7De+slLpuF3lVxIT+hlJnwk5sH2wFRMl6/oUgUVO3A==", 922 + "dev": true, 923 + "license": "MIT", 924 + "dependencies": { 925 + "@electron/asar": "^3.3.1", 926 + "@malept/cross-spawn-promise": "^2.0.0", 927 + "debug": "^4.3.1", 928 + "dir-compare": "^4.2.0", 929 + "fs-extra": "^11.1.1", 930 + "minimatch": "^9.0.3", 931 + "plist": "^3.1.0" 932 + }, 933 + "engines": { 934 + "node": ">=16.4" 935 + } 936 + }, 937 + "node_modules/@electron/universal/node_modules/brace-expansion": { 938 + "version": "2.0.1", 939 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 940 + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 941 + "dev": true, 942 + "license": "MIT", 943 + "dependencies": { 944 + "balanced-match": "^1.0.0" 945 + } 946 + }, 947 + "node_modules/@electron/universal/node_modules/fs-extra": { 948 + "version": "11.3.0", 949 + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", 950 + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", 951 + "dev": true, 952 + "license": "MIT", 953 + "dependencies": { 954 + "graceful-fs": "^4.2.0", 955 + "jsonfile": "^6.0.1", 956 + "universalify": "^2.0.0" 957 + }, 958 + "engines": { 959 + "node": ">=14.14" 960 + } 961 + }, 962 + "node_modules/@electron/universal/node_modules/minimatch": { 963 + "version": "9.0.5", 964 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 965 + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 966 + "dev": true, 967 + "license": "ISC", 968 + "dependencies": { 969 + "brace-expansion": "^2.0.1" 970 + }, 971 + "engines": { 972 + "node": ">=16 || 14 >=14.17" 973 + }, 974 + "funding": { 975 + "url": "https://github.com/sponsors/isaacs" 976 + } 977 + }, 978 + "node_modules/@electron/windows-sign": { 979 + "version": "1.1.2", 980 + "resolved": "https://registry.npmjs.org/@electron/windows-sign/-/windows-sign-1.1.2.tgz", 981 + "integrity": "sha512-eXEiZjDtxW3QORCWfRUarANPRTlH9B6At4jqBZJ0NzokSGutXQUVLPA6WmGpIhDW6w2yCMdHW1EJd1HrXtU5sg==", 982 + "dev": true, 983 + "dependencies": { 984 + "cross-dirname": "^0.1.0", 985 + "debug": "^4.3.4", 986 + "fs-extra": "^11.1.1", 987 + "minimist": "^1.2.8", 988 + "postject": "^1.0.0-alpha.6" 989 + }, 990 + "bin": { 991 + "electron-windows-sign": "bin/electron-windows-sign.js" 992 + }, 993 + "engines": { 994 + "node": ">=14.14" 995 + } 996 + }, 997 + "node_modules/@electron/windows-sign/node_modules/fs-extra": { 998 + "version": "11.2.0", 999 + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", 1000 + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", 1001 + "dev": true, 1002 + "dependencies": { 1003 + "graceful-fs": "^4.2.0", 1004 + "jsonfile": "^6.0.1", 1005 + "universalify": "^2.0.0" 1006 + }, 1007 + "engines": { 1008 + "node": ">=14.14" 1009 + } 1010 + }, 1011 + "node_modules/@gar/promisify": { 1012 + "version": "1.1.3", 1013 + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", 1014 + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", 1015 + "dev": true 1016 + }, 1017 + "node_modules/@malept/cross-spawn-promise": { 1018 + "version": "2.0.0", 1019 + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", 1020 + "integrity": "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==", 1021 + "dev": true, 1022 + "funding": [ 1023 + { 1024 + "type": "individual", 1025 + "url": "https://github.com/sponsors/malept" 1026 + }, 1027 + { 1028 + "type": "tidelift", 1029 + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" 1030 + } 1031 + ], 1032 + "dependencies": { 1033 + "cross-spawn": "^7.0.1" 1034 + }, 1035 + "engines": { 1036 + "node": ">= 12.13.0" 1037 + } 1038 + }, 1039 + "node_modules/@nodelib/fs.scandir": { 1040 + "version": "2.1.5", 1041 + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 1042 + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 1043 + "dev": true, 1044 + "license": "MIT", 1045 + "dependencies": { 1046 + "@nodelib/fs.stat": "2.0.5", 1047 + "run-parallel": "^1.1.9" 1048 + }, 1049 + "engines": { 1050 + "node": ">= 8" 1051 + } 1052 + }, 1053 + "node_modules/@nodelib/fs.stat": { 1054 + "version": "2.0.5", 1055 + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 1056 + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 1057 + "dev": true, 1058 + "license": "MIT", 1059 + "engines": { 1060 + "node": ">= 8" 1061 + } 1062 + }, 1063 + "node_modules/@nodelib/fs.walk": { 1064 + "version": "1.2.8", 1065 + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 1066 + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 1067 + "dev": true, 1068 + "license": "MIT", 1069 + "dependencies": { 1070 + "@nodelib/fs.scandir": "2.1.5", 1071 + "fastq": "^1.6.0" 1072 + }, 1073 + "engines": { 1074 + "node": ">= 8" 1075 + } 1076 + }, 1077 + "node_modules/@npmcli/fs": { 1078 + "version": "2.1.2", 1079 + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", 1080 + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", 1081 + "dev": true, 1082 + "dependencies": { 1083 + "@gar/promisify": "^1.1.3", 1084 + "semver": "^7.3.5" 1085 + }, 1086 + "engines": { 1087 + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 1088 + } 1089 + }, 1090 + "node_modules/@npmcli/move-file": { 1091 + "version": "2.0.1", 1092 + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", 1093 + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", 1094 + "deprecated": "This functionality has been moved to @npmcli/fs", 1095 + "dev": true, 1096 + "dependencies": { 1097 + "mkdirp": "^1.0.4", 1098 + "rimraf": "^3.0.2" 1099 + }, 1100 + "engines": { 1101 + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 1102 + } 1103 + }, 1104 + "node_modules/@sindresorhus/is": { 1105 + "version": "4.6.0", 1106 + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", 1107 + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", 1108 + "dev": true, 1109 + "engines": { 1110 + "node": ">=10" 1111 + }, 1112 + "funding": { 1113 + "url": "https://github.com/sindresorhus/is?sponsor=1" 1114 + } 1115 + }, 1116 + "node_modules/@szmarczak/http-timer": { 1117 + "version": "4.0.6", 1118 + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", 1119 + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", 1120 + "dev": true, 1121 + "dependencies": { 1122 + "defer-to-connect": "^2.0.0" 1123 + }, 1124 + "engines": { 1125 + "node": ">=10" 1126 + } 1127 + }, 1128 + "node_modules/@tootallnate/once": { 1129 + "version": "2.0.0", 1130 + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", 1131 + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", 1132 + "dev": true, 1133 + "engines": { 1134 + "node": ">= 10" 1135 + } 1136 + }, 1137 + "node_modules/@types/cacheable-request": { 1138 + "version": "6.0.3", 1139 + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", 1140 + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", 1141 + "dev": true, 1142 + "dependencies": { 1143 + "@types/http-cache-semantics": "*", 1144 + "@types/keyv": "^3.1.4", 1145 + "@types/node": "*", 1146 + "@types/responselike": "^1.0.0" 1147 + } 1148 + }, 1149 + "node_modules/@types/fs-extra": { 1150 + "version": "9.0.13", 1151 + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", 1152 + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", 1153 + "dev": true, 1154 + "optional": true, 1155 + "dependencies": { 1156 + "@types/node": "*" 1157 + } 1158 + }, 1159 + "node_modules/@types/glob": { 1160 + "version": "7.2.0", 1161 + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", 1162 + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", 1163 + "dev": true, 1164 + "optional": true, 1165 + "dependencies": { 1166 + "@types/minimatch": "*", 1167 + "@types/node": "*" 1168 + } 1169 + }, 1170 + "node_modules/@types/http-cache-semantics": { 1171 + "version": "4.0.4", 1172 + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", 1173 + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", 1174 + "dev": true 1175 + }, 1176 + "node_modules/@types/keyv": { 1177 + "version": "3.1.4", 1178 + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", 1179 + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", 1180 + "dev": true, 1181 + "dependencies": { 1182 + "@types/node": "*" 1183 + } 1184 + }, 1185 + "node_modules/@types/minimatch": { 1186 + "version": "5.1.2", 1187 + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", 1188 + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", 1189 + "dev": true, 1190 + "optional": true 1191 + }, 1192 + "node_modules/@types/node": { 1193 + "version": "22.13.9", 1194 + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.9.tgz", 1195 + "integrity": "sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==", 1196 + "dev": true, 1197 + "license": "MIT", 1198 + "dependencies": { 1199 + "undici-types": "~6.20.0" 1200 + } 1201 + }, 1202 + "node_modules/@types/responselike": { 1203 + "version": "1.0.3", 1204 + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", 1205 + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", 1206 + "dev": true, 1207 + "dependencies": { 1208 + "@types/node": "*" 1209 + } 1210 + }, 1211 + "node_modules/@types/yauzl": { 1212 + "version": "2.10.3", 1213 + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", 1214 + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", 1215 + "dev": true, 1216 + "optional": true, 1217 + "dependencies": { 1218 + "@types/node": "*" 1219 + } 1220 + }, 1221 + "node_modules/@xmldom/xmldom": { 1222 + "version": "0.8.10", 1223 + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", 1224 + "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", 1225 + "dev": true, 1226 + "license": "MIT", 1227 + "engines": { 1228 + "node": ">=10.0.0" 1229 + } 1230 + }, 1231 + "node_modules/abbrev": { 1232 + "version": "1.1.1", 1233 + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 1234 + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", 1235 + "dev": true 1236 + }, 1237 + "node_modules/agent-base": { 1238 + "version": "6.0.2", 1239 + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 1240 + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 1241 + "dev": true, 1242 + "dependencies": { 1243 + "debug": "4" 1244 + }, 1245 + "engines": { 1246 + "node": ">= 6.0.0" 1247 + } 1248 + }, 1249 + "node_modules/agentkeepalive": { 1250 + "version": "4.5.0", 1251 + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", 1252 + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", 1253 + "dev": true, 1254 + "dependencies": { 1255 + "humanize-ms": "^1.2.1" 1256 + }, 1257 + "engines": { 1258 + "node": ">= 8.0.0" 1259 + } 1260 + }, 1261 + "node_modules/aggregate-error": { 1262 + "version": "3.1.0", 1263 + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", 1264 + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", 1265 + "dev": true, 1266 + "dependencies": { 1267 + "clean-stack": "^2.0.0", 1268 + "indent-string": "^4.0.0" 1269 + }, 1270 + "engines": { 1271 + "node": ">=8" 1272 + } 1273 + }, 1274 + "node_modules/ansi-escapes": { 1275 + "version": "5.0.0", 1276 + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", 1277 + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", 1278 + "dev": true, 1279 + "license": "MIT", 1280 + "dependencies": { 1281 + "type-fest": "^1.0.2" 1282 + }, 1283 + "engines": { 1284 + "node": ">=12" 1285 + }, 1286 + "funding": { 1287 + "url": "https://github.com/sponsors/sindresorhus" 1288 + } 1289 + }, 1290 + "node_modules/ansi-escapes/node_modules/type-fest": { 1291 + "version": "1.4.0", 1292 + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", 1293 + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", 1294 + "dev": true, 1295 + "license": "(MIT OR CC0-1.0)", 1296 + "engines": { 1297 + "node": ">=10" 1298 + }, 1299 + "funding": { 1300 + "url": "https://github.com/sponsors/sindresorhus" 1301 + } 1302 + }, 1303 + "node_modules/ansi-regex": { 1304 + "version": "5.0.1", 1305 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1306 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1307 + "dev": true, 1308 + "engines": { 1309 + "node": ">=8" 1310 + } 1311 + }, 1312 + "node_modules/ansi-styles": { 1313 + "version": "4.3.0", 1314 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1315 + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1316 + "dev": true, 1317 + "dependencies": { 1318 + "color-convert": "^2.0.1" 1319 + }, 1320 + "engines": { 1321 + "node": ">=8" 1322 + }, 1323 + "funding": { 1324 + "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1325 + } 1326 + }, 1327 + "node_modules/asar": { 1328 + "version": "3.2.0", 1329 + "resolved": "https://registry.npmjs.org/asar/-/asar-3.2.0.tgz", 1330 + "integrity": "sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg==", 1331 + "deprecated": "Please use @electron/asar moving forward. There is no API change, just a package name change", 1332 + "dev": true, 1333 + "optional": true, 1334 + "dependencies": { 1335 + "chromium-pickle-js": "^0.2.0", 1336 + "commander": "^5.0.0", 1337 + "glob": "^7.1.6", 1338 + "minimatch": "^3.0.4" 1339 + }, 1340 + "bin": { 1341 + "asar": "bin/asar.js" 1342 + }, 1343 + "engines": { 1344 + "node": ">=10.12.0" 1345 + }, 1346 + "optionalDependencies": { 1347 + "@types/glob": "^7.1.1" 1348 + } 1349 + }, 1350 + "node_modules/asar/node_modules/commander": { 1351 + "version": "5.1.0", 1352 + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", 1353 + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", 1354 + "dev": true, 1355 + "optional": true, 1356 + "engines": { 1357 + "node": ">= 6" 1358 + } 1359 + }, 1360 + "node_modules/at-least-node": { 1361 + "version": "1.0.0", 1362 + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", 1363 + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", 1364 + "dev": true, 1365 + "engines": { 1366 + "node": ">= 4.0.0" 1367 + } 1368 + }, 1369 + "node_modules/author-regex": { 1370 + "version": "1.0.0", 1371 + "resolved": "https://registry.npmjs.org/author-regex/-/author-regex-1.0.0.tgz", 1372 + "integrity": "sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g==", 1373 + "dev": true, 1374 + "engines": { 1375 + "node": ">=0.8" 1376 + } 1377 + }, 1378 + "node_modules/balanced-match": { 1379 + "version": "1.0.2", 1380 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1381 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1382 + "dev": true 1383 + }, 1384 + "node_modules/base64-js": { 1385 + "version": "1.5.1", 1386 + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 1387 + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 1388 + "dev": true, 1389 + "funding": [ 1390 + { 1391 + "type": "github", 1392 + "url": "https://github.com/sponsors/feross" 1393 + }, 1394 + { 1395 + "type": "patreon", 1396 + "url": "https://www.patreon.com/feross" 1397 + }, 1398 + { 1399 + "type": "consulting", 1400 + "url": "https://feross.org/support" 1401 + } 1402 + ] 1403 + }, 1404 + "node_modules/bl": { 1405 + "version": "4.1.0", 1406 + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", 1407 + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", 1408 + "dev": true, 1409 + "dependencies": { 1410 + "buffer": "^5.5.0", 1411 + "inherits": "^2.0.4", 1412 + "readable-stream": "^3.4.0" 1413 + } 1414 + }, 1415 + "node_modules/bluebird": { 1416 + "version": "3.7.2", 1417 + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", 1418 + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", 1419 + "dev": true, 1420 + "license": "MIT" 1421 + }, 1422 + "node_modules/boolean": { 1423 + "version": "3.2.0", 1424 + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", 1425 + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", 1426 + "dev": true, 1427 + "optional": true 1428 + }, 1429 + "node_modules/brace-expansion": { 1430 + "version": "1.1.11", 1431 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1432 + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1433 + "dev": true, 1434 + "dependencies": { 1435 + "balanced-match": "^1.0.0", 1436 + "concat-map": "0.0.1" 1437 + } 1438 + }, 1439 + "node_modules/braces": { 1440 + "version": "3.0.3", 1441 + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 1442 + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 1443 + "dev": true, 1444 + "license": "MIT", 1445 + "dependencies": { 1446 + "fill-range": "^7.1.1" 1447 + }, 1448 + "engines": { 1449 + "node": ">=8" 1450 + } 1451 + }, 1452 + "node_modules/buffer": { 1453 + "version": "5.7.1", 1454 + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 1455 + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 1456 + "dev": true, 1457 + "funding": [ 1458 + { 1459 + "type": "github", 1460 + "url": "https://github.com/sponsors/feross" 1461 + }, 1462 + { 1463 + "type": "patreon", 1464 + "url": "https://www.patreon.com/feross" 1465 + }, 1466 + { 1467 + "type": "consulting", 1468 + "url": "https://feross.org/support" 1469 + } 1470 + ], 1471 + "dependencies": { 1472 + "base64-js": "^1.3.1", 1473 + "ieee754": "^1.1.13" 1474 + } 1475 + }, 1476 + "node_modules/buffer-crc32": { 1477 + "version": "0.2.13", 1478 + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 1479 + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", 1480 + "dev": true, 1481 + "engines": { 1482 + "node": "*" 1483 + } 1484 + }, 1485 + "node_modules/buffer-from": { 1486 + "version": "1.1.2", 1487 + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 1488 + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 1489 + "dev": true, 1490 + "license": "MIT" 1491 + }, 1492 + "node_modules/cacache": { 1493 + "version": "16.1.3", 1494 + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", 1495 + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", 1496 + "dev": true, 1497 + "dependencies": { 1498 + "@npmcli/fs": "^2.1.0", 1499 + "@npmcli/move-file": "^2.0.0", 1500 + "chownr": "^2.0.0", 1501 + "fs-minipass": "^2.1.0", 1502 + "glob": "^8.0.1", 1503 + "infer-owner": "^1.0.4", 1504 + "lru-cache": "^7.7.1", 1505 + "minipass": "^3.1.6", 1506 + "minipass-collect": "^1.0.2", 1507 + "minipass-flush": "^1.0.5", 1508 + "minipass-pipeline": "^1.2.4", 1509 + "mkdirp": "^1.0.4", 1510 + "p-map": "^4.0.0", 1511 + "promise-inflight": "^1.0.1", 1512 + "rimraf": "^3.0.2", 1513 + "ssri": "^9.0.0", 1514 + "tar": "^6.1.11", 1515 + "unique-filename": "^2.0.0" 1516 + }, 1517 + "engines": { 1518 + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 1519 + } 1520 + }, 1521 + "node_modules/cacache/node_modules/brace-expansion": { 1522 + "version": "2.0.1", 1523 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 1524 + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 1525 + "dev": true, 1526 + "dependencies": { 1527 + "balanced-match": "^1.0.0" 1528 + } 1529 + }, 1530 + "node_modules/cacache/node_modules/glob": { 1531 + "version": "8.1.0", 1532 + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", 1533 + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", 1534 + "dev": true, 1535 + "dependencies": { 1536 + "fs.realpath": "^1.0.0", 1537 + "inflight": "^1.0.4", 1538 + "inherits": "2", 1539 + "minimatch": "^5.0.1", 1540 + "once": "^1.3.0" 1541 + }, 1542 + "engines": { 1543 + "node": ">=12" 1544 + }, 1545 + "funding": { 1546 + "url": "https://github.com/sponsors/isaacs" 1547 + } 1548 + }, 1549 + "node_modules/cacache/node_modules/minimatch": { 1550 + "version": "5.1.6", 1551 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", 1552 + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", 1553 + "dev": true, 1554 + "dependencies": { 1555 + "brace-expansion": "^2.0.1" 1556 + }, 1557 + "engines": { 1558 + "node": ">=10" 1559 + } 1560 + }, 1561 + "node_modules/cacheable-lookup": { 1562 + "version": "5.0.4", 1563 + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", 1564 + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", 1565 + "dev": true, 1566 + "engines": { 1567 + "node": ">=10.6.0" 1568 + } 1569 + }, 1570 + "node_modules/cacheable-request": { 1571 + "version": "7.0.4", 1572 + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", 1573 + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", 1574 + "dev": true, 1575 + "dependencies": { 1576 + "clone-response": "^1.0.2", 1577 + "get-stream": "^5.1.0", 1578 + "http-cache-semantics": "^4.0.0", 1579 + "keyv": "^4.0.0", 1580 + "lowercase-keys": "^2.0.0", 1581 + "normalize-url": "^6.0.1", 1582 + "responselike": "^2.0.0" 1583 + }, 1584 + "engines": { 1585 + "node": ">=8" 1586 + } 1587 + }, 1588 + "node_modules/chalk": { 1589 + "version": "4.1.2", 1590 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1591 + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1592 + "dev": true, 1593 + "dependencies": { 1594 + "ansi-styles": "^4.1.0", 1595 + "supports-color": "^7.1.0" 1596 + }, 1597 + "engines": { 1598 + "node": ">=10" 1599 + }, 1600 + "funding": { 1601 + "url": "https://github.com/chalk/chalk?sponsor=1" 1602 + } 1603 + }, 1604 + "node_modules/chownr": { 1605 + "version": "2.0.0", 1606 + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", 1607 + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", 1608 + "dev": true, 1609 + "engines": { 1610 + "node": ">=10" 1611 + } 1612 + }, 1613 + "node_modules/chrome-trace-event": { 1614 + "version": "1.0.4", 1615 + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", 1616 + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", 1617 + "dev": true, 1618 + "license": "MIT", 1619 + "engines": { 1620 + "node": ">=6.0" 1621 + } 1622 + }, 1623 + "node_modules/chromium-pickle-js": { 1624 + "version": "0.2.0", 1625 + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", 1626 + "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", 1627 + "dev": true, 1628 + "optional": true 1629 + }, 1630 + "node_modules/clean-stack": { 1631 + "version": "2.2.0", 1632 + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", 1633 + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", 1634 + "dev": true, 1635 + "engines": { 1636 + "node": ">=6" 1637 + } 1638 + }, 1639 + "node_modules/cli-cursor": { 1640 + "version": "3.1.0", 1641 + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", 1642 + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", 1643 + "dev": true, 1644 + "dependencies": { 1645 + "restore-cursor": "^3.1.0" 1646 + }, 1647 + "engines": { 1648 + "node": ">=8" 1649 + } 1650 + }, 1651 + "node_modules/cli-spinners": { 1652 + "version": "2.9.2", 1653 + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", 1654 + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", 1655 + "dev": true, 1656 + "engines": { 1657 + "node": ">=6" 1658 + }, 1659 + "funding": { 1660 + "url": "https://github.com/sponsors/sindresorhus" 1661 + } 1662 + }, 1663 + "node_modules/cli-truncate": { 1664 + "version": "3.1.0", 1665 + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", 1666 + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", 1667 + "dev": true, 1668 + "license": "MIT", 1669 + "dependencies": { 1670 + "slice-ansi": "^5.0.0", 1671 + "string-width": "^5.0.0" 1672 + }, 1673 + "engines": { 1674 + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1675 + }, 1676 + "funding": { 1677 + "url": "https://github.com/sponsors/sindresorhus" 1678 + } 1679 + }, 1680 + "node_modules/cli-truncate/node_modules/ansi-regex": { 1681 + "version": "6.1.0", 1682 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 1683 + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 1684 + "dev": true, 1685 + "license": "MIT", 1686 + "engines": { 1687 + "node": ">=12" 1688 + }, 1689 + "funding": { 1690 + "url": "https://github.com/chalk/ansi-regex?sponsor=1" 1691 + } 1692 + }, 1693 + "node_modules/cli-truncate/node_modules/emoji-regex": { 1694 + "version": "9.2.2", 1695 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 1696 + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 1697 + "dev": true, 1698 + "license": "MIT" 1699 + }, 1700 + "node_modules/cli-truncate/node_modules/string-width": { 1701 + "version": "5.1.2", 1702 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 1703 + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 1704 + "dev": true, 1705 + "license": "MIT", 1706 + "dependencies": { 1707 + "eastasianwidth": "^0.2.0", 1708 + "emoji-regex": "^9.2.2", 1709 + "strip-ansi": "^7.0.1" 1710 + }, 1711 + "engines": { 1712 + "node": ">=12" 1713 + }, 1714 + "funding": { 1715 + "url": "https://github.com/sponsors/sindresorhus" 1716 + } 1717 + }, 1718 + "node_modules/cli-truncate/node_modules/strip-ansi": { 1719 + "version": "7.1.0", 1720 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 1721 + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 1722 + "dev": true, 1723 + "license": "MIT", 1724 + "dependencies": { 1725 + "ansi-regex": "^6.0.1" 1726 + }, 1727 + "engines": { 1728 + "node": ">=12" 1729 + }, 1730 + "funding": { 1731 + "url": "https://github.com/chalk/strip-ansi?sponsor=1" 1732 + } 1733 + }, 1734 + "node_modules/cliui": { 1735 + "version": "8.0.1", 1736 + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 1737 + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 1738 + "dev": true, 1739 + "dependencies": { 1740 + "string-width": "^4.2.0", 1741 + "strip-ansi": "^6.0.1", 1742 + "wrap-ansi": "^7.0.0" 1743 + }, 1744 + "engines": { 1745 + "node": ">=12" 1746 + } 1747 + }, 1748 + "node_modules/clone": { 1749 + "version": "1.0.4", 1750 + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", 1751 + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", 1752 + "dev": true, 1753 + "engines": { 1754 + "node": ">=0.8" 1755 + } 1756 + }, 1757 + "node_modules/clone-response": { 1758 + "version": "1.0.3", 1759 + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", 1760 + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", 1761 + "dev": true, 1762 + "dependencies": { 1763 + "mimic-response": "^1.0.0" 1764 + }, 1765 + "funding": { 1766 + "url": "https://github.com/sponsors/sindresorhus" 1767 + } 1768 + }, 1769 + "node_modules/color-convert": { 1770 + "version": "2.0.1", 1771 + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1772 + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1773 + "dev": true, 1774 + "dependencies": { 1775 + "color-name": "~1.1.4" 1776 + }, 1777 + "engines": { 1778 + "node": ">=7.0.0" 1779 + } 1780 + }, 1781 + "node_modules/color-name": { 1782 + "version": "1.1.4", 1783 + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1784 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1785 + "dev": true 1786 + }, 1787 + "node_modules/colorette": { 1788 + "version": "2.0.20", 1789 + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", 1790 + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", 1791 + "dev": true, 1792 + "license": "MIT" 1793 + }, 1794 + "node_modules/commander": { 1795 + "version": "11.1.0", 1796 + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", 1797 + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", 1798 + "dev": true, 1799 + "license": "MIT", 1800 + "engines": { 1801 + "node": ">=16" 1802 + } 1803 + }, 1804 + "node_modules/compare-version": { 1805 + "version": "0.1.2", 1806 + "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", 1807 + "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", 1808 + "dev": true, 1809 + "license": "MIT", 1810 + "engines": { 1811 + "node": ">=0.10.0" 1812 + } 1813 + }, 1814 + "node_modules/concat-map": { 1815 + "version": "0.0.1", 1816 + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1817 + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1818 + "dev": true 1819 + }, 1820 + "node_modules/cross-dirname": { 1821 + "version": "0.1.0", 1822 + "resolved": "https://registry.npmjs.org/cross-dirname/-/cross-dirname-0.1.0.tgz", 1823 + "integrity": "sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==", 1824 + "dev": true 1825 + }, 1826 + "node_modules/cross-spawn": { 1827 + "version": "7.0.3", 1828 + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1829 + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1830 + "dev": true, 1831 + "dependencies": { 1832 + "path-key": "^3.1.0", 1833 + "shebang-command": "^2.0.0", 1834 + "which": "^2.0.1" 1835 + }, 1836 + "engines": { 1837 + "node": ">= 8" 1838 + } 1839 + }, 1840 + "node_modules/cross-zip": { 1841 + "version": "4.0.0", 1842 + "resolved": "https://registry.npmjs.org/cross-zip/-/cross-zip-4.0.0.tgz", 1843 + "integrity": "sha512-MEzGfZo0rqE10O/B+AEcCSJLZsrWuRUvmqJTqHNqBtALhaJc3E3ixLGLJNTRzEA2K34wbmOHC4fwYs9sVsdcCA==", 1844 + "dev": true, 1845 + "funding": [ 1846 + { 1847 + "type": "github", 1848 + "url": "https://github.com/sponsors/feross" 1849 + }, 1850 + { 1851 + "type": "patreon", 1852 + "url": "https://www.patreon.com/feross" 1853 + }, 1854 + { 1855 + "type": "consulting", 1856 + "url": "https://feross.org/support" 1857 + } 1858 + ], 1859 + "engines": { 1860 + "node": ">=12.10" 1861 + } 1862 + }, 1863 + "node_modules/debug": { 1864 + "version": "4.3.4", 1865 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1866 + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1867 + "dev": true, 1868 + "dependencies": { 1869 + "ms": "2.1.2" 1870 + }, 1871 + "engines": { 1872 + "node": ">=6.0" 1873 + }, 1874 + "peerDependenciesMeta": { 1875 + "supports-color": { 1876 + "optional": true 1877 + } 1878 + } 1879 + }, 1880 + "node_modules/decompress-response": { 1881 + "version": "6.0.0", 1882 + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", 1883 + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", 1884 + "dev": true, 1885 + "dependencies": { 1886 + "mimic-response": "^3.1.0" 1887 + }, 1888 + "engines": { 1889 + "node": ">=10" 1890 + }, 1891 + "funding": { 1892 + "url": "https://github.com/sponsors/sindresorhus" 1893 + } 1894 + }, 1895 + "node_modules/decompress-response/node_modules/mimic-response": { 1896 + "version": "3.1.0", 1897 + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", 1898 + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", 1899 + "dev": true, 1900 + "engines": { 1901 + "node": ">=10" 1902 + }, 1903 + "funding": { 1904 + "url": "https://github.com/sponsors/sindresorhus" 1905 + } 1906 + }, 1907 + "node_modules/defaults": { 1908 + "version": "1.0.4", 1909 + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", 1910 + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", 1911 + "dev": true, 1912 + "dependencies": { 1913 + "clone": "^1.0.2" 1914 + }, 1915 + "funding": { 1916 + "url": "https://github.com/sponsors/sindresorhus" 1917 + } 1918 + }, 1919 + "node_modules/defer-to-connect": { 1920 + "version": "2.0.1", 1921 + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", 1922 + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", 1923 + "dev": true, 1924 + "engines": { 1925 + "node": ">=10" 1926 + } 1927 + }, 1928 + "node_modules/define-data-property": { 1929 + "version": "1.1.1", 1930 + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", 1931 + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", 1932 + "dev": true, 1933 + "optional": true, 1934 + "dependencies": { 1935 + "get-intrinsic": "^1.2.1", 1936 + "gopd": "^1.0.1", 1937 + "has-property-descriptors": "^1.0.0" 1938 + }, 1939 + "engines": { 1940 + "node": ">= 0.4" 1941 + } 1942 + }, 1943 + "node_modules/define-properties": { 1944 + "version": "1.2.1", 1945 + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", 1946 + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", 1947 + "dev": true, 1948 + "optional": true, 1949 + "dependencies": { 1950 + "define-data-property": "^1.0.1", 1951 + "has-property-descriptors": "^1.0.0", 1952 + "object-keys": "^1.1.1" 1953 + }, 1954 + "engines": { 1955 + "node": ">= 0.4" 1956 + }, 1957 + "funding": { 1958 + "url": "https://github.com/sponsors/ljharb" 1959 + } 1960 + }, 1961 + "node_modules/detect-libc": { 1962 + "version": "2.0.2", 1963 + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", 1964 + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", 1965 + "dev": true, 1966 + "engines": { 1967 + "node": ">=8" 1968 + } 1969 + }, 1970 + "node_modules/detect-node": { 1971 + "version": "2.1.0", 1972 + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", 1973 + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", 1974 + "dev": true, 1975 + "optional": true 1976 + }, 1977 + "node_modules/dir-compare": { 1978 + "version": "4.2.0", 1979 + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.2.0.tgz", 1980 + "integrity": "sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==", 1981 + "dev": true, 1982 + "license": "MIT", 1983 + "dependencies": { 1984 + "minimatch": "^3.0.5", 1985 + "p-limit": "^3.1.0 " 1986 + } 1987 + }, 1988 + "node_modules/eastasianwidth": { 1989 + "version": "0.2.0", 1990 + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 1991 + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 1992 + "dev": true, 1993 + "license": "MIT" 1994 + }, 1995 + "node_modules/electron": { 1996 + "version": "35.0.0", 1997 + "resolved": "https://registry.npmjs.org/electron/-/electron-35.0.0.tgz", 1998 + "integrity": "sha512-mwNQNktYLPnUWZVR8iNkfWCBjmM5e2/CmB1rhACwE9ASDbVU7CYPgp/jLUB3bj/LyQsfSuubD82OUite6SN8Uw==", 1999 + "dev": true, 2000 + "hasInstallScript": true, 2001 + "license": "MIT", 2002 + "dependencies": { 2003 + "@electron/get": "^2.0.0", 2004 + "@types/node": "^22.7.7", 2005 + "extract-zip": "^2.0.1" 2006 + }, 2007 + "bin": { 2008 + "electron": "cli.js" 2009 + }, 2010 + "engines": { 2011 + "node": ">= 12.20.55" 2012 + } 2013 + }, 2014 + "node_modules/electron-installer-common": { 2015 + "version": "0.10.3", 2016 + "resolved": "https://registry.npmjs.org/electron-installer-common/-/electron-installer-common-0.10.3.tgz", 2017 + "integrity": "sha512-mYbP+6i+nHMIm0WZHXgGdmmXMe+KXncl6jZYQNcCF9C1WsNA9C5SZ2VP4TLQMSIoFO+X4ugkMEA5uld1bmyEvA==", 2018 + "dev": true, 2019 + "optional": true, 2020 + "dependencies": { 2021 + "@malept/cross-spawn-promise": "^1.0.0", 2022 + "asar": "^3.0.0", 2023 + "debug": "^4.1.1", 2024 + "fs-extra": "^9.0.0", 2025 + "glob": "^7.1.4", 2026 + "lodash": "^4.17.15", 2027 + "parse-author": "^2.0.0", 2028 + "semver": "^7.1.1", 2029 + "tmp-promise": "^3.0.2" 2030 + }, 2031 + "engines": { 2032 + "node": ">= 10.0.0" 2033 + }, 2034 + "funding": { 2035 + "url": "https://github.com/electron-userland/electron-installer-common?sponsor=1" 2036 + }, 2037 + "optionalDependencies": { 2038 + "@types/fs-extra": "^9.0.1" 2039 + } 2040 + }, 2041 + "node_modules/electron-installer-common/node_modules/@malept/cross-spawn-promise": { 2042 + "version": "1.1.1", 2043 + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", 2044 + "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", 2045 + "dev": true, 2046 + "funding": [ 2047 + { 2048 + "type": "individual", 2049 + "url": "https://github.com/sponsors/malept" 2050 + }, 2051 + { 2052 + "type": "tidelift", 2053 + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" 2054 + } 2055 + ], 2056 + "optional": true, 2057 + "dependencies": { 2058 + "cross-spawn": "^7.0.1" 2059 + }, 2060 + "engines": { 2061 + "node": ">= 10" 2062 + } 2063 + }, 2064 + "node_modules/electron-installer-common/node_modules/fs-extra": { 2065 + "version": "9.1.0", 2066 + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", 2067 + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", 2068 + "dev": true, 2069 + "optional": true, 2070 + "dependencies": { 2071 + "at-least-node": "^1.0.0", 2072 + "graceful-fs": "^4.2.0", 2073 + "jsonfile": "^6.0.1", 2074 + "universalify": "^2.0.0" 2075 + }, 2076 + "engines": { 2077 + "node": ">=10" 2078 + } 2079 + }, 2080 + "node_modules/electron-installer-debian": { 2081 + "version": "3.2.0", 2082 + "resolved": "https://registry.npmjs.org/electron-installer-debian/-/electron-installer-debian-3.2.0.tgz", 2083 + "integrity": "sha512-58ZrlJ1HQY80VucsEIG9tQ//HrTlG6sfofA3nRGr6TmkX661uJyu4cMPPh6kXW+aHdq/7+q25KyQhDrXvRL7jw==", 2084 + "dev": true, 2085 + "optional": true, 2086 + "os": [ 2087 + "darwin", 2088 + "linux" 2089 + ], 2090 + "dependencies": { 2091 + "@malept/cross-spawn-promise": "^1.0.0", 2092 + "debug": "^4.1.1", 2093 + "electron-installer-common": "^0.10.2", 2094 + "fs-extra": "^9.0.0", 2095 + "get-folder-size": "^2.0.1", 2096 + "lodash": "^4.17.4", 2097 + "word-wrap": "^1.2.3", 2098 + "yargs": "^16.0.2" 2099 + }, 2100 + "bin": { 2101 + "electron-installer-debian": "src/cli.js" 2102 + }, 2103 + "engines": { 2104 + "node": ">= 10.0.0" 2105 + } 2106 + }, 2107 + "node_modules/electron-installer-debian/node_modules/@malept/cross-spawn-promise": { 2108 + "version": "1.1.1", 2109 + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", 2110 + "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", 2111 + "dev": true, 2112 + "funding": [ 2113 + { 2114 + "type": "individual", 2115 + "url": "https://github.com/sponsors/malept" 2116 + }, 2117 + { 2118 + "type": "tidelift", 2119 + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" 2120 + } 2121 + ], 2122 + "optional": true, 2123 + "dependencies": { 2124 + "cross-spawn": "^7.0.1" 2125 + }, 2126 + "engines": { 2127 + "node": ">= 10" 2128 + } 2129 + }, 2130 + "node_modules/electron-installer-debian/node_modules/cliui": { 2131 + "version": "7.0.4", 2132 + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 2133 + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 2134 + "dev": true, 2135 + "optional": true, 2136 + "dependencies": { 2137 + "string-width": "^4.2.0", 2138 + "strip-ansi": "^6.0.0", 2139 + "wrap-ansi": "^7.0.0" 2140 + } 2141 + }, 2142 + "node_modules/electron-installer-debian/node_modules/fs-extra": { 2143 + "version": "9.1.0", 2144 + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", 2145 + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", 2146 + "dev": true, 2147 + "optional": true, 2148 + "dependencies": { 2149 + "at-least-node": "^1.0.0", 2150 + "graceful-fs": "^4.2.0", 2151 + "jsonfile": "^6.0.1", 2152 + "universalify": "^2.0.0" 2153 + }, 2154 + "engines": { 2155 + "node": ">=10" 2156 + } 2157 + }, 2158 + "node_modules/electron-installer-debian/node_modules/yargs": { 2159 + "version": "16.2.0", 2160 + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 2161 + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 2162 + "dev": true, 2163 + "optional": true, 2164 + "dependencies": { 2165 + "cliui": "^7.0.2", 2166 + "escalade": "^3.1.1", 2167 + "get-caller-file": "^2.0.5", 2168 + "require-directory": "^2.1.1", 2169 + "string-width": "^4.2.0", 2170 + "y18n": "^5.0.5", 2171 + "yargs-parser": "^20.2.2" 2172 + }, 2173 + "engines": { 2174 + "node": ">=10" 2175 + } 2176 + }, 2177 + "node_modules/electron-installer-debian/node_modules/yargs-parser": { 2178 + "version": "20.2.9", 2179 + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", 2180 + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", 2181 + "dev": true, 2182 + "optional": true, 2183 + "engines": { 2184 + "node": ">=10" 2185 + } 2186 + }, 2187 + "node_modules/electron-installer-redhat": { 2188 + "version": "3.4.0", 2189 + "resolved": "https://registry.npmjs.org/electron-installer-redhat/-/electron-installer-redhat-3.4.0.tgz", 2190 + "integrity": "sha512-gEISr3U32Sgtj+fjxUAlSDo3wyGGq6OBx7rF5UdpIgbnpUvMN4W5uYb0ThpnAZ42VEJh/3aODQXHbFS4f5J3Iw==", 2191 + "dev": true, 2192 + "optional": true, 2193 + "os": [ 2194 + "darwin", 2195 + "linux" 2196 + ], 2197 + "dependencies": { 2198 + "@malept/cross-spawn-promise": "^1.0.0", 2199 + "debug": "^4.1.1", 2200 + "electron-installer-common": "^0.10.2", 2201 + "fs-extra": "^9.0.0", 2202 + "lodash": "^4.17.15", 2203 + "word-wrap": "^1.2.3", 2204 + "yargs": "^16.0.2" 2205 + }, 2206 + "bin": { 2207 + "electron-installer-redhat": "src/cli.js" 2208 + }, 2209 + "engines": { 2210 + "node": ">= 10.0.0" 2211 + } 2212 + }, 2213 + "node_modules/electron-installer-redhat/node_modules/@malept/cross-spawn-promise": { 2214 + "version": "1.1.1", 2215 + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", 2216 + "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", 2217 + "dev": true, 2218 + "funding": [ 2219 + { 2220 + "type": "individual", 2221 + "url": "https://github.com/sponsors/malept" 2222 + }, 2223 + { 2224 + "type": "tidelift", 2225 + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" 2226 + } 2227 + ], 2228 + "optional": true, 2229 + "dependencies": { 2230 + "cross-spawn": "^7.0.1" 2231 + }, 2232 + "engines": { 2233 + "node": ">= 10" 2234 + } 2235 + }, 2236 + "node_modules/electron-installer-redhat/node_modules/cliui": { 2237 + "version": "7.0.4", 2238 + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 2239 + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 2240 + "dev": true, 2241 + "optional": true, 2242 + "dependencies": { 2243 + "string-width": "^4.2.0", 2244 + "strip-ansi": "^6.0.0", 2245 + "wrap-ansi": "^7.0.0" 2246 + } 2247 + }, 2248 + "node_modules/electron-installer-redhat/node_modules/fs-extra": { 2249 + "version": "9.1.0", 2250 + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", 2251 + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", 2252 + "dev": true, 2253 + "optional": true, 2254 + "dependencies": { 2255 + "at-least-node": "^1.0.0", 2256 + "graceful-fs": "^4.2.0", 2257 + "jsonfile": "^6.0.1", 2258 + "universalify": "^2.0.0" 2259 + }, 2260 + "engines": { 2261 + "node": ">=10" 2262 + } 2263 + }, 2264 + "node_modules/electron-installer-redhat/node_modules/yargs": { 2265 + "version": "16.2.0", 2266 + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 2267 + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 2268 + "dev": true, 2269 + "optional": true, 2270 + "dependencies": { 2271 + "cliui": "^7.0.2", 2272 + "escalade": "^3.1.1", 2273 + "get-caller-file": "^2.0.5", 2274 + "require-directory": "^2.1.1", 2275 + "string-width": "^4.2.0", 2276 + "y18n": "^5.0.5", 2277 + "yargs-parser": "^20.2.2" 2278 + }, 2279 + "engines": { 2280 + "node": ">=10" 2281 + } 2282 + }, 2283 + "node_modules/electron-installer-redhat/node_modules/yargs-parser": { 2284 + "version": "20.2.9", 2285 + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", 2286 + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", 2287 + "dev": true, 2288 + "optional": true, 2289 + "engines": { 2290 + "node": ">=10" 2291 + } 2292 + }, 2293 + "node_modules/electron-squirrel-startup": { 2294 + "version": "1.0.1", 2295 + "resolved": "https://registry.npmjs.org/electron-squirrel-startup/-/electron-squirrel-startup-1.0.1.tgz", 2296 + "integrity": "sha512-sTfFIHGku+7PsHLJ7v0dRcZNkALrV+YEozINTW8X1nM//e5O3L+rfYuvSW00lmGHnYmUjARZulD8F2V8ISI9RA==", 2297 + "license": "Apache-2.0", 2298 + "dependencies": { 2299 + "debug": "^2.2.0" 2300 + } 2301 + }, 2302 + "node_modules/electron-squirrel-startup/node_modules/debug": { 2303 + "version": "2.6.9", 2304 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 2305 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 2306 + "dependencies": { 2307 + "ms": "2.0.0" 2308 + } 2309 + }, 2310 + "node_modules/electron-squirrel-startup/node_modules/ms": { 2311 + "version": "2.0.0", 2312 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2313 + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 2314 + }, 2315 + "node_modules/electron-winstaller": { 2316 + "version": "5.3.1", 2317 + "resolved": "https://registry.npmjs.org/electron-winstaller/-/electron-winstaller-5.3.1.tgz", 2318 + "integrity": "sha512-oM8BW3a8NEqG0XW+Vx3xywhk0DyDV4T0jT0zZfWt0IczNT3jHAAvQWBorF8osQDplSsCyXXyxrsrQ8cY0Slb/A==", 2319 + "dev": true, 2320 + "hasInstallScript": true, 2321 + "optional": true, 2322 + "dependencies": { 2323 + "@electron/asar": "^3.2.1", 2324 + "debug": "^4.1.1", 2325 + "fs-extra": "^7.0.1", 2326 + "lodash": "^4.17.21", 2327 + "temp": "^0.9.0" 2328 + }, 2329 + "engines": { 2330 + "node": ">=8.0.0" 2331 + }, 2332 + "optionalDependencies": { 2333 + "@electron/windows-sign": "^1.1.2" 2334 + } 2335 + }, 2336 + "node_modules/electron-winstaller/node_modules/fs-extra": { 2337 + "version": "7.0.1", 2338 + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", 2339 + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", 2340 + "dev": true, 2341 + "optional": true, 2342 + "dependencies": { 2343 + "graceful-fs": "^4.1.2", 2344 + "jsonfile": "^4.0.0", 2345 + "universalify": "^0.1.0" 2346 + }, 2347 + "engines": { 2348 + "node": ">=6 <7 || >=8" 2349 + } 2350 + }, 2351 + "node_modules/electron-winstaller/node_modules/jsonfile": { 2352 + "version": "4.0.0", 2353 + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 2354 + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", 2355 + "dev": true, 2356 + "optional": true, 2357 + "optionalDependencies": { 2358 + "graceful-fs": "^4.1.6" 2359 + } 2360 + }, 2361 + "node_modules/electron-winstaller/node_modules/universalify": { 2362 + "version": "0.1.2", 2363 + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 2364 + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 2365 + "dev": true, 2366 + "optional": true, 2367 + "engines": { 2368 + "node": ">= 4.0.0" 2369 + } 2370 + }, 2371 + "node_modules/emoji-regex": { 2372 + "version": "8.0.0", 2373 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 2374 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 2375 + "dev": true 2376 + }, 2377 + "node_modules/encoding": { 2378 + "version": "0.1.13", 2379 + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", 2380 + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", 2381 + "dev": true, 2382 + "optional": true, 2383 + "dependencies": { 2384 + "iconv-lite": "^0.6.2" 2385 + } 2386 + }, 2387 + "node_modules/end-of-stream": { 2388 + "version": "1.4.4", 2389 + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 2390 + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 2391 + "dev": true, 2392 + "dependencies": { 2393 + "once": "^1.4.0" 2394 + } 2395 + }, 2396 + "node_modules/env-paths": { 2397 + "version": "2.2.1", 2398 + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", 2399 + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", 2400 + "dev": true, 2401 + "engines": { 2402 + "node": ">=6" 2403 + } 2404 + }, 2405 + "node_modules/err-code": { 2406 + "version": "2.0.3", 2407 + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", 2408 + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", 2409 + "dev": true 2410 + }, 2411 + "node_modules/error-ex": { 2412 + "version": "1.3.2", 2413 + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 2414 + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 2415 + "dev": true, 2416 + "license": "MIT", 2417 + "dependencies": { 2418 + "is-arrayish": "^0.2.1" 2419 + } 2420 + }, 2421 + "node_modules/es6-error": { 2422 + "version": "4.1.1", 2423 + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", 2424 + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", 2425 + "dev": true, 2426 + "optional": true 2427 + }, 2428 + "node_modules/escalade": { 2429 + "version": "3.1.1", 2430 + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 2431 + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 2432 + "dev": true, 2433 + "engines": { 2434 + "node": ">=6" 2435 + } 2436 + }, 2437 + "node_modules/escape-string-regexp": { 2438 + "version": "4.0.0", 2439 + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 2440 + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 2441 + "dev": true, 2442 + "optional": true, 2443 + "engines": { 2444 + "node": ">=10" 2445 + }, 2446 + "funding": { 2447 + "url": "https://github.com/sponsors/sindresorhus" 2448 + } 2449 + }, 2450 + "node_modules/eventemitter3": { 2451 + "version": "5.0.1", 2452 + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", 2453 + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", 2454 + "dev": true, 2455 + "license": "MIT" 2456 + }, 2457 + "node_modules/execa": { 2458 + "version": "1.0.0", 2459 + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", 2460 + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", 2461 + "dev": true, 2462 + "license": "MIT", 2463 + "dependencies": { 2464 + "cross-spawn": "^6.0.0", 2465 + "get-stream": "^4.0.0", 2466 + "is-stream": "^1.1.0", 2467 + "npm-run-path": "^2.0.0", 2468 + "p-finally": "^1.0.0", 2469 + "signal-exit": "^3.0.0", 2470 + "strip-eof": "^1.0.0" 2471 + }, 2472 + "engines": { 2473 + "node": ">=6" 2474 + } 2475 + }, 2476 + "node_modules/execa/node_modules/cross-spawn": { 2477 + "version": "6.0.6", 2478 + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", 2479 + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", 2480 + "dev": true, 2481 + "license": "MIT", 2482 + "dependencies": { 2483 + "nice-try": "^1.0.4", 2484 + "path-key": "^2.0.1", 2485 + "semver": "^5.5.0", 2486 + "shebang-command": "^1.2.0", 2487 + "which": "^1.2.9" 2488 + }, 2489 + "engines": { 2490 + "node": ">=4.8" 2491 + } 2492 + }, 2493 + "node_modules/execa/node_modules/get-stream": { 2494 + "version": "4.1.0", 2495 + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 2496 + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 2497 + "dev": true, 2498 + "license": "MIT", 2499 + "dependencies": { 2500 + "pump": "^3.0.0" 2501 + }, 2502 + "engines": { 2503 + "node": ">=6" 2504 + } 2505 + }, 2506 + "node_modules/execa/node_modules/path-key": { 2507 + "version": "2.0.1", 2508 + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 2509 + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", 2510 + "dev": true, 2511 + "license": "MIT", 2512 + "engines": { 2513 + "node": ">=4" 2514 + } 2515 + }, 2516 + "node_modules/execa/node_modules/semver": { 2517 + "version": "5.7.2", 2518 + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", 2519 + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", 2520 + "dev": true, 2521 + "license": "ISC", 2522 + "bin": { 2523 + "semver": "bin/semver" 2524 + } 2525 + }, 2526 + "node_modules/execa/node_modules/shebang-command": { 2527 + "version": "1.2.0", 2528 + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 2529 + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", 2530 + "dev": true, 2531 + "license": "MIT", 2532 + "dependencies": { 2533 + "shebang-regex": "^1.0.0" 2534 + }, 2535 + "engines": { 2536 + "node": ">=0.10.0" 2537 + } 2538 + }, 2539 + "node_modules/execa/node_modules/shebang-regex": { 2540 + "version": "1.0.0", 2541 + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 2542 + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", 2543 + "dev": true, 2544 + "license": "MIT", 2545 + "engines": { 2546 + "node": ">=0.10.0" 2547 + } 2548 + }, 2549 + "node_modules/execa/node_modules/which": { 2550 + "version": "1.3.1", 2551 + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 2552 + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 2553 + "dev": true, 2554 + "license": "ISC", 2555 + "dependencies": { 2556 + "isexe": "^2.0.0" 2557 + }, 2558 + "bin": { 2559 + "which": "bin/which" 2560 + } 2561 + }, 2562 + "node_modules/exponential-backoff": { 2563 + "version": "3.1.1", 2564 + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", 2565 + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", 2566 + "dev": true 2567 + }, 2568 + "node_modules/extract-zip": { 2569 + "version": "2.0.1", 2570 + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", 2571 + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", 2572 + "dev": true, 2573 + "dependencies": { 2574 + "debug": "^4.1.1", 2575 + "get-stream": "^5.1.0", 2576 + "yauzl": "^2.10.0" 2577 + }, 2578 + "bin": { 2579 + "extract-zip": "cli.js" 2580 + }, 2581 + "engines": { 2582 + "node": ">= 10.17.0" 2583 + }, 2584 + "optionalDependencies": { 2585 + "@types/yauzl": "^2.9.1" 2586 + } 2587 + }, 2588 + "node_modules/fast-glob": { 2589 + "version": "3.3.3", 2590 + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", 2591 + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", 2592 + "dev": true, 2593 + "license": "MIT", 2594 + "dependencies": { 2595 + "@nodelib/fs.stat": "^2.0.2", 2596 + "@nodelib/fs.walk": "^1.2.3", 2597 + "glob-parent": "^5.1.2", 2598 + "merge2": "^1.3.0", 2599 + "micromatch": "^4.0.8" 2600 + }, 2601 + "engines": { 2602 + "node": ">=8.6.0" 2603 + } 2604 + }, 2605 + "node_modules/fastq": { 2606 + "version": "1.19.1", 2607 + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", 2608 + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", 2609 + "dev": true, 2610 + "license": "ISC", 2611 + "dependencies": { 2612 + "reusify": "^1.0.4" 2613 + } 2614 + }, 2615 + "node_modules/fd-slicer": { 2616 + "version": "1.1.0", 2617 + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 2618 + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", 2619 + "dev": true, 2620 + "dependencies": { 2621 + "pend": "~1.2.0" 2622 + } 2623 + }, 2624 + "node_modules/filename-reserved-regex": { 2625 + "version": "2.0.0", 2626 + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", 2627 + "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", 2628 + "dev": true, 2629 + "license": "MIT", 2630 + "engines": { 2631 + "node": ">=4" 2632 + } 2633 + }, 2634 + "node_modules/filenamify": { 2635 + "version": "4.3.0", 2636 + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", 2637 + "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", 2638 + "dev": true, 2639 + "license": "MIT", 2640 + "dependencies": { 2641 + "filename-reserved-regex": "^2.0.0", 2642 + "strip-outer": "^1.0.1", 2643 + "trim-repeated": "^1.0.0" 2644 + }, 2645 + "engines": { 2646 + "node": ">=8" 2647 + }, 2648 + "funding": { 2649 + "url": "https://github.com/sponsors/sindresorhus" 2650 + } 2651 + }, 2652 + "node_modules/fill-range": { 2653 + "version": "7.1.1", 2654 + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 2655 + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 2656 + "dev": true, 2657 + "license": "MIT", 2658 + "dependencies": { 2659 + "to-regex-range": "^5.0.1" 2660 + }, 2661 + "engines": { 2662 + "node": ">=8" 2663 + } 2664 + }, 2665 + "node_modules/find-up": { 2666 + "version": "5.0.0", 2667 + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 2668 + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 2669 + "dev": true, 2670 + "license": "MIT", 2671 + "dependencies": { 2672 + "locate-path": "^6.0.0", 2673 + "path-exists": "^4.0.0" 2674 + }, 2675 + "engines": { 2676 + "node": ">=10" 2677 + }, 2678 + "funding": { 2679 + "url": "https://github.com/sponsors/sindresorhus" 2680 + } 2681 + }, 2682 + "node_modules/flora-colossus": { 2683 + "version": "2.0.0", 2684 + "resolved": "https://registry.npmjs.org/flora-colossus/-/flora-colossus-2.0.0.tgz", 2685 + "integrity": "sha512-dz4HxH6pOvbUzZpZ/yXhafjbR2I8cenK5xL0KtBFb7U2ADsR+OwXifnxZjij/pZWF775uSCMzWVd+jDik2H2IA==", 2686 + "dev": true, 2687 + "license": "MIT", 2688 + "dependencies": { 2689 + "debug": "^4.3.4", 2690 + "fs-extra": "^10.1.0" 2691 + }, 2692 + "engines": { 2693 + "node": ">= 12" 2694 + } 2695 + }, 2696 + "node_modules/fs-extra": { 2697 + "version": "10.1.0", 2698 + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", 2699 + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", 2700 + "dev": true, 2701 + "dependencies": { 2702 + "graceful-fs": "^4.2.0", 2703 + "jsonfile": "^6.0.1", 2704 + "universalify": "^2.0.0" 2705 + }, 2706 + "engines": { 2707 + "node": ">=12" 2708 + } 2709 + }, 2710 + "node_modules/fs-minipass": { 2711 + "version": "2.1.0", 2712 + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", 2713 + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", 2714 + "dev": true, 2715 + "dependencies": { 2716 + "minipass": "^3.0.0" 2717 + }, 2718 + "engines": { 2719 + "node": ">= 8" 2720 + } 2721 + }, 2722 + "node_modules/fs.realpath": { 2723 + "version": "1.0.0", 2724 + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 2725 + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 2726 + "dev": true 2727 + }, 2728 + "node_modules/function-bind": { 2729 + "version": "1.1.2", 2730 + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 2731 + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 2732 + "dev": true, 2733 + "funding": { 2734 + "url": "https://github.com/sponsors/ljharb" 2735 + } 2736 + }, 2737 + "node_modules/galactus": { 2738 + "version": "1.0.0", 2739 + "resolved": "https://registry.npmjs.org/galactus/-/galactus-1.0.0.tgz", 2740 + "integrity": "sha512-R1fam6D4CyKQGNlvJne4dkNF+PvUUl7TAJInvTGa9fti9qAv95quQz29GXapA4d8Ec266mJJxFVh82M4GIIGDQ==", 2741 + "dev": true, 2742 + "license": "MIT", 2743 + "dependencies": { 2744 + "debug": "^4.3.4", 2745 + "flora-colossus": "^2.0.0", 2746 + "fs-extra": "^10.1.0" 2747 + }, 2748 + "engines": { 2749 + "node": ">= 12" 2750 + } 2751 + }, 2752 + "node_modules/gar": { 2753 + "version": "1.0.4", 2754 + "resolved": "https://registry.npmjs.org/gar/-/gar-1.0.4.tgz", 2755 + "integrity": "sha512-w4n9cPWyP7aHxKxYHFQMegj7WIAsL/YX/C4Bs5Rr8s1H9M1rNtRWRsw+ovYMkXDQ5S4ZbYHsHAPmevPjPgw44w==", 2756 + "dev": true, 2757 + "optional": true 2758 + }, 2759 + "node_modules/get-caller-file": { 2760 + "version": "2.0.5", 2761 + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 2762 + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 2763 + "dev": true, 2764 + "engines": { 2765 + "node": "6.* || 8.* || >= 10.*" 2766 + } 2767 + }, 2768 + "node_modules/get-folder-size": { 2769 + "version": "2.0.1", 2770 + "resolved": "https://registry.npmjs.org/get-folder-size/-/get-folder-size-2.0.1.tgz", 2771 + "integrity": "sha512-+CEb+GDCM7tkOS2wdMKTn9vU7DgnKUTuDlehkNJKNSovdCOVxs14OfKCk4cvSaR3za4gj+OBdl9opPN9xrJ0zA==", 2772 + "dev": true, 2773 + "optional": true, 2774 + "dependencies": { 2775 + "gar": "^1.0.4", 2776 + "tiny-each-async": "2.0.3" 2777 + }, 2778 + "bin": { 2779 + "get-folder-size": "bin/get-folder-size" 2780 + } 2781 + }, 2782 + "node_modules/get-intrinsic": { 2783 + "version": "1.2.2", 2784 + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", 2785 + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", 2786 + "dev": true, 2787 + "optional": true, 2788 + "dependencies": { 2789 + "function-bind": "^1.1.2", 2790 + "has-proto": "^1.0.1", 2791 + "has-symbols": "^1.0.3", 2792 + "hasown": "^2.0.0" 2793 + }, 2794 + "funding": { 2795 + "url": "https://github.com/sponsors/ljharb" 2796 + } 2797 + }, 2798 + "node_modules/get-package-info": { 2799 + "version": "1.0.0", 2800 + "resolved": "https://registry.npmjs.org/get-package-info/-/get-package-info-1.0.0.tgz", 2801 + "integrity": "sha512-SCbprXGAPdIhKAXiG+Mk6yeoFH61JlYunqdFQFHDtLjJlDjFf6x07dsS8acO+xWt52jpdVo49AlVDnUVK1sDNw==", 2802 + "dev": true, 2803 + "license": "MIT", 2804 + "dependencies": { 2805 + "bluebird": "^3.1.1", 2806 + "debug": "^2.2.0", 2807 + "lodash.get": "^4.0.0", 2808 + "read-pkg-up": "^2.0.0" 2809 + }, 2810 + "engines": { 2811 + "node": ">= 4.0" 2812 + } 2813 + }, 2814 + "node_modules/get-package-info/node_modules/debug": { 2815 + "version": "2.6.9", 2816 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 2817 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 2818 + "dev": true, 2819 + "license": "MIT", 2820 + "dependencies": { 2821 + "ms": "2.0.0" 2822 + } 2823 + }, 2824 + "node_modules/get-package-info/node_modules/ms": { 2825 + "version": "2.0.0", 2826 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2827 + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", 2828 + "dev": true, 2829 + "license": "MIT" 2830 + }, 2831 + "node_modules/get-stream": { 2832 + "version": "5.2.0", 2833 + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 2834 + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 2835 + "dev": true, 2836 + "dependencies": { 2837 + "pump": "^3.0.0" 2838 + }, 2839 + "engines": { 2840 + "node": ">=8" 2841 + }, 2842 + "funding": { 2843 + "url": "https://github.com/sponsors/sindresorhus" 2844 + } 2845 + }, 2846 + "node_modules/github-url-to-object": { 2847 + "version": "4.0.6", 2848 + "resolved": "https://registry.npmjs.org/github-url-to-object/-/github-url-to-object-4.0.6.tgz", 2849 + "integrity": "sha512-NaqbYHMUAlPcmWFdrAB7bcxrNIiiJWJe8s/2+iOc9vlcHlwHqSGrPk+Yi3nu6ebTwgsZEa7igz+NH2vEq3gYwQ==", 2850 + "dependencies": { 2851 + "is-url": "^1.1.0" 2852 + } 2853 + }, 2854 + "node_modules/glob": { 2855 + "version": "7.2.3", 2856 + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 2857 + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 2858 + "dev": true, 2859 + "dependencies": { 2860 + "fs.realpath": "^1.0.0", 2861 + "inflight": "^1.0.4", 2862 + "inherits": "2", 2863 + "minimatch": "^3.1.1", 2864 + "once": "^1.3.0", 2865 + "path-is-absolute": "^1.0.0" 2866 + }, 2867 + "engines": { 2868 + "node": "*" 2869 + }, 2870 + "funding": { 2871 + "url": "https://github.com/sponsors/isaacs" 2872 + } 2873 + }, 2874 + "node_modules/glob-parent": { 2875 + "version": "5.1.2", 2876 + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2877 + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2878 + "dev": true, 2879 + "license": "ISC", 2880 + "dependencies": { 2881 + "is-glob": "^4.0.1" 2882 + }, 2883 + "engines": { 2884 + "node": ">= 6" 2885 + } 2886 + }, 2887 + "node_modules/global-agent": { 2888 + "version": "3.0.0", 2889 + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", 2890 + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", 2891 + "dev": true, 2892 + "optional": true, 2893 + "dependencies": { 2894 + "boolean": "^3.0.1", 2895 + "es6-error": "^4.1.1", 2896 + "matcher": "^3.0.0", 2897 + "roarr": "^2.15.3", 2898 + "semver": "^7.3.2", 2899 + "serialize-error": "^7.0.1" 2900 + }, 2901 + "engines": { 2902 + "node": ">=10.0" 2903 + } 2904 + }, 2905 + "node_modules/global-agent/node_modules/serialize-error": { 2906 + "version": "7.0.1", 2907 + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", 2908 + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", 2909 + "dev": true, 2910 + "optional": true, 2911 + "dependencies": { 2912 + "type-fest": "^0.13.1" 2913 + }, 2914 + "engines": { 2915 + "node": ">=10" 2916 + }, 2917 + "funding": { 2918 + "url": "https://github.com/sponsors/sindresorhus" 2919 + } 2920 + }, 2921 + "node_modules/global-agent/node_modules/type-fest": { 2922 + "version": "0.13.1", 2923 + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", 2924 + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", 2925 + "dev": true, 2926 + "optional": true, 2927 + "engines": { 2928 + "node": ">=10" 2929 + }, 2930 + "funding": { 2931 + "url": "https://github.com/sponsors/sindresorhus" 2932 + } 2933 + }, 2934 + "node_modules/global-dirs": { 2935 + "version": "3.0.1", 2936 + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", 2937 + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", 2938 + "dev": true, 2939 + "license": "MIT", 2940 + "dependencies": { 2941 + "ini": "2.0.0" 2942 + }, 2943 + "engines": { 2944 + "node": ">=10" 2945 + }, 2946 + "funding": { 2947 + "url": "https://github.com/sponsors/sindresorhus" 2948 + } 2949 + }, 2950 + "node_modules/globalthis": { 2951 + "version": "1.0.3", 2952 + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", 2953 + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", 2954 + "dev": true, 2955 + "optional": true, 2956 + "dependencies": { 2957 + "define-properties": "^1.1.3" 2958 + }, 2959 + "engines": { 2960 + "node": ">= 0.4" 2961 + }, 2962 + "funding": { 2963 + "url": "https://github.com/sponsors/ljharb" 2964 + } 2965 + }, 2966 + "node_modules/gopd": { 2967 + "version": "1.0.1", 2968 + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", 2969 + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", 2970 + "dev": true, 2971 + "optional": true, 2972 + "dependencies": { 2973 + "get-intrinsic": "^1.1.3" 2974 + }, 2975 + "funding": { 2976 + "url": "https://github.com/sponsors/ljharb" 2977 + } 2978 + }, 2979 + "node_modules/got": { 2980 + "version": "11.8.6", 2981 + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", 2982 + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", 2983 + "dev": true, 2984 + "dependencies": { 2985 + "@sindresorhus/is": "^4.0.0", 2986 + "@szmarczak/http-timer": "^4.0.5", 2987 + "@types/cacheable-request": "^6.0.1", 2988 + "@types/responselike": "^1.0.0", 2989 + "cacheable-lookup": "^5.0.3", 2990 + "cacheable-request": "^7.0.2", 2991 + "decompress-response": "^6.0.0", 2992 + "http2-wrapper": "^1.0.0-beta.5.2", 2993 + "lowercase-keys": "^2.0.0", 2994 + "p-cancelable": "^2.0.0", 2995 + "responselike": "^2.0.0" 2996 + }, 2997 + "engines": { 2998 + "node": ">=10.19.0" 2999 + }, 3000 + "funding": { 3001 + "url": "https://github.com/sindresorhus/got?sponsor=1" 3002 + } 3003 + }, 3004 + "node_modules/graceful-fs": { 3005 + "version": "4.2.11", 3006 + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 3007 + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 3008 + "dev": true 3009 + }, 3010 + "node_modules/has-flag": { 3011 + "version": "4.0.0", 3012 + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 3013 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 3014 + "dev": true, 3015 + "engines": { 3016 + "node": ">=8" 3017 + } 3018 + }, 3019 + "node_modules/has-property-descriptors": { 3020 + "version": "1.0.1", 3021 + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", 3022 + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", 3023 + "dev": true, 3024 + "optional": true, 3025 + "dependencies": { 3026 + "get-intrinsic": "^1.2.2" 3027 + }, 3028 + "funding": { 3029 + "url": "https://github.com/sponsors/ljharb" 3030 + } 3031 + }, 3032 + "node_modules/has-proto": { 3033 + "version": "1.0.1", 3034 + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", 3035 + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", 3036 + "dev": true, 3037 + "optional": true, 3038 + "engines": { 3039 + "node": ">= 0.4" 3040 + }, 3041 + "funding": { 3042 + "url": "https://github.com/sponsors/ljharb" 3043 + } 3044 + }, 3045 + "node_modules/has-symbols": { 3046 + "version": "1.0.3", 3047 + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 3048 + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 3049 + "dev": true, 3050 + "optional": true, 3051 + "engines": { 3052 + "node": ">= 0.4" 3053 + }, 3054 + "funding": { 3055 + "url": "https://github.com/sponsors/ljharb" 3056 + } 3057 + }, 3058 + "node_modules/hasown": { 3059 + "version": "2.0.2", 3060 + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 3061 + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 3062 + "dev": true, 3063 + "license": "MIT", 3064 + "dependencies": { 3065 + "function-bind": "^1.1.2" 3066 + }, 3067 + "engines": { 3068 + "node": ">= 0.4" 3069 + } 3070 + }, 3071 + "node_modules/hosted-git-info": { 3072 + "version": "2.8.9", 3073 + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", 3074 + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", 3075 + "dev": true, 3076 + "license": "ISC" 3077 + }, 3078 + "node_modules/http-cache-semantics": { 3079 + "version": "4.1.1", 3080 + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", 3081 + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", 3082 + "dev": true 3083 + }, 3084 + "node_modules/http-proxy-agent": { 3085 + "version": "5.0.0", 3086 + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", 3087 + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", 3088 + "dev": true, 3089 + "dependencies": { 3090 + "@tootallnate/once": "2", 3091 + "agent-base": "6", 3092 + "debug": "4" 3093 + }, 3094 + "engines": { 3095 + "node": ">= 6" 3096 + } 3097 + }, 3098 + "node_modules/http2-wrapper": { 3099 + "version": "1.0.3", 3100 + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", 3101 + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", 3102 + "dev": true, 3103 + "dependencies": { 3104 + "quick-lru": "^5.1.1", 3105 + "resolve-alpn": "^1.0.0" 3106 + }, 3107 + "engines": { 3108 + "node": ">=10.19.0" 3109 + } 3110 + }, 3111 + "node_modules/https-proxy-agent": { 3112 + "version": "5.0.1", 3113 + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", 3114 + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", 3115 + "dev": true, 3116 + "dependencies": { 3117 + "agent-base": "6", 3118 + "debug": "4" 3119 + }, 3120 + "engines": { 3121 + "node": ">= 6" 3122 + } 3123 + }, 3124 + "node_modules/humanize-ms": { 3125 + "version": "1.2.1", 3126 + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", 3127 + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", 3128 + "dev": true, 3129 + "dependencies": { 3130 + "ms": "^2.0.0" 3131 + } 3132 + }, 3133 + "node_modules/iconv-lite": { 3134 + "version": "0.6.3", 3135 + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", 3136 + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 3137 + "dev": true, 3138 + "optional": true, 3139 + "dependencies": { 3140 + "safer-buffer": ">= 2.1.2 < 3.0.0" 3141 + }, 3142 + "engines": { 3143 + "node": ">=0.10.0" 3144 + } 3145 + }, 3146 + "node_modules/ieee754": { 3147 + "version": "1.2.1", 3148 + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 3149 + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 3150 + "dev": true, 3151 + "funding": [ 3152 + { 3153 + "type": "github", 3154 + "url": "https://github.com/sponsors/feross" 3155 + }, 3156 + { 3157 + "type": "patreon", 3158 + "url": "https://www.patreon.com/feross" 3159 + }, 3160 + { 3161 + "type": "consulting", 3162 + "url": "https://feross.org/support" 3163 + } 3164 + ] 3165 + }, 3166 + "node_modules/imurmurhash": { 3167 + "version": "0.1.4", 3168 + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 3169 + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 3170 + "dev": true, 3171 + "engines": { 3172 + "node": ">=0.8.19" 3173 + } 3174 + }, 3175 + "node_modules/indent-string": { 3176 + "version": "4.0.0", 3177 + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", 3178 + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", 3179 + "dev": true, 3180 + "engines": { 3181 + "node": ">=8" 3182 + } 3183 + }, 3184 + "node_modules/infer-owner": { 3185 + "version": "1.0.4", 3186 + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", 3187 + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", 3188 + "dev": true 3189 + }, 3190 + "node_modules/inflight": { 3191 + "version": "1.0.6", 3192 + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 3193 + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 3194 + "dev": true, 3195 + "dependencies": { 3196 + "once": "^1.3.0", 3197 + "wrappy": "1" 3198 + } 3199 + }, 3200 + "node_modules/inherits": { 3201 + "version": "2.0.4", 3202 + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 3203 + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 3204 + "dev": true 3205 + }, 3206 + "node_modules/ini": { 3207 + "version": "2.0.0", 3208 + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", 3209 + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", 3210 + "dev": true, 3211 + "license": "ISC", 3212 + "engines": { 3213 + "node": ">=10" 3214 + } 3215 + }, 3216 + "node_modules/interpret": { 3217 + "version": "3.1.1", 3218 + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", 3219 + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", 3220 + "dev": true, 3221 + "license": "MIT", 3222 + "engines": { 3223 + "node": ">=10.13.0" 3224 + } 3225 + }, 3226 + "node_modules/ip": { 3227 + "version": "2.0.1", 3228 + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", 3229 + "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==", 3230 + "dev": true 3231 + }, 3232 + "node_modules/is-arrayish": { 3233 + "version": "0.2.1", 3234 + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 3235 + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", 3236 + "dev": true, 3237 + "license": "MIT" 3238 + }, 3239 + "node_modules/is-core-module": { 3240 + "version": "2.16.1", 3241 + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", 3242 + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", 3243 + "dev": true, 3244 + "license": "MIT", 3245 + "dependencies": { 3246 + "hasown": "^2.0.2" 3247 + }, 3248 + "engines": { 3249 + "node": ">= 0.4" 3250 + }, 3251 + "funding": { 3252 + "url": "https://github.com/sponsors/ljharb" 3253 + } 3254 + }, 3255 + "node_modules/is-extglob": { 3256 + "version": "2.1.1", 3257 + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 3258 + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 3259 + "dev": true, 3260 + "license": "MIT", 3261 + "engines": { 3262 + "node": ">=0.10.0" 3263 + } 3264 + }, 3265 + "node_modules/is-fullwidth-code-point": { 3266 + "version": "3.0.0", 3267 + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 3268 + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 3269 + "dev": true, 3270 + "engines": { 3271 + "node": ">=8" 3272 + } 3273 + }, 3274 + "node_modules/is-glob": { 3275 + "version": "4.0.3", 3276 + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 3277 + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 3278 + "dev": true, 3279 + "license": "MIT", 3280 + "dependencies": { 3281 + "is-extglob": "^2.1.1" 3282 + }, 3283 + "engines": { 3284 + "node": ">=0.10.0" 3285 + } 3286 + }, 3287 + "node_modules/is-interactive": { 3288 + "version": "1.0.0", 3289 + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", 3290 + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", 3291 + "dev": true, 3292 + "engines": { 3293 + "node": ">=8" 3294 + } 3295 + }, 3296 + "node_modules/is-lambda": { 3297 + "version": "1.0.1", 3298 + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", 3299 + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", 3300 + "dev": true 3301 + }, 3302 + "node_modules/is-number": { 3303 + "version": "7.0.0", 3304 + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 3305 + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 3306 + "dev": true, 3307 + "license": "MIT", 3308 + "engines": { 3309 + "node": ">=0.12.0" 3310 + } 3311 + }, 3312 + "node_modules/is-stream": { 3313 + "version": "1.1.0", 3314 + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 3315 + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", 3316 + "dev": true, 3317 + "license": "MIT", 3318 + "engines": { 3319 + "node": ">=0.10.0" 3320 + } 3321 + }, 3322 + "node_modules/is-unicode-supported": { 3323 + "version": "0.1.0", 3324 + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 3325 + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 3326 + "dev": true, 3327 + "engines": { 3328 + "node": ">=10" 3329 + }, 3330 + "funding": { 3331 + "url": "https://github.com/sponsors/sindresorhus" 3332 + } 3333 + }, 3334 + "node_modules/is-url": { 3335 + "version": "1.2.4", 3336 + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", 3337 + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" 3338 + }, 3339 + "node_modules/isbinaryfile": { 3340 + "version": "4.0.10", 3341 + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", 3342 + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", 3343 + "dev": true, 3344 + "license": "MIT", 3345 + "engines": { 3346 + "node": ">= 8.0.0" 3347 + }, 3348 + "funding": { 3349 + "url": "https://github.com/sponsors/gjtorikian/" 3350 + } 3351 + }, 3352 + "node_modules/isexe": { 3353 + "version": "2.0.0", 3354 + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 3355 + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 3356 + "dev": true 3357 + }, 3358 + "node_modules/json-buffer": { 3359 + "version": "3.0.1", 3360 + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 3361 + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 3362 + "dev": true 3363 + }, 3364 + "node_modules/json-stringify-safe": { 3365 + "version": "5.0.1", 3366 + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 3367 + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", 3368 + "dev": true, 3369 + "optional": true 3370 + }, 3371 + "node_modules/jsonfile": { 3372 + "version": "6.1.0", 3373 + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 3374 + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 3375 + "dev": true, 3376 + "dependencies": { 3377 + "universalify": "^2.0.0" 3378 + }, 3379 + "optionalDependencies": { 3380 + "graceful-fs": "^4.1.6" 3381 + } 3382 + }, 3383 + "node_modules/junk": { 3384 + "version": "3.1.0", 3385 + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", 3386 + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", 3387 + "dev": true, 3388 + "license": "MIT", 3389 + "engines": { 3390 + "node": ">=8" 3391 + } 3392 + }, 3393 + "node_modules/keyv": { 3394 + "version": "4.5.4", 3395 + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 3396 + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 3397 + "dev": true, 3398 + "dependencies": { 3399 + "json-buffer": "3.0.1" 3400 + } 3401 + }, 3402 + "node_modules/lil-gui": { 3403 + "version": "0.19.2", 3404 + "resolved": "https://registry.npmjs.org/lil-gui/-/lil-gui-0.19.2.tgz", 3405 + "integrity": "sha512-nU8j4ND702ouGfQZoaTN4dfXxacvGOAVK0DtmZBVcUYUAeYQXLQAjAN50igMHiba3T5jZyKEjXZU+Ntm1Qs6ZQ==" 3406 + }, 3407 + "node_modules/listr2": { 3408 + "version": "7.0.2", 3409 + "resolved": "https://registry.npmjs.org/listr2/-/listr2-7.0.2.tgz", 3410 + "integrity": "sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==", 3411 + "dev": true, 3412 + "license": "MIT", 3413 + "dependencies": { 3414 + "cli-truncate": "^3.1.0", 3415 + "colorette": "^2.0.20", 3416 + "eventemitter3": "^5.0.1", 3417 + "log-update": "^5.0.1", 3418 + "rfdc": "^1.3.0", 3419 + "wrap-ansi": "^8.1.0" 3420 + }, 3421 + "engines": { 3422 + "node": ">=16.0.0" 3423 + } 3424 + }, 3425 + "node_modules/listr2/node_modules/ansi-regex": { 3426 + "version": "6.1.0", 3427 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 3428 + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 3429 + "dev": true, 3430 + "license": "MIT", 3431 + "engines": { 3432 + "node": ">=12" 3433 + }, 3434 + "funding": { 3435 + "url": "https://github.com/chalk/ansi-regex?sponsor=1" 3436 + } 3437 + }, 3438 + "node_modules/listr2/node_modules/ansi-styles": { 3439 + "version": "6.2.1", 3440 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 3441 + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 3442 + "dev": true, 3443 + "license": "MIT", 3444 + "engines": { 3445 + "node": ">=12" 3446 + }, 3447 + "funding": { 3448 + "url": "https://github.com/chalk/ansi-styles?sponsor=1" 3449 + } 3450 + }, 3451 + "node_modules/listr2/node_modules/emoji-regex": { 3452 + "version": "9.2.2", 3453 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 3454 + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 3455 + "dev": true, 3456 + "license": "MIT" 3457 + }, 3458 + "node_modules/listr2/node_modules/string-width": { 3459 + "version": "5.1.2", 3460 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 3461 + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 3462 + "dev": true, 3463 + "license": "MIT", 3464 + "dependencies": { 3465 + "eastasianwidth": "^0.2.0", 3466 + "emoji-regex": "^9.2.2", 3467 + "strip-ansi": "^7.0.1" 3468 + }, 3469 + "engines": { 3470 + "node": ">=12" 3471 + }, 3472 + "funding": { 3473 + "url": "https://github.com/sponsors/sindresorhus" 3474 + } 3475 + }, 3476 + "node_modules/listr2/node_modules/strip-ansi": { 3477 + "version": "7.1.0", 3478 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 3479 + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 3480 + "dev": true, 3481 + "license": "MIT", 3482 + "dependencies": { 3483 + "ansi-regex": "^6.0.1" 3484 + }, 3485 + "engines": { 3486 + "node": ">=12" 3487 + }, 3488 + "funding": { 3489 + "url": "https://github.com/chalk/strip-ansi?sponsor=1" 3490 + } 3491 + }, 3492 + "node_modules/listr2/node_modules/wrap-ansi": { 3493 + "version": "8.1.0", 3494 + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 3495 + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 3496 + "dev": true, 3497 + "license": "MIT", 3498 + "dependencies": { 3499 + "ansi-styles": "^6.1.0", 3500 + "string-width": "^5.0.1", 3501 + "strip-ansi": "^7.0.1" 3502 + }, 3503 + "engines": { 3504 + "node": ">=12" 3505 + }, 3506 + "funding": { 3507 + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 3508 + } 3509 + }, 3510 + "node_modules/load-json-file": { 3511 + "version": "2.0.0", 3512 + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", 3513 + "integrity": "sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==", 3514 + "dev": true, 3515 + "license": "MIT", 3516 + "dependencies": { 3517 + "graceful-fs": "^4.1.2", 3518 + "parse-json": "^2.2.0", 3519 + "pify": "^2.0.0", 3520 + "strip-bom": "^3.0.0" 3521 + }, 3522 + "engines": { 3523 + "node": ">=4" 3524 + } 3525 + }, 3526 + "node_modules/locate-path": { 3527 + "version": "6.0.0", 3528 + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 3529 + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 3530 + "dev": true, 3531 + "license": "MIT", 3532 + "dependencies": { 3533 + "p-locate": "^5.0.0" 3534 + }, 3535 + "engines": { 3536 + "node": ">=10" 3537 + }, 3538 + "funding": { 3539 + "url": "https://github.com/sponsors/sindresorhus" 3540 + } 3541 + }, 3542 + "node_modules/lodash": { 3543 + "version": "4.17.21", 3544 + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 3545 + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 3546 + "dev": true 3547 + }, 3548 + "node_modules/lodash.get": { 3549 + "version": "4.4.2", 3550 + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", 3551 + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", 3552 + "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", 3553 + "dev": true, 3554 + "license": "MIT" 3555 + }, 3556 + "node_modules/log-symbols": { 3557 + "version": "4.1.0", 3558 + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", 3559 + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 3560 + "dev": true, 3561 + "dependencies": { 3562 + "chalk": "^4.1.0", 3563 + "is-unicode-supported": "^0.1.0" 3564 + }, 3565 + "engines": { 3566 + "node": ">=10" 3567 + }, 3568 + "funding": { 3569 + "url": "https://github.com/sponsors/sindresorhus" 3570 + } 3571 + }, 3572 + "node_modules/log-update": { 3573 + "version": "5.0.1", 3574 + "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", 3575 + "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", 3576 + "dev": true, 3577 + "license": "MIT", 3578 + "dependencies": { 3579 + "ansi-escapes": "^5.0.0", 3580 + "cli-cursor": "^4.0.0", 3581 + "slice-ansi": "^5.0.0", 3582 + "strip-ansi": "^7.0.1", 3583 + "wrap-ansi": "^8.0.1" 3584 + }, 3585 + "engines": { 3586 + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 3587 + }, 3588 + "funding": { 3589 + "url": "https://github.com/sponsors/sindresorhus" 3590 + } 3591 + }, 3592 + "node_modules/log-update/node_modules/ansi-regex": { 3593 + "version": "6.1.0", 3594 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 3595 + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 3596 + "dev": true, 3597 + "license": "MIT", 3598 + "engines": { 3599 + "node": ">=12" 3600 + }, 3601 + "funding": { 3602 + "url": "https://github.com/chalk/ansi-regex?sponsor=1" 3603 + } 3604 + }, 3605 + "node_modules/log-update/node_modules/ansi-styles": { 3606 + "version": "6.2.1", 3607 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 3608 + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 3609 + "dev": true, 3610 + "license": "MIT", 3611 + "engines": { 3612 + "node": ">=12" 3613 + }, 3614 + "funding": { 3615 + "url": "https://github.com/chalk/ansi-styles?sponsor=1" 3616 + } 3617 + }, 3618 + "node_modules/log-update/node_modules/cli-cursor": { 3619 + "version": "4.0.0", 3620 + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", 3621 + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", 3622 + "dev": true, 3623 + "license": "MIT", 3624 + "dependencies": { 3625 + "restore-cursor": "^4.0.0" 3626 + }, 3627 + "engines": { 3628 + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 3629 + }, 3630 + "funding": { 3631 + "url": "https://github.com/sponsors/sindresorhus" 3632 + } 3633 + }, 3634 + "node_modules/log-update/node_modules/emoji-regex": { 3635 + "version": "9.2.2", 3636 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 3637 + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 3638 + "dev": true, 3639 + "license": "MIT" 3640 + }, 3641 + "node_modules/log-update/node_modules/restore-cursor": { 3642 + "version": "4.0.0", 3643 + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", 3644 + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", 3645 + "dev": true, 3646 + "license": "MIT", 3647 + "dependencies": { 3648 + "onetime": "^5.1.0", 3649 + "signal-exit": "^3.0.2" 3650 + }, 3651 + "engines": { 3652 + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 3653 + }, 3654 + "funding": { 3655 + "url": "https://github.com/sponsors/sindresorhus" 3656 + } 3657 + }, 3658 + "node_modules/log-update/node_modules/string-width": { 3659 + "version": "5.1.2", 3660 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 3661 + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 3662 + "dev": true, 3663 + "license": "MIT", 3664 + "dependencies": { 3665 + "eastasianwidth": "^0.2.0", 3666 + "emoji-regex": "^9.2.2", 3667 + "strip-ansi": "^7.0.1" 3668 + }, 3669 + "engines": { 3670 + "node": ">=12" 3671 + }, 3672 + "funding": { 3673 + "url": "https://github.com/sponsors/sindresorhus" 3674 + } 3675 + }, 3676 + "node_modules/log-update/node_modules/strip-ansi": { 3677 + "version": "7.1.0", 3678 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 3679 + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 3680 + "dev": true, 3681 + "license": "MIT", 3682 + "dependencies": { 3683 + "ansi-regex": "^6.0.1" 3684 + }, 3685 + "engines": { 3686 + "node": ">=12" 3687 + }, 3688 + "funding": { 3689 + "url": "https://github.com/chalk/strip-ansi?sponsor=1" 3690 + } 3691 + }, 3692 + "node_modules/log-update/node_modules/wrap-ansi": { 3693 + "version": "8.1.0", 3694 + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 3695 + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 3696 + "dev": true, 3697 + "license": "MIT", 3698 + "dependencies": { 3699 + "ansi-styles": "^6.1.0", 3700 + "string-width": "^5.0.1", 3701 + "strip-ansi": "^7.0.1" 3702 + }, 3703 + "engines": { 3704 + "node": ">=12" 3705 + }, 3706 + "funding": { 3707 + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 3708 + } 3709 + }, 3710 + "node_modules/lowercase-keys": { 3711 + "version": "2.0.0", 3712 + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 3713 + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 3714 + "dev": true, 3715 + "engines": { 3716 + "node": ">=8" 3717 + } 3718 + }, 3719 + "node_modules/lru-cache": { 3720 + "version": "7.18.3", 3721 + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", 3722 + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", 3723 + "dev": true, 3724 + "engines": { 3725 + "node": ">=12" 3726 + } 3727 + }, 3728 + "node_modules/make-fetch-happen": { 3729 + "version": "10.2.1", 3730 + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", 3731 + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", 3732 + "dev": true, 3733 + "dependencies": { 3734 + "agentkeepalive": "^4.2.1", 3735 + "cacache": "^16.1.0", 3736 + "http-cache-semantics": "^4.1.0", 3737 + "http-proxy-agent": "^5.0.0", 3738 + "https-proxy-agent": "^5.0.0", 3739 + "is-lambda": "^1.0.1", 3740 + "lru-cache": "^7.7.1", 3741 + "minipass": "^3.1.6", 3742 + "minipass-collect": "^1.0.2", 3743 + "minipass-fetch": "^2.0.3", 3744 + "minipass-flush": "^1.0.5", 3745 + "minipass-pipeline": "^1.2.4", 3746 + "negotiator": "^0.6.3", 3747 + "promise-retry": "^2.0.1", 3748 + "socks-proxy-agent": "^7.0.0", 3749 + "ssri": "^9.0.0" 3750 + }, 3751 + "engines": { 3752 + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 3753 + } 3754 + }, 3755 + "node_modules/map-age-cleaner": { 3756 + "version": "0.1.3", 3757 + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", 3758 + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", 3759 + "dev": true, 3760 + "license": "MIT", 3761 + "dependencies": { 3762 + "p-defer": "^1.0.0" 3763 + }, 3764 + "engines": { 3765 + "node": ">=6" 3766 + } 3767 + }, 3768 + "node_modules/matcher": { 3769 + "version": "3.0.0", 3770 + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", 3771 + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", 3772 + "dev": true, 3773 + "optional": true, 3774 + "dependencies": { 3775 + "escape-string-regexp": "^4.0.0" 3776 + }, 3777 + "engines": { 3778 + "node": ">=10" 3779 + } 3780 + }, 3781 + "node_modules/mem": { 3782 + "version": "4.3.0", 3783 + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", 3784 + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", 3785 + "dev": true, 3786 + "license": "MIT", 3787 + "dependencies": { 3788 + "map-age-cleaner": "^0.1.1", 3789 + "mimic-fn": "^2.0.0", 3790 + "p-is-promise": "^2.0.0" 3791 + }, 3792 + "engines": { 3793 + "node": ">=6" 3794 + } 3795 + }, 3796 + "node_modules/mem/node_modules/mimic-fn": { 3797 + "version": "2.1.0", 3798 + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 3799 + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 3800 + "dev": true, 3801 + "license": "MIT", 3802 + "engines": { 3803 + "node": ">=6" 3804 + } 3805 + }, 3806 + "node_modules/merge2": { 3807 + "version": "1.4.1", 3808 + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 3809 + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 3810 + "dev": true, 3811 + "license": "MIT", 3812 + "engines": { 3813 + "node": ">= 8" 3814 + } 3815 + }, 3816 + "node_modules/micromatch": { 3817 + "version": "4.0.8", 3818 + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", 3819 + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", 3820 + "dev": true, 3821 + "license": "MIT", 3822 + "dependencies": { 3823 + "braces": "^3.0.3", 3824 + "picomatch": "^2.3.1" 3825 + }, 3826 + "engines": { 3827 + "node": ">=8.6" 3828 + } 3829 + }, 3830 + "node_modules/mimic-response": { 3831 + "version": "1.0.1", 3832 + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 3833 + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 3834 + "dev": true, 3835 + "engines": { 3836 + "node": ">=4" 3837 + } 3838 + }, 3839 + "node_modules/minimatch": { 3840 + "version": "3.1.2", 3841 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 3842 + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 3843 + "dev": true, 3844 + "dependencies": { 3845 + "brace-expansion": "^1.1.7" 3846 + }, 3847 + "engines": { 3848 + "node": "*" 3849 + } 3850 + }, 3851 + "node_modules/minimist": { 3852 + "version": "1.2.8", 3853 + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 3854 + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 3855 + "dev": true, 3856 + "funding": { 3857 + "url": "https://github.com/sponsors/ljharb" 3858 + } 3859 + }, 3860 + "node_modules/minipass": { 3861 + "version": "3.3.6", 3862 + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", 3863 + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", 3864 + "dev": true, 3865 + "dependencies": { 3866 + "yallist": "^4.0.0" 3867 + }, 3868 + "engines": { 3869 + "node": ">=8" 3870 + } 3871 + }, 3872 + "node_modules/minipass-collect": { 3873 + "version": "1.0.2", 3874 + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", 3875 + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", 3876 + "dev": true, 3877 + "dependencies": { 3878 + "minipass": "^3.0.0" 3879 + }, 3880 + "engines": { 3881 + "node": ">= 8" 3882 + } 3883 + }, 3884 + "node_modules/minipass-fetch": { 3885 + "version": "2.1.2", 3886 + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", 3887 + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", 3888 + "dev": true, 3889 + "dependencies": { 3890 + "minipass": "^3.1.6", 3891 + "minipass-sized": "^1.0.3", 3892 + "minizlib": "^2.1.2" 3893 + }, 3894 + "engines": { 3895 + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 3896 + }, 3897 + "optionalDependencies": { 3898 + "encoding": "^0.1.13" 3899 + } 3900 + }, 3901 + "node_modules/minipass-flush": { 3902 + "version": "1.0.5", 3903 + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", 3904 + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", 3905 + "dev": true, 3906 + "dependencies": { 3907 + "minipass": "^3.0.0" 3908 + }, 3909 + "engines": { 3910 + "node": ">= 8" 3911 + } 3912 + }, 3913 + "node_modules/minipass-pipeline": { 3914 + "version": "1.2.4", 3915 + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", 3916 + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", 3917 + "dev": true, 3918 + "dependencies": { 3919 + "minipass": "^3.0.0" 3920 + }, 3921 + "engines": { 3922 + "node": ">=8" 3923 + } 3924 + }, 3925 + "node_modules/minipass-sized": { 3926 + "version": "1.0.3", 3927 + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", 3928 + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", 3929 + "dev": true, 3930 + "dependencies": { 3931 + "minipass": "^3.0.0" 3932 + }, 3933 + "engines": { 3934 + "node": ">=8" 3935 + } 3936 + }, 3937 + "node_modules/minizlib": { 3938 + "version": "2.1.2", 3939 + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", 3940 + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", 3941 + "dev": true, 3942 + "dependencies": { 3943 + "minipass": "^3.0.0", 3944 + "yallist": "^4.0.0" 3945 + }, 3946 + "engines": { 3947 + "node": ">= 8" 3948 + } 3949 + }, 3950 + "node_modules/mkdirp": { 3951 + "version": "1.0.4", 3952 + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", 3953 + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", 3954 + "dev": true, 3955 + "bin": { 3956 + "mkdirp": "bin/cmd.js" 3957 + }, 3958 + "engines": { 3959 + "node": ">=10" 3960 + } 3961 + }, 3962 + "node_modules/ms": { 3963 + "version": "2.1.2", 3964 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 3965 + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 3966 + }, 3967 + "node_modules/negotiator": { 3968 + "version": "0.6.3", 3969 + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 3970 + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 3971 + "dev": true, 3972 + "engines": { 3973 + "node": ">= 0.6" 3974 + } 3975 + }, 3976 + "node_modules/nice-try": { 3977 + "version": "1.0.5", 3978 + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 3979 + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", 3980 + "dev": true, 3981 + "license": "MIT" 3982 + }, 3983 + "node_modules/node-abi": { 3984 + "version": "3.51.0", 3985 + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.51.0.tgz", 3986 + "integrity": "sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==", 3987 + "dev": true, 3988 + "dependencies": { 3989 + "semver": "^7.3.5" 3990 + }, 3991 + "engines": { 3992 + "node": ">=10" 3993 + } 3994 + }, 3995 + "node_modules/node-fetch": { 3996 + "version": "2.7.0", 3997 + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", 3998 + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", 3999 + "dev": true, 4000 + "license": "MIT", 4001 + "dependencies": { 4002 + "whatwg-url": "^5.0.0" 4003 + }, 4004 + "engines": { 4005 + "node": "4.x || >=6.0.0" 4006 + }, 4007 + "peerDependencies": { 4008 + "encoding": "^0.1.0" 4009 + }, 4010 + "peerDependenciesMeta": { 4011 + "encoding": { 4012 + "optional": true 4013 + } 4014 + } 4015 + }, 4016 + "node_modules/nopt": { 4017 + "version": "6.0.0", 4018 + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", 4019 + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", 4020 + "dev": true, 4021 + "dependencies": { 4022 + "abbrev": "^1.0.0" 4023 + }, 4024 + "bin": { 4025 + "nopt": "bin/nopt.js" 4026 + }, 4027 + "engines": { 4028 + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 4029 + } 4030 + }, 4031 + "node_modules/normalize-package-data": { 4032 + "version": "2.5.0", 4033 + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", 4034 + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", 4035 + "dev": true, 4036 + "license": "BSD-2-Clause", 4037 + "dependencies": { 4038 + "hosted-git-info": "^2.1.4", 4039 + "resolve": "^1.10.0", 4040 + "semver": "2 || 3 || 4 || 5", 4041 + "validate-npm-package-license": "^3.0.1" 4042 + } 4043 + }, 4044 + "node_modules/normalize-package-data/node_modules/semver": { 4045 + "version": "5.7.2", 4046 + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", 4047 + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", 4048 + "dev": true, 4049 + "license": "ISC", 4050 + "bin": { 4051 + "semver": "bin/semver" 4052 + } 4053 + }, 4054 + "node_modules/normalize-url": { 4055 + "version": "6.1.0", 4056 + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", 4057 + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", 4058 + "dev": true, 4059 + "engines": { 4060 + "node": ">=10" 4061 + }, 4062 + "funding": { 4063 + "url": "https://github.com/sponsors/sindresorhus" 4064 + } 4065 + }, 4066 + "node_modules/npm-run-path": { 4067 + "version": "2.0.2", 4068 + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", 4069 + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", 4070 + "dev": true, 4071 + "license": "MIT", 4072 + "dependencies": { 4073 + "path-key": "^2.0.0" 4074 + }, 4075 + "engines": { 4076 + "node": ">=4" 4077 + } 4078 + }, 4079 + "node_modules/npm-run-path/node_modules/path-key": { 4080 + "version": "2.0.1", 4081 + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 4082 + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", 4083 + "dev": true, 4084 + "license": "MIT", 4085 + "engines": { 4086 + "node": ">=4" 4087 + } 4088 + }, 4089 + "node_modules/object-keys": { 4090 + "version": "1.1.1", 4091 + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 4092 + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 4093 + "dev": true, 4094 + "optional": true, 4095 + "engines": { 4096 + "node": ">= 0.4" 4097 + } 4098 + }, 4099 + "node_modules/once": { 4100 + "version": "1.4.0", 4101 + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 4102 + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 4103 + "dev": true, 4104 + "dependencies": { 4105 + "wrappy": "1" 4106 + } 4107 + }, 4108 + "node_modules/onetime": { 4109 + "version": "5.1.2", 4110 + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 4111 + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 4112 + "dev": true, 4113 + "dependencies": { 4114 + "mimic-fn": "^2.1.0" 4115 + }, 4116 + "engines": { 4117 + "node": ">=6" 4118 + }, 4119 + "funding": { 4120 + "url": "https://github.com/sponsors/sindresorhus" 4121 + } 4122 + }, 4123 + "node_modules/onetime/node_modules/mimic-fn": { 4124 + "version": "2.1.0", 4125 + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 4126 + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 4127 + "dev": true, 4128 + "engines": { 4129 + "node": ">=6" 4130 + } 4131 + }, 4132 + "node_modules/ora": { 4133 + "version": "5.4.1", 4134 + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", 4135 + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", 4136 + "dev": true, 4137 + "dependencies": { 4138 + "bl": "^4.1.0", 4139 + "chalk": "^4.1.0", 4140 + "cli-cursor": "^3.1.0", 4141 + "cli-spinners": "^2.5.0", 4142 + "is-interactive": "^1.0.0", 4143 + "is-unicode-supported": "^0.1.0", 4144 + "log-symbols": "^4.1.0", 4145 + "strip-ansi": "^6.0.0", 4146 + "wcwidth": "^1.0.1" 4147 + }, 4148 + "engines": { 4149 + "node": ">=10" 4150 + }, 4151 + "funding": { 4152 + "url": "https://github.com/sponsors/sindresorhus" 4153 + } 4154 + }, 4155 + "node_modules/p-cancelable": { 4156 + "version": "2.1.1", 4157 + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", 4158 + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", 4159 + "dev": true, 4160 + "engines": { 4161 + "node": ">=8" 4162 + } 4163 + }, 4164 + "node_modules/p-defer": { 4165 + "version": "1.0.0", 4166 + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", 4167 + "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", 4168 + "dev": true, 4169 + "license": "MIT", 4170 + "engines": { 4171 + "node": ">=4" 4172 + } 4173 + }, 4174 + "node_modules/p-finally": { 4175 + "version": "1.0.0", 4176 + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 4177 + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", 4178 + "dev": true, 4179 + "license": "MIT", 4180 + "engines": { 4181 + "node": ">=4" 4182 + } 4183 + }, 4184 + "node_modules/p-is-promise": { 4185 + "version": "2.1.0", 4186 + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", 4187 + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", 4188 + "dev": true, 4189 + "license": "MIT", 4190 + "engines": { 4191 + "node": ">=6" 4192 + } 4193 + }, 4194 + "node_modules/p-limit": { 4195 + "version": "3.1.0", 4196 + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 4197 + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 4198 + "dev": true, 4199 + "license": "MIT", 4200 + "dependencies": { 4201 + "yocto-queue": "^0.1.0" 4202 + }, 4203 + "engines": { 4204 + "node": ">=10" 4205 + }, 4206 + "funding": { 4207 + "url": "https://github.com/sponsors/sindresorhus" 4208 + } 4209 + }, 4210 + "node_modules/p-locate": { 4211 + "version": "5.0.0", 4212 + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 4213 + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 4214 + "dev": true, 4215 + "license": "MIT", 4216 + "dependencies": { 4217 + "p-limit": "^3.0.2" 4218 + }, 4219 + "engines": { 4220 + "node": ">=10" 4221 + }, 4222 + "funding": { 4223 + "url": "https://github.com/sponsors/sindresorhus" 4224 + } 4225 + }, 4226 + "node_modules/p-map": { 4227 + "version": "4.0.0", 4228 + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", 4229 + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", 4230 + "dev": true, 4231 + "dependencies": { 4232 + "aggregate-error": "^3.0.0" 4233 + }, 4234 + "engines": { 4235 + "node": ">=10" 4236 + }, 4237 + "funding": { 4238 + "url": "https://github.com/sponsors/sindresorhus" 4239 + } 4240 + }, 4241 + "node_modules/parse-author": { 4242 + "version": "2.0.0", 4243 + "resolved": "https://registry.npmjs.org/parse-author/-/parse-author-2.0.0.tgz", 4244 + "integrity": "sha512-yx5DfvkN8JsHL2xk2Os9oTia467qnvRgey4ahSm2X8epehBLx/gWLcy5KI+Y36ful5DzGbCS6RazqZGgy1gHNw==", 4245 + "dev": true, 4246 + "dependencies": { 4247 + "author-regex": "^1.0.0" 4248 + }, 4249 + "engines": { 4250 + "node": ">=0.10.0" 4251 + } 4252 + }, 4253 + "node_modules/parse-json": { 4254 + "version": "2.2.0", 4255 + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 4256 + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", 4257 + "dev": true, 4258 + "license": "MIT", 4259 + "dependencies": { 4260 + "error-ex": "^1.2.0" 4261 + }, 4262 + "engines": { 4263 + "node": ">=0.10.0" 4264 + } 4265 + }, 4266 + "node_modules/path-exists": { 4267 + "version": "4.0.0", 4268 + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 4269 + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 4270 + "dev": true, 4271 + "license": "MIT", 4272 + "engines": { 4273 + "node": ">=8" 4274 + } 4275 + }, 4276 + "node_modules/path-is-absolute": { 4277 + "version": "1.0.1", 4278 + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 4279 + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 4280 + "dev": true, 4281 + "engines": { 4282 + "node": ">=0.10.0" 4283 + } 4284 + }, 4285 + "node_modules/path-key": { 4286 + "version": "3.1.1", 4287 + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 4288 + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 4289 + "dev": true, 4290 + "engines": { 4291 + "node": ">=8" 4292 + } 4293 + }, 4294 + "node_modules/path-parse": { 4295 + "version": "1.0.7", 4296 + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 4297 + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 4298 + "dev": true, 4299 + "license": "MIT" 4300 + }, 4301 + "node_modules/path-type": { 4302 + "version": "2.0.0", 4303 + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", 4304 + "integrity": "sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ==", 4305 + "dev": true, 4306 + "license": "MIT", 4307 + "dependencies": { 4308 + "pify": "^2.0.0" 4309 + }, 4310 + "engines": { 4311 + "node": ">=4" 4312 + } 4313 + }, 4314 + "node_modules/pe-library": { 4315 + "version": "1.0.1", 4316 + "resolved": "https://registry.npmjs.org/pe-library/-/pe-library-1.0.1.tgz", 4317 + "integrity": "sha512-nh39Mo1eGWmZS7y+mK/dQIqg7S1lp38DpRxkyoHf0ZcUs/HDc+yyTjuOtTvSMZHmfSLuSQaX945u05Y2Q6UWZg==", 4318 + "dev": true, 4319 + "license": "MIT", 4320 + "engines": { 4321 + "node": ">=14", 4322 + "npm": ">=7" 4323 + }, 4324 + "funding": { 4325 + "type": "github", 4326 + "url": "https://github.com/sponsors/jet2jet" 4327 + } 4328 + }, 4329 + "node_modules/pend": { 4330 + "version": "1.2.0", 4331 + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 4332 + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", 4333 + "dev": true 4334 + }, 4335 + "node_modules/picomatch": { 4336 + "version": "2.3.1", 4337 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 4338 + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 4339 + "dev": true, 4340 + "license": "MIT", 4341 + "engines": { 4342 + "node": ">=8.6" 4343 + }, 4344 + "funding": { 4345 + "url": "https://github.com/sponsors/jonschlinkert" 4346 + } 4347 + }, 4348 + "node_modules/pify": { 4349 + "version": "2.3.0", 4350 + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 4351 + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", 4352 + "dev": true, 4353 + "license": "MIT", 4354 + "engines": { 4355 + "node": ">=0.10.0" 4356 + } 4357 + }, 4358 + "node_modules/plist": { 4359 + "version": "3.1.0", 4360 + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", 4361 + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", 4362 + "dev": true, 4363 + "license": "MIT", 4364 + "dependencies": { 4365 + "@xmldom/xmldom": "^0.8.8", 4366 + "base64-js": "^1.5.1", 4367 + "xmlbuilder": "^15.1.1" 4368 + }, 4369 + "engines": { 4370 + "node": ">=10.4.0" 4371 + } 4372 + }, 4373 + "node_modules/postject": { 4374 + "version": "1.0.0-alpha.6", 4375 + "resolved": "https://registry.npmjs.org/postject/-/postject-1.0.0-alpha.6.tgz", 4376 + "integrity": "sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==", 4377 + "dev": true, 4378 + "dependencies": { 4379 + "commander": "^9.4.0" 4380 + }, 4381 + "bin": { 4382 + "postject": "dist/cli.js" 4383 + }, 4384 + "engines": { 4385 + "node": ">=14.0.0" 4386 + } 4387 + }, 4388 + "node_modules/postject/node_modules/commander": { 4389 + "version": "9.5.0", 4390 + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", 4391 + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", 4392 + "dev": true, 4393 + "engines": { 4394 + "node": "^12.20.0 || >=14" 4395 + } 4396 + }, 4397 + "node_modules/proc-log": { 4398 + "version": "2.0.1", 4399 + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", 4400 + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", 4401 + "dev": true, 4402 + "license": "ISC", 4403 + "engines": { 4404 + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 4405 + } 4406 + }, 4407 + "node_modules/progress": { 4408 + "version": "2.0.3", 4409 + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 4410 + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 4411 + "dev": true, 4412 + "engines": { 4413 + "node": ">=0.4.0" 4414 + } 4415 + }, 4416 + "node_modules/promise-inflight": { 4417 + "version": "1.0.1", 4418 + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", 4419 + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", 4420 + "dev": true 4421 + }, 4422 + "node_modules/promise-retry": { 4423 + "version": "2.0.1", 4424 + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", 4425 + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", 4426 + "dev": true, 4427 + "dependencies": { 4428 + "err-code": "^2.0.2", 4429 + "retry": "^0.12.0" 4430 + }, 4431 + "engines": { 4432 + "node": ">=10" 4433 + } 4434 + }, 4435 + "node_modules/pump": { 4436 + "version": "3.0.0", 4437 + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 4438 + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 4439 + "dev": true, 4440 + "dependencies": { 4441 + "end-of-stream": "^1.1.0", 4442 + "once": "^1.3.1" 4443 + } 4444 + }, 4445 + "node_modules/queue-microtask": { 4446 + "version": "1.2.3", 4447 + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 4448 + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 4449 + "dev": true, 4450 + "funding": [ 4451 + { 4452 + "type": "github", 4453 + "url": "https://github.com/sponsors/feross" 4454 + }, 4455 + { 4456 + "type": "patreon", 4457 + "url": "https://www.patreon.com/feross" 4458 + }, 4459 + { 4460 + "type": "consulting", 4461 + "url": "https://feross.org/support" 4462 + } 4463 + ], 4464 + "license": "MIT" 4465 + }, 4466 + "node_modules/quick-lru": { 4467 + "version": "5.1.1", 4468 + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", 4469 + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", 4470 + "dev": true, 4471 + "engines": { 4472 + "node": ">=10" 4473 + }, 4474 + "funding": { 4475 + "url": "https://github.com/sponsors/sindresorhus" 4476 + } 4477 + }, 4478 + "node_modules/read-binary-file-arch": { 4479 + "version": "1.0.6", 4480 + "resolved": "https://registry.npmjs.org/read-binary-file-arch/-/read-binary-file-arch-1.0.6.tgz", 4481 + "integrity": "sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==", 4482 + "dev": true, 4483 + "license": "MIT", 4484 + "dependencies": { 4485 + "debug": "^4.3.4" 4486 + }, 4487 + "bin": { 4488 + "read-binary-file-arch": "cli.js" 4489 + } 4490 + }, 4491 + "node_modules/read-pkg": { 4492 + "version": "2.0.0", 4493 + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", 4494 + "integrity": "sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA==", 4495 + "dev": true, 4496 + "license": "MIT", 4497 + "dependencies": { 4498 + "load-json-file": "^2.0.0", 4499 + "normalize-package-data": "^2.3.2", 4500 + "path-type": "^2.0.0" 4501 + }, 4502 + "engines": { 4503 + "node": ">=4" 4504 + } 4505 + }, 4506 + "node_modules/read-pkg-up": { 4507 + "version": "2.0.0", 4508 + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", 4509 + "integrity": "sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w==", 4510 + "dev": true, 4511 + "license": "MIT", 4512 + "dependencies": { 4513 + "find-up": "^2.0.0", 4514 + "read-pkg": "^2.0.0" 4515 + }, 4516 + "engines": { 4517 + "node": ">=4" 4518 + } 4519 + }, 4520 + "node_modules/read-pkg-up/node_modules/find-up": { 4521 + "version": "2.1.0", 4522 + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", 4523 + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", 4524 + "dev": true, 4525 + "license": "MIT", 4526 + "dependencies": { 4527 + "locate-path": "^2.0.0" 4528 + }, 4529 + "engines": { 4530 + "node": ">=4" 4531 + } 4532 + }, 4533 + "node_modules/read-pkg-up/node_modules/locate-path": { 4534 + "version": "2.0.0", 4535 + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", 4536 + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", 4537 + "dev": true, 4538 + "license": "MIT", 4539 + "dependencies": { 4540 + "p-locate": "^2.0.0", 4541 + "path-exists": "^3.0.0" 4542 + }, 4543 + "engines": { 4544 + "node": ">=4" 4545 + } 4546 + }, 4547 + "node_modules/read-pkg-up/node_modules/p-limit": { 4548 + "version": "1.3.0", 4549 + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", 4550 + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", 4551 + "dev": true, 4552 + "license": "MIT", 4553 + "dependencies": { 4554 + "p-try": "^1.0.0" 4555 + }, 4556 + "engines": { 4557 + "node": ">=4" 4558 + } 4559 + }, 4560 + "node_modules/read-pkg-up/node_modules/p-locate": { 4561 + "version": "2.0.0", 4562 + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", 4563 + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", 4564 + "dev": true, 4565 + "license": "MIT", 4566 + "dependencies": { 4567 + "p-limit": "^1.1.0" 4568 + }, 4569 + "engines": { 4570 + "node": ">=4" 4571 + } 4572 + }, 4573 + "node_modules/read-pkg-up/node_modules/p-try": { 4574 + "version": "1.0.0", 4575 + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", 4576 + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", 4577 + "dev": true, 4578 + "license": "MIT", 4579 + "engines": { 4580 + "node": ">=4" 4581 + } 4582 + }, 4583 + "node_modules/read-pkg-up/node_modules/path-exists": { 4584 + "version": "3.0.0", 4585 + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 4586 + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", 4587 + "dev": true, 4588 + "license": "MIT", 4589 + "engines": { 4590 + "node": ">=4" 4591 + } 4592 + }, 4593 + "node_modules/readable-stream": { 4594 + "version": "3.6.2", 4595 + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", 4596 + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 4597 + "dev": true, 4598 + "dependencies": { 4599 + "inherits": "^2.0.3", 4600 + "string_decoder": "^1.1.1", 4601 + "util-deprecate": "^1.0.1" 4602 + }, 4603 + "engines": { 4604 + "node": ">= 6" 4605 + } 4606 + }, 4607 + "node_modules/rechoir": { 4608 + "version": "0.8.0", 4609 + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", 4610 + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", 4611 + "dev": true, 4612 + "license": "MIT", 4613 + "dependencies": { 4614 + "resolve": "^1.20.0" 4615 + }, 4616 + "engines": { 4617 + "node": ">= 10.13.0" 4618 + } 4619 + }, 4620 + "node_modules/require-directory": { 4621 + "version": "2.1.1", 4622 + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 4623 + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 4624 + "dev": true, 4625 + "engines": { 4626 + "node": ">=0.10.0" 4627 + } 4628 + }, 4629 + "node_modules/resedit": { 4630 + "version": "2.0.3", 4631 + "resolved": "https://registry.npmjs.org/resedit/-/resedit-2.0.3.tgz", 4632 + "integrity": "sha512-oTeemxwoMuxxTYxXUwjkrOPfngTQehlv0/HoYFNkB4uzsP1Un1A9nI8JQKGOFkxpqkC7qkMs0lUsGrvUlbLNUA==", 4633 + "dev": true, 4634 + "license": "MIT", 4635 + "dependencies": { 4636 + "pe-library": "^1.0.1" 4637 + }, 4638 + "engines": { 4639 + "node": ">=14", 4640 + "npm": ">=7" 4641 + }, 4642 + "funding": { 4643 + "type": "github", 4644 + "url": "https://github.com/sponsors/jet2jet" 4645 + } 4646 + }, 4647 + "node_modules/resolve": { 4648 + "version": "1.22.10", 4649 + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", 4650 + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", 4651 + "dev": true, 4652 + "license": "MIT", 4653 + "dependencies": { 4654 + "is-core-module": "^2.16.0", 4655 + "path-parse": "^1.0.7", 4656 + "supports-preserve-symlinks-flag": "^1.0.0" 4657 + }, 4658 + "bin": { 4659 + "resolve": "bin/resolve" 4660 + }, 4661 + "engines": { 4662 + "node": ">= 0.4" 4663 + }, 4664 + "funding": { 4665 + "url": "https://github.com/sponsors/ljharb" 4666 + } 4667 + }, 4668 + "node_modules/resolve-alpn": { 4669 + "version": "1.2.1", 4670 + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", 4671 + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", 4672 + "dev": true 4673 + }, 4674 + "node_modules/responselike": { 4675 + "version": "2.0.1", 4676 + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", 4677 + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", 4678 + "dev": true, 4679 + "dependencies": { 4680 + "lowercase-keys": "^2.0.0" 4681 + }, 4682 + "funding": { 4683 + "url": "https://github.com/sponsors/sindresorhus" 4684 + } 4685 + }, 4686 + "node_modules/restore-cursor": { 4687 + "version": "3.1.0", 4688 + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", 4689 + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", 4690 + "dev": true, 4691 + "dependencies": { 4692 + "onetime": "^5.1.0", 4693 + "signal-exit": "^3.0.2" 4694 + }, 4695 + "engines": { 4696 + "node": ">=8" 4697 + } 4698 + }, 4699 + "node_modules/retry": { 4700 + "version": "0.12.0", 4701 + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", 4702 + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", 4703 + "dev": true, 4704 + "engines": { 4705 + "node": ">= 4" 4706 + } 4707 + }, 4708 + "node_modules/reusify": { 4709 + "version": "1.1.0", 4710 + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", 4711 + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", 4712 + "dev": true, 4713 + "license": "MIT", 4714 + "engines": { 4715 + "iojs": ">=1.0.0", 4716 + "node": ">=0.10.0" 4717 + } 4718 + }, 4719 + "node_modules/rfdc": { 4720 + "version": "1.4.1", 4721 + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", 4722 + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", 4723 + "dev": true, 4724 + "license": "MIT" 4725 + }, 4726 + "node_modules/rimraf": { 4727 + "version": "3.0.2", 4728 + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 4729 + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 4730 + "dev": true, 4731 + "dependencies": { 4732 + "glob": "^7.1.3" 4733 + }, 4734 + "bin": { 4735 + "rimraf": "bin.js" 4736 + }, 4737 + "funding": { 4738 + "url": "https://github.com/sponsors/isaacs" 4739 + } 4740 + }, 4741 + "node_modules/roarr": { 4742 + "version": "2.15.4", 4743 + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", 4744 + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", 4745 + "dev": true, 4746 + "optional": true, 4747 + "dependencies": { 4748 + "boolean": "^3.0.1", 4749 + "detect-node": "^2.0.4", 4750 + "globalthis": "^1.0.1", 4751 + "json-stringify-safe": "^5.0.1", 4752 + "semver-compare": "^1.0.0", 4753 + "sprintf-js": "^1.1.2" 4754 + }, 4755 + "engines": { 4756 + "node": ">=8.0" 4757 + } 4758 + }, 4759 + "node_modules/run-parallel": { 4760 + "version": "1.2.0", 4761 + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 4762 + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 4763 + "dev": true, 4764 + "funding": [ 4765 + { 4766 + "type": "github", 4767 + "url": "https://github.com/sponsors/feross" 4768 + }, 4769 + { 4770 + "type": "patreon", 4771 + "url": "https://www.patreon.com/feross" 4772 + }, 4773 + { 4774 + "type": "consulting", 4775 + "url": "https://feross.org/support" 4776 + } 4777 + ], 4778 + "license": "MIT", 4779 + "dependencies": { 4780 + "queue-microtask": "^1.2.2" 4781 + } 4782 + }, 4783 + "node_modules/safe-buffer": { 4784 + "version": "5.2.1", 4785 + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 4786 + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 4787 + "dev": true, 4788 + "funding": [ 4789 + { 4790 + "type": "github", 4791 + "url": "https://github.com/sponsors/feross" 4792 + }, 4793 + { 4794 + "type": "patreon", 4795 + "url": "https://www.patreon.com/feross" 4796 + }, 4797 + { 4798 + "type": "consulting", 4799 + "url": "https://feross.org/support" 4800 + } 4801 + ] 4802 + }, 4803 + "node_modules/safer-buffer": { 4804 + "version": "2.1.2", 4805 + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 4806 + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 4807 + "dev": true, 4808 + "optional": true 4809 + }, 4810 + "node_modules/semver": { 4811 + "version": "7.5.4", 4812 + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", 4813 + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", 4814 + "dev": true, 4815 + "dependencies": { 4816 + "lru-cache": "^6.0.0" 4817 + }, 4818 + "bin": { 4819 + "semver": "bin/semver.js" 4820 + }, 4821 + "engines": { 4822 + "node": ">=10" 4823 + } 4824 + }, 4825 + "node_modules/semver-compare": { 4826 + "version": "1.0.0", 4827 + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", 4828 + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", 4829 + "dev": true, 4830 + "optional": true 4831 + }, 4832 + "node_modules/semver/node_modules/lru-cache": { 4833 + "version": "6.0.0", 4834 + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 4835 + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 4836 + "dev": true, 4837 + "dependencies": { 4838 + "yallist": "^4.0.0" 4839 + }, 4840 + "engines": { 4841 + "node": ">=10" 4842 + } 4843 + }, 4844 + "node_modules/shebang-command": { 4845 + "version": "2.0.0", 4846 + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 4847 + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 4848 + "dev": true, 4849 + "dependencies": { 4850 + "shebang-regex": "^3.0.0" 4851 + }, 4852 + "engines": { 4853 + "node": ">=8" 4854 + } 4855 + }, 4856 + "node_modules/shebang-regex": { 4857 + "version": "3.0.0", 4858 + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 4859 + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 4860 + "dev": true, 4861 + "engines": { 4862 + "node": ">=8" 4863 + } 4864 + }, 4865 + "node_modules/signal-exit": { 4866 + "version": "3.0.7", 4867 + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 4868 + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 4869 + "dev": true 4870 + }, 4871 + "node_modules/slice-ansi": { 4872 + "version": "5.0.0", 4873 + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", 4874 + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", 4875 + "dev": true, 4876 + "license": "MIT", 4877 + "dependencies": { 4878 + "ansi-styles": "^6.0.0", 4879 + "is-fullwidth-code-point": "^4.0.0" 4880 + }, 4881 + "engines": { 4882 + "node": ">=12" 4883 + }, 4884 + "funding": { 4885 + "url": "https://github.com/chalk/slice-ansi?sponsor=1" 4886 + } 4887 + }, 4888 + "node_modules/slice-ansi/node_modules/ansi-styles": { 4889 + "version": "6.2.1", 4890 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 4891 + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 4892 + "dev": true, 4893 + "license": "MIT", 4894 + "engines": { 4895 + "node": ">=12" 4896 + }, 4897 + "funding": { 4898 + "url": "https://github.com/chalk/ansi-styles?sponsor=1" 4899 + } 4900 + }, 4901 + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { 4902 + "version": "4.0.0", 4903 + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", 4904 + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", 4905 + "dev": true, 4906 + "license": "MIT", 4907 + "engines": { 4908 + "node": ">=12" 4909 + }, 4910 + "funding": { 4911 + "url": "https://github.com/sponsors/sindresorhus" 4912 + } 4913 + }, 4914 + "node_modules/smart-buffer": { 4915 + "version": "4.2.0", 4916 + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", 4917 + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", 4918 + "dev": true, 4919 + "engines": { 4920 + "node": ">= 6.0.0", 4921 + "npm": ">= 3.0.0" 4922 + } 4923 + }, 4924 + "node_modules/socks": { 4925 + "version": "2.7.1", 4926 + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", 4927 + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", 4928 + "dev": true, 4929 + "dependencies": { 4930 + "ip": "^2.0.0", 4931 + "smart-buffer": "^4.2.0" 4932 + }, 4933 + "engines": { 4934 + "node": ">= 10.13.0", 4935 + "npm": ">= 3.0.0" 4936 + } 4937 + }, 4938 + "node_modules/socks-proxy-agent": { 4939 + "version": "7.0.0", 4940 + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", 4941 + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", 4942 + "dev": true, 4943 + "dependencies": { 4944 + "agent-base": "^6.0.2", 4945 + "debug": "^4.3.3", 4946 + "socks": "^2.6.2" 4947 + }, 4948 + "engines": { 4949 + "node": ">= 10" 4950 + } 4951 + }, 4952 + "node_modules/source-map": { 4953 + "version": "0.6.1", 4954 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 4955 + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 4956 + "dev": true, 4957 + "license": "BSD-3-Clause", 4958 + "engines": { 4959 + "node": ">=0.10.0" 4960 + } 4961 + }, 4962 + "node_modules/source-map-support": { 4963 + "version": "0.5.21", 4964 + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 4965 + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 4966 + "dev": true, 4967 + "license": "MIT", 4968 + "dependencies": { 4969 + "buffer-from": "^1.0.0", 4970 + "source-map": "^0.6.0" 4971 + } 4972 + }, 4973 + "node_modules/spdx-correct": { 4974 + "version": "3.2.0", 4975 + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", 4976 + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", 4977 + "dev": true, 4978 + "license": "Apache-2.0", 4979 + "dependencies": { 4980 + "spdx-expression-parse": "^3.0.0", 4981 + "spdx-license-ids": "^3.0.0" 4982 + } 4983 + }, 4984 + "node_modules/spdx-exceptions": { 4985 + "version": "2.5.0", 4986 + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", 4987 + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", 4988 + "dev": true, 4989 + "license": "CC-BY-3.0" 4990 + }, 4991 + "node_modules/spdx-expression-parse": { 4992 + "version": "3.0.1", 4993 + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", 4994 + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", 4995 + "dev": true, 4996 + "license": "MIT", 4997 + "dependencies": { 4998 + "spdx-exceptions": "^2.1.0", 4999 + "spdx-license-ids": "^3.0.0" 5000 + } 5001 + }, 5002 + "node_modules/spdx-license-ids": { 5003 + "version": "3.0.21", 5004 + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", 5005 + "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", 5006 + "dev": true, 5007 + "license": "CC0-1.0" 5008 + }, 5009 + "node_modules/sprintf-js": { 5010 + "version": "1.1.3", 5011 + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", 5012 + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", 5013 + "dev": true, 5014 + "optional": true 5015 + }, 5016 + "node_modules/ssri": { 5017 + "version": "9.0.1", 5018 + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", 5019 + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", 5020 + "dev": true, 5021 + "dependencies": { 5022 + "minipass": "^3.1.1" 5023 + }, 5024 + "engines": { 5025 + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 5026 + } 5027 + }, 5028 + "node_modules/string_decoder": { 5029 + "version": "1.3.0", 5030 + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 5031 + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 5032 + "dev": true, 5033 + "dependencies": { 5034 + "safe-buffer": "~5.2.0" 5035 + } 5036 + }, 5037 + "node_modules/string-width": { 5038 + "version": "4.2.3", 5039 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 5040 + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 5041 + "dev": true, 5042 + "dependencies": { 5043 + "emoji-regex": "^8.0.0", 5044 + "is-fullwidth-code-point": "^3.0.0", 5045 + "strip-ansi": "^6.0.1" 5046 + }, 5047 + "engines": { 5048 + "node": ">=8" 5049 + } 5050 + }, 5051 + "node_modules/strip-ansi": { 5052 + "version": "6.0.1", 5053 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 5054 + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 5055 + "dev": true, 5056 + "dependencies": { 5057 + "ansi-regex": "^5.0.1" 5058 + }, 5059 + "engines": { 5060 + "node": ">=8" 5061 + } 5062 + }, 5063 + "node_modules/strip-bom": { 5064 + "version": "3.0.0", 5065 + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 5066 + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", 5067 + "dev": true, 5068 + "license": "MIT", 5069 + "engines": { 5070 + "node": ">=4" 5071 + } 5072 + }, 5073 + "node_modules/strip-eof": { 5074 + "version": "1.0.0", 5075 + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", 5076 + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", 5077 + "dev": true, 5078 + "license": "MIT", 5079 + "engines": { 5080 + "node": ">=0.10.0" 5081 + } 5082 + }, 5083 + "node_modules/strip-outer": { 5084 + "version": "1.0.1", 5085 + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", 5086 + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", 5087 + "dev": true, 5088 + "license": "MIT", 5089 + "dependencies": { 5090 + "escape-string-regexp": "^1.0.2" 5091 + }, 5092 + "engines": { 5093 + "node": ">=0.10.0" 5094 + } 5095 + }, 5096 + "node_modules/strip-outer/node_modules/escape-string-regexp": { 5097 + "version": "1.0.5", 5098 + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 5099 + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 5100 + "dev": true, 5101 + "license": "MIT", 5102 + "engines": { 5103 + "node": ">=0.8.0" 5104 + } 5105 + }, 5106 + "node_modules/sudo-prompt": { 5107 + "version": "9.2.1", 5108 + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", 5109 + "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==", 5110 + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", 5111 + "dev": true, 5112 + "license": "MIT" 5113 + }, 5114 + "node_modules/sumchecker": { 5115 + "version": "3.0.1", 5116 + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", 5117 + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", 5118 + "dev": true, 5119 + "dependencies": { 5120 + "debug": "^4.1.0" 5121 + }, 5122 + "engines": { 5123 + "node": ">= 8.0" 5124 + } 5125 + }, 5126 + "node_modules/supports-color": { 5127 + "version": "7.2.0", 5128 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 5129 + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 5130 + "dev": true, 5131 + "dependencies": { 5132 + "has-flag": "^4.0.0" 5133 + }, 5134 + "engines": { 5135 + "node": ">=8" 5136 + } 5137 + }, 5138 + "node_modules/supports-preserve-symlinks-flag": { 5139 + "version": "1.0.0", 5140 + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 5141 + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 5142 + "dev": true, 5143 + "license": "MIT", 5144 + "engines": { 5145 + "node": ">= 0.4" 5146 + }, 5147 + "funding": { 5148 + "url": "https://github.com/sponsors/ljharb" 5149 + } 5150 + }, 5151 + "node_modules/tar": { 5152 + "version": "6.2.1", 5153 + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", 5154 + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", 5155 + "dev": true, 5156 + "dependencies": { 5157 + "chownr": "^2.0.0", 5158 + "fs-minipass": "^2.0.0", 5159 + "minipass": "^5.0.0", 5160 + "minizlib": "^2.1.1", 5161 + "mkdirp": "^1.0.3", 5162 + "yallist": "^4.0.0" 5163 + }, 5164 + "engines": { 5165 + "node": ">=10" 5166 + } 5167 + }, 5168 + "node_modules/tar/node_modules/minipass": { 5169 + "version": "5.0.0", 5170 + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", 5171 + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", 5172 + "dev": true, 5173 + "engines": { 5174 + "node": ">=8" 5175 + } 5176 + }, 5177 + "node_modules/temp": { 5178 + "version": "0.9.4", 5179 + "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", 5180 + "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", 5181 + "dev": true, 5182 + "optional": true, 5183 + "dependencies": { 5184 + "mkdirp": "^0.5.1", 5185 + "rimraf": "~2.6.2" 5186 + }, 5187 + "engines": { 5188 + "node": ">=6.0.0" 5189 + } 5190 + }, 5191 + "node_modules/temp/node_modules/mkdirp": { 5192 + "version": "0.5.6", 5193 + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", 5194 + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", 5195 + "dev": true, 5196 + "optional": true, 5197 + "dependencies": { 5198 + "minimist": "^1.2.6" 5199 + }, 5200 + "bin": { 5201 + "mkdirp": "bin/cmd.js" 5202 + } 5203 + }, 5204 + "node_modules/temp/node_modules/rimraf": { 5205 + "version": "2.6.3", 5206 + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", 5207 + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", 5208 + "dev": true, 5209 + "optional": true, 5210 + "dependencies": { 5211 + "glob": "^7.1.3" 5212 + }, 5213 + "bin": { 5214 + "rimraf": "bin.js" 5215 + } 5216 + }, 5217 + "node_modules/tiny-each-async": { 5218 + "version": "2.0.3", 5219 + "resolved": "https://registry.npmjs.org/tiny-each-async/-/tiny-each-async-2.0.3.tgz", 5220 + "integrity": "sha512-5ROII7nElnAirvFn8g7H7MtpfV1daMcyfTGQwsn/x2VtyV+VPiO5CjReCJtWLvoKTDEDmZocf3cNPraiMnBXLA==", 5221 + "dev": true, 5222 + "optional": true 5223 + }, 5224 + "node_modules/tmp": { 5225 + "version": "0.2.1", 5226 + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", 5227 + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", 5228 + "dev": true, 5229 + "optional": true, 5230 + "dependencies": { 5231 + "rimraf": "^3.0.0" 5232 + }, 5233 + "engines": { 5234 + "node": ">=8.17.0" 5235 + } 5236 + }, 5237 + "node_modules/tmp-promise": { 5238 + "version": "3.0.3", 5239 + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", 5240 + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", 5241 + "dev": true, 5242 + "optional": true, 5243 + "dependencies": { 5244 + "tmp": "^0.2.0" 5245 + } 5246 + }, 5247 + "node_modules/to-regex-range": { 5248 + "version": "5.0.1", 5249 + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 5250 + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 5251 + "dev": true, 5252 + "license": "MIT", 5253 + "dependencies": { 5254 + "is-number": "^7.0.0" 5255 + }, 5256 + "engines": { 5257 + "node": ">=8.0" 5258 + } 5259 + }, 5260 + "node_modules/tr46": { 5261 + "version": "0.0.3", 5262 + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 5263 + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", 5264 + "dev": true, 5265 + "license": "MIT" 5266 + }, 5267 + "node_modules/trim-repeated": { 5268 + "version": "1.0.0", 5269 + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", 5270 + "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", 5271 + "dev": true, 5272 + "license": "MIT", 5273 + "dependencies": { 5274 + "escape-string-regexp": "^1.0.2" 5275 + }, 5276 + "engines": { 5277 + "node": ">=0.10.0" 5278 + } 5279 + }, 5280 + "node_modules/trim-repeated/node_modules/escape-string-regexp": { 5281 + "version": "1.0.5", 5282 + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 5283 + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 5284 + "dev": true, 5285 + "license": "MIT", 5286 + "engines": { 5287 + "node": ">=0.8.0" 5288 + } 5289 + }, 5290 + "node_modules/undici-types": { 5291 + "version": "6.20.0", 5292 + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", 5293 + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", 5294 + "dev": true, 5295 + "license": "MIT" 5296 + }, 5297 + "node_modules/unique-filename": { 5298 + "version": "2.0.1", 5299 + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", 5300 + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", 5301 + "dev": true, 5302 + "dependencies": { 5303 + "unique-slug": "^3.0.0" 5304 + }, 5305 + "engines": { 5306 + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 5307 + } 5308 + }, 5309 + "node_modules/unique-slug": { 5310 + "version": "3.0.0", 5311 + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", 5312 + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", 5313 + "dev": true, 5314 + "dependencies": { 5315 + "imurmurhash": "^0.1.4" 5316 + }, 5317 + "engines": { 5318 + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 5319 + } 5320 + }, 5321 + "node_modules/universalify": { 5322 + "version": "2.0.1", 5323 + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", 5324 + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", 5325 + "dev": true, 5326 + "engines": { 5327 + "node": ">= 10.0.0" 5328 + } 5329 + }, 5330 + "node_modules/update-electron-app": { 5331 + "version": "3.1.1", 5332 + "resolved": "https://registry.npmjs.org/update-electron-app/-/update-electron-app-3.1.1.tgz", 5333 + "integrity": "sha512-7duRr6sYn014tifhKgT/5i8N+6xLzmJVJ8hVtNrHXlIDNP6QbRe6VxZ1hSi2UH5oJPzhor/PH7yKU9em5xjRzQ==", 5334 + "license": "MIT", 5335 + "dependencies": { 5336 + "github-url-to-object": "^4.0.4", 5337 + "ms": "^2.1.1" 5338 + } 5339 + }, 5340 + "node_modules/username": { 5341 + "version": "5.1.0", 5342 + "resolved": "https://registry.npmjs.org/username/-/username-5.1.0.tgz", 5343 + "integrity": "sha512-PCKbdWw85JsYMvmCv5GH3kXmM66rCd9m1hBEDutPNv94b/pqCMT4NtcKyeWYvLFiE8b+ha1Jdl8XAaUdPn5QTg==", 5344 + "dev": true, 5345 + "license": "MIT", 5346 + "dependencies": { 5347 + "execa": "^1.0.0", 5348 + "mem": "^4.3.0" 5349 + }, 5350 + "engines": { 5351 + "node": ">=8" 5352 + } 5353 + }, 5354 + "node_modules/util-deprecate": { 5355 + "version": "1.0.2", 5356 + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 5357 + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 5358 + "dev": true 5359 + }, 5360 + "node_modules/validate-npm-package-license": { 5361 + "version": "3.0.4", 5362 + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 5363 + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 5364 + "dev": true, 5365 + "license": "Apache-2.0", 5366 + "dependencies": { 5367 + "spdx-correct": "^3.0.0", 5368 + "spdx-expression-parse": "^3.0.0" 5369 + } 5370 + }, 5371 + "node_modules/wcwidth": { 5372 + "version": "1.0.1", 5373 + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", 5374 + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", 5375 + "dev": true, 5376 + "dependencies": { 5377 + "defaults": "^1.0.3" 5378 + } 5379 + }, 5380 + "node_modules/webidl-conversions": { 5381 + "version": "3.0.1", 5382 + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 5383 + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", 5384 + "dev": true, 5385 + "license": "BSD-2-Clause" 5386 + }, 5387 + "node_modules/whatwg-url": { 5388 + "version": "5.0.0", 5389 + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 5390 + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 5391 + "dev": true, 5392 + "license": "MIT", 5393 + "dependencies": { 5394 + "tr46": "~0.0.3", 5395 + "webidl-conversions": "^3.0.0" 5396 + } 5397 + }, 5398 + "node_modules/which": { 5399 + "version": "2.0.2", 5400 + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 5401 + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 5402 + "dev": true, 5403 + "dependencies": { 5404 + "isexe": "^2.0.0" 5405 + }, 5406 + "bin": { 5407 + "node-which": "bin/node-which" 5408 + }, 5409 + "engines": { 5410 + "node": ">= 8" 5411 + } 5412 + }, 5413 + "node_modules/word-wrap": { 5414 + "version": "1.2.5", 5415 + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", 5416 + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", 5417 + "dev": true, 5418 + "optional": true, 5419 + "engines": { 5420 + "node": ">=0.10.0" 5421 + } 5422 + }, 5423 + "node_modules/wrap-ansi": { 5424 + "version": "7.0.0", 5425 + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 5426 + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 5427 + "dev": true, 5428 + "dependencies": { 5429 + "ansi-styles": "^4.0.0", 5430 + "string-width": "^4.1.0", 5431 + "strip-ansi": "^6.0.0" 5432 + }, 5433 + "engines": { 5434 + "node": ">=10" 5435 + }, 5436 + "funding": { 5437 + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 5438 + } 5439 + }, 5440 + "node_modules/wrappy": { 5441 + "version": "1.0.2", 5442 + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 5443 + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 5444 + "dev": true 5445 + }, 5446 + "node_modules/xmlbuilder": { 5447 + "version": "15.1.1", 5448 + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", 5449 + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", 5450 + "dev": true, 5451 + "license": "MIT", 5452 + "engines": { 5453 + "node": ">=8.0" 5454 + } 5455 + }, 5456 + "node_modules/y18n": { 5457 + "version": "5.0.8", 5458 + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 5459 + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 5460 + "dev": true, 5461 + "engines": { 5462 + "node": ">=10" 5463 + } 5464 + }, 5465 + "node_modules/yallist": { 5466 + "version": "4.0.0", 5467 + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 5468 + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 5469 + "dev": true 5470 + }, 5471 + "node_modules/yargs": { 5472 + "version": "17.7.2", 5473 + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", 5474 + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", 5475 + "dev": true, 5476 + "dependencies": { 5477 + "cliui": "^8.0.1", 5478 + "escalade": "^3.1.1", 5479 + "get-caller-file": "^2.0.5", 5480 + "require-directory": "^2.1.1", 5481 + "string-width": "^4.2.3", 5482 + "y18n": "^5.0.5", 5483 + "yargs-parser": "^21.1.1" 5484 + }, 5485 + "engines": { 5486 + "node": ">=12" 5487 + } 5488 + }, 5489 + "node_modules/yargs-parser": { 5490 + "version": "21.1.1", 5491 + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 5492 + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 5493 + "dev": true, 5494 + "engines": { 5495 + "node": ">=12" 5496 + } 5497 + }, 5498 + "node_modules/yauzl": { 5499 + "version": "2.10.0", 5500 + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 5501 + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", 5502 + "dev": true, 5503 + "dependencies": { 5504 + "buffer-crc32": "~0.2.3", 5505 + "fd-slicer": "~1.1.0" 5506 + } 5507 + }, 5508 + "node_modules/yocto-queue": { 5509 + "version": "0.1.0", 5510 + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 5511 + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 5512 + "dev": true, 5513 + "license": "MIT", 5514 + "engines": { 5515 + "node": ">=10" 5516 + }, 5517 + "funding": { 5518 + "url": "https://github.com/sponsors/sindresorhus" 5519 + } 5520 + } 5521 + } 5522 + }
+20 -18
package.json
··· 5 5 "main": "index.js", 6 6 "author": "dietrich ayala", 7 7 "license": "MIT", 8 + "type": "module", 8 9 "repository": { 9 10 "type": "git", 10 11 "url": "https://github.com/autonome/peek" 11 12 }, 12 - "devDependencies": { 13 - "@electron-forge/cli": "7.2.0", 14 - "@electron-forge/maker-deb": "7.2.0", 15 - "@electron-forge/maker-rpm": "7.2.0", 16 - "@electron-forge/maker-squirrel": "7.2.0", 17 - "@electron-forge/maker-zip": "7.2.0", 18 - "electron": "27.1.3", 19 - "electron-is-dev": "2.0.0", 20 - "electron-rebuild": "3.2.9" 21 - }, 22 - "dependencies": { 23 - "electron-squirrel-startup": "1.0.0", 24 - "electron-store": "8.1.0", 25 - "electron-unhandled": "4.0.1", 26 - "lil-gui": "^0.19.2", 27 - "update-electron-app": "^3.0.0" 28 - }, 29 13 "scripts": { 30 14 "start": "electron-forge start", 31 15 "debug": "nodemon --exec DEBUG=1 electron-forge start", 32 16 "package": "electron-forge package", 33 - "make": "electron-forge make" 17 + "make": "electron-forge make", 18 + "publish": "electron-forge publish", 19 + "lint": "echo \"No linting configured\"" 20 + }, 21 + "dependencies": { 22 + "electron-squirrel-startup": "^1.0.1", 23 + "lil-gui": "^0.19.2", 24 + "update-electron-app": "^3.1.1" 25 + }, 26 + "devDependencies": { 27 + "@electron-forge/cli": "^7.7.0", 28 + "@electron-forge/maker-deb": "^7.7.0", 29 + "@electron-forge/maker-rpm": "^7.7.0", 30 + "@electron-forge/maker-squirrel": "^7.7.0", 31 + "@electron-forge/maker-zip": "^7.7.0", 32 + "@electron-forge/plugin-auto-unpack-natives": "^7.7.0", 33 + "@electron-forge/plugin-fuses": "^7.7.0", 34 + "@electron/fuses": "^1.8.0", 35 + "electron": "35.0.0" 34 36 } 35 37 }
-1
preload.js
··· 3 3 ipcRenderer 4 4 } = require('electron'); 5 5 6 - 7 6 const src = 'preload'; 8 7 console.log(src, 'init', window); 9 8
settings-screenshot.png

This is a binary file and will not be displayed.