From c79fcd89dcac1772bf937455706e6e397338d3d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=AB=8B=E5=B8=AE?= <3294713004@qq.com> Date: Thu, 8 May 2025 23:18:05 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=20`cert:generate`=20?= =?UTF-8?q?=E5=92=8C=20`arduino:install`=20=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.js => .eslintrc.cjs | 2 +- .gitignore | 2 + .gitmodules | 3 + arduino-cli.json | 31 + certs/server.crt | 26 - certs/server.key | 28 - config.json | 29 + mixly | 1 + nodemon.json | 6 +- package-lock.json | 891 +++++++++++++++++++++++- package.json | 22 +- scripts/arduino-install.js | 99 +++ scripts/cert-generate.js | 32 + src/common/boards.js | 4 +- src/common/config.js | 33 +- src/common/debug.js | 2 +- src/common/events-base.js | 2 +- src/common/events.js | 5 +- src/common/registry.js | 2 +- src/common/serial.js | 4 +- src/common/shell-ampy.js | 4 +- src/common/shell-arduino.js | 4 +- src/common/shell-micropython.js | 6 +- src/common/shell.js | 4 +- src/common/socket.js | 21 +- src/common/utils.js | 76 ++ src/index.js | 92 ++- src/user/config.json | 27 - webpack.common.js => webpack.common.cjs | 2 +- webpack.dev.js => webpack.dev.cjs | 2 +- webpack.prod.js => webpack.prod.cjs | 2 +- 31 files changed, 1270 insertions(+), 194 deletions(-) rename .eslintrc.js => .eslintrc.cjs (99%) create mode 100644 .gitmodules create mode 100644 arduino-cli.json delete mode 100644 certs/server.crt delete mode 100644 certs/server.key create mode 100644 config.json create mode 160000 mixly create mode 100644 scripts/arduino-install.js create mode 100644 scripts/cert-generate.js create mode 100644 src/common/utils.js delete mode 100644 src/user/config.json rename webpack.common.js => webpack.common.cjs (89%) rename webpack.dev.js => webpack.dev.cjs (84%) rename webpack.prod.js => webpack.prod.cjs (68%) diff --git a/.eslintrc.js b/.eslintrc.cjs similarity index 99% rename from .eslintrc.js rename to .eslintrc.cjs index caedf1f..dafd4ee 100644 --- a/.eslintrc.js +++ b/.eslintrc.cjs @@ -29,5 +29,5 @@ module.exports = { "new-parens": 2, // new时必须加小括号 "eqeqeq": 0, // 必须使用全等 "no-import-assign": 0 - }, + } }; \ No newline at end of file diff --git a/.gitignore b/.gitignore index 1d6a741..24e54fe 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ package-lock.json yarn.lock dist /temp +/arduino-cli +/certs diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..eac6f72 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "mixly"] + path = mixly + url = https://gitee.com/bnu_mixly/mixly3.git diff --git a/arduino-cli.json b/arduino-cli.json new file mode 100644 index 0000000..bc63c69 --- /dev/null +++ b/arduino-cli.json @@ -0,0 +1,31 @@ +{ + "board_manager": { + "additional_urls": [ + "http://download.mixlylibs.cloud/arduino-packages/index/package_esp8266com_index.json", + "https://jihulab.com/esp-mirror/espressif/arduino-esp32/-/raw/gh-pages/package_esp32_index_cn.json" + ] + }, + "daemon": { + "port": "50051" + }, + "directories": { + "data": "", + "downloads": "", + "user": "" + }, + "library": { + "enable_unsafe_install": false + }, + "logging": { + "file": "", + "format": "text", + "level": "info" + }, + "metrics": { + "addr": "9090", + "enabled": true + }, + "sketch": { + "always_export_binaries": false + } +} \ No newline at end of file diff --git a/certs/server.crt b/certs/server.crt deleted file mode 100644 index f348637..0000000 --- a/certs/server.crt +++ /dev/null @@ -1,26 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIEXjCCAsagAwIBAgIQC+VBZ3EzgSGCMSBQIbLy+jANBgkqhkiG9w0BAQsFADCB -hTEeMBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMS0wKwYDVQQLDCRERVNL -VE9QLVZQMU4zNzJcVXNlckBERVNLVE9QLVZQMU4zNzIxNDAyBgNVBAMMK21rY2Vy -dCBERVNLVE9QLVZQMU4zNzJcVXNlckBERVNLVE9QLVZQMU4zNzIwHhcNMjQxMTI5 -MTgwODE0WhcNMjcwMzAxMTgwODE0WjBYMScwJQYDVQQKEx5ta2NlcnQgZGV2ZWxv -cG1lbnQgY2VydGlmaWNhdGUxLTArBgNVBAsMJERFU0tUT1AtVlAxTjM3MlxVc2Vy -QERFU0tUT1AtVlAxTjM3MjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -AMBMqCJwWtIStsMQMjW0HuLjEZNAQiys1B5XRfd2NE/HJkv2AwKGwGT70gzG28BB -2v7EOhfPCN7yXrzIw5BIItu76eCVnwfbd+KhyFNyfRsqHkQp3yFcAXJ+NonyoU8u -28dP0CTxTz3n3Pn9yx8p26ePpr2D7fYbB7lyKByxEkoWHnTCCZ8wPeZ58JEba4ob -SSuGSYOm3xdqcTBFQVCRi/1AGk9R4YozGNpnycGNqEythsIp4J7chjIVtC2WONFp -s0YG/GuPIHIxv/2bHMQJMg3GW5oLJP53E+C7xI1tVv572STv7ZGWFopgsmDomWs5 -S/XkvdXM3xx5Yr+P9gmRGRMCAwEAAaN2MHQwDgYDVR0PAQH/BAQDAgWgMBMGA1Ud -JQQMMAoGCCsGAQUFBwMBMB8GA1UdIwQYMBaAFIb2OJENGB0jIgBAczrFu8nddW/m -MCwGA1UdEQQlMCOCCWxvY2FsaG9zdIcEfwAAAYcQAAAAAAAAAAAAAAAAAAAAATAN -BgkqhkiG9w0BAQsFAAOCAYEAeYZYXyR3xacF9xZGJwYS8pjm5lBA3Wfuqdl+U7J6 -u4rRs+vrAGMfDyL1BWRLcwJuDKhog8QyAFsBk/L++vxG1zeDAFRisdu5fcO3yHfl -9nlh44sFhvRHs5ZHz/EG7vaduAkV6yu4kBfctPFvyekT3YJ/+1gujcVHrAnw16LA -aC59e33ouWDw3+apTO7c9kiNxA3m4RTn6LLpVkSPqthe8OYm+QaoOR9eci8HJzYs -DyEGrSBtHdIOivmlbEn7FAqnaVshFg0JnjHvSLp2Nj90JCRPVsTPSHqCwLWBT8RH -aT4Tuotz7k8QAMa/LiOFMJdQF/kPIg3rNh37F4W7xz/C7lgfuvMCKqxLdDoBDROO -pZPdQuPVGKna2boFp+Hd3eXHPq3UZNjbU1xmYxBg9R0CgTvSZgdCjSrqTjujkLwp -qAhcdgxxfZ9JqAwJLmnPJ8Oq+1dJ1aI+JlDWNY4GpIHc7vYPSMT4+4RcfYvK3n2/ -jXJAGJALls4DN5T7+Zl20Bqh ------END CERTIFICATE----- diff --git a/certs/server.key b/certs/server.key deleted file mode 100644 index 73306a7..0000000 --- a/certs/server.key +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDATKgicFrSErbD -EDI1tB7i4xGTQEIsrNQeV0X3djRPxyZL9gMChsBk+9IMxtvAQdr+xDoXzwje8l68 -yMOQSCLbu+nglZ8H23fiochTcn0bKh5EKd8hXAFyfjaJ8qFPLtvHT9Ak8U8959z5 -/csfKdunj6a9g+32Gwe5cigcsRJKFh50wgmfMD3mefCRG2uKG0krhkmDpt8XanEw -RUFQkYv9QBpPUeGKMxjaZ8nBjahMrYbCKeCe3IYyFbQtljjRabNGBvxrjyByMb/9 -mxzECTINxluaCyT+dxPgu8SNbVb+e9kk7+2RlhaKYLJg6JlrOUv15L3VzN8ceWK/ -j/YJkRkTAgMBAAECggEAJj6YqdDCn0kNhBnygm/CPMmAM1LyVkRBI4+j4KVnnf4z -haP10UjPdsYGbngWOFRgo46PJzELyJtXcCBVlJpkJGNpDjtzl3J0k2QtnTsF2qMz -xca2E8Jin0yuuBzDLCZbm3YqJU7AvcUhU66/+QCwKNEPDl3ws6OIk786bwpgYs9P -GJYtLxsXt0eoTK9shWBX4J0QP+rBe5gyR9RYQr0SGBX0L4R3bSks1RnSjLTSz0Tr -J/mUlTwgtbVVnLJCckbjYFngSMSp4Lqiamh0u5uCIrUkmyx9fJvhSc4dpU1zOijk -fMpepXfd03Jmt9QNbFnPC/hhaXkmao6VutKH0bgY4QKBgQDgiBAtFyawSd1HUs3U -aHdhy7/Cf053atVqxF7IDQIBcbOBvO8jcQ7QdL+rtabHbrGAdAypIQee4CHhj4In -LWNNk9YEqgWygByID/19dFOKAq/KdK0WwJ32bSmozjxB5KSDXrSxd7aOO+3gyzsd -ef4mzNN+NV2Z0TZAex8/lyMcawKBgQDbQCTOAt3G6q1nSEk+43q2NrUbzCcKGQuy -thdqyXJMkytACnUlsRyLXgXt6nIucm+fcpevy8DAya7HTb/ditu+cuIx9YcFRXff -P56A3d2wkDB3m0UjUHrrS2+1T6Yhy/FdwTnK2sbCavZy8ztijuxvpKjPZrfxv0f/ -yhyE3kyf+QKBgQCCeS6FNTXLLTEDmC95ZbcxwhdNa3LqW89menPlZgGrWyoHkwWX -n8QPCDi1DBq9Oyq0TTtqMIJgJTgq/ZyRLYPN+cFc9nvXDTEHM9uGwkklIoiKaiCG -3ykroKWbrTRAyh97I1Z25ezUXCjP/uj8KP6yB0ZCybn5fyQ6dhFjf2zsvwKBgQCk -lErMZfRqfAD8lZN95K5Zl0lt+1qWxuQ0G2IKo/rrplGB+hej2oZNy59xz1o0qWxG -6XMZ4D3pubs8Go3a1IBNPtmynNbkyxfHem8V1vWxsxrevawxbRlIBNFu7cIMfpXJ -ReGG96DZkgc7lH/QZO7wg07AmR+dFXQLe4Da8C/eqQKBgG9xSwti9qIaEXvJBOcs -mNo3eWeUrLcC4MfYcMwxCNMBUUtgdiSWg2pMJSSaePzidPbJ3GJrz7v8NIHr2n6g -4PpbeD6ixS+eynXkbWhuf3F+N1orDwO+B56VXdvLSRmu1p4OyQdV2MY83F2kT6cn -INRTi8PwMq1JtN4RglT2Ejow ------END PRIVATE KEY----- diff --git a/config.json b/config.json new file mode 100644 index 0000000..f857c3a --- /dev/null +++ b/config.json @@ -0,0 +1,29 @@ +{ + "debug": true, + "arduino": { + "path": { + "folder": "./arduino-cli", + "cli": "./arduino-cli/arduino-cli.exe", + "libraries": [ + "./arduino-cli/libraries" + ], + "cache": "./arduino-cli/cache", + "config": "./arduino-cli/arduino-cli.json" + } + }, + "micropython": { + "path": { + "ampy": "./mixly/tools/python/ampy_main.py", + "esptool": "./mixly/tools/python/esptool_main.py" + } + }, + "python": { + "path": { + "cli": "python3" + } + }, + "tempPath": "./temp", + "clientPath": "./mixly", + "mode": "web-socket", + "port": 4000 +} \ No newline at end of file diff --git a/mixly b/mixly new file mode 160000 index 0000000..3b10f77 --- /dev/null +++ b/mixly @@ -0,0 +1 @@ +Subproject commit 3b10f7742ca0fa2593c9443d3125c921f8c906bf diff --git a/nodemon.json b/nodemon.json index 64ab9fb..ca79d5b 100644 --- a/nodemon.json +++ b/nodemon.json @@ -1,8 +1,8 @@ { "watch": [ "dist", - "src" + "config.json" ], - "ext": "js,json", - "exec": "node dist/bundle.js" + "ext": "cjs,json", + "exec": "node dist/bundle.cjs" } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 9aa1a72..50f59c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,8 @@ "await-to-js": "^3.0.0", "better-sse": "^0.14.1", "commander": "^12.1.0", + "decompress": "^4.2.1", + "decompress-unzip": "^4.0.1", "express": "^4.21.1", "fs-extra": "^11.2.0", "fs-plus": "^3.1.1", @@ -19,17 +21,20 @@ "lodash": "^4.17.21", "mitt": "^3.0.1", "mustache": "^4.2.0", + "node-fetch": "^3.3.2", + "node-forge": "^1.3.1", "serialport": "^12.0.0", - "shelljs": "^0.8.5", + "shelljs": "^0.9.2", "shortid": "^2.2.17", "simple-git": "^3.27.0", "socket.io": "^4.8.1", + "tar": "^7.4.3", "usb": "^2.14.0" }, "devDependencies": { - "eslint": "^8.51.0", + "eslint": "^8.57.1", "eslint-webpack-plugin": "^4.0.1", - "nodemon": "^3.1.7", + "nodemon": "^3.1.10", "npm-run-all": "^4.1.5", "webpack": "^5.89.0", "webpack-cli": "^5.1.4", @@ -140,6 +145,18 @@ "deprecated": "Use @eslint/object-schema instead", "dev": true }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@jest/schemas": { "version": "29.6.3", "resolved": "https://registry.npmmirror.com/@jest/schemas/-/schemas-29.6.3.tgz", @@ -244,7 +261,6 @@ "version": "2.1.5", "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -257,7 +273,6 @@ "version": "2.0.5", "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, "engines": { "node": ">= 8" } @@ -266,7 +281,6 @@ "version": "1.2.8", "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -996,6 +1010,26 @@ "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/base64id": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/base64id/-/base64id-2.0.0.tgz", @@ -1025,6 +1059,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/bl": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, "node_modules/body-parser": { "version": "1.20.3", "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.3.tgz", @@ -1085,7 +1129,6 @@ "version": "3.0.3", "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, "dependencies": { "fill-range": "^7.1.1" }, @@ -1125,6 +1168,61 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "license": "MIT", + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "license": "MIT" + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", + "license": "MIT" + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", @@ -1252,6 +1350,15 @@ "node": ">= 6" } }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, "node_modules/chrome-trace-event": { "version": "1.0.4", "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", @@ -1359,6 +1466,12 @@ "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, "node_modules/cors": { "version": "2.8.5", "resolved": "https://registry.npmmirror.com/cors/-/cors-2.8.5.tgz", @@ -1385,6 +1498,15 @@ "node": ">= 8" } }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, "node_modules/data-view-buffer": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz", @@ -1452,6 +1574,133 @@ } } }, + "node_modules/decompress": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "license": "MIT", + "dependencies": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "license": "MIT", + "dependencies": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "license": "MIT", + "dependencies": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tarbz2/node_modules/file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "license": "MIT", + "dependencies": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", + "license": "MIT", + "dependencies": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-unzip/node_modules/file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmmirror.com/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-unzip/node_modules/get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", + "license": "MIT", + "dependencies": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-unzip/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz", @@ -1539,6 +1788,15 @@ "node": ">= 0.8" } }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/engine.io": { "version": "6.6.2", "resolved": "https://registry.npmmirror.com/engine.io/-/engine.io-6.6.2.tgz", @@ -1761,6 +2019,7 @@ "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -1939,6 +2198,91 @@ "node": ">=0.8.x" } }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/execa/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/execa/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/execa/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/express": { "version": "4.21.1", "resolved": "https://registry.npmmirror.com/express/-/express-4.21.1.tgz", @@ -2007,6 +2351,34 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -2038,11 +2410,42 @@ "version": "1.17.1", "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, "dependencies": { "reusify": "^1.0.4" } }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -2055,11 +2458,19 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -2151,6 +2562,18 @@ "is-callable": "^1.1.3" } }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmmirror.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", @@ -2167,6 +2590,12 @@ "node": ">= 0.6" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, "node_modules/fs-extra": { "version": "11.2.0", "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-11.2.0.tgz", @@ -2275,6 +2704,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/get-symbol-description": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz", @@ -2492,6 +2933,26 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.2.tgz", @@ -2733,7 +3194,6 @@ "version": "2.1.1", "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -2772,7 +3232,6 @@ "version": "4.0.3", "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -2792,6 +3251,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==", + "license": "MIT" + }, "node_modules/is-negative-zero": { "version": "2.0.3", "resolved": "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz", @@ -2808,7 +3273,6 @@ "version": "7.0.0", "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "engines": { "node": ">=0.12.0" } @@ -2892,6 +3356,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz", @@ -2986,8 +3459,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isobject": { "version": "3.0.1", @@ -3179,6 +3651,18 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz", @@ -3210,6 +3694,15 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz", @@ -3222,7 +3715,6 @@ "version": "4.0.8", "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -3280,6 +3772,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/mitt": { "version": "3.0.1", "resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz", @@ -3350,14 +3863,60 @@ "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "node_modules/node-addon-api": { "version": "7.0.0", "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-7.0.0.tgz", "integrity": "sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==" }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, "node_modules/node-gyp-build": { "version": "4.6.0", "resolved": "https://registry.npmmirror.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz", @@ -3375,10 +3934,11 @@ "dev": true }, "node_modules/nodemon": { - "version": "3.1.7", - "resolved": "https://registry.npmmirror.com/nodemon/-/nodemon-3.1.7.tgz", - "integrity": "sha512-hLj7fuMow6f0lbB0cD14Lz2xNjwsyruH251Pk4t/yIitCFJbmY1myuLlHm/q06aST4jg6EgAh74PIBBrRqpVAQ==", + "version": "3.1.10", + "resolved": "https://registry.npmmirror.com/nodemon/-/nodemon-3.1.10.tgz", + "integrity": "sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==", "dev": true, + "license": "MIT", "dependencies": { "chokidar": "^3.5.2", "debug": "^4", @@ -3616,6 +4176,27 @@ "which": "bin/which" } }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "license": "MIT", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", @@ -3698,6 +4279,15 @@ "node": ">= 0.8.0" } }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz", @@ -3818,6 +4408,12 @@ "node": ">=4" } }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", @@ -3828,7 +4424,6 @@ "version": "2.3.1", "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "engines": { "node": ">=8.6" }, @@ -3852,11 +4447,31 @@ "version": "3.0.0", "resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz", "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, "engines": { "node": ">=4" } }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "license": "MIT", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -3939,6 +4554,12 @@ "node": ">= 0.8.0" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -3957,6 +4578,16 @@ "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", "dev": true }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz", @@ -3984,7 +4615,6 @@ "version": "1.2.3", "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, "funding": [ { "type": "github", @@ -4056,6 +4686,33 @@ "node": ">=4" } }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", @@ -4177,7 +4834,6 @@ "version": "1.0.4", "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -4203,7 +4859,6 @@ "version": "1.2.0", "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "funding": [ { "type": "github", @@ -4334,6 +4989,25 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, + "node_modules/seek-bzip": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/seek-bzip/-/seek-bzip-1.0.6.tgz", + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "license": "MIT", + "dependencies": { + "commander": "^2.8.1" + }, + "bin": { + "seek-bunzip": "bin/seek-bunzip", + "seek-table": "bin/seek-bzip-table" + } + }, + "node_modules/seek-bzip/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, "node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.3.tgz", @@ -4527,11 +5201,13 @@ } }, "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmmirror.com/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "version": "0.9.2", + "resolved": "https://registry.npmmirror.com/shelljs/-/shelljs-0.9.2.tgz", + "integrity": "sha512-S3I64fEiKgTZzKCC46zT/Ib9meqofLrQVbpSswtjFfAVDW+AZ54WTnAM/3/yENoxz/V1Cy6u3kiiEbQ4DNphvw==", + "license": "BSD-3-Clause", "dependencies": { - "glob": "^7.0.0", + "execa": "^1.0.0", + "fast-glob": "^3.3.2", "interpret": "^1.0.0", "rechoir": "^0.6.2" }, @@ -4539,7 +5215,7 @@ "shjs": "bin/shjs" }, "engines": { - "node": ">=4" + "node": ">=18" } }, "node_modules/shortid": { @@ -4568,6 +5244,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, "node_modules/simple-git": { "version": "3.27.0", "resolved": "https://registry.npmmirror.com/simple-git/-/simple-git-3.27.0.tgz", @@ -4712,6 +5394,21 @@ "node": ">= 0.8" } }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, "node_modules/string.prototype.padend": { "version": "3.1.6", "resolved": "https://registry.npmmirror.com/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", @@ -4800,6 +5497,24 @@ "node": ">=4" } }, + "node_modules/strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "license": "MIT", + "dependencies": { + "is-natural-number": "^4.0.1" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -4844,6 +5559,56 @@ "node": ">=6" } }, + "node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmmirror.com/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmmirror.com/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "license": "MIT", + "dependencies": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/terser": { "version": "5.36.0", "resolved": "https://registry.npmmirror.com/terser/-/terser-5.36.0.tgz", @@ -4955,11 +5720,22 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" + }, + "node_modules/to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "license": "MIT" + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -5109,6 +5885,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmmirror.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "license": "MIT", + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmmirror.com/undefsafe/-/undefsafe-2.0.5.tgz", @@ -5224,6 +6010,12 @@ "node": ">=6.14.2" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz", @@ -5263,6 +6055,15 @@ "node": ">=10.13.0" } }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, "node_modules/webpack": { "version": "5.96.1", "resolved": "https://registry.npmmirror.com/webpack/-/webpack-5.96.1.tgz", @@ -5605,6 +6406,34 @@ } } }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmmirror.com/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index ae7a12f..3d283a4 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,16 @@ { "name": "mixly3-server", + "type": "module", "version": "1.0.0", "description": "", "main": "src/index.js", "scripts": { - "build:dev": "webpack --config=webpack.dev.js", - "build:prod": "webpack --config=webpack.prod.js", - "start-server": "nodemon --watch dist --exec node dist/bundle.js", - "watch": "webpack --watch --config=webpack.dev.js", + "cert:generate": "node ./scripts/cert-generate.js", + "arduino:install": "node ./scripts/arduino-install.js", + "build:dev": "webpack --config=webpack.dev.cjs", + "build:prod": "webpack --config=webpack.prod.cjs", + "start-server": "nodemon --exec node dist/bundle.cjs", + "watch": "webpack --watch --config=webpack.dev.cjs", "start": "npm-run-all --parallel watch start-server" }, "repository": { @@ -20,6 +23,8 @@ "await-to-js": "^3.0.0", "better-sse": "^0.14.1", "commander": "^12.1.0", + "decompress": "^4.2.1", + "decompress-unzip": "^4.0.1", "express": "^4.21.1", "fs-extra": "^11.2.0", "fs-plus": "^3.1.1", @@ -27,17 +32,20 @@ "lodash": "^4.17.21", "mitt": "^3.0.1", "mustache": "^4.2.0", + "node-fetch": "^3.3.2", + "node-forge": "^1.3.1", "serialport": "^12.0.0", - "shelljs": "^0.8.5", + "shelljs": "^0.9.2", "shortid": "^2.2.17", "simple-git": "^3.27.0", "socket.io": "^4.8.1", + "tar": "^7.4.3", "usb": "^2.14.0" }, "devDependencies": { - "eslint": "^8.51.0", + "eslint": "^8.57.1", "eslint-webpack-plugin": "^4.0.1", - "nodemon": "^3.1.7", + "nodemon": "^3.1.10", "npm-run-all": "^4.1.5", "webpack": "^5.89.0", "webpack-cli": "^5.1.4", diff --git a/scripts/arduino-install.js b/scripts/arduino-install.js new file mode 100644 index 0000000..de56124 --- /dev/null +++ b/scripts/arduino-install.js @@ -0,0 +1,99 @@ +import os from 'node:os'; +import fs from 'node:fs'; +import path from 'node:path'; +import fsExtra from 'fs-extra'; +import fsPlus from 'fs-plus'; +import fetch from 'node-fetch'; +import decompress from 'decompress'; +import decompressUnzip from 'decompress-unzip'; +import * as tar from 'tar'; +import shell from 'shelljs'; + + +const version = '0.35.2'; + + +function getPlatformTarget() { + const platform = os.platform(); + const arch = os.arch(); + if (platform === 'win32') { + return arch === 'x64' ? 'arduino-cli_' + version + '_Windows_64bit.zip' : null; + } + if (platform === 'darwin') { + return 'arduino-cli_' + version + '_macOS_64bit.tar.gz'; + } + if (platform === 'linux') { + if (arch === 'x64') return 'arduino-cli_' + version + '_Linux_64bit.tar.gz'; + if (arch === 'arm64') return 'arduino-cli_' + version + '_Linux_ARM64.tar.gz'; + if (arch.startsWith('arm')) return 'arduino-cli_' + version + '_Linux_ARMv7.tar.gz'; + } + return null; +} + +async function arduinoInstall() { + const filename = getPlatformTarget(); + if (!filename) { + console.error('当前系统或架构不受支持'); + return; + } + + const url = `https://downloads.arduino.cc/arduino-cli/${filename}`; + + const temp = path.resolve(process.cwd(), 'temp'); + await fsExtra.ensureDir(temp); + const dest = path.resolve(temp, filename); + const cliDirPath = path.resolve(process.cwd(), 'arduino-cli'); + await fsExtra.ensureDir(cliDirPath); + let cliPath = ''; + if (os.platform() === 'win32') { + cliPath = path.resolve(cliDirPath, 'arduino-cli.exe'); + } else { + cliPath = path.resolve(cliDirPath, 'arduino-cli'); + } + const configPath = path.resolve(cliDirPath, 'arduino-cli.json'); + const config = await fsExtra.readJson(path.resolve(process.cwd(), 'arduino-cli.json')); + config.directories = { + data: path.resolve(cliDirPath, 'Arduino15'), + downloads: path.resolve(cliDirPath, 'staging'), + user: path.resolve(cliDirPath, 'Arduino') + }; + await fsExtra.writeJson(configPath, config, { + spaces: ' ' + }); + if (!fsPlus.isFileSync(cliPath)) { + console.log(`开始下载: ${url}`); + const res = await fetch(url); + if (!res.ok) throw new Error(`下载失败: ${res.statusText}`); + const fileStream = fs.createWriteStream(dest); + await new Promise((resolve, reject) => { + res.body.pipe(fileStream); + res.body.on('error', reject); + fileStream.on('finish', resolve); + }); + + console.log('下载完成,开始解压...'); + if (filename.endsWith('.zip')) { + await decompress(dest, cliDirPath, { + plugins: [decompressUnzip()] + }); + } else { + await tar.x({ + file: dest, + cwd: cliDirPath, + strict: true + }); + } + fs.unlinkSync(dest); + console.log('解压完成,arduino-cli可执行文件已准备好'); + } + + shell.exec(`"${cliPath}" core update-index --config-file "${configPath}"`); + console.log('\n开始下载: Arduino AVR'); + shell.exec(`"${cliPath}" core install arduino:avr@1.8.6 --config-file "${configPath}"`); + console.log('\n开始下载: Arduino ESP8266'); + shell.exec(`"${cliPath}" core install esp8266:esp8266@3.1.1 --config-file "${configPath}"`); + console.log('\n开始下载: Arduino ESP32'); + shell.exec(`"${cliPath}" core install esp32:esp32@2.0.15 --config-file "${configPath}"`); +} + +await arduinoInstall(); \ No newline at end of file diff --git a/scripts/cert-generate.js b/scripts/cert-generate.js new file mode 100644 index 0000000..a6d0b6d --- /dev/null +++ b/scripts/cert-generate.js @@ -0,0 +1,32 @@ +import os from 'node:os'; +import path from 'node:path'; +import shell from 'shelljs'; +import fsExtra from 'fs-extra'; + + +export function getDefaultHosts() { + const interfaceDict = os.networkInterfaces(); + const addresses = []; + for (const key in interfaceDict) { + const interfaces = interfaceDict[key]; + if (interfaces) { + for (const item of interfaces) { + const family = item.family; + if (family === 'IPv4') { + addresses.push(item.address); + } + } + } + } + return ['localhost', ...addresses]; +} + +export function generateCertificate() { + const certPath = path.resolve(process.cwd(), 'certs'); + fsExtra.ensureDirSync(certPath); + shell.cd(certPath); + shell.exec(`mkcert -key-file server.key -cert-file server.crt ${getDefaultHosts().join(' ')}`); + console.log('new certificate generated successfully!'); +} + +generateCertificate(); \ No newline at end of file diff --git a/src/common/boards.js b/src/common/boards.js index 872f500..15c0f87 100644 --- a/src/common/boards.js +++ b/src/common/boards.js @@ -1,7 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; -import MString from './mstring'; -import { ARDUINO } from './config'; +import MString from './mstring.js'; +import { ARDUINO } from './config.js'; const Boards = {}; diff --git a/src/common/config.js b/src/common/config.js index 0ce9a54..60de31c 100644 --- a/src/common/config.js +++ b/src/common/config.js @@ -1,11 +1,32 @@ import os from 'node:os'; -import CONFIG from '../user/config.json'; +import path from 'node:path'; +import fsExtra from 'fs-extra'; +function processConfig(data) { + for (let i in data.path) { + if (data.path[i] instanceof String) { + data.path[i] = path.resolve(process.cwd(), data.path[i]); + } else if (data.path[i] instanceof Array) { + for (let j in data.path[i]) { + if (!(data.path[i][j] instanceof String)) { + continue; + } + data.path[i][j] = path.resolve(process.cwd(), data.path[i][j]); + } + } + } + return data; +} + +const CONFIG = fsExtra.readJSONSync(path.resolve(process.cwd(), 'config.json')); export const DEBUG = CONFIG.debug; -export const ARDUINO = CONFIG.arduino; -export const MICROPYTHON = CONFIG.micropython; -export const PYTHON = CONFIG.python; +export const ARDUINO = processConfig(CONFIG.arduino); +export const MICROPYTHON = processConfig(CONFIG.micropython); +export const PYTHON = processConfig(CONFIG.python); export const CURRENT_PLANTFORM = os.platform(); -export const TEMP_PATH = CONFIG.tempPath; -export const CLIENT_PATH = CONFIG.clientPath; \ No newline at end of file +export const TEMP_PATH = path.resolve(process.cwd(), CONFIG.tempPath); +export const CLIENT_PATH = path.resolve(process.cwd(), CONFIG.clientPath); +export const CERTS_PATH = path.resolve(process.cwd(), 'certs'); +export const PORT = CONFIG.port; +export const MODE = CONFIG.mode; \ No newline at end of file diff --git a/src/common/debug.js b/src/common/debug.js index 59dd667..81be99a 100644 --- a/src/common/debug.js +++ b/src/common/debug.js @@ -1,4 +1,4 @@ -import { DEBUG } from './config'; +import { DEBUG } from './config.js'; const Debug = {}; diff --git a/src/common/events-base.js b/src/common/events-base.js index a8bbfb1..fb9f177 100644 --- a/src/common/events-base.js +++ b/src/common/events-base.js @@ -1,4 +1,4 @@ -import Events from './events'; +import Events from './events.js'; export default class EventsBase { diff --git a/src/common/events.js b/src/common/events.js index 7009a15..695c480 100644 --- a/src/common/events.js +++ b/src/common/events.js @@ -1,8 +1,7 @@ -// import mitt from 'mitt'; import _ from 'lodash'; import shortid from 'shortid'; -import Debug from './debug'; -import Registry from './registry'; +import Debug from './debug.js'; +import Registry from './registry.js'; export default class Events { diff --git a/src/common/registry.js b/src/common/registry.js index 2d374fb..e9022ec 100644 --- a/src/common/registry.js +++ b/src/common/registry.js @@ -1,4 +1,4 @@ -import Debug from './debug'; +import Debug from './debug.js'; export default class Registry { diff --git a/src/common/serial.js b/src/common/serial.js index c26ba61..2cf1e7d 100644 --- a/src/common/serial.js +++ b/src/common/serial.js @@ -5,8 +5,8 @@ import { ByteLengthParser } from 'serialport'; import _ from 'lodash'; -import EventsBase from './events-base'; -import { CURRENT_PLANTFORM } from './config'; +import EventsBase from './events-base.js'; +import { CURRENT_PLANTFORM } from './config.js'; export default class Serial extends EventsBase { diff --git a/src/common/shell-ampy.js b/src/common/shell-ampy.js index 1476b7d..d78ff3a 100644 --- a/src/common/shell-ampy.js +++ b/src/common/shell-ampy.js @@ -1,6 +1,6 @@ import mustache from 'mustache'; -import Shell from './shell'; -import { MICROPYTHON, PYTHON } from './config'; +import Shell from './shell.js'; +import { MICROPYTHON, PYTHON } from './config.js'; export default class ShellAmpy extends Shell { diff --git a/src/common/shell-arduino.js b/src/common/shell-arduino.js index 40088b9..e08b7cf 100644 --- a/src/common/shell-arduino.js +++ b/src/common/shell-arduino.js @@ -1,6 +1,6 @@ import _ from 'lodash'; -import Shell from './shell'; -import { ARDUINO } from './config'; +import Shell from './shell.js'; +import { ARDUINO } from './config.js'; export default class ShellArduino extends Shell { diff --git a/src/common/shell-micropython.js b/src/common/shell-micropython.js index 33caf7a..3c6349b 100644 --- a/src/common/shell-micropython.js +++ b/src/common/shell-micropython.js @@ -1,7 +1,7 @@ import path from 'node:path'; -import Shell from './shell'; -import MString from './mstring'; -import { MICROPYTHON, PYTHON, CLIENT_PATH } from './config'; +import Shell from './shell.js'; +import MString from './mstring.js'; +import { MICROPYTHON, PYTHON, CLIENT_PATH } from './config.js'; export default class ShellMicroPython extends Shell { diff --git a/src/common/shell.js b/src/common/shell.js index dc2b018..904bf05 100644 --- a/src/common/shell.js +++ b/src/common/shell.js @@ -1,6 +1,6 @@ import { execFile, exec } from 'node:child_process'; -import EventsBase from './events-base'; -import { CURRENT_PLANTFORM } from './config'; +import EventsBase from './events-base.js'; +import { CURRENT_PLANTFORM } from './config.js'; export default class Shell extends EventsBase { diff --git a/src/common/socket.js b/src/common/socket.js index e9b697b..349de92 100644 --- a/src/common/socket.js +++ b/src/common/socket.js @@ -1,17 +1,17 @@ import { Server } from 'socket.io'; -import to from 'await-to-js'; +import { to } from 'await-to-js'; import { usb } from 'usb'; import path from 'node:path'; import fsExtra from 'fs-extra'; -import Serial from './serial'; -import Debug from './debug'; -import Registry from './registry'; -import ShellArduino from './shell-arduino'; -import ShellMicroPython from './shell-micropython'; -import ShellAmpy from './shell-ampy'; -import MString from './mstring'; -import Boards from './boards'; -import { TEMP_PATH, CLIENT_PATH } from './config'; +import Serial from './serial.js'; +import Debug from './debug.js'; +import Registry from './registry.js'; +import ShellArduino from './shell-arduino.js'; +import ShellMicroPython from './shell-micropython.js'; +import ShellAmpy from './shell-ampy.js'; +import MString from './mstring.js'; +import Boards from './boards.js'; +import { TEMP_PATH, CLIENT_PATH } from './config.js'; export default class Socket { @@ -213,7 +213,6 @@ export default class Socket { }); socket.on('arduino.compile', async (config, callback) => { - console.log(config) const shell = this.#shellArduino_.getItem(socket.id); config.path = config?.path ?? {}; config.path.build = path.resolve(TEMP_PATH, socket.id, 'build'); diff --git a/src/common/utils.js b/src/common/utils.js new file mode 100644 index 0000000..77606f5 --- /dev/null +++ b/src/common/utils.js @@ -0,0 +1,76 @@ +import os from 'node:os'; +import path from 'node:path'; +import fsExtra from 'fs-extra'; +import fsPlus from 'fs-plus'; +import forge from 'node-forge'; +import shell from 'shelljs'; +import _ from 'lodash'; +import { CERTS_PATH } from './config.js'; + + +export function getDefaultHosts() { + const interfaceDict = os.networkInterfaces(); + const addresses = []; + for (const key in interfaceDict) { + const interfaces = interfaceDict[key]; + if (interfaces) { + for (const item of interfaces) { + const family = item.family; + if (family === 'IPv4') { + addresses.push(item.address); + } + } + } + } + return ['localhost', ...addresses]; +} + +function generateCertificate() { + fsExtra.ensureDirSync(CERTS_PATH); + shell.cd(CERTS_PATH); + shell.exec(`mkcert -key-file server.key -cert-file server.crt ${getDefaultHosts().join(' ')}`); + console.log('new certificate generated successfully!'); + const certPem = fsExtra.readFileSync(path.resolve(CERTS_PATH, 'server.crt')); + const keyPem = fsExtra.readFileSync(path.resolve(CERTS_PATH, 'server.key')); + return { + key: keyPem, + cert: certPem + }; +} + +export function getCertificate() { + const crtPath = path.resolve(CERTS_PATH, 'server.crt'); + const keyPath = path.resolve(CERTS_PATH, 'server.key'); + let data = {}; + if (!fsPlus.isFileSync(crtPath) || !fsPlus.isFileSync(keyPath)) { + data = generateCertificate(); + } else { + data.cert = fsExtra.readFileSync(crtPath); + data.key = fsExtra.readFileSync(keyPath); + } + const cert = forge.pki.certificateFromPem(data.cert); + const now = new Date(); + const notBefore = cert.validity.notBefore; + const notAfter = cert.validity.notAfter; + if (now < notBefore || now > notAfter) { + data = generateCertificate(); + } + const sanExt = cert.extensions.find(ext => ext.name === 'subjectAltName'); + if (sanExt && sanExt.altNames) { + const hosts = []; + for (let item of sanExt.altNames) { + if (item.type === 2) { + hosts.push(item.value); + } else if (item.type === 7) { + hosts.push(item.ip); + } + } + const currentHosts = getDefaultHosts(); + if (_.xor(currentHosts, hosts).length !== 0) { + data = generateCertificate(); + } + } else { + data = generateCertificate(); + } + return data; +} \ No newline at end of file diff --git a/src/index.js b/src/index.js index feb15f3..d28dabf 100644 --- a/src/index.js +++ b/src/index.js @@ -1,44 +1,72 @@ -import express from 'express'; -import path from 'node:path'; -import * as url from 'node:url'; -import { readFileSync } from 'node:fs'; import { createServer } from 'node:https'; -import Socket from './common/socket'; +import path from 'node:path'; +import fsExtra from 'fs-extra'; +import express from 'express'; +import Socket from './common/socket.js'; +import { getCertificate } from './common/utils.js'; +import { CLIENT_PATH, PORT, MODE } from './common/config.js'; + process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; -const __dirname = path.dirname(url.fileURLToPath(new URL(import.meta.url))); const app = express(); -const httpsServer = createServer({ - key: readFileSync(path.resolve(__dirname, '../certs/server.key')), - cert: readFileSync(path.resolve(__dirname, '../certs/server.crt')) -}, app); +if (CLIENT_PATH) { + app.use(express.static(CLIENT_PATH)); +} +const httpsServer = createServer(getCertificate(), app); -const socket = new Socket(httpsServer, { - path: '/mixly-socket/', - maxHttpBufferSize: 1e8, - cors: { - origin: '*', - methods: ['GET', 'POST'], - transports: ['websocket', 'polling', 'flashsocket'], - credentials: true - } -}); +if (MODE !== 'static') { + const socket = new Socket(httpsServer, { + path: '/mixly-socket/', + maxHttpBufferSize: 1e8, + cors: { + origin: '*', + methods: ['GET', 'POST'], + transports: ['websocket', 'polling', 'flashsocket'], + credentials: true + } + }); -const io = socket.getIO(); + const io = socket.getIO(); -function close() { - io.close(() => { - console.log('Socket服务已关闭'); - process.exit(0); + process.on('SIGINT', () => { + io.close(() => { + console.log('Socket服务已关闭'); + process.exit(0); + }); + }); + + process.on('SIGTERM', () => { + io.close(() => { + console.log('Socket服务已关闭'); + process.exit(0); + }); }); } -process.on('SIGINT', () => { - close(); +const mixlyConfigPath = path.resolve(CLIENT_PATH, 'sw-config.json'); +const mixlyConfig = fsExtra.readJSONSync(mixlyConfigPath); + +if (MODE === 'web-compiler') { + mixlyConfig['webCompiler']['enabled'] = true; + mixlyConfig['webCompiler']['url'] = `wss://127.0.0.1:${PORT}`; + mixlyConfig['webSocket']['enabled'] = false; +} else if (MODE === 'web-socket') { + mixlyConfig['webCompiler']['enabled'] = false; + mixlyConfig['webSocket']['url'] = `wss://127.0.0.1:${PORT}`; + mixlyConfig['webSocket']['enabled'] = true; +} else { + mixlyConfig['webCompiler']['enabled'] = false; + mixlyConfig['webSocket']['enabled'] = false; +} + +fsExtra.writeJSONSync(mixlyConfigPath, mixlyConfig, { + spaces: ' ' }); -process.on('SIGTERM', () => { - close(); -}); - -httpsServer.listen(4000); \ No newline at end of file +httpsServer.listen(PORT); +if (CLIENT_PATH) { + console.log(`Static服务器正在运行: https://127.0.0.1:${PORT}`); +} +if (MODE !== 'static') { + console.log(`Socket.io服务器正在运行: wss://127.0.0.1:${PORT}/mixly-socket`); +} \ No newline at end of file diff --git a/src/user/config.json b/src/user/config.json deleted file mode 100644 index ce6cb4c..0000000 --- a/src/user/config.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "debug": true, - "arduino": { - "path": { - "folder": "D:/gitee/arduino-cli-win32/arduino-cli", - "cli": "D:/gitee/arduino-cli-win32/arduino-cli/arduino-cli.exe", - "libraries": [ - "D:/gitee/arduino-cli-win32/arduino-cli/libraries" - ], - "cache": "D:/gitee/arduino-cli-win32/arduino-cli/cache", - "config": "D:/gitee/arduino-cli-win32/arduino-cli/arduino-cli.json" - } - }, - "micropython": { - "path": { - "ampy": "D:/gitee/mixly3.0-win32-x64/resources/app/src/tools/python/ampy_main.py", - "esptool": "D:/gitee/mixly3.0-win32-x64/resources/app/src/tools/python/esptool_main.py" - } - }, - "python": { - "path": { - "cli": "D:/gitee/mixly3.0-win32-x64/mixpyBuild/win_python3/python3.exe" - } - }, - "tempPath": "D:/gitee/mixly3-server/temp", - "clientPath": "D:/gitee/mixly3.0-win32-x64/resources/app/src" -} \ No newline at end of file diff --git a/webpack.common.js b/webpack.common.cjs similarity index 89% rename from webpack.common.js rename to webpack.common.cjs index 67c7507..10ff6c1 100644 --- a/webpack.common.js +++ b/webpack.common.cjs @@ -7,7 +7,7 @@ module.exports = { entry: './src/index.js', output: { path: path.resolve(__dirname, 'dist'), - filename: 'bundle.js' + filename: 'bundle.cjs' }, externals: [nodeExternals()], }; \ No newline at end of file diff --git a/webpack.dev.js b/webpack.dev.cjs similarity index 84% rename from webpack.dev.js rename to webpack.dev.cjs index a53b02d..b2acbda 100644 --- a/webpack.dev.js +++ b/webpack.dev.cjs @@ -1,4 +1,4 @@ -const common = require('./webpack.common'); +const common = require('./webpack.common.cjs'); const { merge } = require('webpack-merge'); const ESLintPlugin = require('eslint-webpack-plugin'); diff --git a/webpack.prod.js b/webpack.prod.cjs similarity index 68% rename from webpack.prod.js rename to webpack.prod.cjs index 65c6592..fc2d151 100644 --- a/webpack.prod.js +++ b/webpack.prod.cjs @@ -1,4 +1,4 @@ -const common = require('./webpack.common'); +const common = require('./webpack.common.cjs'); const { merge } = require('webpack-merge');