From 0602f93a0198ad743d340345af9803066ef20abf Mon Sep 17 00:00:00 2001 From: GriefMoDz Date: Thu, 26 Jan 2023 20:27:39 +1100 Subject: [PATCH] [v1.1.0] Code cleanup and add settings UI --- .github/workflows/release.yml | 2 +- .gitignore | 2 +- README.md | 5 +- manifest.json | 2 +- package.json | 24 +- pnpm-lock.yaml | 868 +++++++++++++++++++++++----------- scripts/build.ts | 69 +-- scripts/bundle.ts | 12 +- src/components/Counter.tsx | 14 +- src/components/Settings.tsx | 77 +++ src/components/index.ts | 3 +- src/index.tsx | 9 +- src/lib/constants.ts | 14 +- src/lib/store.ts | 15 +- src/lib/util.ts | 2 +- src/main.css | 10 + src/types/flux.d.ts | 155 ------ src/types/index.d.ts | 29 +- 18 files changed, 768 insertions(+), 544 deletions(-) create mode 100644 src/components/Settings.tsx delete mode 100644 src/types/flux.d.ts diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f7798b5..15b44f8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -33,5 +33,5 @@ jobs: - uses: ncipollo/release-action@v1 with: - artifacts: "*.asar" + artifacts: "bundle/" makeLatest: true diff --git a/.gitignore b/.gitignore index 76c8669..e6b27c2 100644 --- a/.gitignore +++ b/.gitignore @@ -103,4 +103,4 @@ dist # TernJS port file .tern-port -/*.asar +/bundle diff --git a/README.md b/README.md index 6da2dd8..6ee53b8 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,8 @@ Formally known as "Online Friends Count", this is a Replugged plug-in that has b - Auto rotation with a customizable interval - useful for switching between counters without the need of clicking. ## Planned Features -- [ ] Add a settings page +- [x] Add a settings page +- [ ] Display a real-time preview under the settings page - [ ] Implement a context menu to quickly change settings ## Settings @@ -21,7 +22,7 @@ To customize the counter, you will need to manually set your preferences by ente | Key | Description | Default | | ------------------------ | ------------------------------ | ------- | | `autoRotation` | Rotate between counters | `false` | -| `autoRotationDelay` | Delay between rotations | `3e4` | +| `autoRotationDelay` | Delay between rotations | `5e3` | | `autoRotationHoverPause` | Pause the rotation upon hover | `true` | | `preserveLastCounter` | Remember the last counter | `false` | | `online` | Enable online counter | `true` | diff --git a/manifest.json b/manifest.json index cb14afc..8be0444 100644 --- a/manifest.json +++ b/manifest.json @@ -7,7 +7,7 @@ "discordID": "350227339784880130", "github": "griefmodz" }, - "version": "1.0.2", + "version": "1.1.0", "updater": { "type": "github", "id": "griefmodz/statistic-counter" diff --git a/package.json b/package.json index 7730fe4..46824ff 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "statistic-counter", - "version": "1.0.2", + "version": "1.1.0", "description": "A Replugged plug-in that has been ported from Powercord which introduces an interchangeable statistic counter in-between the home button and servers list.", "engines": { "node": ">=14.0.0" @@ -22,18 +22,18 @@ "author": "", "license": "MIT", "devDependencies": { - "@electron/asar": "^3.2.1", - "@types/node": "^18.11.2", - "@typescript-eslint/eslint-plugin": "^5.40.1", - "@typescript-eslint/parser": "^5.40.1", - "esbuild": "^0.15.11", - "eslint": "^8.25.0", + "@electron/asar": "^3.2.3", + "@types/node": "^18.11.18", + "@typescript-eslint/eslint-plugin": "^5.49.0", + "@typescript-eslint/parser": "^5.49.0", + "esbuild": "^0.15.18", + "eslint": "^8.32.0", "eslint-config-dmitmel": "github:dmitmel/eslint-config-dmitmel", "eslint-plugin-node": "^11.1.0", - "eslint-plugin-react": "^7.31.10", - "prettier": "^2.8.1", - "replugged": "4.0.0-beta0.20", - "tsx": "^3.10.3", - "typescript": "^4.8.4" + "eslint-plugin-react": "^7.32.1", + "prettier": "^2.8.3", + "replugged": "4.0.0-beta0.22", + "tsx": "^3.12.2", + "typescript": "^4.9.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fdacc7c..2488989 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,39 +1,39 @@ lockfileVersion: 5.4 specifiers: - '@electron/asar': ^3.2.1 - '@types/node': ^18.11.2 - '@typescript-eslint/eslint-plugin': ^5.40.1 - '@typescript-eslint/parser': ^5.40.1 - esbuild: ^0.15.11 - eslint: ^8.25.0 + '@electron/asar': ^3.2.3 + '@types/node': ^18.11.18 + '@typescript-eslint/eslint-plugin': ^5.49.0 + '@typescript-eslint/parser': ^5.49.0 + esbuild: ^0.15.18 + eslint: ^8.32.0 eslint-config-dmitmel: github:dmitmel/eslint-config-dmitmel eslint-plugin-node: ^11.1.0 - eslint-plugin-react: ^7.31.10 - prettier: ^2.8.1 - replugged: 4.0.0-beta0.20 - tsx: ^3.10.3 - typescript: ^4.8.4 + eslint-plugin-react: ^7.32.1 + prettier: ^2.8.3 + replugged: 4.0.0-beta0.22 + tsx: ^3.12.2 + typescript: ^4.9.4 devDependencies: - '@electron/asar': 3.2.1 - '@types/node': 18.11.2 - '@typescript-eslint/eslint-plugin': 5.40.1_ukgdydjtebaxmxfqp5v5ulh64y - '@typescript-eslint/parser': 5.40.1_z4bbprzjrhnsfa24uvmcbu7f5q - esbuild: 0.15.12 - eslint: 8.25.0 - eslint-config-dmitmel: github.com/dmitmel/eslint-config-dmitmel/690f1b1121d342fcc8ee511ca9f2af7502f53db6_eslint@8.25.0 - eslint-plugin-node: 11.1.0_eslint@8.25.0 - eslint-plugin-react: 7.31.10_eslint@8.25.0 - prettier: 2.8.1 - replugged: 4.0.0-beta0.20 - tsx: 3.10.4 - typescript: 4.8.4 + '@electron/asar': 3.2.3 + '@types/node': 18.11.18 + '@typescript-eslint/eslint-plugin': 5.49.0_iu322prlnwsygkcra5kbpy22si + '@typescript-eslint/parser': 5.49.0_7uibuqfxkfaozanbtbziikiqje + esbuild: 0.15.18 + eslint: 8.32.0 + eslint-config-dmitmel: github.com/dmitmel/eslint-config-dmitmel/690f1b1121d342fcc8ee511ca9f2af7502f53db6_eslint@8.32.0 + eslint-plugin-node: 11.1.0_eslint@8.32.0 + eslint-plugin-react: 7.32.1_eslint@8.32.0 + prettier: 2.8.3 + replugged: 4.0.0-beta0.22 + tsx: 3.12.2 + typescript: 4.9.4 packages: - /@electron/asar/3.2.1: - resolution: {integrity: sha512-hE2cQMZ5+4o7+6T2lUaVbxIzrOjZZfX7dB02xuapyYFJZEAiWTelq6J3mMoxzd0iONDvYLPVKecB5tyjIoVDVA==} + /@electron/asar/3.2.3: + resolution: {integrity: sha512-wmOfE6szYyqZhRIiLH+eyZEp+bGcJI0OD/SCvSUrfBE0jvauyGYO2ZhpWxmNCcDojKu5DYrsVqT5BOCZZ01XIg==} engines: {node: '>=10.12.0'} hasBin: true dependencies: @@ -45,29 +45,29 @@ packages: '@types/glob': 7.2.0 dev: true - /@esbuild-kit/cjs-loader/2.4.0: - resolution: {integrity: sha512-DBBCiHPgL2B/elUpvCDhNHXnlZQ9sfO2uyt1OJyAXKT41beQEFY4OxZ6gwS+ZesRCbZ6JV8M7GEyOPkjv8kdIw==} + /@esbuild-kit/cjs-loader/2.4.1: + resolution: {integrity: sha512-lhc/XLith28QdW0HpHZvZKkorWgmCNT7sVelMHDj3HFdTfdqkwEKvT+aXVQtNAmCC39VJhunDkWhONWB7335mg==} dependencies: '@esbuild-kit/core-utils': 3.0.0 - get-tsconfig: 4.2.0 + get-tsconfig: 4.3.0 dev: true /@esbuild-kit/core-utils/3.0.0: resolution: {integrity: sha512-TXmwH9EFS3DC2sI2YJWJBgHGhlteK0Xyu1VabwetMULfm3oYhbrsWV5yaSr2NTWZIgDGVLHbRf0inxbjXqAcmQ==} dependencies: - esbuild: 0.15.12 + esbuild: 0.15.18 source-map-support: 0.5.21 dev: true - /@esbuild-kit/esm-loader/2.5.0: - resolution: {integrity: sha512-ySs0qOsiwj+hsgZM9/MniGdvfa9/WzqfFuIia8/5gSUPeIQIX2/tG91QakxPFOR35VFiwTB7wCiHtiS6dc6SkA==} + /@esbuild-kit/esm-loader/2.5.4: + resolution: {integrity: sha512-afmtLf6uqxD5IgwCzomtqCYIgz/sjHzCWZFvfS5+FzeYxOURPUo4QcHtqJxbxWOMOogKriZanN/1bJQE/ZL93A==} dependencies: '@esbuild-kit/core-utils': 3.0.0 - get-tsconfig: 4.2.0 + get-tsconfig: 4.3.0 dev: true - /@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + /@esbuild/android-arm/0.15.18: + resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -75,8 +75,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + /@esbuild/linux-loong64/0.15.18: + resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -84,15 +84,15 @@ packages: dev: true optional: true - /@eslint/eslintrc/1.3.3: - resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} + /@eslint/eslintrc/1.4.1: + resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4 - espree: 9.4.0 - globals: 13.17.0 - ignore: 5.2.0 + espree: 9.4.1 + globals: 13.19.0 + ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -101,8 +101,8 @@ packages: - supports-color dev: true - /@humanwhocodes/config-array/0.10.7: - resolution: {integrity: sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==} + /@humanwhocodes/config-array/0.11.8: + resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 @@ -139,7 +139,123 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.13.0 + fastq: 1.15.0 + dev: true + + /@octokit/auth-token/3.0.3: + resolution: {integrity: sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA==} + engines: {node: '>= 14'} + dependencies: + '@octokit/types': 9.0.0 + dev: true + + /@octokit/core/4.2.0: + resolution: {integrity: sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg==} + engines: {node: '>= 14'} + dependencies: + '@octokit/auth-token': 3.0.3 + '@octokit/graphql': 5.0.5 + '@octokit/request': 6.2.3 + '@octokit/request-error': 3.0.3 + '@octokit/types': 9.0.0 + before-after-hook: 2.2.3 + universal-user-agent: 6.0.0 + transitivePeerDependencies: + - encoding + dev: true + + /@octokit/endpoint/7.0.5: + resolution: {integrity: sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA==} + engines: {node: '>= 14'} + dependencies: + '@octokit/types': 9.0.0 + is-plain-object: 5.0.0 + universal-user-agent: 6.0.0 + dev: true + + /@octokit/graphql/5.0.5: + resolution: {integrity: sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ==} + engines: {node: '>= 14'} + dependencies: + '@octokit/request': 6.2.3 + '@octokit/types': 9.0.0 + universal-user-agent: 6.0.0 + transitivePeerDependencies: + - encoding + dev: true + + /@octokit/openapi-types/16.0.0: + resolution: {integrity: sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==} + dev: true + + /@octokit/plugin-paginate-rest/6.0.0_@octokit+core@4.2.0: + resolution: {integrity: sha512-Sq5VU1PfT6/JyuXPyt04KZNVsFOSBaYOAq2QRZUwzVlI10KFvcbUo8lR258AAQL1Et60b0WuVik+zOWKLuDZxw==} + engines: {node: '>= 14'} + peerDependencies: + '@octokit/core': '>=4' + dependencies: + '@octokit/core': 4.2.0 + '@octokit/types': 9.0.0 + dev: true + + /@octokit/plugin-request-log/1.0.4_@octokit+core@4.2.0: + resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} + peerDependencies: + '@octokit/core': '>=3' + dependencies: + '@octokit/core': 4.2.0 + dev: true + + /@octokit/plugin-rest-endpoint-methods/7.0.1_@octokit+core@4.2.0: + resolution: {integrity: sha512-pnCaLwZBudK5xCdrR823xHGNgqOzRnJ/mpC/76YPpNP7DybdsJtP7mdOwh+wYZxK5jqeQuhu59ogMI4NRlBUvA==} + engines: {node: '>= 14'} + peerDependencies: + '@octokit/core': '>=3' + dependencies: + '@octokit/core': 4.2.0 + '@octokit/types': 9.0.0 + deprecation: 2.3.1 + dev: true + + /@octokit/request-error/3.0.3: + resolution: {integrity: sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==} + engines: {node: '>= 14'} + dependencies: + '@octokit/types': 9.0.0 + deprecation: 2.3.1 + once: 1.4.0 + dev: true + + /@octokit/request/6.2.3: + resolution: {integrity: sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA==} + engines: {node: '>= 14'} + dependencies: + '@octokit/endpoint': 7.0.5 + '@octokit/request-error': 3.0.3 + '@octokit/types': 9.0.0 + is-plain-object: 5.0.0 + node-fetch: 2.6.8 + universal-user-agent: 6.0.0 + transitivePeerDependencies: + - encoding + dev: true + + /@octokit/rest/19.0.7: + resolution: {integrity: sha512-HRtSfjrWmWVNp2uAkEpQnuGMJsu/+dBr47dRc5QVgsCbnIc1+GFEaoKBWkYG+zjrsHpSqcAElMio+n10c0b5JA==} + engines: {node: '>= 14'} + dependencies: + '@octokit/core': 4.2.0 + '@octokit/plugin-paginate-rest': 6.0.0_@octokit+core@4.2.0 + '@octokit/plugin-request-log': 1.0.4_@octokit+core@4.2.0 + '@octokit/plugin-rest-endpoint-methods': 7.0.1_@octokit+core@4.2.0 + transitivePeerDependencies: + - encoding + dev: true + + /@octokit/types/9.0.0: + resolution: {integrity: sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==} + dependencies: + '@octokit/openapi-types': 16.0.0 dev: true /@types/glob/7.2.0: @@ -147,7 +263,7 @@ packages: requiresBuild: true dependencies: '@types/minimatch': 5.1.2 - '@types/node': 18.11.2 + '@types/node': 18.11.18 dev: true optional: true @@ -160,16 +276,16 @@ packages: dev: true optional: true - /@types/node/18.11.2: - resolution: {integrity: sha512-BWN3M23gLO2jVG8g/XHIRFWiiV4/GckeFIqbU/C4V3xpoBBWSMk4OZomouN0wCkfQFPqgZikyLr7DOYDysIkkw==} + /@types/node/18.11.18: + resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} dev: true - /@types/semver/7.3.12: - resolution: {integrity: sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A==} + /@types/semver/7.3.13: + resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} dev: true - /@typescript-eslint/eslint-plugin/5.40.1_ukgdydjtebaxmxfqp5v5ulh64y: - resolution: {integrity: sha512-FsWboKkWdytGiXT5O1/R9j37YgcjO8MKHSUmWnIEjVaz0krHkplPnYi7mwdb+5+cs0toFNQb0HIrN7zONdIEWg==} + /@typescript-eslint/eslint-plugin/5.49.0_iu322prlnwsygkcra5kbpy22si: + resolution: {integrity: sha512-IhxabIpcf++TBaBa1h7jtOWyon80SXPRLDq0dVz5SLFC/eW6tofkw/O7Ar3lkx5z5U6wzbKDrl2larprp5kk5Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -179,23 +295,24 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.40.1_z4bbprzjrhnsfa24uvmcbu7f5q - '@typescript-eslint/scope-manager': 5.40.1 - '@typescript-eslint/type-utils': 5.40.1_z4bbprzjrhnsfa24uvmcbu7f5q - '@typescript-eslint/utils': 5.40.1_z4bbprzjrhnsfa24uvmcbu7f5q + '@typescript-eslint/parser': 5.49.0_7uibuqfxkfaozanbtbziikiqje + '@typescript-eslint/scope-manager': 5.49.0 + '@typescript-eslint/type-utils': 5.49.0_7uibuqfxkfaozanbtbziikiqje + '@typescript-eslint/utils': 5.49.0_7uibuqfxkfaozanbtbziikiqje debug: 4.3.4 - eslint: 8.25.0 - ignore: 5.2.0 + eslint: 8.32.0 + ignore: 5.2.4 + natural-compare-lite: 1.4.0 regexpp: 3.2.0 semver: 7.3.8 - tsutils: 3.21.0_typescript@4.8.4 - typescript: 4.8.4 + tsutils: 3.21.0_typescript@4.9.4 + typescript: 4.9.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser/5.40.1_z4bbprzjrhnsfa24uvmcbu7f5q: - resolution: {integrity: sha512-IK6x55va5w4YvXd4b3VrXQPldV9vQTxi5ov+g4pMANsXPTXOcfjx08CRR1Dfrcc51syPtXHF5bgLlMHYFrvQtg==} + /@typescript-eslint/parser/5.49.0_7uibuqfxkfaozanbtbziikiqje: + resolution: {integrity: sha512-veDlZN9mUhGqU31Qiv2qEp+XrJj5fgZpJ8PW30sHU+j/8/e5ruAhLaVDAeznS7A7i4ucb/s8IozpDtt9NqCkZg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -204,26 +321,26 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.40.1 - '@typescript-eslint/types': 5.40.1 - '@typescript-eslint/typescript-estree': 5.40.1_typescript@4.8.4 + '@typescript-eslint/scope-manager': 5.49.0 + '@typescript-eslint/types': 5.49.0 + '@typescript-eslint/typescript-estree': 5.49.0_typescript@4.9.4 debug: 4.3.4 - eslint: 8.25.0 - typescript: 4.8.4 + eslint: 8.32.0 + typescript: 4.9.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager/5.40.1: - resolution: {integrity: sha512-jkn4xsJiUQucI16OLCXrLRXDZ3afKhOIqXs4R3O+M00hdQLKR58WuyXPZZjhKLFCEP2g+TXdBRtLQ33UfAdRUg==} + /@typescript-eslint/scope-manager/5.49.0: + resolution: {integrity: sha512-clpROBOiMIzpbWNxCe1xDK14uPZh35u4QaZO1GddilEzoCLAEz4szb51rBpdgurs5k2YzPtJeTEN3qVbG+LRUQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.40.1 - '@typescript-eslint/visitor-keys': 5.40.1 + '@typescript-eslint/types': 5.49.0 + '@typescript-eslint/visitor-keys': 5.49.0 dev: true - /@typescript-eslint/type-utils/5.40.1_z4bbprzjrhnsfa24uvmcbu7f5q: - resolution: {integrity: sha512-DLAs+AHQOe6n5LRraXiv27IYPhleF0ldEmx6yBqBgBLaNRKTkffhV1RPsjoJBhVup2zHxfaRtan8/YRBgYhU9Q==} + /@typescript-eslint/type-utils/5.49.0_7uibuqfxkfaozanbtbziikiqje: + resolution: {integrity: sha512-eUgLTYq0tR0FGU5g1YHm4rt5H/+V2IPVkP0cBmbhRyEmyGe4XvJ2YJ6sYTmONfjmdMqyMLad7SB8GvblbeESZA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -232,23 +349,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.40.1_typescript@4.8.4 - '@typescript-eslint/utils': 5.40.1_z4bbprzjrhnsfa24uvmcbu7f5q + '@typescript-eslint/typescript-estree': 5.49.0_typescript@4.9.4 + '@typescript-eslint/utils': 5.49.0_7uibuqfxkfaozanbtbziikiqje debug: 4.3.4 - eslint: 8.25.0 - tsutils: 3.21.0_typescript@4.8.4 - typescript: 4.8.4 + eslint: 8.32.0 + tsutils: 3.21.0_typescript@4.9.4 + typescript: 4.9.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types/5.40.1: - resolution: {integrity: sha512-Icg9kiuVJSwdzSQvtdGspOlWNjVDnF3qVIKXdJ103o36yRprdl3Ge5cABQx+csx960nuMF21v8qvO31v9t3OHw==} + /@typescript-eslint/types/5.49.0: + resolution: {integrity: sha512-7If46kusG+sSnEpu0yOz2xFv5nRz158nzEXnJFCGVEHWnuzolXKwrH5Bsf9zsNlOQkyZuk0BZKKoJQI+1JPBBg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree/5.40.1_typescript@4.8.4: - resolution: {integrity: sha512-5QTP/nW5+60jBcEPfXy/EZL01qrl9GZtbgDZtDPlfW5zj/zjNrdI2B5zMUHmOsfvOr2cWqwVdWjobCiHcedmQA==} + /@typescript-eslint/typescript-estree/5.49.0_typescript@4.9.4: + resolution: {integrity: sha512-PBdx+V7deZT/3GjNYPVQv1Nc0U46dAHbIuOG8AZ3on3vuEKiPDwFE/lG1snN2eUB9IhF7EyF7K1hmTcLztNIsA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -256,56 +373,56 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.40.1 - '@typescript-eslint/visitor-keys': 5.40.1 + '@typescript-eslint/types': 5.49.0 + '@typescript-eslint/visitor-keys': 5.49.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.3.8 - tsutils: 3.21.0_typescript@4.8.4 - typescript: 4.8.4 + tsutils: 3.21.0_typescript@4.9.4 + typescript: 4.9.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils/5.40.1_z4bbprzjrhnsfa24uvmcbu7f5q: - resolution: {integrity: sha512-a2TAVScoX9fjryNrW6BZRnreDUszxqm9eQ9Esv8n5nXApMW0zeANUYlwh/DED04SC/ifuBvXgZpIK5xeJHQ3aw==} + /@typescript-eslint/utils/5.49.0_7uibuqfxkfaozanbtbziikiqje: + resolution: {integrity: sha512-cPJue/4Si25FViIb74sHCLtM4nTSBXtLx1d3/QT6mirQ/c65bV8arBEebBJJizfq8W2YyMoPI/WWPFWitmNqnQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@types/json-schema': 7.0.11 - '@types/semver': 7.3.12 - '@typescript-eslint/scope-manager': 5.40.1 - '@typescript-eslint/types': 5.40.1 - '@typescript-eslint/typescript-estree': 5.40.1_typescript@4.8.4 - eslint: 8.25.0 + '@types/semver': 7.3.13 + '@typescript-eslint/scope-manager': 5.49.0 + '@typescript-eslint/types': 5.49.0 + '@typescript-eslint/typescript-estree': 5.49.0_typescript@4.9.4 + eslint: 8.32.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.25.0 + eslint-utils: 3.0.0_eslint@8.32.0 semver: 7.3.8 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys/5.40.1: - resolution: {integrity: sha512-A2DGmeZ+FMja0geX5rww+DpvILpwo1OsiQs0M+joPWJYsiEFBLsH0y1oFymPNul6Z5okSmHpP4ivkc2N0Cgfkw==} + /@typescript-eslint/visitor-keys/5.49.0: + resolution: {integrity: sha512-v9jBMjpNWyn8B6k/Mjt6VbUS4J1GvUlR4x3Y+ibnP1z7y7V4n0WRz+50DY6+Myj0UaXVSuUlHohO+eZ8IJEnkg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.40.1 + '@typescript-eslint/types': 5.49.0 eslint-visitor-keys: 3.3.0 dev: true - /acorn-jsx/5.3.2_acorn@8.8.0: + /acorn-jsx/5.3.2_acorn@8.8.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.8.0 + acorn: 8.8.2 dev: true - /acorn/8.8.0: - resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} + /acorn/8.8.2: + resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} hasBin: true dev: true @@ -335,14 +452,14 @@ packages: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true - /array-includes/3.1.5: - resolution: {integrity: sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==} + /array-includes/3.1.6: + resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.4 - get-intrinsic: 1.1.3 + es-abstract: 1.21.1 + get-intrinsic: 1.2.0 is-string: 1.0.7 dev: true @@ -351,20 +468,39 @@ packages: engines: {node: '>=8'} dev: true - /array.prototype.flatmap/1.3.0: - resolution: {integrity: sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==} + /array.prototype.flatmap/1.3.1: + resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.4 + es-abstract: 1.21.1 + es-shim-unscopables: 1.0.0 + dev: true + + /array.prototype.tosorted/1.1.1: + resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.21.1 es-shim-unscopables: 1.0.0 + get-intrinsic: 1.2.0 + dev: true + + /available-typed-arrays/1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} dev: true /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true + /before-after-hook/2.2.3: + resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} + dev: true + /brace-expansion/1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -387,7 +523,7 @@ packages: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 dev: true /callsites/3.1.0: @@ -424,7 +560,7 @@ packages: dev: true /concat-map/0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} dev: true /cross-spawn/7.0.3: @@ -436,6 +572,11 @@ packages: which: 2.0.2 dev: true + /data-uri-to-buffer/4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + dev: true + /debug/4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -460,6 +601,10 @@ packages: object-keys: 1.1.1 dev: true + /deprecation/2.3.1: + resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} + dev: true + /dir-glob/3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -481,34 +626,52 @@ packages: esutils: 2.0.3 dev: true - /es-abstract/1.20.4: - resolution: {integrity: sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==} + /es-abstract/1.21.1: + resolution: {integrity: sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==} engines: {node: '>= 0.4'} dependencies: + available-typed-arrays: 1.0.5 call-bind: 1.0.2 + es-set-tostringtag: 2.0.1 es-to-primitive: 1.2.1 function-bind: 1.1.1 function.prototype.name: 1.1.5 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 has: 1.0.3 has-property-descriptors: 1.0.0 + has-proto: 1.0.1 has-symbols: 1.0.3 - internal-slot: 1.0.3 + internal-slot: 1.0.4 + is-array-buffer: 3.0.1 is-callable: 1.2.7 is-negative-zero: 2.0.2 is-regex: 1.1.4 is-shared-array-buffer: 1.0.2 is-string: 1.0.7 + is-typed-array: 1.1.10 is-weakref: 1.0.2 - object-inspect: 1.12.2 + object-inspect: 1.12.3 object-keys: 1.1.1 object.assign: 4.1.4 regexp.prototype.flags: 1.4.3 safe-regex-test: 1.0.0 - string.prototype.trimend: 1.0.5 - string.prototype.trimstart: 1.0.5 + string.prototype.trimend: 1.0.6 + string.prototype.trimstart: 1.0.6 + typed-array-length: 1.0.4 unbox-primitive: 1.0.2 + which-typed-array: 1.1.9 + dev: true + + /es-set-tostringtag/2.0.1: + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.0 + has: 1.0.3 + has-tostringtag: 1.0.0 dev: true /es-shim-unscopables/1.0.0: @@ -526,8 +689,8 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + /esbuild-android-64/0.15.18: + resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -535,8 +698,8 @@ packages: dev: true optional: true - /esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + /esbuild-android-arm64/0.15.18: + resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -544,8 +707,8 @@ packages: dev: true optional: true - /esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + /esbuild-darwin-64/0.15.18: + resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -553,8 +716,8 @@ packages: dev: true optional: true - /esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + /esbuild-darwin-arm64/0.15.18: + resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -562,8 +725,8 @@ packages: dev: true optional: true - /esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + /esbuild-freebsd-64/0.15.18: + resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -571,8 +734,8 @@ packages: dev: true optional: true - /esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + /esbuild-freebsd-arm64/0.15.18: + resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -580,8 +743,8 @@ packages: dev: true optional: true - /esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + /esbuild-linux-32/0.15.18: + resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -589,8 +752,8 @@ packages: dev: true optional: true - /esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + /esbuild-linux-64/0.15.18: + resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -598,8 +761,8 @@ packages: dev: true optional: true - /esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + /esbuild-linux-arm/0.15.18: + resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -607,8 +770,8 @@ packages: dev: true optional: true - /esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + /esbuild-linux-arm64/0.15.18: + resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -616,8 +779,8 @@ packages: dev: true optional: true - /esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + /esbuild-linux-mips64le/0.15.18: + resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -625,8 +788,8 @@ packages: dev: true optional: true - /esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + /esbuild-linux-ppc64le/0.15.18: + resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -634,8 +797,8 @@ packages: dev: true optional: true - /esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + /esbuild-linux-riscv64/0.15.18: + resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -643,8 +806,8 @@ packages: dev: true optional: true - /esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + /esbuild-linux-s390x/0.15.18: + resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -652,8 +815,8 @@ packages: dev: true optional: true - /esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + /esbuild-netbsd-64/0.15.18: + resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -661,8 +824,8 @@ packages: dev: true optional: true - /esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + /esbuild-openbsd-64/0.15.18: + resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -670,8 +833,8 @@ packages: dev: true optional: true - /esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + /esbuild-sunos-64/0.15.18: + resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -679,8 +842,8 @@ packages: dev: true optional: true - /esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + /esbuild-windows-32/0.15.18: + resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -688,8 +851,8 @@ packages: dev: true optional: true - /esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + /esbuild-windows-64/0.15.18: + resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -697,8 +860,8 @@ packages: dev: true optional: true - /esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + /esbuild-windows-arm64/0.15.18: + resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -706,34 +869,34 @@ packages: dev: true optional: true - /esbuild/0.15.12: - resolution: {integrity: sha512-PcT+/wyDqJQsRVhaE9uX/Oq4XLrFh0ce/bs2TJh4CSaw9xuvI+xFrH2nAYOADbhQjUgAhNWC5LKoUsakm4dxng==} + /esbuild/0.15.18: + resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.15.12 - '@esbuild/linux-loong64': 0.15.12 - esbuild-android-64: 0.15.12 - esbuild-android-arm64: 0.15.12 - esbuild-darwin-64: 0.15.12 - esbuild-darwin-arm64: 0.15.12 - esbuild-freebsd-64: 0.15.12 - esbuild-freebsd-arm64: 0.15.12 - esbuild-linux-32: 0.15.12 - esbuild-linux-64: 0.15.12 - esbuild-linux-arm: 0.15.12 - esbuild-linux-arm64: 0.15.12 - esbuild-linux-mips64le: 0.15.12 - esbuild-linux-ppc64le: 0.15.12 - esbuild-linux-riscv64: 0.15.12 - esbuild-linux-s390x: 0.15.12 - esbuild-netbsd-64: 0.15.12 - esbuild-openbsd-64: 0.15.12 - esbuild-sunos-64: 0.15.12 - esbuild-windows-32: 0.15.12 - esbuild-windows-64: 0.15.12 - esbuild-windows-arm64: 0.15.12 + '@esbuild/android-arm': 0.15.18 + '@esbuild/linux-loong64': 0.15.18 + esbuild-android-64: 0.15.18 + esbuild-android-arm64: 0.15.18 + esbuild-darwin-64: 0.15.18 + esbuild-darwin-arm64: 0.15.18 + esbuild-freebsd-64: 0.15.18 + esbuild-freebsd-arm64: 0.15.18 + esbuild-linux-32: 0.15.18 + esbuild-linux-64: 0.15.18 + esbuild-linux-arm: 0.15.18 + esbuild-linux-arm64: 0.15.18 + esbuild-linux-mips64le: 0.15.18 + esbuild-linux-ppc64le: 0.15.18 + esbuild-linux-riscv64: 0.15.18 + esbuild-linux-s390x: 0.15.18 + esbuild-netbsd-64: 0.15.18 + esbuild-openbsd-64: 0.15.18 + esbuild-sunos-64: 0.15.18 + esbuild-windows-32: 0.15.18 + esbuild-windows-64: 0.15.18 + esbuild-windows-arm64: 0.15.18 dev: true /escape-string-regexp/4.0.0: @@ -741,53 +904,54 @@ packages: engines: {node: '>=10'} dev: true - /eslint-plugin-es/3.0.1_eslint@8.25.0: + /eslint-plugin-es/3.0.1_eslint@8.32.0: resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=4.19.1' dependencies: - eslint: 8.25.0 + eslint: 8.32.0 eslint-utils: 2.1.0 regexpp: 3.2.0 dev: true - /eslint-plugin-node/11.1.0_eslint@8.25.0: + /eslint-plugin-node/11.1.0_eslint@8.32.0: resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=5.16.0' dependencies: - eslint: 8.25.0 - eslint-plugin-es: 3.0.1_eslint@8.25.0 + eslint: 8.32.0 + eslint-plugin-es: 3.0.1_eslint@8.32.0 eslint-utils: 2.1.0 - ignore: 5.2.0 + ignore: 5.2.4 minimatch: 3.1.2 resolve: 1.22.1 semver: 6.3.0 dev: true - /eslint-plugin-react/7.31.10_eslint@8.25.0: - resolution: {integrity: sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==} + /eslint-plugin-react/7.32.1_eslint@8.32.0: + resolution: {integrity: sha512-vOjdgyd0ZHBXNsmvU+785xY8Bfe57EFbTYYk8XrROzWpr9QBvpjITvAXt9xqcE6+8cjR/g1+mfumPToxsl1www==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - array-includes: 3.1.5 - array.prototype.flatmap: 1.3.0 + array-includes: 3.1.6 + array.prototype.flatmap: 1.3.1 + array.prototype.tosorted: 1.1.1 doctrine: 2.1.0 - eslint: 8.25.0 + eslint: 8.32.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.3 minimatch: 3.1.2 - object.entries: 1.1.5 - object.fromentries: 2.0.5 - object.hasown: 1.1.1 - object.values: 1.1.5 + object.entries: 1.1.6 + object.fromentries: 2.0.6 + object.hasown: 1.1.2 + object.values: 1.1.6 prop-types: 15.8.1 resolve: 2.0.0-next.4 semver: 6.3.0 - string.prototype.matchall: 4.0.7 + string.prototype.matchall: 4.0.8 dev: true /eslint-scope/5.1.1: @@ -813,13 +977,13 @@ packages: eslint-visitor-keys: 1.3.0 dev: true - /eslint-utils/3.0.0_eslint@8.25.0: + /eslint-utils/3.0.0_eslint@8.32.0: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' dependencies: - eslint: 8.25.0 + eslint: 8.32.0 eslint-visitor-keys: 2.1.0 dev: true @@ -838,14 +1002,15 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint/8.25.0: - resolution: {integrity: sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A==} + /eslint/8.32.0: + resolution: {integrity: sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint/eslintrc': 1.3.3 - '@humanwhocodes/config-array': 0.10.7 + '@eslint/eslintrc': 1.4.1 + '@humanwhocodes/config-array': 0.11.8 '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -853,23 +1018,23 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 - eslint-utils: 3.0.0_eslint@8.25.0 + eslint-utils: 3.0.0_eslint@8.32.0 eslint-visitor-keys: 3.3.0 - espree: 9.4.0 + espree: 9.4.1 esquery: 1.4.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.17.0 - globby: 11.1.0 + globals: 13.19.0 grapheme-splitter: 1.0.4 - ignore: 5.2.0 + ignore: 5.2.4 import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 - js-sdsl: 4.1.5 + is-path-inside: 3.0.3 + js-sdsl: 4.3.0 js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 @@ -885,12 +1050,12 @@ packages: - supports-color dev: true - /espree/9.4.0: - resolution: {integrity: sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==} + /espree/9.4.1: + resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.8.0 - acorn-jsx: 5.3.2_acorn@8.8.0 + acorn: 8.8.2 + acorn-jsx: 5.3.2_acorn@8.8.2 eslint-visitor-keys: 3.3.0 dev: true @@ -946,12 +1111,20 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fastq/1.13.0: - resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + /fastq/1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 dev: true + /fetch-blob/3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.2.1 + dev: true + /file-entry-cache/6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -986,6 +1159,19 @@ packages: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true + /for-each/0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + + /formdata-polyfill/4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + dependencies: + fetch-blob: 3.2.0 + dev: true + /fs.realpath/1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true @@ -1008,7 +1194,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.4 + es-abstract: 1.21.1 functions-have-names: 1.2.3 dev: true @@ -1016,8 +1202,8 @@ packages: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true - /get-intrinsic/1.1.3: - resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==} + /get-intrinsic/1.2.0: + resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} dependencies: function-bind: 1.1.1 has: 1.0.3 @@ -1029,11 +1215,11 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 dev: true - /get-tsconfig/4.2.0: - resolution: {integrity: sha512-X8u8fREiYOE6S8hLbq99PeykTDoLVnxvF4DjWKJmz9xy2nNRdUcV8ZN9tniJFeKyTU3qnC9lL8n4Chd6LmVKHg==} + /get-tsconfig/4.3.0: + resolution: {integrity: sha512-YCcF28IqSay3fqpIu5y3Krg/utCBHBeoflkZyHj/QcqI2nrLPC3ZegS9CmIo+hJb8K7aiGsuUl7PwWVjNG2HQQ==} dev: true /glob-parent/5.1.2: @@ -1061,13 +1247,20 @@ packages: path-is-absolute: 1.0.1 dev: true - /globals/13.17.0: - resolution: {integrity: sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==} + /globals/13.19.0: + resolution: {integrity: sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 dev: true + /globalthis/1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.1.4 + dev: true + /globby/11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -1075,11 +1268,17 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.2.12 - ignore: 5.2.0 + ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 dev: true + /gopd/1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.0 + dev: true + /grapheme-splitter/1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true @@ -1096,7 +1295,12 @@ packages: /has-property-descriptors/1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 + dev: true + + /has-proto/1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} dev: true /has-symbols/1.0.3: @@ -1118,8 +1322,8 @@ packages: function-bind: 1.1.1 dev: true - /ignore/5.2.0: - resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} + /ignore/5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} dev: true @@ -1147,15 +1351,23 @@ packages: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true - /internal-slot/1.0.3: - resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} + /internal-slot/1.0.4: + resolution: {integrity: sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 has: 1.0.3 side-channel: 1.0.4 dev: true + /is-array-buffer/3.0.1: + resolution: {integrity: sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + is-typed-array: 1.1.10 + dev: true + /is-bigint/1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: @@ -1217,6 +1429,16 @@ packages: engines: {node: '>=0.12.0'} dev: true + /is-path-inside/3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /is-plain-object/5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + dev: true + /is-regex/1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -1245,6 +1467,17 @@ packages: has-symbols: 1.0.3 dev: true + /is-typed-array/1.1.10: + resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + dev: true + /is-weakref/1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: @@ -1255,8 +1488,8 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /js-sdsl/4.1.5: - resolution: {integrity: sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==} + /js-sdsl/4.3.0: + resolution: {integrity: sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==} dev: true /js-tokens/4.0.0: @@ -1282,7 +1515,7 @@ packages: resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} engines: {node: '>=4.0'} dependencies: - array-includes: 3.1.5 + array-includes: 3.1.6 object.assign: 4.1.4 dev: true @@ -1342,17 +1575,47 @@ packages: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true + /natural-compare-lite/1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true + /natural-compare/1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true + /node-domexception/1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + dev: true + + /node-fetch/2.6.8: + resolution: {integrity: sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: true + + /node-fetch/3.3.0: + resolution: {integrity: sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + dev: true + /object-assign/4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} dev: true - /object-inspect/1.12.2: - resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} + /object-inspect/1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} dev: true /object-keys/1.1.1: @@ -1370,38 +1633,38 @@ packages: object-keys: 1.1.1 dev: true - /object.entries/1.1.5: - resolution: {integrity: sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==} + /object.entries/1.1.6: + resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.4 + es-abstract: 1.21.1 dev: true - /object.fromentries/2.0.5: - resolution: {integrity: sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==} + /object.fromentries/2.0.6: + resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.4 + es-abstract: 1.21.1 dev: true - /object.hasown/1.1.1: - resolution: {integrity: sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==} + /object.hasown/1.1.2: + resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} dependencies: define-properties: 1.1.4 - es-abstract: 1.20.4 + es-abstract: 1.21.1 dev: true - /object.values/1.1.5: - resolution: {integrity: sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==} + /object.values/1.1.6: + resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.4 + es-abstract: 1.21.1 dev: true /once/1.4.0: @@ -1477,8 +1740,8 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier/2.8.1: - resolution: {integrity: sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==} + /prettier/2.8.3: + resolution: {integrity: sha512-tJ/oJ4amDihPoufT5sM0Z1SKEuKay8LfVAMlbbhnnkvt6BUserZylqo2PN+p9KeljLr0OHa2rXHU1T8reeoTrw==} engines: {node: '>=10.13.0'} hasBin: true dev: true @@ -1491,8 +1754,8 @@ packages: react-is: 16.13.1 dev: true - /punycode/2.1.1: - resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} + /punycode/2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} dev: true @@ -1518,9 +1781,14 @@ packages: engines: {node: '>=8'} dev: true - /replugged/4.0.0-beta0.20: - resolution: {integrity: sha512-nPpRjCRSb6OtxMZ38Fbm2+yyHLb37m3EUgE5WizMsshDMECBgi0B9K1uNnoynBz10aNzELaTWcCPDXAErzC6pg==} + /replugged/4.0.0-beta0.22: + resolution: {integrity: sha512-zR61aYEQmOEBcSxJEzx0sfd0EsN348uVE06kzWXNtBpQeWzlp0c4sZCz4DNZ5hvs/aavRFvUNpoaMvtM9QJrbw==} engines: {node: '>=14.0.0'} + dependencies: + '@octokit/rest': 19.0.7 + node-fetch: 3.3.0 + transitivePeerDependencies: + - encoding dev: true /resolve-from/4.0.0: @@ -1568,7 +1836,7 @@ packages: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 is-regex: 1.1.4 dev: true @@ -1601,8 +1869,8 @@ packages: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.3 - object-inspect: 1.12.2 + get-intrinsic: 1.2.0 + object-inspect: 1.12.3 dev: true /slash/3.0.0: @@ -1622,33 +1890,33 @@ packages: engines: {node: '>=0.10.0'} dev: true - /string.prototype.matchall/4.0.7: - resolution: {integrity: sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==} + /string.prototype.matchall/4.0.8: + resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.4 - get-intrinsic: 1.1.3 + es-abstract: 1.21.1 + get-intrinsic: 1.2.0 has-symbols: 1.0.3 - internal-slot: 1.0.3 + internal-slot: 1.0.4 regexp.prototype.flags: 1.4.3 side-channel: 1.0.4 dev: true - /string.prototype.trimend/1.0.5: - resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==} + /string.prototype.trimend/1.0.6: + resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.4 + es-abstract: 1.21.1 dev: true - /string.prototype.trimstart/1.0.5: - resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==} + /string.prototype.trimstart/1.0.6: + resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.4 + es-abstract: 1.21.1 dev: true /strip-ansi/6.0.1: @@ -1686,27 +1954,31 @@ packages: is-number: 7.0.0 dev: true + /tr46/0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: true + /tslib/1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tsutils/3.21.0_typescript@4.8.4: + /tsutils/3.21.0_typescript@4.9.4: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 4.8.4 + typescript: 4.9.4 dev: true - /tsx/3.10.4: - resolution: {integrity: sha512-sBxeSgUAPVqRgBPk6TY0yFiNDUlva9rA+Nj46oYEd89FXVD2MFWChFhybTtq7Qh1Ies/O75mQNwpLuO7m8gToA==} + /tsx/3.12.2: + resolution: {integrity: sha512-ykAEkoBg30RXxeOMVeZwar+JH632dZn9EUJVyJwhfag62k6UO/dIyJEV58YuLF6e5BTdV/qmbQrpkWqjq9cUnQ==} hasBin: true dependencies: - '@esbuild-kit/cjs-loader': 2.4.0 + '@esbuild-kit/cjs-loader': 2.4.1 '@esbuild-kit/core-utils': 3.0.0 - '@esbuild-kit/esm-loader': 2.5.0 + '@esbuild-kit/esm-loader': 2.5.4 optionalDependencies: fsevents: 2.3.2 dev: true @@ -1723,8 +1995,16 @@ packages: engines: {node: '>=10'} dev: true - /typescript/4.8.4: - resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==} + /typed-array-length/1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + is-typed-array: 1.1.10 + dev: true + + /typescript/4.9.4: + resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} engines: {node: '>=4.2.0'} hasBin: true dev: true @@ -1738,10 +2018,30 @@ packages: which-boxed-primitive: 1.0.2 dev: true + /universal-user-agent/6.0.0: + resolution: {integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==} + dev: true + /uri-js/4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: - punycode: 2.1.1 + punycode: 2.3.0 + dev: true + + /web-streams-polyfill/3.2.1: + resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} + engines: {node: '>= 8'} + dev: true + + /webidl-conversions/3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: true + + /whatwg-url/5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 dev: true /which-boxed-primitive/1.0.2: @@ -1754,6 +2054,18 @@ packages: is-symbol: 1.0.4 dev: true + /which-typed-array/1.1.9: + resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + is-typed-array: 1.1.10 + dev: true + /which/2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -1780,7 +2092,7 @@ packages: engines: {node: '>=10'} dev: true - github.com/dmitmel/eslint-config-dmitmel/690f1b1121d342fcc8ee511ca9f2af7502f53db6_eslint@8.25.0: + github.com/dmitmel/eslint-config-dmitmel/690f1b1121d342fcc8ee511ca9f2af7502f53db6_eslint@8.32.0: resolution: {tarball: https://codeload.github.com/dmitmel/eslint-config-dmitmel/tar.gz/690f1b1121d342fcc8ee511ca9f2af7502f53db6} id: github.com/dmitmel/eslint-config-dmitmel/690f1b1121d342fcc8ee511ca9f2af7502f53db6 name: eslint-config-dmitmel @@ -1789,5 +2101,5 @@ packages: peerDependencies: eslint: '>=8.17.0' dependencies: - eslint: 8.25.0 + eslint: 8.32.0 dev: true diff --git a/scripts/build.ts b/scripts/build.ts index 8265923..afffafd 100644 --- a/scripts/build.ts +++ b/scripts/build.ts @@ -1,13 +1,13 @@ import esbuild from "esbuild"; import path, { join } from "path"; -import fs, { existsSync, rmSync } from "fs"; +import { cpSync, existsSync, mkdirSync, rmSync, writeFileSync } from "fs"; import _manifest from "../manifest.json"; import { PluginManifest } from "replugged/dist/types/addon"; const manifest: PluginManifest = _manifest; - -const NODE_VERSION = "14"; +const watch = process.argv.includes("--watch"); const CHROME_VERSION = "91"; +const REPLUGGED_FOLDER_NAME = "replugged"; const globalModules: esbuild.Plugin = { name: "globalModules", @@ -47,7 +47,6 @@ const globalModules: esbuild.Plugin = { }, }; -const REPLUGGED_FOLDER_NAME = "replugged"; export const CONFIG_PATH = (() => { switch (process.platform) { case "win32": @@ -66,29 +65,27 @@ const install: esbuild.Plugin = { name: "install", setup: (build) => { build.onEnd(() => { - if (!process.env.NO_INSTALL) { + if (!process.argv.includes("--no-install")) { const dest = join(CONFIG_PATH, "plugins", manifest.id); - if (existsSync(dest)) { - rmSync(dest, { recursive: true }); - } - fs.cpSync("dist", dest, { recursive: true }); + if (existsSync(dest)) rmSync(dest, { recursive: true }); + cpSync("dist", dest, { recursive: true }); console.log("Installed updated version"); } }); }, }; -const watch = process.argv.includes("--watch"); - const common: esbuild.BuildOptions = { absWorkingDir: path.join(__dirname, ".."), bundle: true, + format: "esm" as esbuild.Format, + logLevel: "info", minify: false, + platform: "browser", + plugins: [globalModules, install], sourcemap: true, - format: "cjs" as esbuild.Format, - logLevel: "info", + target: `chrome${CHROME_VERSION}`, watch, - plugins: [install], }; const targets = []; @@ -98,67 +95,27 @@ if ("renderer" in manifest) { esbuild.build({ ...common, entryPoints: [manifest.renderer], - platform: "browser", - target: `chrome${CHROME_VERSION}`, outfile: "dist/renderer.js", - format: "esm" as esbuild.Format, - plugins: [globalModules, install], }), ); manifest.renderer = "renderer.js"; } -if ("preload" in manifest) { - targets.push( - esbuild.build({ - ...common, - entryPoints: [manifest.preload], - platform: "node", - target: [`node${NODE_VERSION}`, `chrome${CHROME_VERSION}`], - outfile: "dist/preload.js", - external: ["electron"], - }), - ); - - manifest.preload = "preload.js"; -} - -if ("main" in manifest) { - targets.push( - esbuild.build({ - ...common, - entryPoints: [manifest.main], - platform: "node", - target: `node${NODE_VERSION}`, - outfile: "dist/main.js", - external: ["electron"], - }), - ); - - manifest.main = "main.js"; -} - if ("plaintextPatches" in manifest) { targets.push( esbuild.build({ ...common, entryPoints: [manifest.plaintextPatches], - platform: "browser", - target: `chrome${CHROME_VERSION}`, outfile: "dist/plaintextPatches.js", - format: "esm" as esbuild.Format, - plugins: [globalModules, install], }), ); manifest.plaintextPatches = "plaintextPatches.js"; } -if (!fs.existsSync("dist")) { - fs.mkdirSync("dist"); -} +if (!existsSync("dist")) mkdirSync("dist"); -fs.writeFileSync("dist/manifest.json", JSON.stringify(manifest)); +writeFileSync("dist/manifest.json", JSON.stringify(manifest)); Promise.all(targets); diff --git a/scripts/bundle.ts b/scripts/bundle.ts index ab7113b..ff0c1a4 100644 --- a/scripts/bundle.ts +++ b/scripts/bundle.ts @@ -1,8 +1,12 @@ import asar from "@electron/asar"; -import { readFileSync } from "fs"; +import { copyFileSync, existsSync, mkdirSync, readFileSync } from "fs"; import { PluginManifest } from "replugged/dist/types/addon"; -const manifest = JSON.parse(readFileSync("manifest.json", "utf-8")) as PluginManifest; -const outputName = `${manifest.id}.asar`; +const manifest = JSON.parse(readFileSync("dist/manifest.json", "utf-8")) as PluginManifest; +const outputName = `bundle/${manifest.id}`; -asar.createPackage("dist", outputName); +if (!existsSync("bundle")) { + mkdirSync("bundle"); +} +asar.createPackage("dist", `${outputName}.asar`); +copyFileSync("dist/manifest.json", `${outputName}.json`); diff --git a/src/components/Counter.tsx b/src/components/Counter.tsx index a9f7a10..384925d 100644 --- a/src/components/Counter.tsx +++ b/src/components/Counter.tsx @@ -4,19 +4,17 @@ import '../main.css'; import { common, webpack } from 'replugged'; import { ActionTypes, Counters } from '@lib/constants'; -import type { CounterState, Flux, GuildAvailabilityStore, RelationshipStore, PresenceStore } from '@types'; -import type { FluxDispatcher } from 'replugged/dist/renderer/modules/webpack/common'; +import type { CounterState, GuildAvailabilityStore, RelationshipStore, PresenceStore } from '@types'; -const Flux = common.flux as unknown as Flux; -const FluxDispatcher = common.fluxDispatcher as unknown as FluxDispatcher; +const FluxDispatcher = common.fluxDispatcher; const { getExportsForProps } = webpack; const Messages = webpack.getByProps('Messages', 'getLanguages')?.Messages as Record; -const RelationshipStore: RelationshipStore = await webpack.waitForModule(webpack.filters.byProps('getRelationships')); -const PresenceStore: PresenceStore = await webpack.waitForModule(webpack.filters.byProps('isMobileOnline')); -const GuildAvailabilityStore: GuildAvailabilityStore = await webpack.waitForModule(webpack.filters.byProps('totalGuilds')); +const RelationshipStore = await webpack.waitForModule(webpack.filters.byProps('getRelationships')); +const PresenceStore = await webpack.waitForModule(webpack.filters.byProps('isMobileOnline')); +const GuildAvailabilityStore = await webpack.waitForModule(webpack.filters.byProps('totalGuilds')); const RelationshipTypes = (await webpack .waitForModule<{ [key: number]: string }>(webpack.filters.byProps('IMPLICIT')) @@ -76,7 +74,7 @@ function Counter(): JSX.Element { diff --git a/src/components/Settings.tsx b/src/components/Settings.tsx new file mode 100644 index 0000000..94bac71 --- /dev/null +++ b/src/components/Settings.tsx @@ -0,0 +1,77 @@ +import { components, util, webpack } from 'replugged'; +import { ReactComponent } from 'replugged/dist/types'; + +import { Counters } from '@lib/constants'; +import { CounterType } from '@types'; +import { prefs } from '../'; + +import CounterStore from '@lib/store'; +const { Divider, SwitchItem, Text } = components; + +const SliderModule = await webpack.waitForModule(webpack.filters.bySource('moveStaggered')); +const Slider = webpack.getFunctionBySource('moveStaggered', SliderModule) as ReactComponent<{}>; +const Messages = webpack.getByProps('Messages', 'getLanguages')?.Messages as Record; + +function CounterSettings(): React.ReactElement[] { + // @ts-expect-error Yeah... whatever. + return Object.keys(Counters).map((counter: CounterType) => { + const counterName = Messages[Counters[counter].translationKey] as string; + + return + Show {counterName} + ; + }); +} + +function Settings(): React.ReactElement { + const useAutoRotation = util.useSetting(prefs, 'autoRotation'); + const useAutoRotationHoverPause = util.useSetting(prefs, 'autoRotationHoverPause'); + const useAutoRotationDelay = util.useSetting(prefs, 'autoRotationDelay'); + + return ( +
+ Visibility + {CounterSettings()} + + Preserve Last Counter + + Auto Rotation + + Enabled + + + {useAutoRotation.value && <> + Rotate Interval + { + const seconds = (value / 1000); + const minutes = ((value / 1000) / 60); + return value < 6e4 ? `${seconds.toFixed(0)} secs` : `${minutes.toFixed(0)} mins`; + }} + onValueRender={(value: number) => { + const seconds = (value / 1000); + const minutes = ((value / 1000) / 60); + return value < 6e4 ? `${seconds.toFixed(0)} secs` : `${minutes.toFixed(0)} mins`; + }} + onValueChange={useAutoRotationDelay.onChange} + /> + + + Pause on Hover + + } +
+ ); +} + +export default Settings; diff --git a/src/components/index.ts b/src/components/index.ts index 8c97f2a..04e558f 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -1,4 +1,5 @@ import Counter from './Counter'; import ErrorBoundary from './ErrorBoundary'; +import Settings from './Settings'; -export { Counter, ErrorBoundary }; +export { Counter, ErrorBoundary, Settings }; diff --git a/src/index.tsx b/src/index.tsx index 26490fd..200c0c5 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,15 +1,18 @@ -import { Injector, Logger, util, webpack } from 'replugged'; +import { Injector, Logger, settings, util, webpack } from 'replugged'; import { findInReactTree, forceUpdate } from '@lib/util'; -import { PLUGIN_ID } from '@lib/constants'; +import { DefaultSettings, PLUGIN_ID } from '@lib/constants'; import { Counter } from '@components'; -import type { GuildClasses, GuildsNavComponent } from '@types'; +import type { CounterSettings, GuildClasses, GuildsNavComponent } from '@types'; const inject = new Injector(); const logger = Logger.plugin(PLUGIN_ID.replace(/-/g, ' '), '#3ba55c'); let GuildClasses: GuildClasses; +export const prefs = await settings.init('xyz.griefmodz.StatisticCounter', DefaultSettings); +export { Settings } from '@components'; + export async function start(): Promise { GuildClasses = await webpack.waitForModule(webpack.filters.byProps('guilds', 'sidebar')); diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 6e2a8e0..8197aeb 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -1,4 +1,4 @@ -import type { CounterProps, CounterType } from '@types'; +import type { CounterProps, CounterSettings, CounterType } from '@types'; export const PLUGIN_ID = 'Statistic-Counter'; @@ -6,6 +6,18 @@ export const ActionTypes = { STATISTICS_COUNTER_SET_ACTIVE: 'STATISTICS_COUNTER_SET_ACTIVE' }; +export const DefaultSettings: Partial = { + autoRotation: false, + autoRotationDelay: 3e4, + autoRotationHoverPause: true, + preserveLastCounter: false, + online: true, + friends: true, + pending: true, + blocked: true, + guilds: true +} + export const Counters: Record = { online: { storeKey: 'ONLINE', diff --git a/src/lib/store.ts b/src/lib/store.ts index dc20307..a3e1cc3 100644 --- a/src/lib/store.ts +++ b/src/lib/store.ts @@ -1,13 +1,15 @@ import { common, settings } from 'replugged'; import { SettingsManager } from 'replugged/dist/renderer/apis/settings'; -import type { CounterSettings, CounterStore as CounterStoreType, CounterType, Flux, Store } from '@types'; -const Flux = common.flux as unknown as Flux; +import type { Store } from 'replugged/dist/renderer/modules/webpack/common/flux'; +import type { CounterSettings, CounterStore as CounterStoreType, CounterType } from '@types'; + +const Flux = common.flux; const FluxDispatcher = common.fluxDispatcher; -import { ActionTypes, Counters } from './constants'; +import { ActionTypes, Counters, DefaultSettings } from '@lib/constants'; -const prefs = await settings.init('xyz.griefmodz.StatisticCounter'); +const prefs = await settings.init('xyz.griefmodz.StatisticCounter', DefaultSettings); let activeCounter = prefs.get('lastCounter'); interface CounterStoreState { @@ -25,12 +27,13 @@ class CounterStore extends Flux.Store { }; } - public get settings(): SettingsManager { + public get settings(): SettingsManager { return prefs; } public get filteredCounters(): Array { - return Object.keys(Counters).filter((counter) => prefs.get(counter, true)); + // @ts-expect-error Yeah... whatever. + return Object.keys(Counters).filter((counter: CounterType) => prefs.get(counter, true)); } public get nextCounter(): CounterType | string { diff --git a/src/lib/util.ts b/src/lib/util.ts index b476c59..31de17b 100644 --- a/src/lib/util.ts +++ b/src/lib/util.ts @@ -25,7 +25,7 @@ export function findInReactTree(node: JSX.Element | JSX.Element[], predicate: Pr export function forceUpdate(element: Element | null): void { if (!element) return; - const instance = util.getOwnerInstance>(element); + const instance = util.getOwnerInstance(element); if (instance) { const forceRerender = inject.instead(instance, 'render', () => { forceRerender(); diff --git a/src/main.css b/src/main.css index 4642ce0..9af2bca 100644 --- a/src/main.css +++ b/src/main.css @@ -29,3 +29,13 @@ position: relative; width: 72px; } + +.statistic-counter-settings-slider { + width: 97%; + margin: auto; + margin-bottom: 15px; +} + +.statistic-counter-settings-slider [class|='mark'] { + white-space: nowrap; +} diff --git a/src/types/flux.d.ts b/src/types/flux.d.ts deleted file mode 100644 index f9f6eaa..0000000 --- a/src/types/flux.d.ts +++ /dev/null @@ -1,155 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import type { ReactComponent } from 'replugged/dist/types'; -import type { FluxDispatcher as Dispatcher } from 'replugged/dist/renderer/modules/webpack/common'; - -type DispatchToken = string; -type ActionType = string; - -interface Action { - type: ActionType; -} - -type ActionHandler = (action: A) => void; - -type ActionHandlerRecord = { - [A in ActionType]: ActionHandler<{ type: A; [key: string]: any }>; -}; - -export declare class Emitter { - public static changeSentinel: number; - public static changedStores: Set; - public static isBatchEmitting: boolean; - public static isDispatching: boolean; - public static isPaused: boolean; - public static pauseTimer: ReturnType | undefined; - public static reactChangedStores: Set; - - public batched(): void; - public destroy(): void; - - public emit(): void; - public emitReactOnce(): void; - public emitNonReactOnce(): void; - - public getChangeSentinel(): number; - public getIsPaused(): boolean; - - public injectBatchEmitChanges(): void; - public markChanged(): void; - - public pause(callback?: () => void): void; - public resume(callback?: () => void): void; -} - -type Callback = () => void; - -interface Callbacks { - listeners: Set; - add(callback: Callback): void; - addConditional(callback: Callback, condition: boolean): void; - remove(callback: Callback): void; - has(callback: Callback): boolean; - hasAny(): boolean; - invokeAll(): void; -} - -export declare class Store { - public constructor(dispatcher: Dispatcher, actions: ActionHandlerRecord); - - public static destroy(): void; - public static getAll(): Store[]; - public static initialize(): void; - public static initialized: Promise; - - public _isInitialized: boolean; - public _dispatchToken: DispatchToken; - public _dispatcher: Dispatcher; - public _changeCallbacks: Callbacks; - public _reactChangeCallbacks: Callbacks; - - public initialize(): void; - public initializeIfNeeded(): void; - public getDispatchToken(): DispatchToken; - public getName(): string; - - public emitChange(): void; - public mustEmitChanges(func?: () => boolean): void; - public syncWith(stores: Store[], func: () => boolean, timeout?: number): void; - public waitFor(...stores: Store[]): void; - - public addChangeListener(listener: Callback): void; - public addConditionalChangeListener(listener: Callback, condition: boolean): void; - public addReactChangeListener(listener: Callback): void; - public removeChangeListener(listener: Callback): void; - public removeReactChangeListener(listener: Callback): void; - - // eslint-disable-next-line @typescript-eslint/naming-convention - public __getLocalVars(): Record; -} - -interface ClearOptions { - omit?: string[]; - type: 'all' | 'user-data-only'; -} - -interface State { - [key: string]: any; -} - -type States = Record; -type Migration = () => void; - -export declare class PersistedStore extends Store { - public static allPersistKeys: Set; - - public static clearAll(options: ClearOptions): Promise; - public static clearPersistQueue(options: ClearOptions): void; - public static destroy(): void; - - public static disableWrite: boolean; - public static disableWrites: boolean; - - public static getAllStates(): States; - public static initializeAll(states: States): void; - public static migrateAndReadStoreState( - persistKey: string, - migrations: Migration[] | undefined - ): { - state: State; - requiresPersist: boolean; - }; - public static shouldClear(options: ClearOptions, persistKey: string): boolean; - - public static throttleDelay: number; - public static userAgnosticPersistKeys: Set; - - public static _writePromises: Map; - public static _writeResolvers: Map; - - public asyncPersist(): Promise; - public clear(): void; - public getClass(): any; - public initializeFromState(state: any): void; - public initializeIfNeeded(): void; - public persist(): void; -} - -export type DeviceSettingsStore = typeof PersistedStore; -export type OfflineCacheStore = typeof PersistedStore; - -export interface Flux { - DeviceSettingsStore: DeviceSettingsStore; - Emitter: Emitter; - OfflineCacheStore: OfflineCacheStore; - PersistedStore: typeof PersistedStore; - Store: typeof Store; - connectStores( - stores: Store[], - callback: (props: OuterProps) => InnerProps, - options?: { forwardRef: boolean } - ): (component: ReactComponent) => React.ReactElement; - - destroy(): void; - initialize(): void; - get initialized(): Promise; -} diff --git a/src/types/index.d.ts b/src/types/index.d.ts index 432a145..010617d 100644 --- a/src/types/index.d.ts +++ b/src/types/index.d.ts @@ -1,10 +1,8 @@ /* eslint-disable @typescript-eslint/naming-convention */ -export * from './flux'; - -import type { Store } from './flux'; -import type { Counters } from '@lib/constants'; +import type { Store } from 'replugged/dist/renderer/modules/webpack/common/flux'; import type { SettingsManager } from 'replugged/dist/renderer/apis/settings'; import type { RawModule } from 'replugged/dist/types'; +import type { Counters } from '@lib/constants'; export type Comparator = (a: T, b: T) => boolean; @@ -63,12 +61,16 @@ export interface CounterStore extends Store { } export interface CounterSettings { - autoRotation: boolean; - autoRotationDelay: number; - autoRotationHoverPause: boolean; - preserveLastCounter: boolean; - lastCounter: CounterType; - [key: string]: boolean; + autoRotation?: boolean; + autoRotationDelay?: number; + autoRotationHoverPause?: boolean; + preserveLastCounter?: boolean; + lastCounter?: CounterType; + online?: boolean; + friends?: boolean; + pending?: boolean; + blocked?: boolean; + guilds?: boolean; } export interface CounterState { @@ -89,7 +91,7 @@ export const enum RelationshipTypes { SUGGESTION } -export interface RelationshipStore extends Store { +export interface RelationshipStore extends RawModule, Store { getFriendIDs(): Snowflake[]; getNickname(userId: string): string; getPendingCount(): number; @@ -165,7 +167,7 @@ export interface PresenceStoreState { presencesForGuilds: Record>; } -export interface PresenceStore extends Store { +export interface PresenceStore extends RawModule, Store { findActivity(userId: Snowflake, predicate: (arg: unknown) => boolean): Activity; getActivities(userId: Snowflake): Activity[]; getActivityMetadata(userId: Snowflake): unknown; @@ -177,10 +179,9 @@ export interface PresenceStore extends Store { getUserIds(): Snowflake[]; isMobileOnline(userId: Snowflake): boolean; setCurrentUserOnConnectionOpen(status: StatusTypes, activities: Record): void; - __getLocalVars(): unknown; } -export interface GuildAvailabilityStore extends Store { +export interface GuildAvailabilityStore extends RawModule, Store { isUnavailable(guildId: Snowflake): boolean; get totalGuilds(): number; get totalUnavailableGuilds(): number;