├── .gitignore ├── .vscode ├── launch.json └── settings.json ├── GeminiPluginDescription.png ├── README.md ├── ThumbnailPythonScriptDeck.png ├── com.nicoohagedorn.pythonscriptdeck.sdPlugin ├── imgs │ ├── actions │ │ ├── counter │ │ │ ├── icon.png │ │ │ ├── icon@2x.png │ │ │ ├── key.png │ │ │ └── key@2x.png │ │ ├── fileCheck.png │ │ ├── gemini_icons │ │ │ ├── pyFileLoaded.jpg │ │ │ ├── pyFileLoaded.png │ │ │ ├── pyNofileFound.jpg │ │ │ ├── pyNofileFound.png │ │ │ ├── pyVirtEnvActive.jpg │ │ │ └── pyVirtEnvActive.png │ │ ├── pyFilecheck.png │ │ ├── pyFilecheckFailed.png │ │ ├── pyServiceIcon.png │ │ ├── pyServiceIconFail.png │ │ ├── pyServiceRunning.png │ │ ├── pyServiceStopped.png │ │ └── python_new │ │ │ └── pyFile-check.jpg │ └── plugin │ │ ├── category-icon.png │ │ ├── category-icon@2x.png │ │ ├── marketplace.png │ │ ├── marketplace@2x.png │ │ ├── python.png │ │ └── python_color.png ├── manifest.json └── ui │ ├── python-script.html │ └── python-service.html ├── com.nicoohagedorn.pythonscriptdeck.streamDeckPlugin ├── package-lock.json ├── package.json ├── pyIcons.pptx ├── rollup.config.mjs ├── src ├── ScriptA.py ├── actions │ ├── python-script.ts │ └── python-service.ts ├── automation.py ├── false.png ├── plugin.ts ├── python-bg-service.ts ├── script.py ├── test.py └── true.png └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | # Node.js 2 | node_modules/ 3 | 4 | # Stream Deck files 5 | *.sdPlugin/bin 6 | *.sdPlugin/logs -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Attach to Plugin", 9 | "type": "node", 10 | "request": "attach", 11 | "processId": "${command:PickProcess}", 12 | "outFiles": [ 13 | "${workspaceFolder}/bin/**/*.js" 14 | ], 15 | "resolveSourceMapLocations": [ 16 | "${workspaceFolder}/**" 17 | ] 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | /* JSON schemas */ 3 | "json.schemas": [ 4 | { 5 | "fileMatch": [ 6 | "**/manifest.json" 7 | ], 8 | "url": "https://schemas.elgato.com/streamdeck/plugins/manifest.json" 9 | }, 10 | { 11 | "fileMatch": [ 12 | "**/layouts/*.json" 13 | ], 14 | "url": "https://schemas.elgato.com/streamdeck/plugins/layout.json" 15 | } 16 | ] 17 | } -------------------------------------------------------------------------------- /GeminiPluginDescription.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/GeminiPluginDescription.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | With this Plugin you can run python scripts from your Stream Deck. 2 | 3 | You can also change the appearance of the key based on the return value your Script is providing. 4 | At the moment this is limited to two values and an image according to the return value 5 | -------------------------------------------------------------------------------- /ThumbnailPythonScriptDeck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/ThumbnailPythonScriptDeck.png -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/counter/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/counter/icon.png -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/counter/icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/counter/icon@2x.png -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/counter/key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/counter/key.png -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/counter/key@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/counter/key@2x.png -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/fileCheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/fileCheck.png -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/gemini_icons/pyFileLoaded.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/gemini_icons/pyFileLoaded.jpg -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/gemini_icons/pyFileLoaded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/gemini_icons/pyFileLoaded.png -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/gemini_icons/pyNofileFound.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/gemini_icons/pyNofileFound.jpg -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/gemini_icons/pyNofileFound.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/gemini_icons/pyNofileFound.png -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/gemini_icons/pyVirtEnvActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/gemini_icons/pyVirtEnvActive.jpg -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/gemini_icons/pyVirtEnvActive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/gemini_icons/pyVirtEnvActive.png -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/pyFilecheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/pyFilecheck.png -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/pyFilecheckFailed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/pyFilecheckFailed.png -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/pyServiceIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/pyServiceIcon.png -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/pyServiceIconFail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/pyServiceIconFail.png -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/pyServiceRunning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/pyServiceRunning.png -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/pyServiceStopped.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/pyServiceStopped.png -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/python_new/pyFile-check.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/actions/python_new/pyFile-check.jpg -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/plugin/category-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/plugin/category-icon.png -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/plugin/category-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/plugin/category-icon@2x.png -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/plugin/marketplace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/plugin/marketplace.png -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/plugin/marketplace@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/plugin/marketplace@2x.png -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/plugin/python.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/plugin/python.png -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/plugin/python_color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/com.nicoohagedorn.pythonscriptdeck.sdPlugin/imgs/plugin/python_color.png -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "Name": "PythonScriptDeck", 3 | "Version": "0.5.0.2", 4 | "Author": "nicoohagedorn", 5 | "Actions": [ 6 | { 7 | "Name": "Run Script", 8 | "UUID": "com.nicoohagedorn.pythonscriptdeck.script", 9 | "Icon": "imgs/plugin/python", 10 | "Tooltip": "execute a python script via a key press", 11 | "PropertyInspectorPath": "ui/python-script.html", 12 | "Controllers": [ 13 | "Keypad" 14 | ], 15 | "States": [ 16 | { 17 | "Image": "imgs/actions/gemini_icons/pyNoFileFound", 18 | "TitleAlignment": "bottom" 19 | } 20 | ] 21 | }, 22 | { 23 | "Name": "Run Service", 24 | "UUID": "com.nicoohagedorn.pythonscriptdeck.service", 25 | "Icon": "imgs/plugin/python", 26 | "Tooltip": "execute a python script based on a set timer", 27 | "PropertyInspectorPath": "ui/python-service.html", 28 | "Controllers": [ 29 | "Keypad" 30 | ], 31 | "States": [ 32 | { 33 | "Name": "Running", 34 | "Image": "imgs/actions/pyServiceRunning", 35 | "TitleAlignment": "bottom" 36 | }, 37 | { 38 | "Name": "Stopped", 39 | "Image": "imgs/actions/pyServiceStopped", 40 | "TitleAlignment": "bottom" 41 | } 42 | ] 43 | } 44 | ], 45 | "Category": "Python Script Deck", 46 | "CategoryIcon": "imgs/plugin/python", 47 | "CodePath": "bin/plugin.js", 48 | "Description": "This Plugin allows you to execute Python scripts and display the results on a StreamDeck Key", 49 | "Icon": "imgs/plugin/marketplace", 50 | "URL": "https://youtu.be/thXQx5Xv6x4", 51 | "SDKVersion": 2, 52 | "Software": { 53 | "MinimumVersion": "6.5" 54 | }, 55 | "OS": [ 56 | { 57 | "Platform": "mac", 58 | "MinimumVersion": "13.0" 59 | }, 60 | { 61 | "Platform": "windows", 62 | "MinimumVersion": "10" 63 | } 64 | ], 65 | "Nodejs": { 66 | "Version": "20", 67 | "Debug": "enabled" 68 | }, 69 | "UUID": "com.nicoohagedorn.pythonscriptdeck" 70 | } -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/ui/python-script.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Run Python Script 6 | 7 | 8 | 69 | 70 | 71 | 72 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | Example Python Script 103 | 104 | 105 | 106 | 107 | -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.sdPlugin/ui/python-service.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Run Python Service 6 | 7 | 8 | 9 | 10 | 11 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 30 | 31 | 32 | 37 | 38 | 39 | 40 | 41 | 42 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /com.nicoohagedorn.pythonscriptdeck.streamDeckPlugin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/com.nicoohagedorn.pythonscriptdeck.streamDeckPlugin -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pythonscriptdeck", 3 | "lockfileVersion": 3, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "dependencies": { 8 | "@elgato/streamdeck": "^0.3.0", 9 | "re": "^0.1.4", 10 | "regex": "^6.0.1" 11 | }, 12 | "devDependencies": { 13 | "@elgato/cli": "^0.3.2", 14 | "@rollup/plugin-commonjs": "^25.0.5", 15 | "@rollup/plugin-node-resolve": "^15.2.2", 16 | "@rollup/plugin-terser": "^0.4.4", 17 | "@rollup/plugin-typescript": "^11.1.5", 18 | "@tsconfig/node20": "^20.1.2", 19 | "@types/node": "20.8.10", 20 | "rollup": "^4.0.2", 21 | "tslib": "^2.6.2", 22 | "typescript": "^5.2.2" 23 | } 24 | }, 25 | "node_modules/@elgato/cli": { 26 | "version": "0.3.2", 27 | "resolved": "https://registry.npmjs.org/@elgato/cli/-/cli-0.3.2.tgz", 28 | "integrity": "sha512-kU3aV8cQcVG2GAPqvalGmd9saFunJdzxI9iD/AQ2M6G+RF5TzUWugbd9j1DBYQUKDhASdm0jaeck6y4+b9/HwA==", 29 | "dev": true, 30 | "license": "MIT", 31 | "dependencies": { 32 | "@elgato/schemas": "^0.3.5", 33 | "@humanwhocodes/momoa": "^3.0.0", 34 | "@zip.js/zip.js": "^2.7.34", 35 | "ajv": "^8.12.0", 36 | "chalk": "^5.3.0", 37 | "commander": "^11.0.0", 38 | "ejs": "^3.1.10", 39 | "find-process": "^1.4.7", 40 | "ignore": "^5.3.1", 41 | "inquirer": "^9.2.11", 42 | "is-interactive": "^2.0.0", 43 | "lodash": "^4.17.21", 44 | "log-symbols": "^5.1.0", 45 | "rage-edit": "^1.2.0", 46 | "semver": "^7.6.0", 47 | "tar": "^7.0.1" 48 | }, 49 | "bin": { 50 | "sd": "bin/streamdeck.mjs", 51 | "streamdeck": "bin/streamdeck.mjs" 52 | }, 53 | "engines": { 54 | "node": "^20.1.0" 55 | } 56 | }, 57 | "node_modules/@elgato/schemas": { 58 | "version": "0.3.9", 59 | "resolved": "https://registry.npmjs.org/@elgato/schemas/-/schemas-0.3.9.tgz", 60 | "integrity": "sha512-ewenHAUFXC2+fLc2TrLHeDqMb5hTXC0ZPrZNm7jIaFEObYGyHMLR8hk7VOLM71Ua+x7SD5mBVpPyM49Uivf91g==", 61 | "dev": true, 62 | "license": "MIT" 63 | }, 64 | "node_modules/@elgato/streamdeck": { 65 | "version": "0.3.0", 66 | "resolved": "https://registry.npmjs.org/@elgato/streamdeck/-/streamdeck-0.3.0.tgz", 67 | "integrity": "sha512-vdcFahvcpsffIu3b+vKtJshnWTUVXzURujmb/A5b00PKuXzgeuoinO7wcGgjsi2DBq9ciqV/0mKFU/FHiWXKtQ==", 68 | "license": "MIT", 69 | "dependencies": { 70 | "ws": "^8.14.2" 71 | }, 72 | "engines": { 73 | "node": "^20.5.1" 74 | } 75 | }, 76 | "node_modules/@humanwhocodes/momoa": { 77 | "version": "3.3.6", 78 | "resolved": "https://registry.npmjs.org/@humanwhocodes/momoa/-/momoa-3.3.6.tgz", 79 | "integrity": "sha512-7/sAGm3YsT6xG1bDkTSHvOpQB+cR4I2InfMVw110nuOCrxZvOQHgRqBMxSoTeUQrk9RS4OU9Aw2MBMZVJgLZMg==", 80 | "dev": true, 81 | "license": "Apache-2.0", 82 | "engines": { 83 | "node": ">=18" 84 | } 85 | }, 86 | "node_modules/@inquirer/figures": { 87 | "version": "1.0.10", 88 | "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.10.tgz", 89 | "integrity": "sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw==", 90 | "dev": true, 91 | "license": "MIT", 92 | "engines": { 93 | "node": ">=18" 94 | } 95 | }, 96 | "node_modules/@isaacs/cliui": { 97 | "version": "8.0.2", 98 | "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", 99 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", 100 | "dev": true, 101 | "license": "ISC", 102 | "dependencies": { 103 | "string-width": "^5.1.2", 104 | "string-width-cjs": "npm:string-width@^4.2.0", 105 | "strip-ansi": "^7.0.1", 106 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", 107 | "wrap-ansi": "^8.1.0", 108 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" 109 | }, 110 | "engines": { 111 | "node": ">=12" 112 | } 113 | }, 114 | "node_modules/@isaacs/cliui/node_modules/ansi-regex": { 115 | "version": "6.1.0", 116 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 117 | "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 118 | "dev": true, 119 | "license": "MIT", 120 | "engines": { 121 | "node": ">=12" 122 | }, 123 | "funding": { 124 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 125 | } 126 | }, 127 | "node_modules/@isaacs/cliui/node_modules/ansi-styles": { 128 | "version": "6.2.1", 129 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 130 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 131 | "dev": true, 132 | "license": "MIT", 133 | "engines": { 134 | "node": ">=12" 135 | }, 136 | "funding": { 137 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 138 | } 139 | }, 140 | "node_modules/@isaacs/cliui/node_modules/emoji-regex": { 141 | "version": "9.2.2", 142 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 143 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 144 | "dev": true, 145 | "license": "MIT" 146 | }, 147 | "node_modules/@isaacs/cliui/node_modules/string-width": { 148 | "version": "5.1.2", 149 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 150 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 151 | "dev": true, 152 | "license": "MIT", 153 | "dependencies": { 154 | "eastasianwidth": "^0.2.0", 155 | "emoji-regex": "^9.2.2", 156 | "strip-ansi": "^7.0.1" 157 | }, 158 | "engines": { 159 | "node": ">=12" 160 | }, 161 | "funding": { 162 | "url": "https://github.com/sponsors/sindresorhus" 163 | } 164 | }, 165 | "node_modules/@isaacs/cliui/node_modules/strip-ansi": { 166 | "version": "7.1.0", 167 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 168 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 169 | "dev": true, 170 | "license": "MIT", 171 | "dependencies": { 172 | "ansi-regex": "^6.0.1" 173 | }, 174 | "engines": { 175 | "node": ">=12" 176 | }, 177 | "funding": { 178 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 179 | } 180 | }, 181 | "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { 182 | "version": "8.1.0", 183 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 184 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 185 | "dev": true, 186 | "license": "MIT", 187 | "dependencies": { 188 | "ansi-styles": "^6.1.0", 189 | "string-width": "^5.0.1", 190 | "strip-ansi": "^7.0.1" 191 | }, 192 | "engines": { 193 | "node": ">=12" 194 | }, 195 | "funding": { 196 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 197 | } 198 | }, 199 | "node_modules/@isaacs/fs-minipass": { 200 | "version": "4.0.1", 201 | "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", 202 | "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", 203 | "dev": true, 204 | "license": "ISC", 205 | "dependencies": { 206 | "minipass": "^7.0.4" 207 | }, 208 | "engines": { 209 | "node": ">=18.0.0" 210 | } 211 | }, 212 | "node_modules/@jridgewell/gen-mapping": { 213 | "version": "0.3.8", 214 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", 215 | "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", 216 | "dev": true, 217 | "license": "MIT", 218 | "dependencies": { 219 | "@jridgewell/set-array": "^1.2.1", 220 | "@jridgewell/sourcemap-codec": "^1.4.10", 221 | "@jridgewell/trace-mapping": "^0.3.24" 222 | }, 223 | "engines": { 224 | "node": ">=6.0.0" 225 | } 226 | }, 227 | "node_modules/@jridgewell/resolve-uri": { 228 | "version": "3.1.2", 229 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 230 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 231 | "dev": true, 232 | "license": "MIT", 233 | "engines": { 234 | "node": ">=6.0.0" 235 | } 236 | }, 237 | "node_modules/@jridgewell/set-array": { 238 | "version": "1.2.1", 239 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 240 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 241 | "dev": true, 242 | "license": "MIT", 243 | "engines": { 244 | "node": ">=6.0.0" 245 | } 246 | }, 247 | "node_modules/@jridgewell/source-map": { 248 | "version": "0.3.6", 249 | "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", 250 | "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", 251 | "dev": true, 252 | "license": "MIT", 253 | "dependencies": { 254 | "@jridgewell/gen-mapping": "^0.3.5", 255 | "@jridgewell/trace-mapping": "^0.3.25" 256 | } 257 | }, 258 | "node_modules/@jridgewell/sourcemap-codec": { 259 | "version": "1.5.0", 260 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 261 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 262 | "dev": true, 263 | "license": "MIT" 264 | }, 265 | "node_modules/@jridgewell/trace-mapping": { 266 | "version": "0.3.25", 267 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 268 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 269 | "dev": true, 270 | "license": "MIT", 271 | "dependencies": { 272 | "@jridgewell/resolve-uri": "^3.1.0", 273 | "@jridgewell/sourcemap-codec": "^1.4.14" 274 | } 275 | }, 276 | "node_modules/@pkgjs/parseargs": { 277 | "version": "0.11.0", 278 | "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", 279 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", 280 | "dev": true, 281 | "license": "MIT", 282 | "optional": true, 283 | "engines": { 284 | "node": ">=14" 285 | } 286 | }, 287 | "node_modules/@rollup/plugin-commonjs": { 288 | "version": "25.0.8", 289 | "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.8.tgz", 290 | "integrity": "sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A==", 291 | "dev": true, 292 | "license": "MIT", 293 | "dependencies": { 294 | "@rollup/pluginutils": "^5.0.1", 295 | "commondir": "^1.0.1", 296 | "estree-walker": "^2.0.2", 297 | "glob": "^8.0.3", 298 | "is-reference": "1.2.1", 299 | "magic-string": "^0.30.3" 300 | }, 301 | "engines": { 302 | "node": ">=14.0.0" 303 | }, 304 | "peerDependencies": { 305 | "rollup": "^2.68.0||^3.0.0||^4.0.0" 306 | }, 307 | "peerDependenciesMeta": { 308 | "rollup": { 309 | "optional": true 310 | } 311 | } 312 | }, 313 | "node_modules/@rollup/plugin-node-resolve": { 314 | "version": "15.3.1", 315 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", 316 | "integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==", 317 | "dev": true, 318 | "license": "MIT", 319 | "dependencies": { 320 | "@rollup/pluginutils": "^5.0.1", 321 | "@types/resolve": "1.20.2", 322 | "deepmerge": "^4.2.2", 323 | "is-module": "^1.0.0", 324 | "resolve": "^1.22.1" 325 | }, 326 | "engines": { 327 | "node": ">=14.0.0" 328 | }, 329 | "peerDependencies": { 330 | "rollup": "^2.78.0||^3.0.0||^4.0.0" 331 | }, 332 | "peerDependenciesMeta": { 333 | "rollup": { 334 | "optional": true 335 | } 336 | } 337 | }, 338 | "node_modules/@rollup/plugin-terser": { 339 | "version": "0.4.4", 340 | "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", 341 | "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", 342 | "dev": true, 343 | "license": "MIT", 344 | "dependencies": { 345 | "serialize-javascript": "^6.0.1", 346 | "smob": "^1.0.0", 347 | "terser": "^5.17.4" 348 | }, 349 | "engines": { 350 | "node": ">=14.0.0" 351 | }, 352 | "peerDependencies": { 353 | "rollup": "^2.0.0||^3.0.0||^4.0.0" 354 | }, 355 | "peerDependenciesMeta": { 356 | "rollup": { 357 | "optional": true 358 | } 359 | } 360 | }, 361 | "node_modules/@rollup/plugin-typescript": { 362 | "version": "11.1.6", 363 | "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.1.6.tgz", 364 | "integrity": "sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==", 365 | "dev": true, 366 | "license": "MIT", 367 | "dependencies": { 368 | "@rollup/pluginutils": "^5.1.0", 369 | "resolve": "^1.22.1" 370 | }, 371 | "engines": { 372 | "node": ">=14.0.0" 373 | }, 374 | "peerDependencies": { 375 | "rollup": "^2.14.0||^3.0.0||^4.0.0", 376 | "tslib": "*", 377 | "typescript": ">=3.7.0" 378 | }, 379 | "peerDependenciesMeta": { 380 | "rollup": { 381 | "optional": true 382 | }, 383 | "tslib": { 384 | "optional": true 385 | } 386 | } 387 | }, 388 | "node_modules/@rollup/pluginutils": { 389 | "version": "5.1.4", 390 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", 391 | "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", 392 | "dev": true, 393 | "license": "MIT", 394 | "dependencies": { 395 | "@types/estree": "^1.0.0", 396 | "estree-walker": "^2.0.2", 397 | "picomatch": "^4.0.2" 398 | }, 399 | "engines": { 400 | "node": ">=14.0.0" 401 | }, 402 | "peerDependencies": { 403 | "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" 404 | }, 405 | "peerDependenciesMeta": { 406 | "rollup": { 407 | "optional": true 408 | } 409 | } 410 | }, 411 | "node_modules/@rollup/rollup-android-arm-eabi": { 412 | "version": "4.34.6", 413 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.6.tgz", 414 | "integrity": "sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==", 415 | "cpu": [ 416 | "arm" 417 | ], 418 | "dev": true, 419 | "license": "MIT", 420 | "optional": true, 421 | "os": [ 422 | "android" 423 | ] 424 | }, 425 | "node_modules/@rollup/rollup-android-arm64": { 426 | "version": "4.34.6", 427 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.6.tgz", 428 | "integrity": "sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==", 429 | "cpu": [ 430 | "arm64" 431 | ], 432 | "dev": true, 433 | "license": "MIT", 434 | "optional": true, 435 | "os": [ 436 | "android" 437 | ] 438 | }, 439 | "node_modules/@rollup/rollup-darwin-arm64": { 440 | "version": "4.34.6", 441 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.6.tgz", 442 | "integrity": "sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==", 443 | "cpu": [ 444 | "arm64" 445 | ], 446 | "dev": true, 447 | "license": "MIT", 448 | "optional": true, 449 | "os": [ 450 | "darwin" 451 | ] 452 | }, 453 | "node_modules/@rollup/rollup-darwin-x64": { 454 | "version": "4.34.6", 455 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.6.tgz", 456 | "integrity": "sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==", 457 | "cpu": [ 458 | "x64" 459 | ], 460 | "dev": true, 461 | "license": "MIT", 462 | "optional": true, 463 | "os": [ 464 | "darwin" 465 | ] 466 | }, 467 | "node_modules/@rollup/rollup-freebsd-arm64": { 468 | "version": "4.34.6", 469 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.6.tgz", 470 | "integrity": "sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==", 471 | "cpu": [ 472 | "arm64" 473 | ], 474 | "dev": true, 475 | "license": "MIT", 476 | "optional": true, 477 | "os": [ 478 | "freebsd" 479 | ] 480 | }, 481 | "node_modules/@rollup/rollup-freebsd-x64": { 482 | "version": "4.34.6", 483 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.6.tgz", 484 | "integrity": "sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==", 485 | "cpu": [ 486 | "x64" 487 | ], 488 | "dev": true, 489 | "license": "MIT", 490 | "optional": true, 491 | "os": [ 492 | "freebsd" 493 | ] 494 | }, 495 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 496 | "version": "4.34.6", 497 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.6.tgz", 498 | "integrity": "sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==", 499 | "cpu": [ 500 | "arm" 501 | ], 502 | "dev": true, 503 | "license": "MIT", 504 | "optional": true, 505 | "os": [ 506 | "linux" 507 | ] 508 | }, 509 | "node_modules/@rollup/rollup-linux-arm-musleabihf": { 510 | "version": "4.34.6", 511 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.6.tgz", 512 | "integrity": "sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==", 513 | "cpu": [ 514 | "arm" 515 | ], 516 | "dev": true, 517 | "license": "MIT", 518 | "optional": true, 519 | "os": [ 520 | "linux" 521 | ] 522 | }, 523 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 524 | "version": "4.34.6", 525 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.6.tgz", 526 | "integrity": "sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==", 527 | "cpu": [ 528 | "arm64" 529 | ], 530 | "dev": true, 531 | "license": "MIT", 532 | "optional": true, 533 | "os": [ 534 | "linux" 535 | ] 536 | }, 537 | "node_modules/@rollup/rollup-linux-arm64-musl": { 538 | "version": "4.34.6", 539 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.6.tgz", 540 | "integrity": "sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==", 541 | "cpu": [ 542 | "arm64" 543 | ], 544 | "dev": true, 545 | "license": "MIT", 546 | "optional": true, 547 | "os": [ 548 | "linux" 549 | ] 550 | }, 551 | "node_modules/@rollup/rollup-linux-loongarch64-gnu": { 552 | "version": "4.34.6", 553 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.6.tgz", 554 | "integrity": "sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==", 555 | "cpu": [ 556 | "loong64" 557 | ], 558 | "dev": true, 559 | "license": "MIT", 560 | "optional": true, 561 | "os": [ 562 | "linux" 563 | ] 564 | }, 565 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { 566 | "version": "4.34.6", 567 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.6.tgz", 568 | "integrity": "sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==", 569 | "cpu": [ 570 | "ppc64" 571 | ], 572 | "dev": true, 573 | "license": "MIT", 574 | "optional": true, 575 | "os": [ 576 | "linux" 577 | ] 578 | }, 579 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 580 | "version": "4.34.6", 581 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.6.tgz", 582 | "integrity": "sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==", 583 | "cpu": [ 584 | "riscv64" 585 | ], 586 | "dev": true, 587 | "license": "MIT", 588 | "optional": true, 589 | "os": [ 590 | "linux" 591 | ] 592 | }, 593 | "node_modules/@rollup/rollup-linux-s390x-gnu": { 594 | "version": "4.34.6", 595 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.6.tgz", 596 | "integrity": "sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==", 597 | "cpu": [ 598 | "s390x" 599 | ], 600 | "dev": true, 601 | "license": "MIT", 602 | "optional": true, 603 | "os": [ 604 | "linux" 605 | ] 606 | }, 607 | "node_modules/@rollup/rollup-linux-x64-gnu": { 608 | "version": "4.34.6", 609 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.6.tgz", 610 | "integrity": "sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==", 611 | "cpu": [ 612 | "x64" 613 | ], 614 | "dev": true, 615 | "license": "MIT", 616 | "optional": true, 617 | "os": [ 618 | "linux" 619 | ] 620 | }, 621 | "node_modules/@rollup/rollup-linux-x64-musl": { 622 | "version": "4.34.6", 623 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.6.tgz", 624 | "integrity": "sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==", 625 | "cpu": [ 626 | "x64" 627 | ], 628 | "dev": true, 629 | "license": "MIT", 630 | "optional": true, 631 | "os": [ 632 | "linux" 633 | ] 634 | }, 635 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 636 | "version": "4.34.6", 637 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.6.tgz", 638 | "integrity": "sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==", 639 | "cpu": [ 640 | "arm64" 641 | ], 642 | "dev": true, 643 | "license": "MIT", 644 | "optional": true, 645 | "os": [ 646 | "win32" 647 | ] 648 | }, 649 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 650 | "version": "4.34.6", 651 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.6.tgz", 652 | "integrity": "sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==", 653 | "cpu": [ 654 | "ia32" 655 | ], 656 | "dev": true, 657 | "license": "MIT", 658 | "optional": true, 659 | "os": [ 660 | "win32" 661 | ] 662 | }, 663 | "node_modules/@rollup/rollup-win32-x64-msvc": { 664 | "version": "4.34.6", 665 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.6.tgz", 666 | "integrity": "sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==", 667 | "cpu": [ 668 | "x64" 669 | ], 670 | "dev": true, 671 | "license": "MIT", 672 | "optional": true, 673 | "os": [ 674 | "win32" 675 | ] 676 | }, 677 | "node_modules/@tsconfig/node20": { 678 | "version": "20.1.4", 679 | "resolved": "https://registry.npmjs.org/@tsconfig/node20/-/node20-20.1.4.tgz", 680 | "integrity": "sha512-sqgsT69YFeLWf5NtJ4Xq/xAF8p4ZQHlmGW74Nu2tD4+g5fAsposc4ZfaaPixVu4y01BEiDCWLRDCvDM5JOsRxg==", 681 | "dev": true, 682 | "license": "MIT" 683 | }, 684 | "node_modules/@types/estree": { 685 | "version": "1.0.6", 686 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", 687 | "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", 688 | "dev": true, 689 | "license": "MIT" 690 | }, 691 | "node_modules/@types/node": { 692 | "version": "20.8.10", 693 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz", 694 | "integrity": "sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==", 695 | "dev": true, 696 | "license": "MIT", 697 | "dependencies": { 698 | "undici-types": "~5.26.4" 699 | } 700 | }, 701 | "node_modules/@types/resolve": { 702 | "version": "1.20.2", 703 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", 704 | "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", 705 | "dev": true, 706 | "license": "MIT" 707 | }, 708 | "node_modules/@zip.js/zip.js": { 709 | "version": "2.7.57", 710 | "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.57.tgz", 711 | "integrity": "sha512-BtonQ1/jDnGiMed6OkV6rZYW78gLmLswkHOzyMrMb+CAR7CZO8phOHO6c2qw6qb1g1betN7kwEHhhZk30dv+NA==", 712 | "dev": true, 713 | "license": "BSD-3-Clause", 714 | "engines": { 715 | "bun": ">=0.7.0", 716 | "deno": ">=1.0.0", 717 | "node": ">=16.5.0" 718 | } 719 | }, 720 | "node_modules/acorn": { 721 | "version": "8.14.0", 722 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", 723 | "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", 724 | "dev": true, 725 | "license": "MIT", 726 | "bin": { 727 | "acorn": "bin/acorn" 728 | }, 729 | "engines": { 730 | "node": ">=0.4.0" 731 | } 732 | }, 733 | "node_modules/ajv": { 734 | "version": "8.17.1", 735 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", 736 | "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", 737 | "dev": true, 738 | "license": "MIT", 739 | "dependencies": { 740 | "fast-deep-equal": "^3.1.3", 741 | "fast-uri": "^3.0.1", 742 | "json-schema-traverse": "^1.0.0", 743 | "require-from-string": "^2.0.2" 744 | }, 745 | "funding": { 746 | "type": "github", 747 | "url": "https://github.com/sponsors/epoberezkin" 748 | } 749 | }, 750 | "node_modules/ansi-escapes": { 751 | "version": "4.3.2", 752 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", 753 | "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", 754 | "dev": true, 755 | "license": "MIT", 756 | "dependencies": { 757 | "type-fest": "^0.21.3" 758 | }, 759 | "engines": { 760 | "node": ">=8" 761 | }, 762 | "funding": { 763 | "url": "https://github.com/sponsors/sindresorhus" 764 | } 765 | }, 766 | "node_modules/ansi-regex": { 767 | "version": "5.0.1", 768 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 769 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 770 | "dev": true, 771 | "license": "MIT", 772 | "engines": { 773 | "node": ">=8" 774 | } 775 | }, 776 | "node_modules/ansi-styles": { 777 | "version": "4.3.0", 778 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 779 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 780 | "dev": true, 781 | "license": "MIT", 782 | "dependencies": { 783 | "color-convert": "^2.0.1" 784 | }, 785 | "engines": { 786 | "node": ">=8" 787 | }, 788 | "funding": { 789 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 790 | } 791 | }, 792 | "node_modules/async": { 793 | "version": "3.2.6", 794 | "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", 795 | "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", 796 | "dev": true, 797 | "license": "MIT" 798 | }, 799 | "node_modules/balanced-match": { 800 | "version": "1.0.2", 801 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 802 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 803 | "dev": true, 804 | "license": "MIT" 805 | }, 806 | "node_modules/base64-js": { 807 | "version": "1.5.1", 808 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 809 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 810 | "dev": true, 811 | "funding": [ 812 | { 813 | "type": "github", 814 | "url": "https://github.com/sponsors/feross" 815 | }, 816 | { 817 | "type": "patreon", 818 | "url": "https://www.patreon.com/feross" 819 | }, 820 | { 821 | "type": "consulting", 822 | "url": "https://feross.org/support" 823 | } 824 | ], 825 | "license": "MIT" 826 | }, 827 | "node_modules/bl": { 828 | "version": "4.1.0", 829 | "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", 830 | "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", 831 | "dev": true, 832 | "license": "MIT", 833 | "dependencies": { 834 | "buffer": "^5.5.0", 835 | "inherits": "^2.0.4", 836 | "readable-stream": "^3.4.0" 837 | } 838 | }, 839 | "node_modules/brace-expansion": { 840 | "version": "2.0.1", 841 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 842 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 843 | "dev": true, 844 | "license": "MIT", 845 | "dependencies": { 846 | "balanced-match": "^1.0.0" 847 | } 848 | }, 849 | "node_modules/buffer": { 850 | "version": "5.7.1", 851 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 852 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 853 | "dev": true, 854 | "funding": [ 855 | { 856 | "type": "github", 857 | "url": "https://github.com/sponsors/feross" 858 | }, 859 | { 860 | "type": "patreon", 861 | "url": "https://www.patreon.com/feross" 862 | }, 863 | { 864 | "type": "consulting", 865 | "url": "https://feross.org/support" 866 | } 867 | ], 868 | "license": "MIT", 869 | "dependencies": { 870 | "base64-js": "^1.3.1", 871 | "ieee754": "^1.1.13" 872 | } 873 | }, 874 | "node_modules/buffer-from": { 875 | "version": "1.1.2", 876 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 877 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 878 | "dev": true, 879 | "license": "MIT" 880 | }, 881 | "node_modules/chalk": { 882 | "version": "5.4.1", 883 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", 884 | "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", 885 | "dev": true, 886 | "license": "MIT", 887 | "engines": { 888 | "node": "^12.17.0 || ^14.13 || >=16.0.0" 889 | }, 890 | "funding": { 891 | "url": "https://github.com/chalk/chalk?sponsor=1" 892 | } 893 | }, 894 | "node_modules/chardet": { 895 | "version": "0.7.0", 896 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", 897 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", 898 | "dev": true, 899 | "license": "MIT" 900 | }, 901 | "node_modules/chownr": { 902 | "version": "3.0.0", 903 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", 904 | "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", 905 | "dev": true, 906 | "license": "BlueOak-1.0.0", 907 | "engines": { 908 | "node": ">=18" 909 | } 910 | }, 911 | "node_modules/cli-cursor": { 912 | "version": "3.1.0", 913 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", 914 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", 915 | "dev": true, 916 | "license": "MIT", 917 | "dependencies": { 918 | "restore-cursor": "^3.1.0" 919 | }, 920 | "engines": { 921 | "node": ">=8" 922 | } 923 | }, 924 | "node_modules/cli-spinners": { 925 | "version": "2.9.2", 926 | "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", 927 | "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", 928 | "dev": true, 929 | "license": "MIT", 930 | "engines": { 931 | "node": ">=6" 932 | }, 933 | "funding": { 934 | "url": "https://github.com/sponsors/sindresorhus" 935 | } 936 | }, 937 | "node_modules/cli-width": { 938 | "version": "4.1.0", 939 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", 940 | "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", 941 | "dev": true, 942 | "license": "ISC", 943 | "engines": { 944 | "node": ">= 12" 945 | } 946 | }, 947 | "node_modules/clone": { 948 | "version": "1.0.4", 949 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", 950 | "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", 951 | "dev": true, 952 | "license": "MIT", 953 | "engines": { 954 | "node": ">=0.8" 955 | } 956 | }, 957 | "node_modules/color-convert": { 958 | "version": "2.0.1", 959 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 960 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 961 | "dev": true, 962 | "license": "MIT", 963 | "dependencies": { 964 | "color-name": "~1.1.4" 965 | }, 966 | "engines": { 967 | "node": ">=7.0.0" 968 | } 969 | }, 970 | "node_modules/color-name": { 971 | "version": "1.1.4", 972 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 973 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 974 | "dev": true, 975 | "license": "MIT" 976 | }, 977 | "node_modules/commander": { 978 | "version": "11.1.0", 979 | "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", 980 | "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", 981 | "dev": true, 982 | "license": "MIT", 983 | "engines": { 984 | "node": ">=16" 985 | } 986 | }, 987 | "node_modules/commondir": { 988 | "version": "1.0.1", 989 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 990 | "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", 991 | "dev": true, 992 | "license": "MIT" 993 | }, 994 | "node_modules/concat-map": { 995 | "version": "0.0.1", 996 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 997 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 998 | "dev": true, 999 | "license": "MIT" 1000 | }, 1001 | "node_modules/cross-spawn": { 1002 | "version": "7.0.6", 1003 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", 1004 | "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 1005 | "dev": true, 1006 | "license": "MIT", 1007 | "dependencies": { 1008 | "path-key": "^3.1.0", 1009 | "shebang-command": "^2.0.0", 1010 | "which": "^2.0.1" 1011 | }, 1012 | "engines": { 1013 | "node": ">= 8" 1014 | } 1015 | }, 1016 | "node_modules/deepmerge": { 1017 | "version": "4.3.1", 1018 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", 1019 | "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", 1020 | "dev": true, 1021 | "license": "MIT", 1022 | "engines": { 1023 | "node": ">=0.10.0" 1024 | } 1025 | }, 1026 | "node_modules/defaults": { 1027 | "version": "1.0.4", 1028 | "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", 1029 | "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", 1030 | "dev": true, 1031 | "license": "MIT", 1032 | "dependencies": { 1033 | "clone": "^1.0.2" 1034 | }, 1035 | "funding": { 1036 | "url": "https://github.com/sponsors/sindresorhus" 1037 | } 1038 | }, 1039 | "node_modules/eastasianwidth": { 1040 | "version": "0.2.0", 1041 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 1042 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 1043 | "dev": true, 1044 | "license": "MIT" 1045 | }, 1046 | "node_modules/ejs": { 1047 | "version": "3.1.10", 1048 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", 1049 | "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", 1050 | "dev": true, 1051 | "license": "Apache-2.0", 1052 | "dependencies": { 1053 | "jake": "^10.8.5" 1054 | }, 1055 | "bin": { 1056 | "ejs": "bin/cli.js" 1057 | }, 1058 | "engines": { 1059 | "node": ">=0.10.0" 1060 | } 1061 | }, 1062 | "node_modules/emoji-regex": { 1063 | "version": "8.0.0", 1064 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1065 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1066 | "dev": true, 1067 | "license": "MIT" 1068 | }, 1069 | "node_modules/estree-walker": { 1070 | "version": "2.0.2", 1071 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 1072 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 1073 | "dev": true, 1074 | "license": "MIT" 1075 | }, 1076 | "node_modules/external-editor": { 1077 | "version": "3.1.0", 1078 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", 1079 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", 1080 | "dev": true, 1081 | "license": "MIT", 1082 | "dependencies": { 1083 | "chardet": "^0.7.0", 1084 | "iconv-lite": "^0.4.24", 1085 | "tmp": "^0.0.33" 1086 | }, 1087 | "engines": { 1088 | "node": ">=4" 1089 | } 1090 | }, 1091 | "node_modules/fast-deep-equal": { 1092 | "version": "3.1.3", 1093 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1094 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1095 | "dev": true, 1096 | "license": "MIT" 1097 | }, 1098 | "node_modules/fast-uri": { 1099 | "version": "3.0.6", 1100 | "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", 1101 | "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", 1102 | "dev": true, 1103 | "funding": [ 1104 | { 1105 | "type": "github", 1106 | "url": "https://github.com/sponsors/fastify" 1107 | }, 1108 | { 1109 | "type": "opencollective", 1110 | "url": "https://opencollective.com/fastify" 1111 | } 1112 | ], 1113 | "license": "BSD-3-Clause" 1114 | }, 1115 | "node_modules/filelist": { 1116 | "version": "1.0.4", 1117 | "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", 1118 | "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", 1119 | "dev": true, 1120 | "license": "Apache-2.0", 1121 | "dependencies": { 1122 | "minimatch": "^5.0.1" 1123 | } 1124 | }, 1125 | "node_modules/find-process": { 1126 | "version": "1.4.10", 1127 | "resolved": "https://registry.npmjs.org/find-process/-/find-process-1.4.10.tgz", 1128 | "integrity": "sha512-ncYFnWEIwL7PzmrK1yZtaccN8GhethD37RzBHG6iOZoFYB4vSmLLXfeWJjeN5nMvCJMjOtBvBBF8OgxEcikiZg==", 1129 | "dev": true, 1130 | "license": "MIT", 1131 | "dependencies": { 1132 | "chalk": "~4.1.2", 1133 | "commander": "^12.1.0", 1134 | "loglevel": "^1.9.2" 1135 | }, 1136 | "bin": { 1137 | "find-process": "bin/find-process.js" 1138 | } 1139 | }, 1140 | "node_modules/find-process/node_modules/chalk": { 1141 | "version": "4.1.2", 1142 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1143 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1144 | "dev": true, 1145 | "license": "MIT", 1146 | "dependencies": { 1147 | "ansi-styles": "^4.1.0", 1148 | "supports-color": "^7.1.0" 1149 | }, 1150 | "engines": { 1151 | "node": ">=10" 1152 | }, 1153 | "funding": { 1154 | "url": "https://github.com/chalk/chalk?sponsor=1" 1155 | } 1156 | }, 1157 | "node_modules/find-process/node_modules/commander": { 1158 | "version": "12.1.0", 1159 | "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", 1160 | "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", 1161 | "dev": true, 1162 | "license": "MIT", 1163 | "engines": { 1164 | "node": ">=18" 1165 | } 1166 | }, 1167 | "node_modules/foreground-child": { 1168 | "version": "3.3.0", 1169 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", 1170 | "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", 1171 | "dev": true, 1172 | "license": "ISC", 1173 | "dependencies": { 1174 | "cross-spawn": "^7.0.0", 1175 | "signal-exit": "^4.0.1" 1176 | }, 1177 | "engines": { 1178 | "node": ">=14" 1179 | }, 1180 | "funding": { 1181 | "url": "https://github.com/sponsors/isaacs" 1182 | } 1183 | }, 1184 | "node_modules/foreground-child/node_modules/signal-exit": { 1185 | "version": "4.1.0", 1186 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 1187 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 1188 | "dev": true, 1189 | "license": "ISC", 1190 | "engines": { 1191 | "node": ">=14" 1192 | }, 1193 | "funding": { 1194 | "url": "https://github.com/sponsors/isaacs" 1195 | } 1196 | }, 1197 | "node_modules/fs.realpath": { 1198 | "version": "1.0.0", 1199 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1200 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1201 | "dev": true, 1202 | "license": "ISC" 1203 | }, 1204 | "node_modules/fsevents": { 1205 | "version": "2.3.3", 1206 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1207 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1208 | "dev": true, 1209 | "hasInstallScript": true, 1210 | "license": "MIT", 1211 | "optional": true, 1212 | "os": [ 1213 | "darwin" 1214 | ], 1215 | "engines": { 1216 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1217 | } 1218 | }, 1219 | "node_modules/function-bind": { 1220 | "version": "1.1.2", 1221 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 1222 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 1223 | "dev": true, 1224 | "license": "MIT", 1225 | "funding": { 1226 | "url": "https://github.com/sponsors/ljharb" 1227 | } 1228 | }, 1229 | "node_modules/glob": { 1230 | "version": "8.1.0", 1231 | "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", 1232 | "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", 1233 | "deprecated": "Glob versions prior to v9 are no longer supported", 1234 | "dev": true, 1235 | "license": "ISC", 1236 | "dependencies": { 1237 | "fs.realpath": "^1.0.0", 1238 | "inflight": "^1.0.4", 1239 | "inherits": "2", 1240 | "minimatch": "^5.0.1", 1241 | "once": "^1.3.0" 1242 | }, 1243 | "engines": { 1244 | "node": ">=12" 1245 | }, 1246 | "funding": { 1247 | "url": "https://github.com/sponsors/isaacs" 1248 | } 1249 | }, 1250 | "node_modules/has-flag": { 1251 | "version": "4.0.0", 1252 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1253 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1254 | "dev": true, 1255 | "license": "MIT", 1256 | "engines": { 1257 | "node": ">=8" 1258 | } 1259 | }, 1260 | "node_modules/hasown": { 1261 | "version": "2.0.2", 1262 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 1263 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 1264 | "dev": true, 1265 | "license": "MIT", 1266 | "dependencies": { 1267 | "function-bind": "^1.1.2" 1268 | }, 1269 | "engines": { 1270 | "node": ">= 0.4" 1271 | } 1272 | }, 1273 | "node_modules/iconv-lite": { 1274 | "version": "0.4.24", 1275 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1276 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1277 | "dev": true, 1278 | "license": "MIT", 1279 | "dependencies": { 1280 | "safer-buffer": ">= 2.1.2 < 3" 1281 | }, 1282 | "engines": { 1283 | "node": ">=0.10.0" 1284 | } 1285 | }, 1286 | "node_modules/ieee754": { 1287 | "version": "1.2.1", 1288 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 1289 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 1290 | "dev": true, 1291 | "funding": [ 1292 | { 1293 | "type": "github", 1294 | "url": "https://github.com/sponsors/feross" 1295 | }, 1296 | { 1297 | "type": "patreon", 1298 | "url": "https://www.patreon.com/feross" 1299 | }, 1300 | { 1301 | "type": "consulting", 1302 | "url": "https://feross.org/support" 1303 | } 1304 | ], 1305 | "license": "BSD-3-Clause" 1306 | }, 1307 | "node_modules/ignore": { 1308 | "version": "5.3.2", 1309 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", 1310 | "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", 1311 | "dev": true, 1312 | "license": "MIT", 1313 | "engines": { 1314 | "node": ">= 4" 1315 | } 1316 | }, 1317 | "node_modules/inflight": { 1318 | "version": "1.0.6", 1319 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1320 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1321 | "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", 1322 | "dev": true, 1323 | "license": "ISC", 1324 | "dependencies": { 1325 | "once": "^1.3.0", 1326 | "wrappy": "1" 1327 | } 1328 | }, 1329 | "node_modules/inherits": { 1330 | "version": "2.0.4", 1331 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1332 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1333 | "dev": true, 1334 | "license": "ISC" 1335 | }, 1336 | "node_modules/inquirer": { 1337 | "version": "9.3.7", 1338 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.3.7.tgz", 1339 | "integrity": "sha512-LJKFHCSeIRq9hanN14IlOtPSTe3lNES7TYDTE2xxdAy1LS5rYphajK1qtwvj3YmQXvvk0U2Vbmcni8P9EIQW9w==", 1340 | "dev": true, 1341 | "license": "MIT", 1342 | "dependencies": { 1343 | "@inquirer/figures": "^1.0.3", 1344 | "ansi-escapes": "^4.3.2", 1345 | "cli-width": "^4.1.0", 1346 | "external-editor": "^3.1.0", 1347 | "mute-stream": "1.0.0", 1348 | "ora": "^5.4.1", 1349 | "run-async": "^3.0.0", 1350 | "rxjs": "^7.8.1", 1351 | "string-width": "^4.2.3", 1352 | "strip-ansi": "^6.0.1", 1353 | "wrap-ansi": "^6.2.0", 1354 | "yoctocolors-cjs": "^2.1.2" 1355 | }, 1356 | "engines": { 1357 | "node": ">=18" 1358 | } 1359 | }, 1360 | "node_modules/is-core-module": { 1361 | "version": "2.16.1", 1362 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", 1363 | "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", 1364 | "dev": true, 1365 | "license": "MIT", 1366 | "dependencies": { 1367 | "hasown": "^2.0.2" 1368 | }, 1369 | "engines": { 1370 | "node": ">= 0.4" 1371 | }, 1372 | "funding": { 1373 | "url": "https://github.com/sponsors/ljharb" 1374 | } 1375 | }, 1376 | "node_modules/is-fullwidth-code-point": { 1377 | "version": "3.0.0", 1378 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1379 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1380 | "dev": true, 1381 | "license": "MIT", 1382 | "engines": { 1383 | "node": ">=8" 1384 | } 1385 | }, 1386 | "node_modules/is-interactive": { 1387 | "version": "2.0.0", 1388 | "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", 1389 | "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", 1390 | "dev": true, 1391 | "license": "MIT", 1392 | "engines": { 1393 | "node": ">=12" 1394 | }, 1395 | "funding": { 1396 | "url": "https://github.com/sponsors/sindresorhus" 1397 | } 1398 | }, 1399 | "node_modules/is-module": { 1400 | "version": "1.0.0", 1401 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 1402 | "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", 1403 | "dev": true, 1404 | "license": "MIT" 1405 | }, 1406 | "node_modules/is-reference": { 1407 | "version": "1.2.1", 1408 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", 1409 | "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", 1410 | "dev": true, 1411 | "license": "MIT", 1412 | "dependencies": { 1413 | "@types/estree": "*" 1414 | } 1415 | }, 1416 | "node_modules/is-unicode-supported": { 1417 | "version": "1.3.0", 1418 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", 1419 | "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", 1420 | "dev": true, 1421 | "license": "MIT", 1422 | "engines": { 1423 | "node": ">=12" 1424 | }, 1425 | "funding": { 1426 | "url": "https://github.com/sponsors/sindresorhus" 1427 | } 1428 | }, 1429 | "node_modules/isexe": { 1430 | "version": "2.0.0", 1431 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1432 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1433 | "dev": true, 1434 | "license": "ISC" 1435 | }, 1436 | "node_modules/jackspeak": { 1437 | "version": "3.4.3", 1438 | "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", 1439 | "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", 1440 | "dev": true, 1441 | "license": "BlueOak-1.0.0", 1442 | "dependencies": { 1443 | "@isaacs/cliui": "^8.0.2" 1444 | }, 1445 | "funding": { 1446 | "url": "https://github.com/sponsors/isaacs" 1447 | }, 1448 | "optionalDependencies": { 1449 | "@pkgjs/parseargs": "^0.11.0" 1450 | } 1451 | }, 1452 | "node_modules/jake": { 1453 | "version": "10.9.2", 1454 | "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", 1455 | "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", 1456 | "dev": true, 1457 | "license": "Apache-2.0", 1458 | "dependencies": { 1459 | "async": "^3.2.3", 1460 | "chalk": "^4.0.2", 1461 | "filelist": "^1.0.4", 1462 | "minimatch": "^3.1.2" 1463 | }, 1464 | "bin": { 1465 | "jake": "bin/cli.js" 1466 | }, 1467 | "engines": { 1468 | "node": ">=10" 1469 | } 1470 | }, 1471 | "node_modules/jake/node_modules/brace-expansion": { 1472 | "version": "1.1.11", 1473 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1474 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1475 | "dev": true, 1476 | "license": "MIT", 1477 | "dependencies": { 1478 | "balanced-match": "^1.0.0", 1479 | "concat-map": "0.0.1" 1480 | } 1481 | }, 1482 | "node_modules/jake/node_modules/chalk": { 1483 | "version": "4.1.2", 1484 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1485 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1486 | "dev": true, 1487 | "license": "MIT", 1488 | "dependencies": { 1489 | "ansi-styles": "^4.1.0", 1490 | "supports-color": "^7.1.0" 1491 | }, 1492 | "engines": { 1493 | "node": ">=10" 1494 | }, 1495 | "funding": { 1496 | "url": "https://github.com/chalk/chalk?sponsor=1" 1497 | } 1498 | }, 1499 | "node_modules/jake/node_modules/minimatch": { 1500 | "version": "3.1.2", 1501 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1502 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1503 | "dev": true, 1504 | "license": "ISC", 1505 | "dependencies": { 1506 | "brace-expansion": "^1.1.7" 1507 | }, 1508 | "engines": { 1509 | "node": "*" 1510 | } 1511 | }, 1512 | "node_modules/json-schema-traverse": { 1513 | "version": "1.0.0", 1514 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 1515 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 1516 | "dev": true, 1517 | "license": "MIT" 1518 | }, 1519 | "node_modules/lodash": { 1520 | "version": "4.17.21", 1521 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1522 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 1523 | "dev": true, 1524 | "license": "MIT" 1525 | }, 1526 | "node_modules/log-symbols": { 1527 | "version": "5.1.0", 1528 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", 1529 | "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", 1530 | "dev": true, 1531 | "license": "MIT", 1532 | "dependencies": { 1533 | "chalk": "^5.0.0", 1534 | "is-unicode-supported": "^1.1.0" 1535 | }, 1536 | "engines": { 1537 | "node": ">=12" 1538 | }, 1539 | "funding": { 1540 | "url": "https://github.com/sponsors/sindresorhus" 1541 | } 1542 | }, 1543 | "node_modules/loglevel": { 1544 | "version": "1.9.2", 1545 | "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz", 1546 | "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==", 1547 | "dev": true, 1548 | "license": "MIT", 1549 | "engines": { 1550 | "node": ">= 0.6.0" 1551 | }, 1552 | "funding": { 1553 | "type": "tidelift", 1554 | "url": "https://tidelift.com/funding/github/npm/loglevel" 1555 | } 1556 | }, 1557 | "node_modules/lru-cache": { 1558 | "version": "10.4.3", 1559 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", 1560 | "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", 1561 | "dev": true, 1562 | "license": "ISC" 1563 | }, 1564 | "node_modules/magic-string": { 1565 | "version": "0.30.17", 1566 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", 1567 | "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", 1568 | "dev": true, 1569 | "license": "MIT", 1570 | "dependencies": { 1571 | "@jridgewell/sourcemap-codec": "^1.5.0" 1572 | } 1573 | }, 1574 | "node_modules/mimic-fn": { 1575 | "version": "2.1.0", 1576 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 1577 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 1578 | "dev": true, 1579 | "license": "MIT", 1580 | "engines": { 1581 | "node": ">=6" 1582 | } 1583 | }, 1584 | "node_modules/minimatch": { 1585 | "version": "5.1.6", 1586 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", 1587 | "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", 1588 | "dev": true, 1589 | "license": "ISC", 1590 | "dependencies": { 1591 | "brace-expansion": "^2.0.1" 1592 | }, 1593 | "engines": { 1594 | "node": ">=10" 1595 | } 1596 | }, 1597 | "node_modules/minipass": { 1598 | "version": "7.1.2", 1599 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", 1600 | "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", 1601 | "dev": true, 1602 | "license": "ISC", 1603 | "engines": { 1604 | "node": ">=16 || 14 >=14.17" 1605 | } 1606 | }, 1607 | "node_modules/minizlib": { 1608 | "version": "3.0.1", 1609 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.1.tgz", 1610 | "integrity": "sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==", 1611 | "dev": true, 1612 | "license": "MIT", 1613 | "dependencies": { 1614 | "minipass": "^7.0.4", 1615 | "rimraf": "^5.0.5" 1616 | }, 1617 | "engines": { 1618 | "node": ">= 18" 1619 | } 1620 | }, 1621 | "node_modules/mkdirp": { 1622 | "version": "3.0.1", 1623 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", 1624 | "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", 1625 | "dev": true, 1626 | "license": "MIT", 1627 | "bin": { 1628 | "mkdirp": "dist/cjs/src/bin.js" 1629 | }, 1630 | "engines": { 1631 | "node": ">=10" 1632 | }, 1633 | "funding": { 1634 | "url": "https://github.com/sponsors/isaacs" 1635 | } 1636 | }, 1637 | "node_modules/mute-stream": { 1638 | "version": "1.0.0", 1639 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", 1640 | "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", 1641 | "dev": true, 1642 | "license": "ISC", 1643 | "engines": { 1644 | "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 1645 | } 1646 | }, 1647 | "node_modules/once": { 1648 | "version": "1.4.0", 1649 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1650 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1651 | "dev": true, 1652 | "license": "ISC", 1653 | "dependencies": { 1654 | "wrappy": "1" 1655 | } 1656 | }, 1657 | "node_modules/onetime": { 1658 | "version": "5.1.2", 1659 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 1660 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 1661 | "dev": true, 1662 | "license": "MIT", 1663 | "dependencies": { 1664 | "mimic-fn": "^2.1.0" 1665 | }, 1666 | "engines": { 1667 | "node": ">=6" 1668 | }, 1669 | "funding": { 1670 | "url": "https://github.com/sponsors/sindresorhus" 1671 | } 1672 | }, 1673 | "node_modules/ora": { 1674 | "version": "5.4.1", 1675 | "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", 1676 | "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", 1677 | "dev": true, 1678 | "license": "MIT", 1679 | "dependencies": { 1680 | "bl": "^4.1.0", 1681 | "chalk": "^4.1.0", 1682 | "cli-cursor": "^3.1.0", 1683 | "cli-spinners": "^2.5.0", 1684 | "is-interactive": "^1.0.0", 1685 | "is-unicode-supported": "^0.1.0", 1686 | "log-symbols": "^4.1.0", 1687 | "strip-ansi": "^6.0.0", 1688 | "wcwidth": "^1.0.1" 1689 | }, 1690 | "engines": { 1691 | "node": ">=10" 1692 | }, 1693 | "funding": { 1694 | "url": "https://github.com/sponsors/sindresorhus" 1695 | } 1696 | }, 1697 | "node_modules/ora/node_modules/chalk": { 1698 | "version": "4.1.2", 1699 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1700 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1701 | "dev": true, 1702 | "license": "MIT", 1703 | "dependencies": { 1704 | "ansi-styles": "^4.1.0", 1705 | "supports-color": "^7.1.0" 1706 | }, 1707 | "engines": { 1708 | "node": ">=10" 1709 | }, 1710 | "funding": { 1711 | "url": "https://github.com/chalk/chalk?sponsor=1" 1712 | } 1713 | }, 1714 | "node_modules/ora/node_modules/is-interactive": { 1715 | "version": "1.0.0", 1716 | "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", 1717 | "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", 1718 | "dev": true, 1719 | "license": "MIT", 1720 | "engines": { 1721 | "node": ">=8" 1722 | } 1723 | }, 1724 | "node_modules/ora/node_modules/is-unicode-supported": { 1725 | "version": "0.1.0", 1726 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 1727 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 1728 | "dev": true, 1729 | "license": "MIT", 1730 | "engines": { 1731 | "node": ">=10" 1732 | }, 1733 | "funding": { 1734 | "url": "https://github.com/sponsors/sindresorhus" 1735 | } 1736 | }, 1737 | "node_modules/ora/node_modules/log-symbols": { 1738 | "version": "4.1.0", 1739 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", 1740 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 1741 | "dev": true, 1742 | "license": "MIT", 1743 | "dependencies": { 1744 | "chalk": "^4.1.0", 1745 | "is-unicode-supported": "^0.1.0" 1746 | }, 1747 | "engines": { 1748 | "node": ">=10" 1749 | }, 1750 | "funding": { 1751 | "url": "https://github.com/sponsors/sindresorhus" 1752 | } 1753 | }, 1754 | "node_modules/os-tmpdir": { 1755 | "version": "1.0.2", 1756 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1757 | "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", 1758 | "dev": true, 1759 | "license": "MIT", 1760 | "engines": { 1761 | "node": ">=0.10.0" 1762 | } 1763 | }, 1764 | "node_modules/package-json-from-dist": { 1765 | "version": "1.0.1", 1766 | "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", 1767 | "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", 1768 | "dev": true, 1769 | "license": "BlueOak-1.0.0" 1770 | }, 1771 | "node_modules/path-key": { 1772 | "version": "3.1.1", 1773 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1774 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1775 | "dev": true, 1776 | "license": "MIT", 1777 | "engines": { 1778 | "node": ">=8" 1779 | } 1780 | }, 1781 | "node_modules/path-parse": { 1782 | "version": "1.0.7", 1783 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1784 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1785 | "dev": true, 1786 | "license": "MIT" 1787 | }, 1788 | "node_modules/path-scurry": { 1789 | "version": "1.11.1", 1790 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", 1791 | "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", 1792 | "dev": true, 1793 | "license": "BlueOak-1.0.0", 1794 | "dependencies": { 1795 | "lru-cache": "^10.2.0", 1796 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" 1797 | }, 1798 | "engines": { 1799 | "node": ">=16 || 14 >=14.18" 1800 | }, 1801 | "funding": { 1802 | "url": "https://github.com/sponsors/isaacs" 1803 | } 1804 | }, 1805 | "node_modules/picomatch": { 1806 | "version": "4.0.2", 1807 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", 1808 | "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", 1809 | "dev": true, 1810 | "license": "MIT", 1811 | "engines": { 1812 | "node": ">=12" 1813 | }, 1814 | "funding": { 1815 | "url": "https://github.com/sponsors/jonschlinkert" 1816 | } 1817 | }, 1818 | "node_modules/rage-edit": { 1819 | "version": "1.2.0", 1820 | "resolved": "https://registry.npmjs.org/rage-edit/-/rage-edit-1.2.0.tgz", 1821 | "integrity": "sha512-0RspBRc2s6We4g7hRCvT5mu7YPEnfjvQK8Tt354a2uUNJCMC7MKLvo/1mLvHUCQ/zbP6siQyp5VRZN7UCpMFZg==", 1822 | "dev": true, 1823 | "license": "MIT" 1824 | }, 1825 | "node_modules/randombytes": { 1826 | "version": "2.1.0", 1827 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1828 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1829 | "dev": true, 1830 | "license": "MIT", 1831 | "dependencies": { 1832 | "safe-buffer": "^5.1.0" 1833 | } 1834 | }, 1835 | "node_modules/re": { 1836 | "version": "0.1.4", 1837 | "resolved": "https://registry.npmjs.org/re/-/re-0.1.4.tgz", 1838 | "integrity": "sha512-nnRiW20Jr9hv7Aw3OXd7vIYoq2+26T+QZYJBlC/HMSerJxFOn6AUCKDDB/JKxk5O8dO9wmPQ6qyhQbzIv/JtFw==", 1839 | "license": "MIT", 1840 | "engines": { 1841 | "node": ">=0.6" 1842 | } 1843 | }, 1844 | "node_modules/readable-stream": { 1845 | "version": "3.6.2", 1846 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", 1847 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 1848 | "dev": true, 1849 | "license": "MIT", 1850 | "dependencies": { 1851 | "inherits": "^2.0.3", 1852 | "string_decoder": "^1.1.1", 1853 | "util-deprecate": "^1.0.1" 1854 | }, 1855 | "engines": { 1856 | "node": ">= 6" 1857 | } 1858 | }, 1859 | "node_modules/regex": { 1860 | "version": "6.0.1", 1861 | "resolved": "https://registry.npmjs.org/regex/-/regex-6.0.1.tgz", 1862 | "integrity": "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==", 1863 | "license": "MIT", 1864 | "dependencies": { 1865 | "regex-utilities": "^2.3.0" 1866 | } 1867 | }, 1868 | "node_modules/regex-utilities": { 1869 | "version": "2.3.0", 1870 | "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", 1871 | "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", 1872 | "license": "MIT" 1873 | }, 1874 | "node_modules/require-from-string": { 1875 | "version": "2.0.2", 1876 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 1877 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 1878 | "dev": true, 1879 | "license": "MIT", 1880 | "engines": { 1881 | "node": ">=0.10.0" 1882 | } 1883 | }, 1884 | "node_modules/resolve": { 1885 | "version": "1.22.10", 1886 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", 1887 | "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", 1888 | "dev": true, 1889 | "license": "MIT", 1890 | "dependencies": { 1891 | "is-core-module": "^2.16.0", 1892 | "path-parse": "^1.0.7", 1893 | "supports-preserve-symlinks-flag": "^1.0.0" 1894 | }, 1895 | "bin": { 1896 | "resolve": "bin/resolve" 1897 | }, 1898 | "engines": { 1899 | "node": ">= 0.4" 1900 | }, 1901 | "funding": { 1902 | "url": "https://github.com/sponsors/ljharb" 1903 | } 1904 | }, 1905 | "node_modules/restore-cursor": { 1906 | "version": "3.1.0", 1907 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", 1908 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", 1909 | "dev": true, 1910 | "license": "MIT", 1911 | "dependencies": { 1912 | "onetime": "^5.1.0", 1913 | "signal-exit": "^3.0.2" 1914 | }, 1915 | "engines": { 1916 | "node": ">=8" 1917 | } 1918 | }, 1919 | "node_modules/rimraf": { 1920 | "version": "5.0.10", 1921 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", 1922 | "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", 1923 | "dev": true, 1924 | "license": "ISC", 1925 | "dependencies": { 1926 | "glob": "^10.3.7" 1927 | }, 1928 | "bin": { 1929 | "rimraf": "dist/esm/bin.mjs" 1930 | }, 1931 | "funding": { 1932 | "url": "https://github.com/sponsors/isaacs" 1933 | } 1934 | }, 1935 | "node_modules/rimraf/node_modules/glob": { 1936 | "version": "10.4.5", 1937 | "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", 1938 | "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", 1939 | "dev": true, 1940 | "license": "ISC", 1941 | "dependencies": { 1942 | "foreground-child": "^3.1.0", 1943 | "jackspeak": "^3.1.2", 1944 | "minimatch": "^9.0.4", 1945 | "minipass": "^7.1.2", 1946 | "package-json-from-dist": "^1.0.0", 1947 | "path-scurry": "^1.11.1" 1948 | }, 1949 | "bin": { 1950 | "glob": "dist/esm/bin.mjs" 1951 | }, 1952 | "funding": { 1953 | "url": "https://github.com/sponsors/isaacs" 1954 | } 1955 | }, 1956 | "node_modules/rimraf/node_modules/minimatch": { 1957 | "version": "9.0.5", 1958 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 1959 | "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 1960 | "dev": true, 1961 | "license": "ISC", 1962 | "dependencies": { 1963 | "brace-expansion": "^2.0.1" 1964 | }, 1965 | "engines": { 1966 | "node": ">=16 || 14 >=14.17" 1967 | }, 1968 | "funding": { 1969 | "url": "https://github.com/sponsors/isaacs" 1970 | } 1971 | }, 1972 | "node_modules/rollup": { 1973 | "version": "4.34.6", 1974 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.6.tgz", 1975 | "integrity": "sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==", 1976 | "dev": true, 1977 | "license": "MIT", 1978 | "dependencies": { 1979 | "@types/estree": "1.0.6" 1980 | }, 1981 | "bin": { 1982 | "rollup": "dist/bin/rollup" 1983 | }, 1984 | "engines": { 1985 | "node": ">=18.0.0", 1986 | "npm": ">=8.0.0" 1987 | }, 1988 | "optionalDependencies": { 1989 | "@rollup/rollup-android-arm-eabi": "4.34.6", 1990 | "@rollup/rollup-android-arm64": "4.34.6", 1991 | "@rollup/rollup-darwin-arm64": "4.34.6", 1992 | "@rollup/rollup-darwin-x64": "4.34.6", 1993 | "@rollup/rollup-freebsd-arm64": "4.34.6", 1994 | "@rollup/rollup-freebsd-x64": "4.34.6", 1995 | "@rollup/rollup-linux-arm-gnueabihf": "4.34.6", 1996 | "@rollup/rollup-linux-arm-musleabihf": "4.34.6", 1997 | "@rollup/rollup-linux-arm64-gnu": "4.34.6", 1998 | "@rollup/rollup-linux-arm64-musl": "4.34.6", 1999 | "@rollup/rollup-linux-loongarch64-gnu": "4.34.6", 2000 | "@rollup/rollup-linux-powerpc64le-gnu": "4.34.6", 2001 | "@rollup/rollup-linux-riscv64-gnu": "4.34.6", 2002 | "@rollup/rollup-linux-s390x-gnu": "4.34.6", 2003 | "@rollup/rollup-linux-x64-gnu": "4.34.6", 2004 | "@rollup/rollup-linux-x64-musl": "4.34.6", 2005 | "@rollup/rollup-win32-arm64-msvc": "4.34.6", 2006 | "@rollup/rollup-win32-ia32-msvc": "4.34.6", 2007 | "@rollup/rollup-win32-x64-msvc": "4.34.6", 2008 | "fsevents": "~2.3.2" 2009 | } 2010 | }, 2011 | "node_modules/run-async": { 2012 | "version": "3.0.0", 2013 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", 2014 | "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", 2015 | "dev": true, 2016 | "license": "MIT", 2017 | "engines": { 2018 | "node": ">=0.12.0" 2019 | } 2020 | }, 2021 | "node_modules/rxjs": { 2022 | "version": "7.8.1", 2023 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", 2024 | "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", 2025 | "dev": true, 2026 | "license": "Apache-2.0", 2027 | "dependencies": { 2028 | "tslib": "^2.1.0" 2029 | } 2030 | }, 2031 | "node_modules/safe-buffer": { 2032 | "version": "5.2.1", 2033 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 2034 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 2035 | "dev": true, 2036 | "funding": [ 2037 | { 2038 | "type": "github", 2039 | "url": "https://github.com/sponsors/feross" 2040 | }, 2041 | { 2042 | "type": "patreon", 2043 | "url": "https://www.patreon.com/feross" 2044 | }, 2045 | { 2046 | "type": "consulting", 2047 | "url": "https://feross.org/support" 2048 | } 2049 | ], 2050 | "license": "MIT" 2051 | }, 2052 | "node_modules/safer-buffer": { 2053 | "version": "2.1.2", 2054 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 2055 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 2056 | "dev": true, 2057 | "license": "MIT" 2058 | }, 2059 | "node_modules/semver": { 2060 | "version": "7.7.1", 2061 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", 2062 | "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", 2063 | "dev": true, 2064 | "license": "ISC", 2065 | "bin": { 2066 | "semver": "bin/semver.js" 2067 | }, 2068 | "engines": { 2069 | "node": ">=10" 2070 | } 2071 | }, 2072 | "node_modules/serialize-javascript": { 2073 | "version": "6.0.2", 2074 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", 2075 | "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", 2076 | "dev": true, 2077 | "license": "BSD-3-Clause", 2078 | "dependencies": { 2079 | "randombytes": "^2.1.0" 2080 | } 2081 | }, 2082 | "node_modules/shebang-command": { 2083 | "version": "2.0.0", 2084 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2085 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2086 | "dev": true, 2087 | "license": "MIT", 2088 | "dependencies": { 2089 | "shebang-regex": "^3.0.0" 2090 | }, 2091 | "engines": { 2092 | "node": ">=8" 2093 | } 2094 | }, 2095 | "node_modules/shebang-regex": { 2096 | "version": "3.0.0", 2097 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2098 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2099 | "dev": true, 2100 | "license": "MIT", 2101 | "engines": { 2102 | "node": ">=8" 2103 | } 2104 | }, 2105 | "node_modules/signal-exit": { 2106 | "version": "3.0.7", 2107 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 2108 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 2109 | "dev": true, 2110 | "license": "ISC" 2111 | }, 2112 | "node_modules/smob": { 2113 | "version": "1.5.0", 2114 | "resolved": "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz", 2115 | "integrity": "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==", 2116 | "dev": true, 2117 | "license": "MIT" 2118 | }, 2119 | "node_modules/source-map": { 2120 | "version": "0.6.1", 2121 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2122 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2123 | "dev": true, 2124 | "license": "BSD-3-Clause", 2125 | "engines": { 2126 | "node": ">=0.10.0" 2127 | } 2128 | }, 2129 | "node_modules/source-map-support": { 2130 | "version": "0.5.21", 2131 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 2132 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 2133 | "dev": true, 2134 | "license": "MIT", 2135 | "dependencies": { 2136 | "buffer-from": "^1.0.0", 2137 | "source-map": "^0.6.0" 2138 | } 2139 | }, 2140 | "node_modules/string_decoder": { 2141 | "version": "1.3.0", 2142 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 2143 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 2144 | "dev": true, 2145 | "license": "MIT", 2146 | "dependencies": { 2147 | "safe-buffer": "~5.2.0" 2148 | } 2149 | }, 2150 | "node_modules/string-width": { 2151 | "version": "4.2.3", 2152 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2153 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2154 | "dev": true, 2155 | "license": "MIT", 2156 | "dependencies": { 2157 | "emoji-regex": "^8.0.0", 2158 | "is-fullwidth-code-point": "^3.0.0", 2159 | "strip-ansi": "^6.0.1" 2160 | }, 2161 | "engines": { 2162 | "node": ">=8" 2163 | } 2164 | }, 2165 | "node_modules/string-width-cjs": { 2166 | "name": "string-width", 2167 | "version": "4.2.3", 2168 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2169 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2170 | "dev": true, 2171 | "license": "MIT", 2172 | "dependencies": { 2173 | "emoji-regex": "^8.0.0", 2174 | "is-fullwidth-code-point": "^3.0.0", 2175 | "strip-ansi": "^6.0.1" 2176 | }, 2177 | "engines": { 2178 | "node": ">=8" 2179 | } 2180 | }, 2181 | "node_modules/strip-ansi": { 2182 | "version": "6.0.1", 2183 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2184 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2185 | "dev": true, 2186 | "license": "MIT", 2187 | "dependencies": { 2188 | "ansi-regex": "^5.0.1" 2189 | }, 2190 | "engines": { 2191 | "node": ">=8" 2192 | } 2193 | }, 2194 | "node_modules/strip-ansi-cjs": { 2195 | "name": "strip-ansi", 2196 | "version": "6.0.1", 2197 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2198 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2199 | "dev": true, 2200 | "license": "MIT", 2201 | "dependencies": { 2202 | "ansi-regex": "^5.0.1" 2203 | }, 2204 | "engines": { 2205 | "node": ">=8" 2206 | } 2207 | }, 2208 | "node_modules/supports-color": { 2209 | "version": "7.2.0", 2210 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2211 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2212 | "dev": true, 2213 | "license": "MIT", 2214 | "dependencies": { 2215 | "has-flag": "^4.0.0" 2216 | }, 2217 | "engines": { 2218 | "node": ">=8" 2219 | } 2220 | }, 2221 | "node_modules/supports-preserve-symlinks-flag": { 2222 | "version": "1.0.0", 2223 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 2224 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 2225 | "dev": true, 2226 | "license": "MIT", 2227 | "engines": { 2228 | "node": ">= 0.4" 2229 | }, 2230 | "funding": { 2231 | "url": "https://github.com/sponsors/ljharb" 2232 | } 2233 | }, 2234 | "node_modules/tar": { 2235 | "version": "7.4.3", 2236 | "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", 2237 | "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", 2238 | "dev": true, 2239 | "license": "ISC", 2240 | "dependencies": { 2241 | "@isaacs/fs-minipass": "^4.0.0", 2242 | "chownr": "^3.0.0", 2243 | "minipass": "^7.1.2", 2244 | "minizlib": "^3.0.1", 2245 | "mkdirp": "^3.0.1", 2246 | "yallist": "^5.0.0" 2247 | }, 2248 | "engines": { 2249 | "node": ">=18" 2250 | } 2251 | }, 2252 | "node_modules/terser": { 2253 | "version": "5.39.0", 2254 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", 2255 | "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", 2256 | "dev": true, 2257 | "license": "BSD-2-Clause", 2258 | "dependencies": { 2259 | "@jridgewell/source-map": "^0.3.3", 2260 | "acorn": "^8.8.2", 2261 | "commander": "^2.20.0", 2262 | "source-map-support": "~0.5.20" 2263 | }, 2264 | "bin": { 2265 | "terser": "bin/terser" 2266 | }, 2267 | "engines": { 2268 | "node": ">=10" 2269 | } 2270 | }, 2271 | "node_modules/terser/node_modules/commander": { 2272 | "version": "2.20.3", 2273 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 2274 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 2275 | "dev": true, 2276 | "license": "MIT" 2277 | }, 2278 | "node_modules/tmp": { 2279 | "version": "0.0.33", 2280 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 2281 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 2282 | "dev": true, 2283 | "license": "MIT", 2284 | "dependencies": { 2285 | "os-tmpdir": "~1.0.2" 2286 | }, 2287 | "engines": { 2288 | "node": ">=0.6.0" 2289 | } 2290 | }, 2291 | "node_modules/tslib": { 2292 | "version": "2.8.1", 2293 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", 2294 | "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", 2295 | "dev": true, 2296 | "license": "0BSD" 2297 | }, 2298 | "node_modules/type-fest": { 2299 | "version": "0.21.3", 2300 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", 2301 | "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", 2302 | "dev": true, 2303 | "license": "(MIT OR CC0-1.0)", 2304 | "engines": { 2305 | "node": ">=10" 2306 | }, 2307 | "funding": { 2308 | "url": "https://github.com/sponsors/sindresorhus" 2309 | } 2310 | }, 2311 | "node_modules/typescript": { 2312 | "version": "5.7.3", 2313 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", 2314 | "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", 2315 | "dev": true, 2316 | "license": "Apache-2.0", 2317 | "bin": { 2318 | "tsc": "bin/tsc", 2319 | "tsserver": "bin/tsserver" 2320 | }, 2321 | "engines": { 2322 | "node": ">=14.17" 2323 | } 2324 | }, 2325 | "node_modules/undici-types": { 2326 | "version": "5.26.5", 2327 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", 2328 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", 2329 | "dev": true, 2330 | "license": "MIT" 2331 | }, 2332 | "node_modules/util-deprecate": { 2333 | "version": "1.0.2", 2334 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2335 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 2336 | "dev": true, 2337 | "license": "MIT" 2338 | }, 2339 | "node_modules/wcwidth": { 2340 | "version": "1.0.1", 2341 | "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", 2342 | "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", 2343 | "dev": true, 2344 | "license": "MIT", 2345 | "dependencies": { 2346 | "defaults": "^1.0.3" 2347 | } 2348 | }, 2349 | "node_modules/which": { 2350 | "version": "2.0.2", 2351 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2352 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2353 | "dev": true, 2354 | "license": "ISC", 2355 | "dependencies": { 2356 | "isexe": "^2.0.0" 2357 | }, 2358 | "bin": { 2359 | "node-which": "bin/node-which" 2360 | }, 2361 | "engines": { 2362 | "node": ">= 8" 2363 | } 2364 | }, 2365 | "node_modules/wrap-ansi": { 2366 | "version": "6.2.0", 2367 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", 2368 | "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", 2369 | "dev": true, 2370 | "license": "MIT", 2371 | "dependencies": { 2372 | "ansi-styles": "^4.0.0", 2373 | "string-width": "^4.1.0", 2374 | "strip-ansi": "^6.0.0" 2375 | }, 2376 | "engines": { 2377 | "node": ">=8" 2378 | } 2379 | }, 2380 | "node_modules/wrap-ansi-cjs": { 2381 | "name": "wrap-ansi", 2382 | "version": "7.0.0", 2383 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2384 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2385 | "dev": true, 2386 | "license": "MIT", 2387 | "dependencies": { 2388 | "ansi-styles": "^4.0.0", 2389 | "string-width": "^4.1.0", 2390 | "strip-ansi": "^6.0.0" 2391 | }, 2392 | "engines": { 2393 | "node": ">=10" 2394 | }, 2395 | "funding": { 2396 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2397 | } 2398 | }, 2399 | "node_modules/wrappy": { 2400 | "version": "1.0.2", 2401 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2402 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 2403 | "dev": true, 2404 | "license": "ISC" 2405 | }, 2406 | "node_modules/ws": { 2407 | "version": "8.18.0", 2408 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", 2409 | "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", 2410 | "license": "MIT", 2411 | "engines": { 2412 | "node": ">=10.0.0" 2413 | }, 2414 | "peerDependencies": { 2415 | "bufferutil": "^4.0.1", 2416 | "utf-8-validate": ">=5.0.2" 2417 | }, 2418 | "peerDependenciesMeta": { 2419 | "bufferutil": { 2420 | "optional": true 2421 | }, 2422 | "utf-8-validate": { 2423 | "optional": true 2424 | } 2425 | } 2426 | }, 2427 | "node_modules/yallist": { 2428 | "version": "5.0.0", 2429 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", 2430 | "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", 2431 | "dev": true, 2432 | "license": "BlueOak-1.0.0", 2433 | "engines": { 2434 | "node": ">=18" 2435 | } 2436 | }, 2437 | "node_modules/yoctocolors-cjs": { 2438 | "version": "2.1.2", 2439 | "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", 2440 | "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", 2441 | "dev": true, 2442 | "license": "MIT", 2443 | "engines": { 2444 | "node": ">=18" 2445 | }, 2446 | "funding": { 2447 | "url": "https://github.com/sponsors/sindresorhus" 2448 | } 2449 | } 2450 | } 2451 | } 2452 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "scripts": { 3 | "build": "rollup -c", 4 | "watch": "rollup -c -w --watch.onEnd=\"streamdeck restart com.nicoohagedorn.pythonscriptdeck\"" 5 | }, 6 | "type": "module", 7 | "devDependencies": { 8 | "@elgato/cli": "^0.3.2", 9 | "@rollup/plugin-commonjs": "^25.0.5", 10 | "@rollup/plugin-node-resolve": "^15.2.2", 11 | "@rollup/plugin-terser": "^0.4.4", 12 | "@rollup/plugin-typescript": "^11.1.5", 13 | "@tsconfig/node20": "^20.1.2", 14 | "@types/node": "20.8.10", 15 | "rollup": "^4.0.2", 16 | "tslib": "^2.6.2", 17 | "typescript": "^5.2.2" 18 | }, 19 | "dependencies": { 20 | "@elgato/streamdeck": "^0.3.0", 21 | "re": "^0.1.4", 22 | "regex": "^6.0.1" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /pyIcons.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/pyIcons.pptx -------------------------------------------------------------------------------- /rollup.config.mjs: -------------------------------------------------------------------------------- 1 | import commonjs from "@rollup/plugin-commonjs"; 2 | import nodeResolve from "@rollup/plugin-node-resolve"; 3 | import terser from "@rollup/plugin-terser"; 4 | import typescript from "@rollup/plugin-typescript"; 5 | import path from "node:path"; 6 | import url from "node:url"; 7 | 8 | const isWatching = !!process.env.ROLLUP_WATCH; 9 | const sdPlugin = "com.nicoohagedorn.pythonscriptdeck.sdPlugin"; 10 | 11 | /** 12 | * @type {import('rollup').RollupOptions} 13 | */ 14 | const config = { 15 | input: "src/plugin.ts", 16 | output: { 17 | file: `${sdPlugin}/bin/plugin.js`, 18 | sourcemap: isWatching, 19 | sourcemapPathTransform: (relativeSourcePath, sourcemapPath) => { 20 | return url.pathToFileURL(path.resolve(path.dirname(sourcemapPath), relativeSourcePath)).href; 21 | } 22 | }, 23 | plugins: [ 24 | { 25 | name: "watch-externals", 26 | buildStart: function () { 27 | this.addWatchFile(`${sdPlugin}/manifest.json`); 28 | }, 29 | }, 30 | typescript({ 31 | mapRoot: isWatching ? "./" : undefined 32 | }), 33 | nodeResolve({ 34 | browser: false, 35 | exportConditions: ["node"], 36 | preferBuiltins: true 37 | }), 38 | commonjs(), 39 | !isWatching && terser(), 40 | { 41 | name: "emit-module-package-file", 42 | generateBundle() { 43 | this.emitFile({ fileName: "package.json", source: `{ "type": "module" }`, type: "asset" }); 44 | } 45 | } 46 | ] 47 | }; 48 | 49 | export default config; 50 | -------------------------------------------------------------------------------- /src/ScriptA.py: -------------------------------------------------------------------------------- 1 | import random 2 | 3 | def random_bool(): 4 | return random.choice(["abc", "edf"]) 5 | 6 | if __name__ == "__main__": 7 | print(random_bool()) 8 | -------------------------------------------------------------------------------- /src/actions/python-script.ts: -------------------------------------------------------------------------------- 1 | import streamDeck, { action, DidReceiveSettingsEvent, KeyDownEvent, SingletonAction, WillAppearEvent } from "@elgato/streamdeck"; 2 | import { ChildProcess, spawn } from "child_process"; 3 | 4 | 5 | 6 | /** 7 | * Error mapping for python errors 8 | */ 9 | const pythonErrorMap: { [key: string]: string } = { 10 | "SyntaxError": "Python\nSyntax\nError", 11 | "NameError": "Python\nName\nError", 12 | "TypeError": "Python\nType\nError", 13 | "ValueError": "Python\nValue\nError", 14 | "ZeroDivisionError": "Python\nZeroDiv\nError", 15 | "IndexError": "Python\nIndex\nError", 16 | "KeyError": "Python\nKey\nError", 17 | "AttributeError": "Python\nAttribute\nError", 18 | "ImportError": "Python\nImport\nError", 19 | "No such file or directory": "Python\nFile\nError", 20 | "ModuleNotFoundError": "Python\nModule\nError", 21 | "RuntimeError": "Python\nRuntime\nError", 22 | "MemoryError": "Python\nMemory\nError", 23 | "OverflowError": "Python\nOverflow\nError", 24 | "SystemError": "Python\nSystem\nError", 25 | "Microsoft Store": "Python\nnot found\nError", 26 | 27 | }; 28 | 29 | @action({ UUID: "com.nicoohagedorn.pythonscriptdeck.script" }) 30 | export class PythonScript extends SingletonAction { 31 | /** 32 | * The {@link SingletonAction.onWillAppear} event is useful for setting the visual representation of an action when it becomes visible. This could be due to the Stream Deck first 33 | * starting up, or the user navigating between pages / folders etc.. There is also an inverse of this event in the form of {@link streamDeck.client.onWillDisappear}. In this example, 34 | * we're setting the title to the "count" that is incremented in {@link PythonScript.onKeyDown}. 35 | */ 36 | onWillAppear(ev: WillAppearEvent): void | Promise { 37 | const settings = ev.payload.settings; 38 | if (settings.path) { 39 | if (settings.path.search(".py")) { 40 | ev.action.setImage("imgs/actions/gemini_icons/pyFileLoaded.png") 41 | var venvname = ""; 42 | if (settings.useVenv && settings.venvPath) { 43 | streamDeck.logger.info(settings.venvPath); 44 | venvname = settings.venvPath.substring(0, settings.venvPath.lastIndexOf("/")); 45 | streamDeck.logger.info(venvname); 46 | venvname = venvname.substring(venvname.lastIndexOf("/") + 1, venvname.length) + "\n"; 47 | streamDeck.logger.info(venvname); 48 | venvname = `venv:\n ${venvname}` 49 | 50 | } 51 | ev.action.setTitle(`${venvname}${this.getFileNameFromPath(settings.path)}`); 52 | } 53 | } 54 | 55 | } 56 | 57 | onDidReceiveSettings(ev: DidReceiveSettingsEvent): Promise | void { 58 | const settings = ev.payload.settings; 59 | if (settings.path) { 60 | if (settings.path.search(".py")) { 61 | 62 | var venvname = ""; 63 | if (settings.useVenv && settings.venvPath) { 64 | streamDeck.logger.info(settings.venvPath); 65 | venvname = settings.venvPath.substring(0, settings.venvPath.lastIndexOf("/")); 66 | streamDeck.logger.info(venvname); 67 | venvname = venvname.substring(venvname.lastIndexOf("/") + 1, venvname.length) + "\n"; 68 | streamDeck.logger.info(venvname); 69 | venvname = `venv:\n ${venvname}` 70 | ev.action.setImage("imgs/actions/gemini_icons/pyVirtEnvActive.png") 71 | }else { 72 | ev.action.setImage("imgs/actions/gemini_icons/pyFileLoaded.png") 73 | } 74 | ev.action.setTitle(`${venvname}${this.getFileNameFromPath(settings.path)}`); 75 | } 76 | } 77 | } 78 | 79 | /** 80 | * Listens for the {@link SingletonAction.onKeyDown} event which is emitted by Stream Deck when an action is pressed. Stream Deck provides various events for tracking interaction 81 | * with devices including key down/up, dial rotations, and device connectivity, etc. When triggered, {@link ev} object contains information about the event including any payloads 82 | * and action information where applicable. In this example, our action will display a counter that increments by one each press. We track the current count on the action's persisted 83 | * settings using `setSettings` and `getSettings`. 84 | */ 85 | async onKeyDown(ev: KeyDownEvent): Promise { 86 | // Update the count from the settings. 87 | const settings = ev.payload.settings; 88 | const { path } = settings; 89 | let pythonProcess: ChildProcess | undefined; 90 | if (path) { 91 | streamDeck.logger.info(`path to script is: ${path}`) 92 | pythonProcess = this.createChildProcess(settings.useVenv, settings.venvPath, path); 93 | 94 | if (pythonProcess != undefined && pythonProcess.stdout != null) { 95 | streamDeck.logger.info(`start reading output`); 96 | pythonProcess.stdout.on('data', (data: { toString: () => string; }) => { 97 | streamDeck.logger.info(`stdout: ${data}`); 98 | if (settings.displayValues) { ev.action.setTitle(data.toString().trim()); } 99 | if (settings.image1 && (data.toString().trim() == (settings.value1 ?? ""))) { 100 | ev.action.setImage(settings.image1) 101 | } 102 | if (settings.image2 && (data.toString().trim() == (settings.value2 ?? ""))) { 103 | ev.action.setImage(settings.image2) 104 | 105 | }else( 106 | ev.action.setImage("imgs/actions/gemini_icons/pyFileLoaded.png") 107 | ) 108 | }); 109 | 110 | pythonProcess.stderr!.on('data', (data: { toString: () => string; }) => { 111 | const errorString = data.toString().trim().replace(RegExp('/(?:\r\n|\r|\n)/g'), ' '); 112 | streamDeck.logger.error(`stderr: ${errorString}`); 113 | ev.action.setImage("imgs/actions/pyFilecheckFailed.png"); 114 | let errorTitle = "python\nother\nissue"; 115 | for (const key in pythonErrorMap) { 116 | if (errorString.search(key) > -1) { 117 | errorTitle = pythonErrorMap[key]; 118 | break; 119 | } 120 | } 121 | if (errorTitle == "python\nother\nissue"){ 122 | streamDeck.logger.error(errorString); 123 | } 124 | ev.action.setTitle(errorTitle); 125 | ev.action.showAlert(); 126 | 127 | }); 128 | 129 | pythonProcess.on('close', (code: any) => { 130 | streamDeck.logger.info(`child process exited with code ${code}`); 131 | }); 132 | } 133 | } 134 | 135 | 136 | } 137 | 138 | createChildProcess(useVenv: boolean, venvPath: string | undefined, path: string) { 139 | let pythonProcess: ChildProcess | undefined; 140 | if (useVenv && venvPath) { 141 | 142 | streamDeck.logger.info(`Use Virtual Environment: ${venvPath}`) 143 | pythonProcess = spawn("cmd.exe", ["/c", `call ${venvPath.substring(0, venvPath.lastIndexOf("/"))}/Scripts/activate.bat && python ${path}`]); 144 | 145 | } 146 | else { 147 | streamDeck.logger.info(`Use Python: ${path}`) 148 | pythonProcess = spawn(`cmd.exe`, [`/c ${path}`]); 149 | /* 150 | if (pythonProcess.connected == false) { 151 | streamDeck.logger.debug("python not found, trying python3") 152 | pythonProcess = spawn("cmd.exe", ["/c", `python3 ${path}`]); 153 | }*/ 154 | } 155 | return pythonProcess; 156 | } 157 | 158 | getFileNameFromPath(path: string): string { 159 | var fileName = ""; 160 | fileName = path.substring(path.lastIndexOf("/") + 1); 161 | return fileName; 162 | } 163 | 164 | 165 | } 166 | 167 | /** 168 | * Settings for {@link PythonScript}. 169 | */ 170 | export type PythonScriptSettings = { 171 | path?: string; 172 | value1?: string; 173 | image1?: string; 174 | value2?: string; 175 | image2?: string; 176 | displayValues: boolean; 177 | useVenv: boolean; 178 | venvPath?: string; 179 | 180 | }; 181 | -------------------------------------------------------------------------------- /src/actions/python-service.ts: -------------------------------------------------------------------------------- 1 | import streamDeck, { action, DidReceiveSettingsEvent, KeyDownEvent, SingletonAction, WillAppearEvent, WillDisappearEvent } from "@elgato/streamdeck"; 2 | import { ChildProcess, spawn } from "child_process"; 3 | import { pyBGService } from "../python-bg-service"; 4 | 5 | 6 | @action({ UUID: "com.nicoohagedorn.pythonscriptdeck.service" }) 7 | export class PythonService extends SingletonAction { 8 | /** 9 | * The {@link SingletonAction.onWillAppear} event is useful for setting the visual representation of an action when it becomes visible. This could be due to the Stream Deck first 10 | * starting up, or the user navigating between pages / folders etc.. There is also an inverse of this event in the form of {@link streamDeck.client.onWillDisappear}. In this example, 11 | * we're setting the title to the "count" that is incremented in {@link PythonScript.onKeyDown}. 12 | */ 13 | onWillAppear(ev: WillAppearEvent): void | Promise { 14 | const settings = ev.payload.settings; 15 | if (settings.path) { 16 | if (settings.path.search(".py")) { 17 | ev.action.setImage("imgs/actions/pyServiceIcon.png") 18 | var venvname = ""; 19 | if (settings.useVenv && settings.venvPath) { 20 | streamDeck.logger.info(settings.venvPath); 21 | venvname = settings.venvPath.substring(0, settings.venvPath.lastIndexOf("/")); 22 | streamDeck.logger.info(venvname); 23 | venvname = venvname.substring(venvname.lastIndexOf("/") + 1, venvname.length) + "\n"; 24 | streamDeck.logger.info(venvname); 25 | venvname = `venv:\n ${venvname}` 26 | 27 | } 28 | ev.action.setTitle(`${venvname}${this.getFileNameFromPath(settings.path)}`); 29 | } 30 | } 31 | if(this.checkSettingsComplete(settings)){ 32 | pyBGService.registerAction(ev); 33 | } 34 | 35 | 36 | } 37 | 38 | onDidReceiveSettings(ev: DidReceiveSettingsEvent): Promise | void { 39 | const settings = ev.payload.settings; 40 | if (settings.path) { 41 | if (settings.path.search(".py")) { 42 | ev.action.setImage("imgs/actions/pyServiceIcon.png") 43 | var venvname = ""; 44 | if (settings.useVenv && settings.venvPath) { 45 | streamDeck.logger.info(settings.venvPath); 46 | venvname = settings.venvPath.substring(0, settings.venvPath.lastIndexOf("/")); 47 | streamDeck.logger.info(venvname); 48 | venvname = venvname.substring(venvname.lastIndexOf("/") + 1, venvname.length) + "\n"; 49 | streamDeck.logger.info(venvname); 50 | venvname = `venv:\n ${venvname}` 51 | 52 | } 53 | ev.action.setTitle(`${venvname}${this.getFileNameFromPath(settings.path)}`); 54 | } 55 | } 56 | pyBGService.registerAction(ev); 57 | } 58 | 59 | onWillDisappear(ev: WillDisappearEvent): Promise | void { 60 | streamDeck.logger.info("onWillDisappear - unregister Action"); 61 | pyBGService.unregisterAction(ev); 62 | } 63 | 64 | 65 | /** 66 | * Listens for the {@link SingletonAction.onKeyDown} event which is emitted by Stream Deck when an action is pressed. Stream Deck provides various events for tracking interaction 67 | * with devices including key down/up, dial rotations, and device connectivity, etc. When triggered, {@link ev} object contains information about the event including any payloads 68 | * and action information where applicable. In this example, our action will display a counter that increments by one each press. We track the current count on the action's persisted 69 | * settings using `setSettings` and `getSettings`. 70 | */ 71 | async onKeyDown(ev: KeyDownEvent): Promise { 72 | // Update the count from the settings. 73 | //TODO - enable start and stop the running of this script 74 | pyBGService.getState() == 1 ? pyBGService.start(ev) : pyBGService.stop(ev); 75 | 76 | } 77 | 78 | 79 | getFileNameFromPath(path: string): string{ 80 | var fileName = ""; 81 | fileName = path.substring(path.lastIndexOf("/") + 1); 82 | return fileName; 83 | } 84 | 85 | checkSettingsComplete(settings: PythonServiceSettings): boolean { 86 | var check = false; 87 | if (settings.path && settings.interval) { 88 | streamDeck.logger.info("settings complete"); 89 | check = true; 90 | } 91 | return check; 92 | } 93 | } 94 | 95 | /** 96 | * Settings for {@link PythonScript}. 97 | */ 98 | export type PythonServiceSettings = { 99 | path?: string; 100 | value1?: string; 101 | image1?: string; 102 | value2?: string; 103 | image2?: string; 104 | displayValues: boolean; 105 | useVenv: boolean; 106 | venvPath?: string; 107 | interval: number; 108 | id: string; 109 | 110 | }; 111 | -------------------------------------------------------------------------------- /src/automation.py: -------------------------------------------------------------------------------- 1 | import random 2 | import time 3 | 4 | def random_bool(): 5 | start = time.time() 6 | i = 0 7 | while time.time()- start < 30: 8 | print (i) 9 | i = i + 1 10 | time.sleep(1) 11 | 12 | 13 | if __name__ == "__main__": 14 | print(random_bool()) 15 | -------------------------------------------------------------------------------- /src/false.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/src/false.png -------------------------------------------------------------------------------- /src/plugin.ts: -------------------------------------------------------------------------------- 1 | import streamDeck, { LogLevel } from "@elgato/streamdeck"; 2 | 3 | import { PythonScript } from "./actions/python-script"; 4 | import { PythonService } from "./actions/python-service"; 5 | import { pyBGService } from "./python-bg-service"; 6 | 7 | // We can enable "trace" logging so that all messages between the Stream Deck, and the plugin are recorded. When storing sensitive information 8 | streamDeck.logger.setLevel(LogLevel.TRACE); 9 | 10 | // Register the increment action. 11 | streamDeck.actions.registerAction(new PythonScript()); 12 | streamDeck.actions.registerAction(new PythonService()); 13 | 14 | // Finally, connect to the Stream Deck. 15 | streamDeck.connect(); 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/python-bg-service.ts: -------------------------------------------------------------------------------- 1 | import streamDeck, { DidReceiveSettingsEvent, KeyDownEvent, WillAppearEvent, WillDisappearEvent } from '@elgato/streamdeck'; 2 | import { PythonServiceSettings } from './actions/python-service'; 3 | import { ChildProcess, spawn } from 'child_process'; 4 | import * as os from 'os'; 5 | 6 | /** 7 | * Error mapping for python errors 8 | */ 9 | const pythonErrorMap: { [key: string]: string } = { 10 | "SyntaxError": "Python\nSyntax\nError", 11 | "NameError": "Python\nName\nError", 12 | "TypeError": "Python\nType\nError", 13 | "ValueError": "Python\nValue\nError", 14 | "ZeroDivisionError": "Python\nZeroDiv\nError", 15 | "IndexError": "Python\nIndex\nError", 16 | "KeyError": "Python\nKey\nError", 17 | "AttributeError": "Python\nAttribute\nError", 18 | "ImportError": "Python\nImport\nError", 19 | "No such file or directory": "Python\nFile\nError", 20 | "ModuleNotFoundError": "Python\nModule\nError", 21 | "RuntimeError": "Python\nRuntime\nError", 22 | "MemoryError": "Python\nMemory\nError", 23 | "OverflowError": "Python\nOverflow\nError", 24 | "SystemError": "Python\nSystem\nError", 25 | "Microsoft Store": "Python\nnot found\nError", 26 | 27 | }; 28 | enum ServiceState { 29 | running, 30 | stopped 31 | } 32 | 33 | 34 | class PythonBackgroundService { 35 | 36 | trackedActions: any[] = []; 37 | state = ServiceState.stopped; 38 | 39 | 40 | registerAction(ev: WillAppearEvent | DidReceiveSettingsEvent) { 41 | 42 | var duplicate = false; 43 | streamDeck.logger.info("checking if action is already tracked"); 44 | var newtrackedAction = { 45 | "id": ev.action.id, "ev": ev, "timerId": undefined 46 | } 47 | 48 | for (let i = 0; i < this.trackedActions.length; i++) { 49 | if (this.trackedActions[i] == ev.action.id) { 50 | duplicate = true; 51 | streamDeck.logger.info("action already tracked - updating action"); 52 | clearInterval(this.trackedActions[i].timerId); 53 | this.trackedActions[this.trackedActions.indexOf(this.trackedActions[i])] = newtrackedAction; 54 | break; 55 | } 56 | } 57 | 58 | if (duplicate == false) { 59 | this.trackedActions.push(newtrackedAction) 60 | } 61 | } 62 | 63 | unregisterAction(ev: WillDisappearEvent) { 64 | for (let i = 0; i < this.trackedActions.length; i++) { 65 | if (this.trackedActions[i] == ev.action.id) { 66 | streamDeck.logger.info(`stopping execution of the action ${ev.action.manifestId}, id: ${ev.action.id}`); 67 | clearInterval(this.trackedActions[i].timerId); 68 | } 69 | } 70 | } 71 | 72 | start(ev: KeyDownEvent) { 73 | streamDeck.logger.info("starting Background Service") 74 | for (let i = 0; i < this.trackedActions.length; i++) { 75 | this.trackedActions[i].timerId = this.createTimer(this.trackedActions[i].ev); 76 | } 77 | this.state = ServiceState.running; 78 | ev.action.setImage("imgs/actions/pyServiceRunning.png"); 79 | } 80 | 81 | stop(ev: KeyDownEvent) { 82 | streamDeck.logger.info("stopping Background Service") 83 | for (let i = 0; i < this.trackedActions.length; i++) { 84 | if (this.trackedActions[i].timerId == undefined) { 85 | continue; 86 | } else { 87 | clearInterval(this.trackedActions[i].timerId); 88 | this.trackedActions[i].timerId = undefined; 89 | } 90 | 91 | 92 | } 93 | this.state = ServiceState.stopped; 94 | streamDeck.logger.info(`stopping execution of the action ${ev.action.manifestId}, id: ${ev.action.id}`) 95 | ev.action.setImage("imgs/actions/pyServiceStopped.png"); 96 | } 97 | 98 | getState = () => { 99 | return this.state; 100 | } 101 | 102 | 103 | 104 | executeAction(ev: WillAppearEvent | DidReceiveSettingsEvent | KeyDownEvent) { 105 | const settings = ev.payload.settings; 106 | const { path } = settings; 107 | let pythonProcess: ChildProcess | undefined; 108 | if (path) { 109 | streamDeck.logger.debug(`path to script is: ${path}`) 110 | pythonProcess = this.createChildProcess(settings.useVenv, settings.venvPath, path); 111 | 112 | if (pythonProcess != undefined && pythonProcess.stdout != null) { 113 | streamDeck.logger.debug(`start reading output`); 114 | pythonProcess.stdout.on('data', (data: { toString: () => string; }) => { 115 | streamDeck.logger.info(`stdout: ${data}`); 116 | if (settings.displayValues) { ev.action.setTitle(data.toString().trim()); } 117 | if (settings.image1 && (data.toString().trim() == (settings.value1 ?? ""))) { 118 | ev.action.setImage(settings.image1) 119 | } 120 | else if (settings.image2 && (data.toString().trim() == (settings.value2 ?? ""))) { 121 | ev.action.setImage(settings.image2) 122 | 123 | } else ( 124 | ev.action.setImage("imgs/actions/pyServiceIcon.png") 125 | ) 126 | }); 127 | 128 | pythonProcess.stderr!.on('data', (data: { toString: () => string; }) => { 129 | const errorString = data.toString().trim().replace(RegExp('/(?:\r\n|\r|\n)/g'), ' '); 130 | streamDeck.logger.error(`stderr: ${errorString}`); 131 | ev.action.setImage("imgs/actions/pyServiceIconFail.png"); 132 | let errorTitle = "python\nother\nissue"; 133 | for (const key in pythonErrorMap) { 134 | if (errorString.search(key) > -1) { 135 | errorTitle = pythonErrorMap[key]; 136 | break; 137 | } 138 | } 139 | if (errorTitle == "python\nother\nissue") { 140 | streamDeck.logger.error(errorString); 141 | } 142 | ev.action.setTitle(errorTitle); 143 | ev.action.showAlert(); 144 | 145 | }); 146 | 147 | pythonProcess.on('close', (code: any) => { 148 | streamDeck.logger.debug(`child process exited with code ${code}`); 149 | }); 150 | } 151 | } 152 | 153 | } 154 | createChildProcess(useVenv: boolean, venvPath: string | undefined, path: string) { 155 | let pythonProcess: ChildProcess | undefined; 156 | const isWindows = os.platform() === "win32"; 157 | 158 | if (useVenv && venvPath) { 159 | if (isWindows) { 160 | // Windows - use .bat activation 161 | pythonProcess = spawn("cmd.exe", ["/c", `call ${venvPath}/Scripts/activate.bat && python ${path}`]); 162 | } else { 163 | // macOS/Linux - use source and run in bash 164 | pythonProcess = spawn("bash", ["-c", `source "${venvPath}/bin/activate" && python3 "${path}"`]); 165 | } 166 | } else { 167 | if (isWindows) { 168 | pythonProcess = spawn("cmd.exe", ["/c", `python ${path}`]); 169 | } else { 170 | pythonProcess = spawn("python3", [path]); 171 | } 172 | } 173 | 174 | return pythonProcess; 175 | } 176 | 177 | getFileNameFromPath(path: string): string { 178 | var fileName = ""; 179 | fileName = path.substring(path.lastIndexOf("/") + 1); 180 | return fileName; 181 | } 182 | 183 | createTimer(ev: WillAppearEvent | DidReceiveSettingsEvent | KeyDownEvent) { 184 | const interval = ev.payload.settings.interval ?? 10 185 | return setInterval(() => { 186 | streamDeck.logger.info(`timer triggered after ${ev.payload.settings.interval}s for action ${ev.action.manifestId}, id: ${ev.action.id}`) 187 | this.executeAction(ev); 188 | }, interval * 1000) 189 | 190 | } 191 | 192 | 193 | } 194 | 195 | export var pyBGService = new PythonBackgroundService(); 196 | -------------------------------------------------------------------------------- /src/script.py: -------------------------------------------------------------------------------- 1 | import random 2 | 3 | def random_bool(): 4 | return random.choice(["abc", "edf"]) 5 | 6 | if __name__ == "__main__": 7 | print(random_bool()) 8 | -------------------------------------------------------------------------------- /src/test.py: -------------------------------------------------------------------------------- 1 | import random 2 | 3 | #A function that will return either True or False randomly 4 | #Replace this with your code and return your desired values 5 | def random_bool(): 6 | return random.choice([True, False]) 7 | 8 | #excute the function and print the return value 9 | #the plugin will then parse the return value and react 10 | if __name__ == "__main__": 11 | print(random_bool()) 12 | -------------------------------------------------------------------------------- /src/true.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/9h03n1x/pythonscriptdeck/b65c040bedd225d0a261eb8a7dc2cb2724efa8c3/src/true.png -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@tsconfig/node20/tsconfig.json", 3 | "compilerOptions": { 4 | "customConditions": [ 5 | "node" 6 | ], 7 | "module": "ES2022", 8 | "moduleResolution": "Bundler" 9 | }, 10 | "include": [ 11 | "src/**/*.ts" 12 | ], 13 | "exclude": [ 14 | "node_modules" 15 | ] 16 | } --------------------------------------------------------------------------------