Merge branch 'development' into modals

This commit is contained in:
Zack Rauen 2023-06-14 22:10:37 -04:00
commit 2554ea1b1f
128 changed files with 1160 additions and 529 deletions

9
babel.config.js Normal file
View File

@ -0,0 +1,9 @@
module.exports = (api) => {
api.cache(false); // set cache as true/false
return {
presets: ["@babel/preset-env"],
// optional if you want to use local .babelrc files
babelrcRoots: [".", "injector", "preload", "renderer"],
};
};

View File

@ -17,6 +17,9 @@
"translations": "node -r dotenv/config scripts/translations.js"
},
"devDependencies": {
"@babel/core": "^7.16.12",
"@babel/preset-env": "^7.16.11",
"@babel/register": "^7.16.9",
"asar": "^3.2.0",
"dotenv": "^16.0.3",
"eslint": "^8.23.0",

View File

@ -4,6 +4,9 @@ importers:
.:
specifiers:
'@babel/core': ^7.16.12
'@babel/preset-env': ^7.16.11
'@babel/register': ^7.16.9
asar: ^3.2.0
dotenv: ^16.0.3
eslint: ^8.23.0
@ -13,6 +16,9 @@ importers:
webpack: ^5.74.0
webpack-cli: ^4.10.0
devDependencies:
'@babel/core': 7.18.6
'@babel/preset-env': 7.18.6_@babel+core@7.18.6
'@babel/register': 7.18.6_@babel+core@7.18.6
asar: 3.2.0
dotenv: 16.0.3
eslint: 8.23.0
@ -119,7 +125,7 @@ packages:
resolution: {integrity: sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.18.8
'@babel/types': 7.21.5
'@jridgewell/gen-mapping': 0.3.2
jsesc: 2.5.2
dev: true
@ -128,7 +134,7 @@ packages:
resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.18.8
'@babel/types': 7.21.5
dev: true
/@babel/helper-builder-binary-assignment-operator-visitor/7.18.6:
@ -136,7 +142,7 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-explode-assignable-expression': 7.18.6
'@babel/types': 7.18.8
'@babel/types': 7.21.5
dev: true
/@babel/helper-compilation-targets/7.18.6_@babel+core@7.18.6:
@ -148,7 +154,7 @@ packages:
'@babel/compat-data': 7.18.8
'@babel/core': 7.18.6
'@babel/helper-validator-option': 7.18.6
browserslist: 4.21.1
browserslist: 4.21.5
semver: 6.3.0
dev: true
@ -181,16 +187,14 @@ packages:
regexpu-core: 5.1.0
dev: true
/@babel/helper-define-polyfill-provider/0.3.1_@babel+core@7.18.6:
resolution: {integrity: sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==}
/@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.18.6:
resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==}
peerDependencies:
'@babel/core': ^7.4.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-compilation-targets': 7.18.6_@babel+core@7.18.6
'@babel/helper-module-imports': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/traverse': 7.18.8
'@babel/helper-plugin-utils': 7.21.5
debug: 4.3.4
lodash.debounce: 4.0.8
resolve: 1.22.1
@ -208,7 +212,7 @@ packages:
resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.18.8
'@babel/types': 7.21.5
dev: true
/@babel/helper-function-name/7.18.6:
@ -216,21 +220,21 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/template': 7.18.6
'@babel/types': 7.18.8
'@babel/types': 7.21.5
dev: true
/@babel/helper-hoist-variables/7.18.6:
resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.18.8
'@babel/types': 7.21.5
dev: true
/@babel/helper-member-expression-to-functions/7.18.6:
resolution: {integrity: sha512-CeHxqwwipekotzPDUuJOfIMtcIHBuc7WAzLmTYWctVigqS5RktNMQ5bEwQSuGewzYnCtTWa3BARXeiLxDTv+Ng==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.18.8
'@babel/types': 7.21.5
dev: true
/@babel/helper-module-imports/7.18.6:
@ -240,18 +244,25 @@ packages:
'@babel/types': 7.18.8
dev: true
/@babel/helper-module-imports/7.21.4:
resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.21.5
dev: true
/@babel/helper-module-transforms/7.18.8:
resolution: {integrity: sha512-che3jvZwIcZxrwh63VfnFTUzcAM9v/lznYkkRxIBGMPt1SudOKHAEec0SIRCfiuIzTcF7VGj/CaTT6gY4eWxvA==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-environment-visitor': 7.18.6
'@babel/helper-module-imports': 7.18.6
'@babel/helper-module-imports': 7.21.4
'@babel/helper-simple-access': 7.18.6
'@babel/helper-split-export-declaration': 7.18.6
'@babel/helper-validator-identifier': 7.18.6
'@babel/helper-validator-identifier': 7.19.1
'@babel/template': 7.18.6
'@babel/traverse': 7.18.8
'@babel/types': 7.18.8
'@babel/types': 7.21.5
transitivePeerDependencies:
- supports-color
dev: true
@ -260,7 +271,7 @@ packages:
resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.18.8
'@babel/types': 7.21.5
dev: true
/@babel/helper-plugin-utils/7.18.6:
@ -268,6 +279,11 @@ packages:
engines: {node: '>=6.9.0'}
dev: true
/@babel/helper-plugin-utils/7.21.5:
resolution: {integrity: sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==}
engines: {node: '>=6.9.0'}
dev: true
/@babel/helper-remap-async-to-generator/7.18.6_@babel+core@7.18.6:
resolution: {integrity: sha512-z5wbmV55TveUPZlCLZvxWHtrjuJd+8inFhk7DG0WW87/oJuGDcjDiu7HIvGcpf5464L6xKCg3vNkmlVVz9hwyQ==}
engines: {node: '>=6.9.0'}
@ -278,7 +294,7 @@ packages:
'@babel/helper-annotate-as-pure': 7.18.6
'@babel/helper-environment-visitor': 7.18.6
'@babel/helper-wrap-function': 7.18.6
'@babel/types': 7.18.8
'@babel/types': 7.21.5
transitivePeerDependencies:
- supports-color
dev: true
@ -291,7 +307,7 @@ packages:
'@babel/helper-member-expression-to-functions': 7.18.6
'@babel/helper-optimise-call-expression': 7.18.6
'@babel/traverse': 7.18.8
'@babel/types': 7.18.8
'@babel/types': 7.21.5
transitivePeerDependencies:
- supports-color
dev: true
@ -300,25 +316,30 @@ packages:
resolution: {integrity: sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.18.8
'@babel/types': 7.21.5
dev: true
/@babel/helper-skip-transparent-expression-wrappers/7.18.6:
resolution: {integrity: sha512-4KoLhwGS9vGethZpAhYnMejWkX64wsnHPDwvOsKWU6Fg4+AlK2Jz3TyjQLMEPvz+1zemi/WBdkYxCD0bAfIkiw==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.18.8
'@babel/types': 7.21.5
dev: true
/@babel/helper-split-export-declaration/7.18.6:
resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.18.8
'@babel/types': 7.21.5
dev: true
/@babel/helper-validator-identifier/7.18.6:
resolution: {integrity: sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==}
/@babel/helper-string-parser/7.21.5:
resolution: {integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==}
engines: {node: '>=6.9.0'}
dev: true
/@babel/helper-validator-identifier/7.19.1:
resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
engines: {node: '>=6.9.0'}
dev: true
@ -334,7 +355,7 @@ packages:
'@babel/helper-function-name': 7.18.6
'@babel/template': 7.18.6
'@babel/traverse': 7.18.8
'@babel/types': 7.18.8
'@babel/types': 7.21.5
transitivePeerDependencies:
- supports-color
dev: true
@ -345,7 +366,7 @@ packages:
dependencies:
'@babel/template': 7.18.6
'@babel/traverse': 7.18.8
'@babel/types': 7.18.8
'@babel/types': 7.21.5
transitivePeerDependencies:
- supports-color
dev: true
@ -354,7 +375,7 @@ packages:
resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-validator-identifier': 7.18.6
'@babel/helper-validator-identifier': 7.19.1
chalk: 2.4.2
js-tokens: 4.0.0
dev: true
@ -364,7 +385,7 @@ packages:
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
'@babel/types': 7.18.8
'@babel/types': 7.21.5
dev: true
/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.18.6:
@ -374,7 +395,7 @@ packages:
'@babel/core': ^7.0.0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.18.6_@babel+core@7.18.6:
@ -384,7 +405,7 @@ packages:
'@babel/core': ^7.13.0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
'@babel/helper-skip-transparent-expression-wrappers': 7.18.6
'@babel/plugin-proposal-optional-chaining': 7.18.6_@babel+core@7.18.6
dev: true
@ -397,7 +418,7 @@ packages:
dependencies:
'@babel/core': 7.18.6
'@babel/helper-environment-visitor': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
'@babel/helper-remap-async-to-generator': 7.18.6_@babel+core@7.18.6
'@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.18.6
transitivePeerDependencies:
@ -412,7 +433,7 @@ packages:
dependencies:
'@babel/core': 7.18.6
'@babel/helper-create-class-features-plugin': 7.18.6_@babel+core@7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
transitivePeerDependencies:
- supports-color
dev: true
@ -425,7 +446,7 @@ packages:
dependencies:
'@babel/core': 7.18.6
'@babel/helper-create-class-features-plugin': 7.18.6_@babel+core@7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
'@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.18.6
transitivePeerDependencies:
- supports-color
@ -438,7 +459,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
'@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.18.6
dev: true
@ -449,7 +470,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
'@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.18.6
dev: true
@ -460,7 +481,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
'@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.18.6
dev: true
@ -471,7 +492,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
'@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.18.6
dev: true
@ -482,7 +503,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
'@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.18.6
dev: true
@ -493,7 +514,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
'@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.18.6
dev: true
@ -506,7 +527,7 @@ packages:
'@babel/compat-data': 7.18.8
'@babel/core': 7.18.6
'@babel/helper-compilation-targets': 7.18.6_@babel+core@7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
'@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.18.6
'@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.18.6
dev: true
@ -518,7 +539,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
'@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.18.6
dev: true
@ -529,7 +550,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
'@babel/helper-skip-transparent-expression-wrappers': 7.18.6
'@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.18.6
dev: true
@ -542,7 +563,7 @@ packages:
dependencies:
'@babel/core': 7.18.6
'@babel/helper-create-class-features-plugin': 7.18.6_@babel+core@7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
transitivePeerDependencies:
- supports-color
dev: true
@ -556,7 +577,7 @@ packages:
'@babel/core': 7.18.6
'@babel/helper-annotate-as-pure': 7.18.6
'@babel/helper-create-class-features-plugin': 7.18.6_@babel+core@7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
'@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.18.6
transitivePeerDependencies:
- supports-color
@ -570,7 +591,7 @@ packages:
dependencies:
'@babel/core': 7.18.6
'@babel/helper-create-regexp-features-plugin': 7.18.6_@babel+core@7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.18.6:
@ -579,7 +600,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.18.6:
@ -588,7 +609,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.18.6:
@ -598,7 +619,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.18.6:
@ -607,7 +628,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.18.6:
@ -616,7 +637,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-syntax-import-assertions/7.18.6_@babel+core@7.18.6:
@ -626,7 +647,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.18.6:
@ -635,7 +656,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.18.6:
@ -654,7 +675,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.18.6:
@ -663,7 +684,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.18.6:
@ -672,7 +693,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.18.6:
@ -681,7 +702,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.18.6:
@ -690,7 +711,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.18.6:
@ -699,7 +720,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.18.6:
@ -709,7 +730,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.18.6:
@ -719,7 +740,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-transform-arrow-functions/7.18.6_@babel+core@7.18.6:
@ -729,7 +750,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-transform-async-to-generator/7.18.6_@babel+core@7.18.6:
@ -739,8 +760,8 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-module-imports': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-module-imports': 7.21.4
'@babel/helper-plugin-utils': 7.21.5
'@babel/helper-remap-async-to-generator': 7.18.6_@babel+core@7.18.6
transitivePeerDependencies:
- supports-color
@ -753,7 +774,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-transform-block-scoping/7.18.6_@babel+core@7.18.6:
@ -763,7 +784,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-transform-classes/7.18.8_@babel+core@7.18.6:
@ -777,7 +798,7 @@ packages:
'@babel/helper-environment-visitor': 7.18.6
'@babel/helper-function-name': 7.18.6
'@babel/helper-optimise-call-expression': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
'@babel/helper-replace-supers': 7.18.6
'@babel/helper-split-export-declaration': 7.18.6
globals: 11.12.0
@ -792,7 +813,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-transform-destructuring/7.18.6_@babel+core@7.18.6:
@ -802,7 +823,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.18.6:
@ -813,7 +834,7 @@ packages:
dependencies:
'@babel/core': 7.18.6
'@babel/helper-create-regexp-features-plugin': 7.18.6_@babel+core@7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-transform-duplicate-keys/7.18.6_@babel+core@7.18.6:
@ -823,7 +844,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.18.6:
@ -834,7 +855,7 @@ packages:
dependencies:
'@babel/core': 7.18.6
'@babel/helper-builder-binary-assignment-operator-visitor': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-transform-for-of/7.18.8_@babel+core@7.18.6:
@ -844,7 +865,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-transform-function-name/7.18.6_@babel+core@7.18.6:
@ -856,7 +877,7 @@ packages:
'@babel/core': 7.18.6
'@babel/helper-compilation-targets': 7.18.6_@babel+core@7.18.6
'@babel/helper-function-name': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-transform-literals/7.18.6_@babel+core@7.18.6:
@ -866,7 +887,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.18.6:
@ -876,7 +897,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-transform-modules-amd/7.18.6_@babel+core@7.18.6:
@ -887,7 +908,7 @@ packages:
dependencies:
'@babel/core': 7.18.6
'@babel/helper-module-transforms': 7.18.8
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
babel-plugin-dynamic-import-node: 2.3.3
transitivePeerDependencies:
- supports-color
@ -901,7 +922,7 @@ packages:
dependencies:
'@babel/core': 7.18.6
'@babel/helper-module-transforms': 7.18.8
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
'@babel/helper-simple-access': 7.18.6
babel-plugin-dynamic-import-node: 2.3.3
transitivePeerDependencies:
@ -917,8 +938,8 @@ packages:
'@babel/core': 7.18.6
'@babel/helper-hoist-variables': 7.18.6
'@babel/helper-module-transforms': 7.18.8
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-validator-identifier': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
'@babel/helper-validator-identifier': 7.19.1
babel-plugin-dynamic-import-node: 2.3.3
transitivePeerDependencies:
- supports-color
@ -932,7 +953,7 @@ packages:
dependencies:
'@babel/core': 7.18.6
'@babel/helper-module-transforms': 7.18.8
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
transitivePeerDependencies:
- supports-color
dev: true
@ -945,7 +966,7 @@ packages:
dependencies:
'@babel/core': 7.18.6
'@babel/helper-create-regexp-features-plugin': 7.18.6_@babel+core@7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-transform-new-target/7.18.6_@babel+core@7.18.6:
@ -955,7 +976,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-transform-object-super/7.18.6_@babel+core@7.18.6:
@ -965,7 +986,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
'@babel/helper-replace-supers': 7.18.6
transitivePeerDependencies:
- supports-color
@ -978,7 +999,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.18.6:
@ -988,7 +1009,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-transform-react-display-name/7.18.6_@babel+core@7.18.6:
@ -1043,7 +1064,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
regenerator-transform: 0.15.0
dev: true
@ -1054,7 +1075,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.18.6:
@ -1064,7 +1085,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-transform-spread/7.18.6_@babel+core@7.18.6:
@ -1074,7 +1095,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
'@babel/helper-skip-transparent-expression-wrappers': 7.18.6
dev: true
@ -1085,7 +1106,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-transform-template-literals/7.18.6_@babel+core@7.18.6:
@ -1095,7 +1116,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-transform-typeof-symbol/7.18.6_@babel+core@7.18.6:
@ -1105,7 +1126,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-transform-unicode-escapes/7.18.6_@babel+core@7.18.6:
@ -1115,7 +1136,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.18.6:
@ -1126,7 +1147,7 @@ packages:
dependencies:
'@babel/core': 7.18.6
'@babel/helper-create-regexp-features-plugin': 7.18.6_@babel+core@7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
dev: true
/@babel/preset-env/7.18.6_@babel+core@7.18.6:
@ -1221,10 +1242,10 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-plugin-utils': 7.18.6
'@babel/helper-plugin-utils': 7.21.5
'@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.18.6
'@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.18.6
'@babel/types': 7.18.8
'@babel/types': 7.21.5
esutils: 2.0.3
dev: true
@ -1261,7 +1282,7 @@ packages:
resolution: {integrity: sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==}
engines: {node: '>=6.9.0'}
dependencies:
regenerator-runtime: 0.13.9
regenerator-runtime: 0.13.11
dev: true
/@babel/template/7.18.6:
@ -1270,7 +1291,7 @@ packages:
dependencies:
'@babel/code-frame': 7.18.6
'@babel/parser': 7.18.8
'@babel/types': 7.18.8
'@babel/types': 7.21.5
dev: true
/@babel/traverse/7.18.8:
@ -1284,7 +1305,7 @@ packages:
'@babel/helper-hoist-variables': 7.18.6
'@babel/helper-split-export-declaration': 7.18.6
'@babel/parser': 7.18.8
'@babel/types': 7.18.8
'@babel/types': 7.21.5
debug: 4.3.4
globals: 11.12.0
transitivePeerDependencies:
@ -1295,7 +1316,16 @@ packages:
resolution: {integrity: sha512-qwpdsmraq0aJ3osLJRApsc2ouSJCdnMeZwB0DhbtHAtRpZNZCdlbRnHIgcRKzdE1g0iOGg644fzjOBcdOz9cPw==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-validator-identifier': 7.18.6
'@babel/helper-validator-identifier': 7.19.1
to-fast-properties: 2.0.0
dev: true
/@babel/types/7.21.5:
resolution: {integrity: sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-string-parser': 7.21.5
'@babel/helper-validator-identifier': 7.19.1
to-fast-properties: 2.0.0
dev: true
@ -1651,6 +1681,12 @@ packages:
hasBin: true
dev: true
/acorn/8.8.2:
resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
engines: {node: '>=0.4.0'}
hasBin: true
dev: true
/ajv-keywords/3.5.2_ajv@6.12.6:
resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
peerDependencies:
@ -1818,7 +1854,7 @@ packages:
dependencies:
'@babel/compat-data': 7.18.8
'@babel/core': 7.18.6
'@babel/helper-define-polyfill-provider': 0.3.1_@babel+core@7.18.6
'@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.18.6
semver: 6.3.0
transitivePeerDependencies:
- supports-color
@ -1830,8 +1866,8 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-define-polyfill-provider': 0.3.1_@babel+core@7.18.6
core-js-compat: 3.23.4
'@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.18.6
core-js-compat: 3.30.2
transitivePeerDependencies:
- supports-color
dev: true
@ -1842,7 +1878,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.18.6
'@babel/helper-define-polyfill-provider': 0.3.1_@babel+core@7.18.6
'@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.18.6
transitivePeerDependencies:
- supports-color
dev: true
@ -1904,10 +1940,21 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
caniuse-lite: 1.0.30001359
electron-to-chromium: 1.4.185
node-releases: 2.0.5
update-browserslist-db: 1.0.4_browserslist@4.21.1
caniuse-lite: 1.0.30001487
electron-to-chromium: 1.4.396
node-releases: 2.0.10
update-browserslist-db: 1.0.11_browserslist@4.21.1
dev: true
/browserslist/4.21.5:
resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
caniuse-lite: 1.0.30001487
electron-to-chromium: 1.4.396
node-releases: 2.0.10
update-browserslist-db: 1.0.11_browserslist@4.21.5
dev: true
/buffer-from/1.1.2:
@ -1949,6 +1996,10 @@ packages:
resolution: {integrity: sha512-Xln/BAsPzEuiVLgJ2/45IaqD9jShtk3Y33anKb4+yLwQzws3+v6odKfpgES/cDEaZMLzSChpIGdbOYtH9MyuHw==}
dev: true
/caniuse-lite/1.0.30001487:
resolution: {integrity: sha512-83564Z3yWGqXsh2vaH/mhXfEM0wX+NlBCm1jYHOb97TrTWJEmPTccZgeLTPBUUb0PNVo+oomb7wkimZBIERClA==}
dev: true
/chalk/2.4.2:
resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
engines: {node: '>=4'}
@ -2083,10 +2134,16 @@ packages:
/core-js-compat/3.23.4:
resolution: {integrity: sha512-RkSRPe+JYEoflcsuxJWaiMPhnZoFS51FcIxm53k4KzhISCBTmaGlto9dTIrYuk0hnJc3G6pKufAKepHnBq6B6Q==}
dependencies:
browserslist: 4.21.1
browserslist: 4.21.5
semver: 7.0.0
dev: true
/core-js-compat/3.30.2:
resolution: {integrity: sha512-nriW1nuJjUgvkEjIot1Spwakz52V9YkYHZAQG6A1eCgC8AA1p0zngrQEP9R0+V6hji5XilWKG1Bd0YRppmGimA==}
dependencies:
browserslist: 4.21.5
dev: true
/cosmiconfig/7.0.1:
resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==}
engines: {node: '>=10'}
@ -2245,6 +2302,10 @@ packages:
resolution: {integrity: sha512-9kV/isoOGpKkBt04yYNaSWIBn3187Q5VZRtoReq8oz5NY/A4XmU6cAoqgQlDp7kKJCZMRjWZ8nsQyxfpFHvfyw==}
dev: true
/electron-to-chromium/1.4.396:
resolution: {integrity: sha512-pqKTdqp/c5vsrc0xUPYXTDBo9ixZuGY8es4ZOjjd6HD6bFYbu5QA09VoW3fkY4LF1T0zYk86lN6bZnNlBuOpdQ==}
dev: true
/emoji-regex/8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
dev: true
@ -3453,6 +3514,10 @@ packages:
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
dev: true
/node-releases/2.0.10:
resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==}
dev: true
/node-releases/2.0.5:
resolution: {integrity: sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==}
dev: true
@ -3988,8 +4053,8 @@ packages:
resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
dev: true
/regenerator-runtime/0.13.9:
resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==}
/regenerator-runtime/0.13.11:
resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
dev: true
/regenerator-transform/0.15.0:
@ -4481,7 +4546,7 @@ packages:
hasBin: true
dependencies:
'@jridgewell/source-map': 0.3.2
acorn: 8.8.0
acorn: 8.8.2
commander: 2.20.3
source-map-support: 0.5.21
dev: true
@ -4575,6 +4640,28 @@ packages:
engines: {node: '>= 10.0.0'}
dev: true
/update-browserslist-db/1.0.11_browserslist@4.21.1:
resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
dependencies:
browserslist: 4.21.1
escalade: 3.1.1
picocolors: 1.0.0
dev: true
/update-browserslist-db/1.0.11_browserslist@4.21.5:
resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
dependencies:
browserslist: 4.21.5
escalade: 3.1.1
picocolors: 1.0.0
dev: true
/update-browserslist-db/1.0.4_browserslist@4.21.0:
resolution: {integrity: sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==}
hasBin: true
@ -4586,17 +4673,6 @@ packages:
picocolors: 1.0.0
dev: true
/update-browserslist-db/1.0.4_browserslist@4.21.1:
resolution: {integrity: sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
dependencies:
browserslist: 4.21.1
escalade: 3.1.1
picocolors: 1.0.0
dev: true
/uri-js/4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
dependencies:

130
preload/src/api/fetch.js Normal file
View File

@ -0,0 +1,130 @@
import * as https from "https";
import * as http from "http";
const MAX_DEFAULT_REDIRECTS = 20;
const redirectCodes = new Set([301, 302, 307, 308]);
/**
* @typedef {Object} FetchOptions
* @property {"GET" | "PUT" | "POST" | "DELETE"} [method] - Request method.
* @property {Record<string, string>} [headers] - Request headers.
* @property {"manual" | "follow"} [redirect] - Whether to follow redirects.
* @property {number} [maxRedirects] - Maximum amount of redirects to be followed.
* @property {AbortSignal} [signal] - Signal to abruptly cancel the request
* @property {Uint8Array | string} [body] - Defines a request body. Data must be serializable.
*/
/**
* @param {string} url
* @param {FetchOptions} options
*/
export function nativeFetch(url, options) {
let state = "PENDING";
const data = {content: [], headers: null, statusCode: null, url: url, statusText: "", redirected: false};
const listeners = new Set();
const errors = new Set();
/** * @param {URL} url */
const execute = (url, options, redirectCount = 0) => {
const Module = url.protocol === "http" ? http : https;
const req = Module.request(url.href, {
headers: options.headers ?? {},
method: options.method ?? "GET"
}, res => {
if (redirectCodes.has(res.statusCode) && res.headers.location && options.redirect !== "manual") {
redirectCount++;
if (redirectCount >= (options.maxRedirects ?? MAX_DEFAULT_REDIRECTS)) {
state = "ABORTED";
const error = new Error(`Maximum amount of redirects reached (${options.maxRedirects ?? MAX_DEFAULT_REDIRECTS})`);
errors.forEach(e => e(error));
return;
}
let final;
try {
final = new URL(res.headers.location);
}
catch (error) {
state = "ABORTED";
errors.forEach(e => e(error));
return;
}
for (const [key, value] of new URL(url).searchParams.entries()) {
final.searchParams.set(key, value);
}
return execute(final, options, redirectCount);
}
res.on("data", chunk => data.content.push(chunk));
res.on("end", () => {
data.content = Buffer.concat(data.content);
data.headers = res.headers;
data.statusCode = res.statusCode;
data.url = url.toString();
data.statusText = res.statusMessage;
data.redirected = redirectCount > 0;
state = "DONE";
listeners.forEach(listener => listener());
});
res.on("error", error => {
state = "ABORTED";
errors.forEach(e => e(error));
});
});
if (options.body) {
try {req.write(options.body)}
catch (error) {
state = "ABORTED";
errors.forEach(e => e(error));
}
finally {
req.end();
}
}
else {
req.end();
}
if (options.signal) {
options.signal.addEventListener("abort", () => {
req.end();
state = "ABORTED";
});
}
};
try {
const parsed = new URL(url);
execute(parsed, options);
}
catch (error) {
state = "ABORTED";
errors.forEach(e => e(error));
}
return {
onComplete(listener) {
listeners.add(listener);
},
onError(listener) {
errors.add(listener);
},
readData() {
switch (state) {
case "PENDING":
throw new Error("Cannot read data before request is done!");
case "ABORTED":
throw new Error("Request was aborted.");
case "DONE":
return data;
}
}
};
}

View File

@ -1,6 +1,6 @@
import * as https from "https";
const methods = ["get", "put", "post", "delete"];
const methods = ["get", "put", "post", "delete", "head"];
const redirectCodes = new Set([301, 302, 307, 308]);
const headersToClone = ["statusCode", "statusMessage", "url", "headers", "method", "aborted", "complete", "rawHeaders", "end"];
@ -34,7 +34,15 @@ const makeRequest = (url, options, callback, setReq) => {
req.end();
});
});
req.end();
if (options.formData) {
// Make sure to close the socket.
try {req.write(options.formData);}
finally {req.end();}
} else {
req.end();
}
};
const request = function (url, options, callback) {

View File

@ -3,6 +3,7 @@ export {default as https} from "./https";
export * as electron from "./electron";
export * as crypto from "./crypto";
export * as vm from "./vm";
export * from "./fetch";
// We can expose that without any issues.
export * as path from "path";

View File

@ -1,23 +0,0 @@
{
"presets": [
"@babel/react",
["@babel/env",
{
"targets": {
"node": "14.16.0",
"chrome": "91"
}
}]
],
"plugins": [[
"module-resolver",
{
"alias": {
"builtins": "./src/builtins/builtins.js",
"data": "./src/data/data.js",
"modules": "./src/modules/modules.js",
"common": "../common"
}
}
]]
}

31
renderer/.babelrc.js Normal file
View File

@ -0,0 +1,31 @@
const path = require("path");
module.exports = {
presets: [
"@babel/react",
["@babel/env",
{
targets: {
node: "14.16.0",
chrome: "91"
}
}]
],
plugins: [[
"module-resolver",
{
alias: {
"@assets": path.join(__dirname, "..", "assets"),
"@common": path.join(__dirname, "..", "common"),
"@builtins": path.join(__dirname, "src", "builtins"),
"@data": path.join(__dirname, "src", "data"),
"@modules": path.join(__dirname, "src", "modules"),
"@polyfill": path.join(__dirname, "src", "polyfill"),
"@structs": path.join(__dirname, "src", "structs"),
"@styles": path.join(__dirname, "src", "styles"),
"@ui": path.join(__dirname, "src", "ui"),
}
}
]]
}

View File

@ -4,10 +4,15 @@
"allowSyntheticDefaultImports": false,
"baseUrl": "./",
"paths": {
"modules": ["./src/modules/modules.js"],
"builtins": ["./src/builtins/builtins.js"],
"data": ["./src/data/data.js"],
"common": ["../common"]
"@assets/*": ["../assets/*"],
"@common/*": ["../common/*"],
"@builtins/*": ["./src/builtins/*"],
"@data/*": ["./src/data/*"],
"@modules/*": ["./src/modules/*"],
"@polyfill/*": ["./src/polyfill/*"],
"@structs/*": ["./src/structs/*"],
"@styles/*": ["./src/styles/*"],
"@ui/*": ["./src/ui/*"]
}
},
"exclude": ["node_modules"]

View File

@ -1,12 +1,23 @@
import Builtin from "../structs/builtin";
import {Settings, DataStore, React, WebpackModules, Events, DOMManager, Strings, DiscordModules} from "modules";
import CSSEditor from "../ui/customcss/csseditor";
import FloatingWindows from "../ui/floatingwindows";
import SettingsTitle from "../ui/settings/title";
import Utilities from "../modules/utilities";
import fs from "fs";
import electron from "electron";
import Builtin from "@structs/builtin";
import Settings from "@modules/settingsmanager";
import DataStore from "@modules/datastore";
import React from "@modules/react";
import WebpackModules from "@modules/webpackmodules";
import Events from "@modules/emitter";
import DOMManager from "@modules/dommanager";
import Strings from "@modules/strings";
import DiscordModules from "@modules/discordmodules";
import Utilities from "@modules/utilities";
import CSSEditor from "@ui/customcss/csseditor";
import FloatingWindows from "@ui/floatingwindows";
import SettingsTitle from "@ui/settings/title";
const fs = require("fs");
const electron = require("electron");
const UserSettings = WebpackModules.getByProps("updateAccount");
const Dispatcher = DiscordModules.Dispatcher;

View File

@ -1,4 +1,4 @@
import Builtin from "../../structs/builtin";
import Builtin from "@structs/builtin";
export default new class DeveloperMode extends Builtin {
get name() {return "Debugger";}

View File

@ -1,7 +1,8 @@
const fs = require("fs");
const path = require("path");
import Builtin from "../../structs/builtin";
import DataStore from "../../modules/datastore";
import fs from "fs";
import path from "path";
import Builtin from "@structs/builtin";
import DataStore from "@modules/datastore";
const timestamp = () => new Date().toISOString().replace("T", " ").replace("Z", "");

View File

@ -1,5 +1,6 @@
import Builtin from "../../structs/builtin";
import IPC from "../../modules/ipc";
import Builtin from "@structs/builtin";
import IPC from "@modules/ipc";
export default new class DevToolsListener extends Builtin {
get name() {return "DevTools";}

View File

@ -1,6 +1,6 @@
import Builtin from "../../structs/builtin";
import WebpackModules from "../../modules/webpackmodules";
// import IPC from "../../modules/ipc";
import Builtin from "@structs/builtin";
import WebpackModules from "@modules/webpackmodules";
export default new class StopDevToolsWarning extends Builtin {
get name() {return "StopDevToolsWarning";}

View File

@ -1,5 +1,6 @@
import Builtin from "../../structs/builtin";
import IPC from "../../modules/ipc";
import Builtin from "@structs/builtin";
import IPC from "@modules/ipc";
export default new class InspectElement extends Builtin {
get name() {return "InspectElementHotkey";}

View File

@ -1,6 +1,10 @@
import Builtin from "../../structs/builtin";
import Modals from "../../ui/modals";
import {Strings, IPC} from "modules";
import Builtin from "@structs/builtin";
import Strings from "@modules/strings";
import IPC from "@modules/ipc";
import Modals from "@ui/modals";
export default new class ReactDevTools extends Builtin {
get name() {return "ReactDevTools";}

View File

@ -1,6 +1,10 @@
import Builtin from "../../structs/builtin";
import Modals from "../../ui/modals";
import {Strings, IPC} from "modules";
import Builtin from "@structs/builtin";
import Strings from "@modules/strings";
import IPC from "@modules/ipc";
import Modals from "@ui/modals";
export default new class MediaKeys extends Builtin {
get name() {return "DisableMediaKeys";}

View File

@ -1,5 +1,6 @@
import Builtin from "../../structs/builtin";
import {DiscordModules} from "modules";
import Builtin from "@structs/builtin";
import DiscordModules from "@modules/discordmodules";
export default new class VoiceDisconnect extends Builtin {
get name() {return "VoiceDisconnect";}

View File

@ -1,6 +1,7 @@
import Builtin from "../../structs/builtin";
import IPC from "../../modules/ipc";
import DataStore from "../../modules/datastore";
import Builtin from "@structs/builtin";
import IPC from "@modules/ipc";
import DataStore from "@modules/datastore";
const DISCORD_MIN_HEIGHT = 500;
const DISCORD_MIN_WIDTH = 940;

View File

@ -1,6 +1,10 @@
import Builtin from "../../structs/builtin";
import Modals from "../../ui/modals";
import {Strings, IPC} from "modules";
import Builtin from "@structs/builtin";
import Strings from "@modules/strings";
import IPC from "@modules/ipc";
import Modals from "@ui/modals";
export default new class WindowTransparency extends Builtin {
get name() {return "WindowTransparency";}

View File

@ -1,3 +0,0 @@
export {default as Config} from "./config";
export {default as SettingsConfig} from "./settings";
export {default as Changelog} from "./changelog";

View File

@ -1,8 +1,8 @@
import require from "./polyfill"; // eslint-disable-line no-unused-vars
import secure from "./secure";
import LoadingIcon from "./loadingicon";
import BetterDiscord from "./modules/core";
import BdApi from "./modules/api/index";
import BetterDiscord from "@modules/core";
import BdApi from "@modules/api/index";
// Perform some setup
secure();

View File

@ -1,19 +1,22 @@
import Logger from "common/logger";
import path from "path";
import fs from "fs";
import {shell} from "electron";
import Logger from "@common/logger";
import AddonError from "@structs/addonerror";
import Settings from "./settingsmanager";
import Events from "./emitter";
import DataStore from "./datastore";
import AddonError from "../structs/addonerror";
import Toasts from "../ui/toasts";
import DiscordModules from "./discordmodules";
import React from "./react";
import Strings from "./strings";
import AddonEditor from "../ui/misc/addoneditor";
import FloatingWindows from "../ui/floatingwindows";
const React = DiscordModules.React;
import AddonEditor from "@ui/misc/addoneditor";
import FloatingWindows from "@ui/floatingwindows";
import Toasts from "@ui/toasts";
const path = require("path");
const fs = require("fs");
const shell = require("electron").shell;
const openItem = shell.openItem || shell.openPath;
const splitRegex = /[^\S\r\n]*?\r?(?:\r\n|\n)[^\S\r\n]*?\*[^\S\r\n]?/;

View File

@ -1,7 +1,8 @@
import WebpackModules from "../webpackmodules";
import Patcher from "../patcher";
import Logger from "common/logger";
import {React} from "../modules";
import WebpackModules from "@modules/webpackmodules";
import Patcher from "@modules/patcher";
import Logger from "@common/logger";
import React from "@modules/react";
let startupComplete = false;

View File

@ -1,4 +1,5 @@
import DataStore from "../datastore";
import DataStore from "@modules/datastore";
/**
* `Data` is a simple utility class for the management of plugin data. An instance is available on {@link BdApi}.

View File

@ -1,4 +1,5 @@
import DOMManager from "../dommanager";
import DOMManager from "@modules/dommanager";
/**
* `DOM` is a simple utility class for dom manipulation. An instance is available on {@link BdApi}.

View File

@ -0,0 +1,85 @@
import Remote from "../../polyfill/remote";
const methods = new Set(["GET", "PUT", "POST", "DELETE"]);
class FetchResponse extends Response {
constructor(options) {
super(options.content, {
headers: new Headers(options.headers),
method: options.method ?? "GET",
body: options.content,
...options
});
this._options = options;
}
get url() {return this._options.url;}
get redirected() {return this._options.redirected;}
}
const convertSignal = signal => {
const listeners = new Set();
signal.addEventListener("abort", () => {
listeners.forEach(l => l());
});
return {
addEventListener(_, listener) {
listeners.add(listener);
}
};
};
/**
* @typedef {Object} FetchOptions
* @property {"GET" | "PUT" | "POST" | "DELETE"} [method] - Request method.
* @property {Record<string, string>} [headers] - Request headers.
* @property {"manual" | "follow"} [redirect] - Whether to follow redirects.
* @property {number} [maxRedirects] - Maximum amount of redirects to be followed.
* @property {AbortSignal} [signal] - Signal to abruptly cancel the request
* @property {Uint8Array | string} [body] - Defines a request body. Data must be serializable.
*/
/**
* @param {string} url
* @param {FetchOptions} options
* @returns {Promise<FetchResponse>}
*/
export default function fetch(url, options = {}) {
return new Promise((resolve, reject) => {
const data = {};
if (typeof options.headers === "object") {
data.headers = options.headers instanceof Headers ? Object.fromEntries(options.headers.entries()) : options.headers;
}
if (typeof options.body === "string" || options.body instanceof Uint8Array) data.body = options.body;
if (typeof options.method === "string" && methods.has(options.method)) data.method = options.method;
if (options.signal instanceof AbortSignal) data.signal = convertSignal(options.signal);
const ctx = Remote.nativeFetch(url, data);
ctx.onError(error => {
reject(error);
});
ctx.onComplete(() => {
try {
const data = ctx.readData();
const req = new FetchResponse({
method: options.method ?? "GET",
status: data.statusCode,
...options,
...data
});
resolve(req);
} catch (error) {
reject(error);
}
});
});
}

View File

@ -1,6 +1,8 @@
import PluginManager from "../pluginmanager";
import ThemeManager from "../thememanager";
import Logger from "common/logger";
import Logger from "@common/logger";
import PluginManager from "@modules/pluginmanager";
import ThemeManager from "@modules/thememanager";
import DiscordModules from "@modules/discordmodules";
import AddonAPI from "./addonapi";
import Data from "./data";
@ -12,7 +14,7 @@ import Utils from "./utils";
import Webpack from "./webpack";
import * as Legacy from "./legacy";
import ContextMenu from "./contextmenu";
import {DiscordModules} from "modules";
import fetch from "./fetch";
const bounded = new Map();
const PluginAPI = new AddonAPI(PluginManager);
@ -57,6 +59,7 @@ export default class BdApi {
Components = {
get Tooltip() {return DiscordModules.Tooltip;}
}
Net = {fetch};
}
// Add legacy functions
@ -126,6 +129,9 @@ BdApi.Components = {
get Tooltip() {return DiscordModules.Tooltip;}
};
BdApi.Net = {fetch};
Object.freeze(BdApi);
Object.freeze(BdApi.Net);
Object.freeze(BdApi.prototype);
Object.freeze(BdApi.Components);

View File

@ -1,15 +1,18 @@
import {Config} from "data";
import WebpackModules from "../webpackmodules";
import DiscordModules from "../discordmodules";
import DataStore from "../datastore";
import DOMManager from "../dommanager";
import Toasts from "../../ui/toasts";
import Notices from "../../ui/notices";
import Modals from "../../ui/modals";
import Settings from "../settingsmanager";
import Logger from "common/logger";
import Patcher from "../patcher";
import ipc from "../ipc";
import Logger from "@common/logger";
import Config from "@data/config";
import WebpackModules from "@modules/webpackmodules";
import DiscordModules from "@modules/discordmodules";
import DataStore from "@modules/datastore";
import DOMManager from "@modules/dommanager";
import Settings from "@modules/settingsmanager";
import Patcher from "@modules/patcher";
import ipc from "@modules/ipc";
import Toasts from "@ui/toasts";
import Notices from "@ui/notices";
import Modals from "@ui/modals";
/**
* The React module being used inside Discord.

View File

@ -1,5 +1,7 @@
import Logger from "common/logger";
import {default as MainPatcher} from "../patcher";
import Logger from "@common/logger";
import {default as MainPatcher} from "@modules/patcher";
/**
* `Patcher` is a utility class for modifying existing functions. Instance is accessible through the {@link BdApi}.

View File

@ -1,4 +1,5 @@
import DiscordModules from "../discordmodules";
import DiscordModules from "@modules//discordmodules";
/**
* `ReactUtils` is a utility class for interacting with React internals. Instance is accessible through the {@link BdApi}.

View File

@ -1,8 +1,10 @@
import Modals from "../../ui/modals";
import Toasts from "../../ui/toasts";
import Notices from "../../ui/notices";
import Tooltip from "../../ui/tooltip";
import ipc from "../ipc";
import ipc from "@modules/ipc";
import Modals from "@ui/modals";
import Toasts from "@ui/toasts";
import Notices from "@ui/notices";
import Tooltip from "@ui/tooltip";
/**
* `UI` is a utility class for creating user interfaces. Instance is accessible through the {@link BdApi}.

View File

@ -1,4 +1,5 @@
import Utilities from "../utilities";
import Utilities from "@modules/utilities";
/**
* `Utils` is a utility containing commonly reused functions. Instance is accessible through the {@link BdApi}.

View File

@ -1,5 +1,19 @@
import Logger from "common/logger";
import WebpackModules, {Filters} from "../webpackmodules";
import Logger from "@common/logger";
import WebpackModules, {Filters} from "@modules/webpackmodules";
const getOptions = (args, defaultOptions = {}) => {
if (args.length > 1 &&
typeof(args[args.length - 1]) === "object" &&
!Array.isArray(args[args.length - 1]) &&
args[args.length - 1] !== null
) {
Object.assign(defaultOptions, args.pop());
}
return defaultOptions;
};
/**
* `Webpack` is a utility class for getting internal webpack modules. Instance is accessible through the {@link BdApi}.
@ -9,6 +23,10 @@ import WebpackModules, {Filters} from "../webpackmodules";
* @name Webpack
*/
const Webpack = {
/**
* A Proxy that returns the module source by ID.
*/
modules: WebpackModules.modules,
/**
* Series of {@link Filters} to be used for finding webpack modules.
@ -16,19 +34,29 @@ const Webpack = {
* @memberof Webpack
*/
Filters: {
/**
* @deprecated
*/
byProps(...props) {return Filters.byKeys(props);},
/**
* Generates a function that filters by a set of properties.
* @param {...string} props List of property names
* @param {...string} keys List of property names
* @returns {function} A filter that checks for a set of properties
*/
byProps(...props) {return Filters.byProps(props);},
byKeys(...keys) {return Filters.byKeys(keys);},
/**
* @deprecated
*/
byPrototypeFields(...props) {return Filters.byPrototypeKeys(props);},
/**
* Generates a function that filters by a set of properties on the object's prototype.
* @param {...string} props List of property names
* @returns {function} A filter that checks for a set of properties on the object's prototype.
*/
byPrototypeFields(...props) {return Filters.byPrototypeFields(props);},
byPrototypeKeys(...props) {return Filters.byPrototypeKeys(props);},
/**
* Generates a function that filters by a regex.
@ -52,6 +80,13 @@ const Webpack = {
*/
byDisplayName(name) {return Filters.byDisplayName(name);},
/**
* Generates a function that filters by a specific internal Store name.
* @param {string} name Name the store should have
* @returns {function} A filter that checks for a Store name match
*/
byStoreName(name) {return Filters.byStoreName(name);},
/**
* Generates a combined function from a list of filters.
* @param {...function} filters A list of filters
@ -60,6 +95,22 @@ const Webpack = {
combine(...filters) {return Filters.combine(...filters);},
},
/**
* Searches for a module by value, returns module & matched key. Useful in combination with the Patcher.
* @param {(value: any, index: number, array: any[]) => boolean} filter A function to use to filter the module
* @param {object} [options] Set of options to customize the search
* @param {any} [options.target=null] Optional module target to look inside.
* @param {Boolean} [options.defaultExport=true] Whether to return default export when matching the default export
* @param {Boolean} [options.searchExports=false] Whether to execute the filter on webpack export getters.
* @return {[Any, string]}
*/
getWithKey(filter, options = {}) {
if (("first" in options)) return Logger.error("BdApi.Webpack~getWithKey", "Unsupported option first.");
if (("defaultExport" in options) && typeof(options.defaultExport) !== "boolean") return Logger.error("BdApi.Webpack~getWithKey", "Unsupported type used for options.defaultExport", options.defaultExport, "boolean expected.");
if (("searchExports" in options) && typeof(options.searchExports) !== "boolean") return Logger.error("BdApi.Webpack~getWithKey", "Unsupported type used for options.searchExports", options.searchExports, "boolean expected.");
return WebpackModules.getWithKey(filter, options);
},
/**
* Finds a module using a filter function.
* @memberof Webpack
@ -71,12 +122,26 @@ const Webpack = {
* @return {any}
*/
getModule(filter, options = {}) {
if (("first" in options) && typeof(options.first) !== "boolean") return Logger.error("BdApi.Webpack~getModule", "Unsupported type used for options.first", options.first, "boolean expected.");
if (("first" in options) && typeof(options.first) !== "boolean") return Logger.error("BdApi.Webpack~get", "Unsupported type used for options.first", options.first, "boolean expected.");
if (("defaultExport" in options) && typeof(options.defaultExport) !== "boolean") return Logger.error("BdApi.Webpack~getModule", "Unsupported type used for options.defaultExport", options.defaultExport, "boolean expected.");
if (("searchExports" in options) && typeof(options.searchExports) !== "boolean") return Logger.error("BdApi.Webpack~getModule", "Unsupported type used for options.searchExports", options.searchExports, "boolean expected.");
return WebpackModules.getModule(filter, options);
},
/**
* Finds all modules matching a filter function.
* @param {Function} filter A function to use to filter modules
* @param {object} [options] Options to configure the search
* @param {Boolean} [options.defaultExport=true] Whether to return default export when matching the default export
* @param {Boolean} [options.searchExports=false] Whether to execute the filter on webpack exports
* @return {any[]}
*/
getModules(filter, options = {}) {
if (("defaultExport" in options) && typeof(options.defaultExport) !== "boolean") return Logger.error("BdApi.Webpack~getModules", "Unsupported type used for options.defaultExport", options.defaultExport, "boolean expected.");
if (("searchExports" in options) && typeof(options.searchExports) !== "boolean") return Logger.error("BdApi.Webpack~getModules", "Unsupported type used for options.searchExports", options.searchExports, "boolean expected.");
return WebpackModules.getModule(filter, Object.assign(options, {first: false}));
},
/**
* Finds multiple modules using multiple filters.
* @memberof Webpack
@ -102,9 +167,106 @@ const Webpack = {
waitForModule(filter, options = {}) {
if (("defaultExport" in options) && typeof(options.defaultExport) !== "boolean") return Logger.error("BdApi.Webpack~waitForModule", "Unsupported type used for options.defaultExport", options.defaultExport, "boolean expected.");
if (("signal" in options) && !(options.signal instanceof AbortSignal)) return Logger.error("BdApi.Webpack~waitForModule", "Unsupported type used for options.signal", options.signal, "AbortSignal expected.");
if (("searchExports" in options) && typeof(options.searchExports) !== "boolean") return Logger.error("BdApi.Webpack~getModule", "Unsupported type used for options.searchExports", options.searchExports, "boolean expected.");
if (("searchExports" in options) && typeof(options.searchExports) !== "boolean") return Logger.error("BdApi.Webpack~waitForModule", "Unsupported type used for options.searchExports", options.searchExports, "boolean expected.");
return WebpackModules.getLazy(filter, options);
},
/**
* Finds a module using its code.
* @param {RegEx} regex A regular expression to use to filter modules
* @param {object} [options] Options to configure the search
* @param {Boolean} [options.defaultExport=true] Whether to return default export when matching the default export
* @param {Boolean} [options.searchExports=false] Whether to execute the filter on webpack exports
* @return {Any}
*/
getByRegex(regex, options = {}) {
return WebpackModules.getModule(Filters.byRegex(regex), options);
},
/**
* Finds all modules using its code.
* @param {RegEx} regex A regular expression to use to filter modules
* @param {object} [options] Options to configure the search
* @param {Boolean} [options.defaultExport=true] Whether to return default export when matching the default export
* @param {Boolean} [options.searchExports=false] Whether to execute the filter on webpack exports
* @return {Any[]}
*/
getAllByRegex(regex, options = {}) {
return WebpackModules.getModule(Filters.byRegex(regex), Object.assign({}, options, {first: true}));
},
/**
* Finds a single module using properties on its prototype.
* @param {...string} prototypes Properties to use to filter modules
* @return {Any}
*/
getByPrototypeKeys(...prototypes) {
const options = getOptions(prototypes);
return WebpackModules.getModule(Filters.byPrototypeKeys(prototypes), options);
},
/**
* Finds all modules with a set of properties of its prototype.
* @param {...string} prototypes Properties to use to filter modules
* @return {Any[]}
*/
getAllByPrototypeKeys(...prototypes) {
const options = getOptions(prototypes, {first: false});
return WebpackModules.getModule(Filters.byPrototypeKeys(prototypes), options);
},
/**
* Finds a single module using its own properties.
* @param {...string} props Properties to use to filter modules
* @return {Any}
*/
getByKeys(...props) {
const options = getOptions(props);
return WebpackModules.getModule(Filters.byKeys(props), options);
},
/**
* Finds all modules with a set of properties.
* @param {...string} props Properties to use to filter modules
* @return {Any[]}
*/
getAllByKeys(...props) {
const options = getOptions(props, {first: false});
return WebpackModules.getModule(Filters.byKeys(props), options);
},
/**
* Finds a single module using a set of strings.
* @param {...String} props Strings to use to filter modules
* @return {Any}
*/
getByStrings(...strings) {
const options = getOptions(strings);
return WebpackModules.getModule(Filters.byStrings(...strings), options);
},
/**
* Finds all modules with a set of strings.
* @param {...String} strings Strings to use to filter modules
* @return {Any[]}
*/
getAllByStrings(...strings) {
const options = getOptions(strings, {first: false});
return WebpackModules.getModule(Filters.byStrings(...strings), options);
},
/**
* Finds an internal Store module using the name.
* @param {String} name Name of the store to find (usually includes "Store")
* @return {Any}
*/
getStore(name) {return WebpackModules.getModule(Filters.byStoreName(name));},
};
Object.freeze(Webpack);

View File

@ -1,21 +1,29 @@
import LocaleManager from "./localemanager";
import Logger from "@common/logger";
import Logger from "common/logger";
import {Config, Changelog} from "data";
import Config from "@data/config";
import Changelog from "@data/changelog";
import * as Builtins from "@builtins/builtins";
import LoadingIcon from "../loadingicon";
import LocaleManager from "./localemanager";
import DOMManager from "./dommanager";
import PluginManager from "./pluginmanager";
import ThemeManager from "./thememanager";
import Settings from "./settingsmanager";
import * as Builtins from "builtins";
import Modals from "../ui/modals";
import FloatingWindows from "../ui/floatingwindows";
import DataStore from "./datastore";
import DiscordModules from "./discordmodules";
import LoadingIcon from "../loadingicon";
import Styles from "../styles/index.css";
import Editor from "./editor";
import Updater from "./updater";
import Styles from "@styles/index.css";
import Modals from "@ui/modals";
import FloatingWindows from "@ui/floatingwindows";
export default new class Core {
async startup() {
if (this.hasStarted) return;

View File

@ -1,7 +1,11 @@
import {Config} from "data";
import Logger from "common/logger";
const fs = require("fs");
const path = require("path");
import fs from "fs";
import path from "path";
import Logger from "@common/logger";
import Config from "@data/config";
const releaseChannel = window?.DiscordNative?.app?.getReleaseChannel?.() ?? "stable";
// Schema

View File

@ -8,6 +8,7 @@
import Utilities from "./utilities";
import WebpackModules, {Filters} from "./webpackmodules";
export default Utilities.memoizeObject({
get React() {return WebpackModules.getByProps("createElement", "cloneElement");},
get ReactDOM() {return WebpackModules.getByProps("render", "findDOMNode");},
@ -22,6 +23,6 @@ export default Utilities.memoizeObject({
// Make fallback component just pass children, so it can at least render that.
const fallback = props => props.children?.({}) ?? null;
return WebpackModules.getModule(Filters.byPrototypeFields(["renderTooltip"]), {searchExports: true}) ?? fallback;
return WebpackModules.getModule(Filters.byPrototypeKeys(["renderTooltip"]), {searchExports: true}) ?? fallback;
}
});

View File

@ -1,4 +1,5 @@
import Logger from "../../../common/logger";
import Logger from "@common/logger";
import DOMManager from "./dommanager";
export default new class Editor {

View File

@ -1,4 +1,4 @@
const EventEmitter = require("events");
import EventEmitter from "events";
export default new class BDEvents extends EventEmitter {
constructor() {

View File

@ -1,8 +1,9 @@
import {ipcRenderer as ipc} from "electron";
import * as IPCEvents from "@common/constants/ipcevents";
import Events from "./emitter";
import * as IPCEvents from "common/constants/ipcevents";
export default new class IPCRenderer {

View File

@ -1,4 +1,5 @@
import * as Locales from "../../../assets/locales";
import * as Locales from "@assets/locales/index";
import DiscordModules from "./discordmodules";
import Utilities from "./utilities";
import Events from "./emitter";

View File

@ -1,17 +0,0 @@
export {default as WebpackModules} from "./webpackmodules";
import DiscordModules from "./discordmodules";
export const React = DiscordModules.React;
export const ReactDOM = DiscordModules.ReactDOM;
export {DiscordModules};
export {default as Utilities} from "./utilities";
export {default as DataStore} from "./datastore";
export {default as Events} from "./emitter";
export {default as Settings} from "./settingsmanager";
export {default as DOMManager} from "./dommanager";
export {default as Patcher} from "./patcher";
export {default as LocaleManager} from "./localemanager";
export {default as Strings} from "./strings";
export {default as IPC} from "./ipc";
export {default as Logger} from "common/logger";

View File

@ -3,10 +3,12 @@
* instead of the original function. Can also alter arguments and return values.
*/
import Logger from "common/logger";
import Logger from "@common/logger";
import DiscordModules from "./discordmodules";
import WebpackModules from "./webpackmodules";
export default class Patcher {
static get patches() {return this._patches || (this._patches = []);}

View File

@ -1,17 +1,21 @@
import {Config} from "data";
import Logger from "common/logger";
import path from "path";
import vm from "vm";
import Logger from "@common/logger";
import Config from "@data/config";
import AddonError from "@structs/addonerror";
import AddonManager from "./addonmanager";
import AddonError from "../structs/addonerror";
import Settings from "./settingsmanager";
import Strings from "./strings";
import Events from "./emitter";
import Toasts from "../ui/toasts";
import Modals from "../ui/modals";
import SettingsRenderer from "../ui/settings";
import Toasts from "@ui/toasts";
import Modals from "@ui/modals";
import SettingsRenderer from "@ui/settings";
const path = require("path");
const vm = require("vm");
const normalizeExports = name => `
if (module.exports.default) {

3
renderer/src/modules/react.js vendored Normal file
View File

@ -0,0 +1,3 @@
import DiscordModules from "./discordmodules";
export default DiscordModules.React;
export const ReactDOM = DiscordModules.ReactDOM;

View File

@ -0,0 +1,2 @@
import DiscordModules from "./discordmodules";
export default DiscordModules.ReactDOM;

View File

@ -1,10 +1,13 @@
import {SettingsConfig} from "data";
import Logger from "common/logger";
import Logger from "@common/logger";
import SettingsConfig from "@data/settings";
import DataStore from "./datastore";
import Events from "./emitter";
import DiscordModules from "./discordmodules";
import Strings from "./strings";
export default new class SettingsManager {
constructor() {

View File

@ -1,5 +1,7 @@
import FormattableString from "@structs/string";
import LocaleManager from "./localemanager";
import FormattableString from "../structs/string";
export default new Proxy(LocaleManager.strings, {
get: function(strings, category) {

View File

@ -1,15 +1,18 @@
import {Config} from "data";
import path from "path";
import Config from "@data/config";
import AddonError from "@structs/addonerror";
import AddonManager from "./addonmanager";
import AddonError from "../structs/addonerror";
import Settings from "./settingsmanager";
import DOMManager from "./dommanager";
import Strings from "./strings";
import Toasts from "../ui/toasts";
import Modals from "../ui/modals";
import SettingsRenderer from "../ui/settings";
import Toasts from "@ui/toasts";
import Modals from "@ui/modals";
import SettingsRenderer from "@ui/settings";
const path = require("path");
export default new class ThemeManager extends AddonManager {
get name() {return "ThemeManager";}

View File

@ -1,28 +1,27 @@
import request from "request";
import fileSystem from "fs";
import {Config} from "data";
import path from "path";
import Logger from "common/logger";
import Logger from "@common/logger";
import Config from "@data/config";
import {comparator as semverComparator, regex as semverRegex} from "@structs/semver";
import Events from "./emitter";
import IPC from "./ipc";
import Strings from "./strings";
import DataStore from "./datastore";
import React from "./react";
import Settings from "./settingsmanager";
import PluginManager from "./pluginmanager";
import ThemeManager from "./thememanager";
import WebpackModules from "./webpackmodules";
import Toasts from "../ui/toasts";
import Notices from "../ui/notices";
import Modals from "../ui/modals";
import UpdaterPanel from "../ui/updater";
import DiscordModules from "./discordmodules";
import {comparator as semverComparator, regex as semverRegex} from "../structs/semver";
const React = DiscordModules.React;
import Toasts from "@ui/toasts";
import Notices from "@ui/notices";
import Modals from "@ui/modals";
import UpdaterPanel from "@ui/updater";
const UserSettingsWindow = WebpackModules.getByProps("updateAccount");

View File

@ -1,4 +1,5 @@
import Logger from "common/logger";
import Logger from "@common/logger";
export default class Utilities {
/**

View File

@ -3,7 +3,7 @@
* @module WebpackModules
* @version 0.0.2
*/
import Logger from "../../../common/logger";
import Logger from "@common/logger";
/**
* Checks if a given module matches a set of parameters.
@ -22,7 +22,7 @@ export class Filters {
* @param {module:WebpackModules.Filters~filter} filter - Additional filter
* @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of properties
*/
static byProps(props, filter = m => m) {
static byKeys(props, filter = m => m) {
return module => {
if (!module) return false;
if (typeof(module) !== "object" && typeof(module) !== "function") return false;
@ -41,7 +41,7 @@ export class Filters {
* @param {module:WebpackModules.Filters~filter} filter - Additional filter
* @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of properties on the object's prototype
*/
static byPrototypeFields(fields, filter = m => m) {
static byPrototypeKeys(fields, filter = m => m) {
return module => {
if (!module) return false;
if (typeof(module) !== "object" && typeof(module) !== "function") return false;
@ -94,7 +94,6 @@ export class Filters {
/**
* Generates a {@link module:WebpackModules.Filters~filter} that filters by a set of properties.
* @param {string} name - Name the module should have
* @param {module:WebpackModules.Filters~filter} filter - Additional filter
* @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of properties
*/
static byDisplayName(name) {
@ -103,6 +102,17 @@ export class Filters {
};
}
/**
* Generates a {@link module:WebpackModules.Filters~filter} that filters by a set of properties.
* @param {string} name - Name the store should have (usually includes the word Store)
* @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of properties
*/
static byStoreName(name) {
return module => {
return module?._dispatchToken && module?.getName?.() === name;
};
}
/**
* Generates a combined {@link module:WebpackModules.Filters~filter} from a list of filters.
* @param {...module:WebpackModules.Filters~filter} filters - A list of filters
@ -140,6 +150,25 @@ export default class WebpackModules {
static findByUniqueProperties(props, first = true) {return first ? this.getByProps(...props) : this.getAllByProps(...props);}
static findByDisplayName(name) {return this.getByDisplayName(name);}
/**
* A Proxy that returns the module source by ID.
*/
static modules = new Proxy({}, {
ownKeys() {return Object.keys(WebpackModules.require.m);},
getOwnPropertyDescriptor() {
return {
enumerable: true,
configurable: true, // Not actually
};
},
get(_, k) {
return WebpackModules.require.m[k];
},
set() {
throw new Error("[WebpackModules~modules] Setting modules is not allowed.");
}
});
/**
* Finds a module using a filter function.
* @param {function} filter A function to use to filter modules
@ -252,6 +281,24 @@ export default class WebpackModules {
return returnedModules;
}
/**
* Searches for a module by value, returns module & matched key. Useful in combination with the Patcher.
* @param {(value: any, index: number, array: any[]) => boolean} filter A function to use to filter the module
* @param {object} [options] Set of options to customize the search
* @param {any} [options.target=null] Optional module target to look inside.
* @param {Boolean} [options.defaultExport=true] Whether to return default export when matching the default export
* @param {Boolean} [options.searchExports=false] Whether to execute the filter on webpack export getters.
* @return {[Any, string]}
*/
static *getWithKey(filter, {target = null, ...rest} = {}) {
yield target ??= this.getModule(exports =>
Object.values(exports).some(filter),
rest
);
yield target && Object.keys(target).find(k => filter(target[k]));
}
/**
* Finds all modules matching a filter function.
* @param {Function} filter A function to use to filter modules
@ -283,7 +330,7 @@ export default class WebpackModules {
* @return {Any}
*/
static getByPrototypes(...prototypes) {
return this.getModule(Filters.byPrototypeFields(prototypes));
return this.getModule(Filters.byPrototypeKeys(prototypes));
}
/**
@ -292,7 +339,7 @@ export default class WebpackModules {
* @return {Any}
*/
static getAllByPrototypes(...prototypes) {
return this.getModule(Filters.byPrototypeFields(prototypes), {first: false});
return this.getModule(Filters.byPrototypeKeys(prototypes), {first: false});
}
/**
@ -301,7 +348,7 @@ export default class WebpackModules {
* @return {Any}
*/
static getByProps(...props) {
return this.getModule(Filters.byProps(props));
return this.getModule(Filters.byKeys(props));
}
/**
@ -310,7 +357,7 @@ export default class WebpackModules {
* @return {Any}
*/
static getAllByProps(...props) {
return this.getModule(Filters.byProps(props), {first: false});
return this.getModule(Filters.byKeys(props), {first: false});
}
/**

View File

@ -1,4 +1,4 @@
import WebpackModules from "../modules/webpackmodules";
import WebpackModules from "@modules/webpackmodules";
Object.defineProperty(window, "Buffer", {
get() {return Buffer.getBuffer().Buffer;},

View File

@ -1,5 +1,6 @@
import Remote from "./remote";
export default {
...Remote.crypto,
// Wrap it in Buffer

View File

@ -1,6 +1,6 @@
import Remote from "./remote";
export const readFileSync = function (path, options = "utf8") {
return Remote.filesystem.readFile(path, options);
};
@ -179,6 +179,8 @@ export default {
rmSync,
rmdir,
rmdirSync,
stat,
statSync,
unlink,
unlinkSync,
watch,

View File

@ -1,6 +1,8 @@
import EventEmitter from "common/events";
import EventEmitter from "@common/events";
import Remote from "./remote";
export function get(url, options = {}, callback) {
if (typeof(options) === "function") {
callback = options;

View File

@ -1,12 +1,20 @@
import EventEmitter from "@common/events";
import Module from "./module";
import * as vm from "./vm";
import * as fs from "./fs";
import vm from "./vm";
import fs from "./fs";
import request from "./request";
import EventEmitter from "common/events";
import * as https from "./https";
import https from "./https";
import Buffer from "./buffer";
import crypto from "./crypto";
import Remote from "./remote";
import Logger from "common/logger";
const deprecated = new Map([
["request", "Use BdApi.Net.fetch instead."],
["https", "Use BdApi.Net.fetch instead."],
]);
const originalFs = Object.assign({}, fs);
originalFs.writeFileSync = (path, data, options) => fs.writeFileSync(path, data, Object.assign({}, options, {originalFs: true}));
@ -14,6 +22,10 @@ originalFs.writeFile = (path, data, options) => fs.writeFile(path, data, Object.
export const createRequire = function (path) {
return mod => {
if (deprecated.has(mod)) {
Logger.warn("Remote~Require", `The "${mod}" module is marked as deprecated. ${deprecated.get(mod)}`);
}
switch (mod) {
case "request": return request;
case "https": return https;
@ -42,4 +54,4 @@ require.resolve = (path) => {
}
};
export default require;
export default require;

View File

@ -1,8 +1,10 @@
import Logger from "common/logger";
import Logger from "@common/logger";
import {compileFunction} from "./vm";
import Remote from "./remote";
import fs from "./fs";
const path = Remote.path;
export const RequireExtensions = {

View File

@ -1,5 +1,6 @@
import Remote from "./remote";
const methods = ["get", "put", "post", "delete", "head"];
const aliases = {del: "delete"};

View File

@ -1,9 +1,12 @@
import Remote from "./remote";
export const compileFunction = function(code, params = [], options = {}) {
const returned = Remote.vm.compileFunction(code, params, options);
if (typeof(returned) === "function") return returned;
const syntaxError = new SyntaxError(returned.message);
syntaxError.stack = returned.stack;
throw syntaxError;
};
};
export default {compileFunction};

View File

@ -1,7 +1,9 @@
import Logger from "common/logger";
import Events from "../modules/emitter";
import Settings from "../modules/settingsmanager";
import Patcher from "../modules/patcher";
import Logger from "@common/logger";
import Events from "@modules/emitter";
import Settings from "@modules/settingsmanager";
import Patcher from "@modules/patcher";
export default class BuiltinModule {

View File

@ -1,4 +1,6 @@
import {DiscordModules, Utilities} from "modules";
import DiscordModules from "@modules/discordmodules";
import Utilities from "@modules/utilities";
export default class SimpleMarkdownExt {
static parseToReact(str, inline = true) {

View File

@ -1,4 +1,5 @@
import Utilities from "../modules/utilities";
import Utilities from "@modules/utilities";
const LINK = /\[(.+?)]/;

View File

@ -1,5 +1,8 @@
import {React, WebpackModules} from "modules";
import SimpleMarkdown from "../../structs/markdown";
import SimpleMarkdown from "@structs/markdown";
import React from "@modules/react";
import WebpackModules from "@modules/webpackmodules";
const EmptyImageClasses = WebpackModules.getByProps("emptyImage", "emptyHeader") ?? {emptyContainer: "emptyContainer-poti7J", emptyImage: "emptyImage-2pCD2j", emptyHeader: "emptyHeader-2cxTFP"};

View File

@ -1,5 +1,8 @@
import {React, DiscordModules} from "modules";
import MagnifyingGlass from "../icons/magnifyingglass";
import React from "@modules/react";
import DiscordModules from "@modules/discordmodules";
import MagnifyingGlass from "@ui/icons/magnifyingglass";
export default function NoResults(props) {
return <div className={"bd-empty-results" + (props.className ? ` ${props.className}` : "")}>

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
const {useState, useCallback} = React;

View File

@ -1,10 +1,14 @@
import {React, Settings, Events, Strings} from "modules";
import React from "@modules/react";
import Strings from "@modules/strings";
import Events from "@modules/emitter";
import Settings from "@modules/settingsmanager";
import Editor from "./editor";
import Refresh from "../icons/reload";
import Save from "../icons/save";
import Edit from "../icons/edit";
import Detach from "../icons/detach";
import Refresh from "@ui/icons/reload";
import Save from "@ui/icons/save";
import Edit from "@ui/icons/edit";
import Detach from "@ui/icons/detach";
const {useState, useCallback, useEffect, forwardRef, useImperativeHandle, useRef} = React;

View File

@ -1,4 +1,6 @@
import {React, DiscordModules, Settings} from "modules";
import React from "@modules/react";
import DiscordModules from "@modules/discordmodules";
import Settings from "@modules/settingsmanager";
import Checkbox from "./checkbox";

View File

@ -1,3 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default ({className}) => <div className={`bd-divider ${className || ""}`}></div>;

View File

@ -1,5 +1,7 @@
import Logger from "common/logger";
import {React, IPC} from "modules";
import Logger from "@common/logger";
import React from "@modules/react";
import IPC from "@modules/ipc";
export default class ErrorBoundary extends React.Component {
constructor(props) {

View File

@ -1,4 +1,5 @@
import {React, Events} from "modules";
import React from "@modules/react";
import Events from "@modules/emitter";
import FloatingWindow from "./window";

View File

@ -1,9 +1,12 @@
import {React, Strings} from "modules";
import React from "@modules/react";
import Strings from "@modules/strings";
import Screen from "../../structs/screen";
import CloseButton from "../icons/close";
import MaximizeIcon from "../icons/fullscreen";
import Modals from "../modals";
import Screen from "@structs/screen";
import CloseButton from "@ui/icons/close";
import MaximizeIcon from "@ui/icons/fullscreen";
import Modals from "@ui/modals";
const {useState, useCallback, useEffect, useRef} = React;

View File

@ -1,8 +1,13 @@
import {WebpackModules, React, ReactDOM, DOMManager, Events} from "modules";
import React from "@modules/react";
import ReactDOM from "@modules/reactdom";
import Events from "@modules/emitter";
import DOMManager from "@modules/dommanager";
import WebpackModules from "@modules/webpackmodules";
import FloatingWindowContainer from "./floating/container";
/* eslint-disable new-cap */
/* eslint-disable new-cap */
const AppLayerProvider = WebpackModules.getByDisplayName("AppLayerProvider");
let hasInitialized = false;

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function BDLogo(props) {
return <svg className={"bd-logo " + props.className} height="100%" width={props.size || "16px"} viewBox="0 0 2000 2000">

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function Checkmark(props) {
const size = props.size || "24px";

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function Close(props) {
const size = props.size || "18px";

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function Cog(props) {
const size = props.size || "20px";

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function Delete(props) {
const size = props.size || "24px";

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function Detach(props) {
const size = props.size || "24px";

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function DollarSign(props) {
const size = props.size || "18px";

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function DownArrow(props) {
const size = props.size || "16px";

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function Edit(props) {
const size = props.size || "24px";

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function Error(props) {
const size = props.size || "24px";

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function Extension(props) {
const size = props.size || "24px";

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function Favorite(props) {
const size = props.size || "24px";

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function FullScreen(props) {
const size = props.size || "24px";

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function GitHub(props) {
const size = props.size || "18px";

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function Globe(props) {
const size = props.size || "18px";

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function Grid(props) {
const size = props.size || "20px";

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function History(props) {
const size = props.size || "18px";

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function Keyboard(props) {
const size = props.size || "24px";

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function List(props) {
const size = props.size || "20px";

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function MagnifyingGlass(props) {
const size = props.size || "160px";

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function ArrowRight(props) {
const size = props.size || "24px";

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function Patreon(props) {
const size = props.size || "18px";

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function ArrowLeft(props) {
const size = props.size || "24px";

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function Radio(props) {
const size = props.size || "24px";

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function ReloadIcon(props) {
const size = props.size || "24px";

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function Save(props) {
const size = props.size || "24px";

View File

@ -1,4 +1,4 @@
import {React} from "modules";
import React from "@modules/react";
export default function Search(props) {
const size = props.size || "16px";

Some files were not shown because too many files have changed in this diff Show More