From aa6d2199c46bc7a06287ca7600ed6b0df8824279 Mon Sep 17 00:00:00 2001 From: damp11113 Date: Fri, 12 Jul 2024 17:40:45 +0700 Subject: [PATCH] update 1.0.2 add save load new and make code more readable not complex --- .gitignore | 4 +- .../test/block_design.json | 0 {peripherals => blocks}/test/generator.js | 0 blocks/test/index.json | 14 ++ {peripherals => blocks}/test/toolbox.xml | 0 ccIDE Defines.xlsx | Bin 0 -> 49502 bytes ccIDE Functions Defines.xlsx | Bin 32302 -> 0 bytes package-lock.json | 221 ++++------------- package.json | 3 +- peripherals/test/index.json | 8 - src/blocksmanager.js | 24 +- src/codegen.js | 75 ++++++ src/index.html | 216 +++++++++++++++-- src/index.js | 223 +++++++++++++++++- src/toolbox.xml | 2 +- src/virtualcode.js | 88 ++++--- 16 files changed, 610 insertions(+), 268 deletions(-) rename {peripherals => blocks}/test/block_design.json (100%) rename {peripherals => blocks}/test/generator.js (100%) create mode 100644 blocks/test/index.json rename {peripherals => blocks}/test/toolbox.xml (100%) create mode 100644 ccIDE Defines.xlsx delete mode 100644 ccIDE Functions Defines.xlsx delete mode 100644 peripherals/test/index.json create mode 100644 src/codegen.js diff --git a/.gitignore b/.gitignore index 40b878d..4172c07 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ -node_modules/ \ No newline at end of file +node_modules/ +.mcattributes +package-lock.json diff --git a/peripherals/test/block_design.json b/blocks/test/block_design.json similarity index 100% rename from peripherals/test/block_design.json rename to blocks/test/block_design.json diff --git a/peripherals/test/generator.js b/blocks/test/generator.js similarity index 100% rename from peripherals/test/generator.js rename to blocks/test/generator.js diff --git a/blocks/test/index.json b/blocks/test/index.json new file mode 100644 index 0000000..4923508 --- /dev/null +++ b/blocks/test/index.json @@ -0,0 +1,14 @@ +{ + "name": "Test Peripheral", + "author": "DPSoftware Foundation", + "description": "Test Peripheral", + "version": "1.0.0", + "category": "Blockly Extensions", + "keyword": "test", + "license": "GPL-3.0-or-later", + "peripherals": false, + "library": false, + "turtle": false, + "system": true, + "require_network": false +} \ No newline at end of file diff --git a/peripherals/test/toolbox.xml b/blocks/test/toolbox.xml similarity index 100% rename from peripherals/test/toolbox.xml rename to blocks/test/toolbox.xml diff --git a/ccIDE Defines.xlsx b/ccIDE Defines.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..8b14b6f575e99fa2d2a5b4433695b82b645584c3 GIT binary patch literal 49502 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

?vUW_?jGDFcyM=z;0^(TJKTakr#pR4`n}(e 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 U8&!WO= 13.0.0" + } + }, "node_modules/@popperjs/core": { "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", @@ -52,7 +60,6 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true, "engines": { "node": ">=10" }, @@ -64,7 +71,6 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, "dependencies": { "defer-to-connect": "^2.0.0" }, @@ -76,7 +82,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "dev": true, "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", @@ -87,14 +92,12 @@ "node_modules/@types/http-cache-semantics": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "dev": true + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" }, "node_modules/@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dev": true, "dependencies": { "@types/node": "*" } @@ -103,7 +106,6 @@ "version": "20.14.9", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", - "dev": true, "dependencies": { "undici-types": "~5.26.4" } @@ -112,7 +114,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", - "dev": true, "dependencies": { "@types/node": "*" } @@ -121,7 +122,6 @@ "version": "2.10.3", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", - "dev": true, "optional": true, "dependencies": { "@types/node": "*" @@ -158,7 +158,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", - "dev": true, "optional": true }, "node_modules/bootstrap": { @@ -183,7 +182,6 @@ "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, "engines": { "node": "*" } @@ -192,7 +190,6 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true, "engines": { "node": ">=10.6.0" } @@ -201,7 +198,6 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", - "dev": true, "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -219,7 +215,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dev": true, "dependencies": { "mimic-response": "^1.0.0" }, @@ -286,7 +281,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, "dependencies": { "mimic-response": "^3.1.0" }, @@ -301,7 +295,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, "engines": { "node": ">=10" }, @@ -313,7 +306,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, "engines": { "node": ">=10" } @@ -322,7 +314,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, "optional": true, "dependencies": { "es-define-property": "^1.0.0", @@ -340,7 +331,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, "optional": true, "dependencies": { "define-data-property": "^1.0.1", @@ -366,14 +356,12 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true, "optional": true }, "node_modules/electron": { "version": "31.1.0", "resolved": "https://registry.npmjs.org/electron/-/electron-31.1.0.tgz", "integrity": "sha512-TBOwqLxSxnx6+pH6GMri7R3JPH2AkuGJHfWZS0p1HsmN+Qr1T9b0IRJnnehSd/3NZAmAre4ft9Ljec7zjyKFJA==", - "dev": true, "hasInstallScript": true, "dependencies": { "@electron/get": "^2.0.0", @@ -396,7 +384,6 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, "dependencies": { "once": "^1.4.0" } @@ -416,7 +403,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, "engines": { "node": ">=6" } @@ -425,7 +411,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, "optional": true, "dependencies": { "get-intrinsic": "^1.2.4" @@ -438,7 +423,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, "optional": true, "engines": { "node": ">= 0.4" @@ -448,14 +432,12 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true, "optional": true }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "optional": true, "engines": { "node": ">=10" @@ -468,7 +450,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -488,7 +469,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, "dependencies": { "pend": "~1.2.0" } @@ -510,7 +490,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -524,7 +503,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "optional": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -534,7 +512,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, "optional": true, "dependencies": { "es-errors": "^1.3.0", @@ -554,7 +531,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, "dependencies": { "pump": "^3.0.0" }, @@ -569,7 +545,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", - "dev": true, "optional": true, "dependencies": { "boolean": "^3.0.1", @@ -587,7 +562,6 @@ "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, "optional": true, "bin": { "semver": "bin/semver.js" @@ -600,7 +574,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, "optional": true, "dependencies": { "define-properties": "^1.2.1", @@ -617,7 +590,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, "optional": true, "dependencies": { "get-intrinsic": "^1.1.3" @@ -630,7 +602,6 @@ "version": "11.8.6", "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dev": true, "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -654,14 +625,12 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, "optional": true, "dependencies": { "es-define-property": "^1.0.0" @@ -674,7 +643,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true, "optional": true, "engines": { "node": ">= 0.4" @@ -687,7 +655,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, "optional": true, "engines": { "node": ">= 0.4" @@ -700,7 +667,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "optional": true, "dependencies": { "function-bind": "^1.1.2" @@ -723,8 +689,7 @@ "node_modules/http-cache-semantics": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "node_modules/http-proxy-agent": { "version": "7.0.2", @@ -742,7 +707,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" @@ -821,21 +785,18 @@ "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true, "optional": true }, "node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -844,7 +805,6 @@ "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, "dependencies": { "json-buffer": "3.0.1" } @@ -853,7 +813,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, "engines": { "node": ">=8" } @@ -862,7 +821,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", - "dev": true, "optional": true, "dependencies": { "escape-string-regexp": "^4.0.0" @@ -894,7 +852,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, "engines": { "node": ">=4" } @@ -908,7 +865,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, "engines": { "node": ">=10" }, @@ -925,7 +881,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, "optional": true, "engines": { "node": ">= 0.4" @@ -935,7 +890,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" } @@ -944,7 +898,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true, "engines": { "node": ">=8" } @@ -963,14 +916,12 @@ "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, "engines": { "node": ">=0.4.0" } @@ -984,7 +935,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -1007,7 +957,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, "engines": { "node": ">=10" }, @@ -1023,14 +972,12 @@ "node_modules/resolve-alpn": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" }, "node_modules/responselike": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dev": true, "dependencies": { "lowercase-keys": "^2.0.0" }, @@ -1042,7 +989,6 @@ "version": "2.15.4", "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", - "dev": true, "optional": true, "dependencies": { "boolean": "^3.0.1", @@ -1081,7 +1027,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -1090,14 +1035,12 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true, "optional": true }, "node_modules/serialize-error": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dev": true, "optional": true, "dependencies": { "type-fest": "^0.13.1" @@ -1113,14 +1056,12 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true, "optional": true }, "node_modules/sumchecker": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", - "dev": true, "dependencies": { "debug": "^4.1.0" }, @@ -1170,7 +1111,6 @@ "version": "0.13.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true, "optional": true, "engines": { "node": ">=10" @@ -1182,14 +1122,12 @@ "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, "engines": { "node": ">= 4.0.0" } @@ -1256,8 +1194,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { "version": "8.17.1", @@ -1296,7 +1233,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -1308,7 +1244,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", - "dev": true, "requires": { "debug": "^4.1.1", "env-paths": "^2.2.0", @@ -1320,6 +1255,12 @@ "sumchecker": "^3.0.1" } }, + "@electron/remote": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@electron/remote/-/remote-2.1.2.tgz", + "integrity": "sha512-EPwNx+nhdrTBxyCqXt/pftoQg/ybtWDW3DUWHafejvnB1ZGGfMpv6e15D8KeempocjXe78T7WreyGGb3mlZxdA==", + "requires": {} + }, "@popperjs/core": { "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", @@ -1329,14 +1270,12 @@ "@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==" }, "@szmarczak/http-timer": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, "requires": { "defer-to-connect": "^2.0.0" } @@ -1345,7 +1284,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "dev": true, "requires": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", @@ -1356,14 +1294,12 @@ "@types/http-cache-semantics": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "dev": true + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" }, "@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dev": true, "requires": { "@types/node": "*" } @@ -1372,7 +1308,6 @@ "version": "20.14.9", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", - "dev": true, "requires": { "undici-types": "~5.26.4" } @@ -1381,7 +1316,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", - "dev": true, "requires": { "@types/node": "*" } @@ -1390,7 +1324,6 @@ "version": "2.10.3", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", - "dev": true, "optional": true, "requires": { "@types/node": "*" @@ -1421,7 +1354,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", - "dev": true, "optional": true }, "bootstrap": { @@ -1433,20 +1365,17 @@ "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" }, "cacheable-lookup": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==" }, "cacheable-request": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", - "dev": true, "requires": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -1461,7 +1390,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dev": true, "requires": { "mimic-response": "^1.0.0" } @@ -1508,7 +1436,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, "requires": { "mimic-response": "^3.1.0" }, @@ -1516,22 +1443,19 @@ "mimic-response": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" } } }, "defer-to-connect": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" }, "define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, "optional": true, "requires": { "es-define-property": "^1.0.0", @@ -1543,7 +1467,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, "optional": true, "requires": { "define-data-property": "^1.0.1", @@ -1560,14 +1483,12 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true, "optional": true }, "electron": { "version": "31.1.0", "resolved": "https://registry.npmjs.org/electron/-/electron-31.1.0.tgz", "integrity": "sha512-TBOwqLxSxnx6+pH6GMri7R3JPH2AkuGJHfWZS0p1HsmN+Qr1T9b0IRJnnehSd/3NZAmAre4ft9Ljec7zjyKFJA==", - "dev": true, "requires": { "@electron/get": "^2.0.0", "@types/node": "^20.9.0", @@ -1583,7 +1504,6 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, "requires": { "once": "^1.4.0" } @@ -1596,14 +1516,12 @@ "env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" }, "es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, "optional": true, "requires": { "get-intrinsic": "^1.2.4" @@ -1613,28 +1531,24 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, "optional": true }, "es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true, "optional": true }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "optional": true }, "extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, "requires": { "@types/yauzl": "^2.9.1", "debug": "^4.1.1", @@ -1646,7 +1560,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, "requires": { "pend": "~1.2.0" } @@ -1665,7 +1578,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -1676,14 +1588,12 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "optional": true }, "get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, "optional": true, "requires": { "es-errors": "^1.3.0", @@ -1697,7 +1607,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, "requires": { "pump": "^3.0.0" } @@ -1706,7 +1615,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", - "dev": true, "optional": true, "requires": { "boolean": "^3.0.1", @@ -1721,7 +1629,6 @@ "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, "optional": true } } @@ -1730,7 +1637,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, "optional": true, "requires": { "define-properties": "^1.2.1", @@ -1741,7 +1647,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, "optional": true, "requires": { "get-intrinsic": "^1.1.3" @@ -1751,7 +1656,6 @@ "version": "11.8.6", "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dev": true, "requires": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -1769,14 +1673,12 @@ "graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, "optional": true, "requires": { "es-define-property": "^1.0.0" @@ -1786,21 +1688,18 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true, "optional": true }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, "optional": true }, "hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "optional": true, "requires": { "function-bind": "^1.1.2" @@ -1817,8 +1716,7 @@ "http-cache-semantics": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "http-proxy-agent": { "version": "7.0.2", @@ -1833,7 +1731,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, "requires": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" @@ -1892,21 +1789,18 @@ "json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true, "optional": true }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, "requires": { "graceful-fs": "^4.1.6" } @@ -1915,7 +1809,6 @@ "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, "requires": { "json-buffer": "3.0.1" } @@ -1923,14 +1816,12 @@ "lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" }, "matcher": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", - "dev": true, "optional": true, "requires": { "escape-string-regexp": "^4.0.0" @@ -1952,8 +1843,7 @@ "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" }, "ms": { "version": "2.1.2", @@ -1963,8 +1853,7 @@ "normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" }, "nwsapi": { "version": "2.2.10", @@ -1975,14 +1864,12 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, "optional": true }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "requires": { "wrappy": "1" } @@ -1990,8 +1877,7 @@ "p-cancelable": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" }, "parse5": { "version": "7.1.2", @@ -2004,14 +1890,12 @@ "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "psl": { "version": "1.9.0", @@ -2022,7 +1906,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -2041,8 +1924,7 @@ "quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" }, "requires-port": { "version": "1.0.0", @@ -2052,14 +1934,12 @@ "resolve-alpn": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" }, "responselike": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dev": true, "requires": { "lowercase-keys": "^2.0.0" } @@ -2068,7 +1948,6 @@ "version": "2.15.4", "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", - "dev": true, "optional": true, "requires": { "boolean": "^3.0.1", @@ -2100,21 +1979,18 @@ "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" }, "semver-compare": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true, "optional": true }, "serialize-error": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dev": true, "optional": true, "requires": { "type-fest": "^0.13.1" @@ -2124,14 +2000,12 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true, "optional": true }, "sumchecker": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", - "dev": true, "requires": { "debug": "^4.1.0" } @@ -2171,20 +2045,17 @@ "version": "0.13.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true, "optional": true }, "undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, "url-parse": { "version": "1.5.10", @@ -2233,8 +2104,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "ws": { "version": "8.17.1", @@ -2256,7 +2126,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, "requires": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" diff --git a/package.json b/package.json index 4bb2782..967338d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ccide", - "version": "1.0.0", + "version": "1.0.2", "description": "ComputerCraft mod virtual lua IDE", "main": "index.js", "scripts": { @@ -13,6 +13,7 @@ "electron": "^31.1.0" }, "dependencies": { + "@electron/remote": "^2.1.2", "blockly": "^11.1.1", "bootstrap": "^5.3.3", "electron-prompt": "^1.7.0" diff --git a/peripherals/test/index.json b/peripherals/test/index.json deleted file mode 100644 index 5b8c8cb..0000000 --- a/peripherals/test/index.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "Test Peripheral", - "author": "DPSoftware Foundation", - "description": "Test Peripheral", - "version": "1.0.0", - "category": "Blockly Extensions", - "license": "GPL-3.0-or-later" -} \ No newline at end of file diff --git a/src/blocksmanager.js b/src/blocksmanager.js index 347ec71..626fc69 100644 --- a/src/blocksmanager.js +++ b/src/blocksmanager.js @@ -1,7 +1,7 @@ const fs = require('fs'); const path = require('path'); -const peripheralsfolder = path.join(__dirname, "../peripherals"); +const peripheralsfolder = path.join(__dirname, "../blocks"); function mergeXml(originalXml, appendXml) { // Remove from appendXml @@ -22,7 +22,7 @@ function mergeXml(originalXml, appendXml) { return modifiedXml; } -function loadperipheral(workspace, originaltoolbar, peripherals) { +function loadperipheral(workspace, currenttoolbar, peripherals) { const filePath = path.join(peripheralsfolder, peripherals); const jsonfilePath = path.join(filePath, "block_design.json"); const xmlfilePath = path.join(filePath, "toolbox.xml"); @@ -53,24 +53,24 @@ function loadperipheral(workspace, originaltoolbar, peripherals) { }); // Load and merge new toolbox XML - try { - const toolbar = fs.readFileSync(xmlfilePath, 'utf8'); - const newxml = mergeXml(originaltoolbar, toolbar); - - workspace.updateToolbox(newxml); + const toolbar = fs.readFileSync(xmlfilePath, 'utf8'); + const newxml = mergeXml(currenttoolbar, toolbar); + + workspace.updateToolbox(newxml); + + document.getElementById('statusMessage').textContent = `Loaded ${peripherals}`; - document.getElementById('statusMessage').textContent = `Loaded ${peripherals}`; - } catch (error) { - console.error('Error loading or merging XML:', error); - document.getElementById('statusMessage').textContent = `Can't Load ${peripherals}`; - } try { require(generatorfilePath); // This will execute generator.js if it's a Node.js module } catch (error) { console.error('Error loading generator.js:', error); } + + return newxml; } + + module.exports = { loadperipheral } \ No newline at end of file diff --git a/src/codegen.js b/src/codegen.js new file mode 100644 index 0000000..f77da9d --- /dev/null +++ b/src/codegen.js @@ -0,0 +1,75 @@ +function delay(time) { + return new Promise(resolve => setTimeout(resolve, time)); +} + +const { luaGenerator } = require('blockly/lua'); // Use require syntax for Blockly module + +const progress = document.getElementById("progress"); +const circles = document.querySelectorAll(".circle"); +let upcurrentActive = 1; +let uploadError = false; // Flag to track if there's an error + +const uploadUpdateProgress = () => { + circles.forEach((circle, index) => { + if (index < upcurrentActive) { + circle.classList.add("active"); + if (index === upcurrentActive - 1 && uploadError) { + circle.classList.add("error"); + } else { + circle.classList.remove("error"); + } + } else { + circle.classList.remove("active"); + circle.classList.remove("error"); // Ensure no error class on inactive circles + } + }); + + if (uploadError) { + progress.classList.add("error"); + } else { + const actives = document.querySelectorAll(".active"); + progress.style.width = ((actives.length - 1) / (circles.length - 1)) * 100 + "%"; + progress.classList.remove("error"); + } +}; + +async function gencode() { + document.getElementById('upload-popup').style.display = 'block'; + upcurrentActive = 1; + uploadError = false; + uploadUpdateProgress(); + // compile/convert code + + upcurrentActive++; + uploadUpdateProgress(); + document.getElementById('upload-status').textContent = "Generating code"; + try { + let code = luaGenerator.workspaceToCode(workspace); + console.log(code); + } catch (e) { + uploadError = true; + uploadUpdateProgress(); + document.getElementById('upload-status').textContent = e; + return + } + + // upload to computercraft with remote + document.getElementById('upload-status').textContent = "Uploading code to machine"; + upcurrentActive++; + uploadUpdateProgress(); + await delay(1000) + + // execute with remote + document.getElementById('upload-status').textContent = "Executing code"; + upcurrentActive++; + uploadUpdateProgress(); + await delay(1000) + + // done! + document.getElementById('upload-status').textContent = "Done!"; + document.getElementById('upload-popup').style.animation = 'fadeOut 0.3s ease'; // Apply fade-out animation + setTimeout(function() { + document.getElementById('upload-popup').style.display = 'none'; // Hide popup after animation completes + document.getElementById('upload-popup').style.animation = ''; // Reset animation property + }, 300); // Adjust to match animation duration in milliseconds +} \ No newline at end of file diff --git a/src/index.html b/src/index.html index 38ce236..cb1c2ed 100644 --- a/src/index.html +++ b/src/index.html @@ -9,22 +9,24 @@ - + +

+

Loading...

+
+ - -
-

Loading...

-
-
@@ -35,7 +37,52 @@

Initializing...

+ + - + // Event listener to close the upload-popup with fade-out effect + document.getElementById('uploadCloseBtn').addEventListener('click', function() { + uploadpopup.style.animation = 'fadeOut 0.3s ease'; // Apply fade-out animation + setTimeout(function() { + uploadpopup.style.display = 'none'; // Hide popup after animation completes + uploadpopup.style.animation = ''; // Reset animation property + }, 300); // Adjust to match animation duration in milliseconds + }); + + // Close the upload-popup if the user clicks outside of it + window.addEventListener('click', function(event) { + if (event.target == uploadpopup) { + uploadpopup.style.animation = 'fadeOut 0.3s ease'; // Apply fade-out animation + setTimeout(function() { + uploadpopup.style.display = 'none'; // Hide popup after animation completes + uploadpopup.style.animation = ''; // Reset animation property + }, 300); // Adjust to match animation duration in milliseconds + } + }); + + + + diff --git a/src/index.js b/src/index.js index ce53fb9..a4e41b3 100644 --- a/src/index.js +++ b/src/index.js @@ -1,14 +1,27 @@ -const { app, BrowserWindow, ipcMain, dialog } = require('electron') +const { app, BrowserWindow, ipcMain, Menu, dialog } = require('electron') +const fs = require('fs'); const prompt = require('electron-prompt'); +const path = require('path'); const ipc = ipcMain +let currentprojectpath = null; +let currentprojectname = null; +let currentprojectopen = false +let appexiting = false + app.whenReady().then(() => { + currentprojectpath = null; + currentprojectname = null; + currentprojectopen = false; + appexiting = false; + const win = new BrowserWindow({ - width: 1300, - height: 740, + width: 1280, + height: 720, webPreferences: { devTools: true, nodeIntegration: true, + enableRemoteModule: true, contextIsolation: false, } }) @@ -16,11 +29,118 @@ app.whenReady().then(() => { win.loadFile('index.html') //win.openDevTools(); - app.on('activate', () => { - if (BrowserWindow.getAllWindows().length === 0) { - createWindow() + //app.on('activate', () => { + // if (BrowserWindow.getAllWindows().length === 0) { + // createWindow() + // } + //}) + + // Define a custom menu template + const menuTemplate = [ + { + label: 'File', + submenu: [ + { + label: 'New', + accelerator: 'CmdOrCtrl+N', + click: () => { + win.reload() + } + }, + { + label: 'Open', + accelerator: 'CmdOrCtrl+O', + click: () => { + dialog.showOpenDialog(win, { + title: 'Open Project', + defaultPath: app.getPath('documents'), + filters: [ + { name: 'ComputerCraft Project', extensions: ['ccp'] } + ], + properties: ['openFile'] + }).then(result => { + if (!result.canceled) { + const filePath = result.filePaths[0]; + + fs.readFile(filePath, 'utf8', (err, json) => { + if (err) { + console.error('Error loading workspace:', err); + return; + } + win.webContents.send('load-workspace', json); + + currentprojectpath = result.filePaths[0] + currentprojectname = path.basename(result.filePaths[0]); + currentprojectopen = true; + + win.setTitle(`${currentprojectname} | ccIDE`) + }); + + } + }).catch(err => { + console.error('Error showing open dialog:', err); + }); + + } + }, + { + label: 'Save', + accelerator: 'CmdOrCtrl+S', + click: () => { + win.webContents.send('save-workspace-request'); + } + }, + { + label: 'Save as', + accelerator: 'CmdOrCtrl+Shift+S', + click: () => { + currentprojectopen = false + win.webContents.send('save-workspace-request'); + } + }, + { type: 'separator' }, + { + label: 'Exit', + accelerator: 'CmdOrCtrl+Q', + click: () => { + app.quit(); + } + } + ] + }, + { + label: 'Edit', + submenu: [ + { role: 'undo', accelerator: 'CmdOrCtrl+Z' }, + { role: 'redo', accelerator: 'CmdOrCtrl+Y' }, + { type: 'separator' }, + { role: 'cut', accelerator: 'CmdOrCtrl+X' }, + { role: 'copy', accelerator: 'CmdOrCtrl+C' }, + { role: 'paste', accelerator: 'CmdOrCtrl+V' } + ] + }, + { + label: 'View', + submenu: [ + { label: 'DevTools', accelerator: 'F12', click: () => {win.openDevTools()}}, + ] + }, + { + label: 'Help', + submenu: [ + { + label: 'About', + click: () => { + console.log('About clicked'); + } + } + ] } - }) + ]; + + // Set the custom menu + const menu = Menu.buildFromTemplate(menuTemplate); + Menu.setApplicationMenu(menu); ipc.on('prompt', (event, promptText, defaultValue) => { try { @@ -48,4 +168,91 @@ app.whenReady().then(() => { event.returnValue = null; // or handle error appropriately } }); -}) \ No newline at end of file + + ipc.on('save-workspace', (event, json) => { + if (!currentprojectopen) { + dialog.showSaveDialog(win, { + title: 'Save Project', + defaultPath: path.join(app.getPath('documents'), 'untitled.ccp'), + filters: [ + { name: 'ComputerCraft Project', extensions: ['ccp'] } + ] + }).then(result => { + if (!result.canceled) { + fs.writeFile(result.filePath, JSON.stringify(json), (err) => { + if (err) { + console.error('Error saving project:', err); + dialog.showErrorBox("Save Project Error", err.message) + win.webContents.send('workspace-saved', false); + } else { + currentprojectpath = result.filePath + currentprojectname = path.basename(result.filePath); + currentprojectopen = true; + + win.webContents.send('workspace-saved', true); + + win.setTitle(`${currentprojectname} | ccIDE`) + } + }); + } else { + win.webContents.send('workspace-saved', false); + } + }).catch(err => { + console.error('Error showing save dialog:', err); + dialog.showErrorBox("Save Project Error", err.message) + win.webContents.send('workspace-saved', false); + }); + } else { + fs.writeFile(currentprojectpath, JSON.stringify(json), (err) => { + if (err) { + console.error('Error saving project:', err); + dialog.showErrorBox("Save Project Error", err.message) + win.webContents.send('workspace-saved', false); + } else { + currentprojectopen = true; + + win.webContents.send('workspace-saved', true); + + win.setTitle(`${currentprojectname} | ccIDE`) + + if (appexiting) { + app.quit(); + } + } + }); + } + }); + + ipc.on('workspace-notsave', (event) => { + win.setTitle(`${currentprojectname}* | ccIDE`) + }) + + /* + win.on('close', function(e){ + win.show() + }); + + app.on("before-quit", function() { + if (currentprojectopen) { + const result = dialog.showMessageBoxSync({ + type: 'question', + buttons: ['Save', 'Don\'t Save', 'Cancel'], + defaultId: 2, + title: 'Save Changes', + message: "Your project is not saved", + }); + if (result === 1) { + win = null + } else if (result === 0) { + appexiting = true; + win.webContents.send('save-workspace-request'); + + } + } else { + win = null + } + + }) + */ +}) + diff --git a/src/toolbox.xml b/src/toolbox.xml index d457139..1ad854a 100644 --- a/src/toolbox.xml +++ b/src/toolbox.xml @@ -242,7 +242,7 @@ - + diff --git a/src/virtualcode.js b/src/virtualcode.js index 6aec675..8de9437 100644 --- a/src/virtualcode.js +++ b/src/virtualcode.js @@ -1,40 +1,24 @@ document.getElementById('statusMessage').textContent = "loading"; - -const fs = require('fs'); -const path = require('path'); -const { ipcRenderer } = require("electron"); -const { loadperipheral } = require("./blocksmanager"); -const { luaGenerator } = require('blockly/lua'); // Use require syntax for Blockly module - -const ipc = ipcRenderer; - // override prompt command window.prompt = function(promptText, defaultValue) { return ipc.sendSync("prompt", promptText, defaultValue); }; +const fs = require('fs'); +const path = require('path'); +const { ipcRenderer } = require("electron"); +const { loadperipheral } = require("./blocksmanager"); const Blockly = require('blockly'); +const ipc = ipcRenderer; + + +let isprojectsaved = false; +let usedlibinproject = [] Blockly.utils.colour.setHsvSaturation(0.9) -const peripheralsfolder = path.join(__dirname, "../peripherals"); - -const originaltoolbar = fs.readFileSync(path.join(__dirname, "toolbox.xml"), 'utf8'); -const sysmodulejson = fs.readFileSync(path.join(__dirname, "module_block_design.json"), 'utf8'); - - -const blocksJson = JSON.parse(sysmodulejson); -for (const blockId in blocksJson) { - if (blocksJson.hasOwnProperty(blockId)) { - Blockly.Blocks[blockId] = { - init: function() { - this.jsonInit(blocksJson[blockId]); - } - }; - } -} +let originaltoolbar = fs.readFileSync(path.join(__dirname, "toolbox.xml"), 'utf8'); - var workspace = Blockly.inject('blocklyDiv', { toolbox: originaltoolbar, trashcan: true, @@ -46,17 +30,49 @@ var workspace = Blockly.inject('blocklyDiv', { } }); - -loadperipheral(workspace, originaltoolbar, "test"); - -document.getElementById('statusMessage').textContent = "ready"; +originaltoolbar = loadperipheral(workspace, originaltoolbar, "test"); workspace.getToolbox().getFlyout().autoClose = false; -// Ensure Blockly container is shown after the workspace is injected -document.getElementById('loadingScreen').style.display = 'none'; -document.getElementById('blocklyContainer').style.display = 'block'; +// Save workspace +ipc.on('save-workspace-request', (event) => { + const state = Blockly.serialization.workspaces.save(workspace); + const data = { + "usedlibrary": usedlibinproject, + "content": state + } + ipc.send('save-workspace', data); +}); -function gencode() { - return luaGenerator.workspaceToCode(workspace); -} +// Load workspace +ipc.on('load-workspace', (event, json) => { + if (json) { + data = JSON.parse(json) + usedlibinproject = data.usedlibrary + workspace.clear() + Blockly.serialization.workspaces.load(data.content, workspace); + isprojectsaved = true + } +}) + +workspace.addChangeListener(function(event) { + if ([Blockly.Events.UI, + Blockly.Events.VIEWPORT_CHANGE, + Blockly.Events.TOOLBOX_ITEM_SELECT] + .includes(event.type)) { + return; // Don't care about UI events. + } + if (isprojectsaved) { + isprojectsaved = false + ipc.send("workspace-notsave") + }; +}); + +ipc.on('workspace-saved', (event, success) => { + isprojectsaved = success +}); + +// Ensure Blockly container is shown after the workspace is injected +document.getElementById('loadingScreen').style.visibility = 'hidden'; +document.getElementById('blocklyContainer').style.visibility = 'visible'; +document.getElementById('statusMessage').textContent = "ready"; \ No newline at end of file