summaryrefslogtreecommitdiff
path: root/frontend
diff options
context:
space:
mode:
Diffstat (limited to 'frontend')
-rw-r--r--frontend/i18next-parser.config.mjs100
-rw-r--r--frontend/package.json9
-rw-r--r--frontend/pnpm-lock.yaml1651
-rw-r--r--frontend/rollup.config.js8
-rw-r--r--frontend/src/components/modals/PluginInstallModal.tsx39
-rw-r--r--frontend/src/components/modals/TPluginInstallModal.tsx95
-rw-r--r--frontend/src/components/modals/filepicker/index.tsx4
-rw-r--r--frontend/src/components/settings/index.tsx8
-rw-r--r--frontend/src/components/settings/pages/developer/index.tsx52
-rw-r--r--frontend/src/components/settings/pages/general/BranchSelect.tsx11
-rw-r--r--frontend/src/components/settings/pages/general/RemoteDebugging.tsx10
-rw-r--r--frontend/src/components/settings/pages/general/StoreSelect.tsx15
-rw-r--r--frontend/src/components/settings/pages/general/Updater.tsx22
-rw-r--r--frontend/src/components/settings/pages/general/index.tsx14
-rw-r--r--frontend/src/components/settings/pages/plugin_list/index.tsx35
-rw-r--r--frontend/src/components/store/PluginCard.tsx16
-rw-r--r--frontend/src/components/store/Store.tsx54
-rw-r--r--frontend/src/developer.tsx7
-rw-r--r--frontend/src/index.tsx34
-rw-r--r--frontend/src/plugin-loader.tsx38
-rw-r--r--frontend/src/plugin.ts6
-rw-r--r--frontend/src/store.tsx5
-rw-r--r--frontend/tsconfig.json3
23 files changed, 1902 insertions, 334 deletions
diff --git a/frontend/i18next-parser.config.mjs b/frontend/i18next-parser.config.mjs
new file mode 100644
index 00000000..9d4b114d
--- /dev/null
+++ b/frontend/i18next-parser.config.mjs
@@ -0,0 +1,100 @@
+export default {
+ contextSeparator: '_',
+ // Key separator used in your translation keys
+
+ createOldCatalogs: false,
+ // Save the \_old files
+
+ defaultNamespace: 'translation',
+ // Default namespace used in your i18next config
+
+ defaultValue: '',
+ // Default value to give to keys with no value
+ // You may also specify a function accepting the locale, namespace, key, and value as arguments
+
+ indentation: 2,
+ // Indentation of the catalog files
+
+ keepRemoved: true,
+ // Keep keys from the catalog that are no longer in code
+
+ keySeparator: '.',
+ // Key separator used in your translation keys
+ // If you want to use plain english keys, separators such as `.` and `:` will conflict. You might want to set `keySeparator: false` and `namespaceSeparator: false`. That way, `t('Status: Loading...')` will not think that there are a namespace and three separator dots for instance.
+
+ // see below for more details
+ lexers: {
+ mjs: ['JavascriptLexer'],
+ js: ['JavascriptLexer'], // if you're writing jsx inside .js files, change this to JsxLexer
+ ts: ['JavascriptLexer'],
+ jsx: ['JsxLexer'],
+ tsx: ['JsxLexer'],
+
+ default: ['JavascriptLexer'],
+ },
+
+ lineEnding: 'auto',
+ // Control the line ending. See options at https://github.com/ryanve/eol
+
+ locales: ['en-US', 'it-IT'],
+ // An array of the locales in your applications
+
+ namespaceSeparator: false,
+ // Namespace separator used in your translation keys
+ // If you want to use plain english keys, separators such as `.` and `:` will conflict. You might want to set `keySeparator: false` and `namespaceSeparator: false`. That way, `t('Status: Loading...')` will not think that there are a namespace and three separator dots for instance.
+
+ output: '../backend/locales/$LOCALE.json',
+ // Supports $LOCALE and $NAMESPACE injection
+ // Supports JSON (.json) and YAML (.yml) file formats
+ // Where to write the locale files relative to process.cwd()
+
+ pluralSeparator: '_',
+ // Plural separator used in your translation keys
+ // If you want to use plain english keys, separators such as `_` might conflict. You might want to set `pluralSeparator` to a different string that does not occur in your keys.
+
+ input: './src/**/*.{ts,tsx}',
+ // An array of globs that describe where to look for source files
+ // relative to the location of the configuration file
+
+ sort: true,
+ // Whether or not to sort the catalog. Can also be a [compareFunction](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#parameters)
+
+ verbose: false,
+ // Display info about the parsing including some stats
+
+ failOnWarnings: false,
+ // Exit with an exit code of 1 on warnings
+
+ failOnUpdate: false,
+ // Exit with an exit code of 1 when translations are updated (for CI purpose)
+
+ customValueTemplate: null,
+ // If you wish to customize the value output the value as an object, you can set your own format.
+ // ${defaultValue} is the default value you set in your translation function.
+ // Any other custom property will be automatically extracted.
+ //
+ // Example:
+ // {
+ // message: "${defaultValue}",
+ // description: "${maxLength}", // t('my-key', {maxLength: 150})
+ // }
+
+ resetDefaultValueLocale: null,
+ // The locale to compare with default values to determine whether a default value has been changed.
+ // If this is set and a default value differs from a translation in the specified locale, all entries
+ // for that key across locales are reset to the default value, and existing translations are moved to
+ // the `_old` file.
+
+ i18nextOptions: null,
+ // If you wish to customize options in internally used i18next instance, you can define an object with any
+ // configuration property supported by i18next (https://www.i18next.com/overview/configuration-options).
+ // { compatibilityJSON: 'v3' } can be used to generate v3 compatible plurals.
+
+ yamlOptions: null,
+ // If you wish to customize options for yaml output, you can define an object here.
+ // Configuration options are here (https://github.com/nodeca/js-yaml#dump-object---options-).
+ // Example:
+ // {
+ // lineWidth: -1,
+ // }
+ }
diff --git a/frontend/package.json b/frontend/package.json
index f4549cb4..82354c1c 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -22,9 +22,10 @@
"@types/react-router": "5.1.18",
"@types/webpack": "^5.28.1",
"husky": "^8.0.3",
+ "i18next-parser": "^7.7.0",
"import-sort-style-module": "^6.0.0",
"inquirer": "^8.2.5",
- "prettier": "^2.8.7",
+ "prettier": "^2.8.8",
"prettier-plugin-import-sort": "^0.0.7",
"react": "16.14.0",
"react-dom": "16.14.0",
@@ -43,9 +44,13 @@
},
"dependencies": {
"decky-frontend-lib": "3.20.6",
+ "i18next": "^22.4.15",
+ "i18next-browser-languagedetector": "^7.0.1",
+ "i18next-http-backend": "^2.2.0",
"react-file-icon": "^1.3.0",
+ "react-i18next": "^12.2.2",
"react-icons": "^4.8.0",
- "react-markdown": "^8.0.6",
+ "react-markdown": "^8.0.7",
"remark-gfm": "^3.0.1"
}
}
diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml
index e3c782ed..d8751c21 100644
--- a/frontend/pnpm-lock.yaml
+++ b/frontend/pnpm-lock.yaml
@@ -4,15 +4,27 @@ dependencies:
decky-frontend-lib:
specifier: 3.20.6
version: 3.20.6
+ i18next:
+ specifier: ^22.4.15
+ version: 22.4.15
+ i18next-browser-languagedetector:
+ specifier: ^7.0.1
+ version: 7.0.1
+ i18next-http-backend:
+ specifier: ^2.2.0
+ version: 2.2.0
react-file-icon:
specifier: ^1.3.0
version: 1.3.0(react-dom@16.14.0)(react@16.14.0)
+ react-i18next:
+ specifier: ^12.2.2
+ version: 12.2.2(i18next@22.4.15)(react-dom@16.14.0)(react@16.14.0)
react-icons:
specifier: ^4.8.0
version: 4.8.0(react@16.14.0)
react-markdown:
- specifier: ^8.0.6
- version: 8.0.6(@types/react@16.14.0)(react@16.14.0)
+ specifier: ^8.0.7
+ version: 8.0.7(@types/react@16.14.0)(react@16.14.0)
remark-gfm:
specifier: ^3.0.1
version: 3.0.1
@@ -51,6 +63,9 @@ devDependencies:
husky:
specifier: ^8.0.3
version: 8.0.3
+ i18next-parser:
+ specifier: ^7.7.0
+ version: 7.7.0
import-sort-style-module:
specifier: ^6.0.0
version: 6.0.0
@@ -58,11 +73,11 @@ devDependencies:
specifier: ^8.2.5
version: 8.2.5
prettier:
- specifier: ^2.8.7
- version: 2.8.7
+ specifier: ^2.8.8
+ version: 2.8.8
prettier-plugin-import-sort:
specifier: ^0.0.7
- version: 0.0.7(prettier@2.8.7)
+ version: 0.0.7(prettier@2.8.8)
react:
specifier: 16.14.0
version: 16.14.0
@@ -90,12 +105,12 @@ devDependencies:
packages:
- /@ampproject/remapping@2.2.0:
- resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==}
+ /@ampproject/remapping@2.2.1:
+ resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==}
engines: {node: '>=6.0.0'}
dependencies:
- '@jridgewell/gen-mapping': 0.1.1
- '@jridgewell/trace-mapping': 0.3.17
+ '@jridgewell/gen-mapping': 0.3.3
+ '@jridgewell/trace-mapping': 0.3.18
dev: true
/@babel/code-frame@7.21.4:
@@ -105,25 +120,25 @@ packages:
'@babel/highlight': 7.18.6
dev: true
- /@babel/compat-data@7.21.4:
- resolution: {integrity: sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==}
+ /@babel/compat-data@7.21.5:
+ resolution: {integrity: sha512-M+XAiQ7GzQ3FDPf0KOLkugzptnIypt0X0ma0wmlTKPR3IchgNFdx2JXxZdvd18JY5s7QkaFD/qyX0dsMpog/Ug==}
engines: {node: '>=6.9.0'}
dev: true
- /@babel/core@7.21.4:
- resolution: {integrity: sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==}
+ /@babel/core@7.21.5:
+ resolution: {integrity: sha512-9M398B/QH5DlfCOTKDZT1ozXr0x8uBEeFd+dJraGUZGiaNpGCDVGCc14hZexsMblw3XxltJ+6kSvogp9J+5a9g==}
engines: {node: '>=6.9.0'}
dependencies:
- '@ampproject/remapping': 2.2.0
+ '@ampproject/remapping': 2.2.1
'@babel/code-frame': 7.21.4
- '@babel/generator': 7.21.4
- '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4)
- '@babel/helper-module-transforms': 7.21.2
- '@babel/helpers': 7.21.0
- '@babel/parser': 7.21.4
+ '@babel/generator': 7.21.5
+ '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.5)
+ '@babel/helper-module-transforms': 7.21.5
+ '@babel/helpers': 7.21.5
+ '@babel/parser': 7.21.5
'@babel/template': 7.20.7
- '@babel/traverse': 7.21.4
- '@babel/types': 7.21.4
+ '@babel/traverse': 7.21.5
+ '@babel/types': 7.21.5
convert-source-map: 1.9.0
debug: 4.3.4
gensync: 1.0.0-beta.2
@@ -133,32 +148,32 @@ packages:
- supports-color
dev: true
- /@babel/generator@7.21.4:
- resolution: {integrity: sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==}
+ /@babel/generator@7.21.5:
+ resolution: {integrity: sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.21.4
- '@jridgewell/gen-mapping': 0.3.2
- '@jridgewell/trace-mapping': 0.3.17
+ '@babel/types': 7.21.5
+ '@jridgewell/gen-mapping': 0.3.3
+ '@jridgewell/trace-mapping': 0.3.18
jsesc: 2.5.2
dev: true
- /@babel/helper-compilation-targets@7.21.4(@babel/core@7.21.4):
- resolution: {integrity: sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==}
+ /@babel/helper-compilation-targets@7.21.5(@babel/core@7.21.5):
+ resolution: {integrity: sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
- '@babel/compat-data': 7.21.4
- '@babel/core': 7.21.4
+ '@babel/compat-data': 7.21.5
+ '@babel/core': 7.21.5
'@babel/helper-validator-option': 7.21.0
browserslist: 4.21.5
lru-cache: 5.1.1
semver: 6.3.0
dev: true
- /@babel/helper-environment-visitor@7.18.9:
- resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==}
+ /@babel/helper-environment-visitor@7.21.5:
+ resolution: {integrity: sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==}
engines: {node: '>=6.9.0'}
dev: true
@@ -167,55 +182,55 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/template': 7.20.7
- '@babel/types': 7.21.4
+ '@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.21.4
+ '@babel/types': 7.21.5
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.4
+ '@babel/types': 7.21.5
dev: true
- /@babel/helper-module-transforms@7.21.2:
- resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==}
+ /@babel/helper-module-transforms@7.21.5:
+ resolution: {integrity: sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/helper-environment-visitor': 7.18.9
+ '@babel/helper-environment-visitor': 7.21.5
'@babel/helper-module-imports': 7.21.4
- '@babel/helper-simple-access': 7.20.2
+ '@babel/helper-simple-access': 7.21.5
'@babel/helper-split-export-declaration': 7.18.6
'@babel/helper-validator-identifier': 7.19.1
'@babel/template': 7.20.7
- '@babel/traverse': 7.21.4
- '@babel/types': 7.21.4
+ '@babel/traverse': 7.21.5
+ '@babel/types': 7.21.5
transitivePeerDependencies:
- supports-color
dev: true
- /@babel/helper-simple-access@7.20.2:
- resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==}
+ /@babel/helper-simple-access@7.21.5:
+ resolution: {integrity: sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.21.4
+ '@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.21.4
+ '@babel/types': 7.21.5
dev: true
- /@babel/helper-string-parser@7.19.4:
- resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==}
+ /@babel/helper-string-parser@7.21.5:
+ resolution: {integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==}
engines: {node: '>=6.9.0'}
dev: true
@@ -229,13 +244,13 @@ packages:
engines: {node: '>=6.9.0'}
dev: true
- /@babel/helpers@7.21.0:
- resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==}
+ /@babel/helpers@7.21.5:
+ resolution: {integrity: sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/template': 7.20.7
- '@babel/traverse': 7.21.4
- '@babel/types': 7.21.4
+ '@babel/traverse': 7.21.5
+ '@babel/types': 7.21.5
transitivePeerDependencies:
- supports-color
dev: true
@@ -249,65 +264,261 @@ packages:
js-tokens: 4.0.0
dev: true
- /@babel/parser@7.21.4:
- resolution: {integrity: sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==}
+ /@babel/parser@7.21.5:
+ resolution: {integrity: sha512-J+IxH2IsxV4HbnTrSWgMAQj0UEo61hDA4Ny8h8PCX0MLXiibqHbqIOVneqdocemSBc22VpBKxt4J6FQzy9HarQ==}
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
- '@babel/types': 7.21.4
+ '@babel/types': 7.21.5
dev: true
+ /@babel/runtime@7.21.5:
+ resolution: {integrity: sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ regenerator-runtime: 0.13.11
+
/@babel/template@7.20.7:
resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/code-frame': 7.21.4
- '@babel/parser': 7.21.4
- '@babel/types': 7.21.4
+ '@babel/parser': 7.21.5
+ '@babel/types': 7.21.5
dev: true
- /@babel/traverse@7.21.4:
- resolution: {integrity: sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==}
+ /@babel/traverse@7.21.5:
+ resolution: {integrity: sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/code-frame': 7.21.4
- '@babel/generator': 7.21.4
- '@babel/helper-environment-visitor': 7.18.9
+ '@babel/generator': 7.21.5
+ '@babel/helper-environment-visitor': 7.21.5
'@babel/helper-function-name': 7.21.0
'@babel/helper-hoist-variables': 7.18.6
'@babel/helper-split-export-declaration': 7.18.6
- '@babel/parser': 7.21.4
- '@babel/types': 7.21.4
+ '@babel/parser': 7.21.5
+ '@babel/types': 7.21.5
debug: 4.3.4
globals: 11.12.0
transitivePeerDependencies:
- supports-color
dev: true
- /@babel/types@7.21.4:
- resolution: {integrity: sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==}
+ /@babel/types@7.21.5:
+ resolution: {integrity: sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/helper-string-parser': 7.19.4
+ '@babel/helper-string-parser': 7.21.5
'@babel/helper-validator-identifier': 7.19.1
to-fast-properties: 2.0.0
dev: true
- /@jridgewell/gen-mapping@0.1.1:
- resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==}
- engines: {node: '>=6.0.0'}
- dependencies:
- '@jridgewell/set-array': 1.1.2
- '@jridgewell/sourcemap-codec': 1.4.14
+ /@esbuild/android-arm64@0.17.18:
+ resolution: {integrity: sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-arm@0.17.18:
+ resolution: {integrity: sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-x64@0.17.18:
+ resolution: {integrity: sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+ requiresBuild: true
dev: true
+ optional: true
+
+ /@esbuild/darwin-arm64@0.17.18:
+ resolution: {integrity: sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/darwin-x64@0.17.18:
+ resolution: {integrity: sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/freebsd-arm64@0.17.18:
+ resolution: {integrity: sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
- /@jridgewell/gen-mapping@0.3.2:
- resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==}
+ /@esbuild/freebsd-x64@0.17.18:
+ resolution: {integrity: sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-arm64@0.17.18:
+ resolution: {integrity: sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-arm@0.17.18:
+ resolution: {integrity: sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-ia32@0.17.18:
+ resolution: {integrity: sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-loong64@0.17.18:
+ resolution: {integrity: sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-mips64el@0.17.18:
+ resolution: {integrity: sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-ppc64@0.17.18:
+ resolution: {integrity: sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-riscv64@0.17.18:
+ resolution: {integrity: sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-s390x@0.17.18:
+ resolution: {integrity: sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-x64@0.17.18:
+ resolution: {integrity: sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/netbsd-x64@0.17.18:
+ resolution: {integrity: sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/openbsd-x64@0.17.18:
+ resolution: {integrity: sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/sunos-x64@0.17.18:
+ resolution: {integrity: sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-arm64@0.17.18:
+ resolution: {integrity: sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-ia32@0.17.18:
+ resolution: {integrity: sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-x64@0.17.18:
+ resolution: {integrity: sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@jridgewell/gen-mapping@0.3.3:
+ resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
engines: {node: '>=6.0.0'}
dependencies:
'@jridgewell/set-array': 1.1.2
- '@jridgewell/sourcemap-codec': 1.4.14
- '@jridgewell/trace-mapping': 0.3.17
+ '@jridgewell/sourcemap-codec': 1.4.15
+ '@jridgewell/trace-mapping': 0.3.18
dev: true
/@jridgewell/resolve-uri@3.1.0:
@@ -320,19 +531,23 @@ packages:
engines: {node: '>=6.0.0'}
dev: true
- /@jridgewell/source-map@0.3.2:
- resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==}
+ /@jridgewell/source-map@0.3.3:
+ resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==}
dependencies:
- '@jridgewell/gen-mapping': 0.3.2
- '@jridgewell/trace-mapping': 0.3.17
+ '@jridgewell/gen-mapping': 0.3.3
+ '@jridgewell/trace-mapping': 0.3.18
dev: true
/@jridgewell/sourcemap-codec@1.4.14:
resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
dev: true
- /@jridgewell/trace-mapping@0.3.17:
- resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==}
+ /@jridgewell/sourcemap-codec@1.4.15:
+ resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
+ dev: true
+
+ /@jridgewell/trace-mapping@0.3.18:
+ resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==}
dependencies:
'@jridgewell/resolve-uri': 3.1.0
'@jridgewell/sourcemap-codec': 1.4.14
@@ -371,7 +586,7 @@ packages:
glob: 7.2.3
is-reference: 1.2.1
magic-string: 0.25.9
- resolve: 1.22.1
+ resolve: 1.22.2
rollup: 2.79.1
dev: true
@@ -420,7 +635,7 @@ packages:
deepmerge: 4.3.1
is-builtin-module: 3.2.1
is-module: 1.0.0
- resolve: 1.22.1
+ resolve: 1.22.2
rollup: 2.79.1
dev: true
@@ -446,7 +661,7 @@ packages:
optional: true
dependencies:
'@rollup/pluginutils': 3.1.0(rollup@2.79.1)
- resolve: 1.22.1
+ resolve: 1.22.2
rollup: 2.79.1
tslib: 2.5.0
typescript: 4.9.5
@@ -481,7 +696,7 @@ packages:
rollup:
optional: true
dependencies:
- '@types/estree': 1.0.0
+ '@types/estree': 1.0.1
estree-walker: 2.0.2
picomatch: 2.3.1
rollup: 2.79.1
@@ -497,13 +712,13 @@ packages:
resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==}
dependencies:
'@types/eslint': 8.37.0
- '@types/estree': 0.0.51
+ '@types/estree': 1.0.1
dev: true
/@types/eslint@8.37.0:
resolution: {integrity: sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==}
dependencies:
- '@types/estree': 0.0.51
+ '@types/estree': 1.0.1
'@types/json-schema': 7.0.11
dev: true
@@ -511,19 +726,15 @@ packages:
resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==}
dev: true
- /@types/estree@0.0.51:
- resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==}
- dev: true
-
- /@types/estree@1.0.0:
- resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==}
+ /@types/estree@1.0.1:
+ resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==}
dev: true
/@types/glob@7.2.0:
resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==}
dependencies:
'@types/minimatch': 5.1.2
- '@types/node': 18.15.11
+ '@types/node': 18.16.2
dev: true
/@types/hast@2.3.4:
@@ -546,6 +757,10 @@ packages:
'@types/unist': 2.0.6
dev: false
+ /@types/minimatch@3.0.5:
+ resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==}
+ dev: true
+
/@types/minimatch@5.1.2:
resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
dev: true
@@ -554,8 +769,8 @@ packages:
resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==}
dev: false
- /@types/node@18.15.11:
- resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==}
+ /@types/node@18.16.2:
+ resolution: {integrity: sha512-GQW/JL/5Fz/0I8RpeBG9lKp0+aNcXEaVL71c0D2Q0QHDTFvlYKT7an0onCUXj85anv7b4/WesqdfchLc0jtsCg==}
dev: true
/@types/prop-types@15.7.5:
@@ -583,7 +798,11 @@ packages:
/@types/resolve@1.17.1:
resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==}
dependencies:
- '@types/node': 18.15.11
+ '@types/node': 18.16.2
+ dev: true
+
+ /@types/symlink-or-copy@1.2.0:
+ resolution: {integrity: sha512-Lja2xYuuf2B3knEsga8ShbOdsfNOtzT73GyJmZyY7eGl2+ajOqrs8yM5ze0fsSoYwvA6bw7/Qr7OZ7PEEmYwWg==}
dev: true
/@types/unist@2.0.6:
@@ -593,9 +812,9 @@ packages:
/@types/webpack@5.28.1:
resolution: {integrity: sha512-qw1MqGZclCoBrpiSe/hokSgQM/su8Ocpl3L/YHE0L6moyaypg4+5F7Uzq7NgaPKPxUxUbQ4fLPLpDWdR27bCZw==}
dependencies:
- '@types/node': 18.15.11
+ '@types/node': 18.16.2
tapable: 2.2.1
- webpack: 5.77.0
+ webpack: 5.81.0
transitivePeerDependencies:
- '@swc/core'
- esbuild
@@ -603,109 +822,109 @@ packages:
- webpack-cli
dev: true
- /@webassemblyjs/ast@1.11.1:
- resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==}
+ /@webassemblyjs/ast@1.11.5:
+ resolution: {integrity: sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ==}
dependencies:
- '@webassemblyjs/helper-numbers': 1.11.1
- '@webassemblyjs/helper-wasm-bytecode': 1.11.1
+ '@webassemblyjs/helper-numbers': 1.11.5
+ '@webassemblyjs/helper-wasm-bytecode': 1.11.5
dev: true
- /@webassemblyjs/floating-point-hex-parser@1.11.1:
- resolution: {integrity: sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==}
+ /@webassemblyjs/floating-point-hex-parser@1.11.5:
+ resolution: {integrity: sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ==}
dev: true
- /@webassemblyjs/helper-api-error@1.11.1:
- resolution: {integrity: sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==}
+ /@webassemblyjs/helper-api-error@1.11.5:
+ resolution: {integrity: sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA==}
dev: true
- /@webassemblyjs/helper-buffer@1.11.1:
- resolution: {integrity: sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==}
+ /@webassemblyjs/helper-buffer@1.11.5:
+ resolution: {integrity: sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg==}
dev: true
- /@webassemblyjs/helper-numbers@1.11.1:
- resolution: {integrity: sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==}
+ /@webassemblyjs/helper-numbers@1.11.5:
+ resolution: {integrity: sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA==}
dependencies:
- '@webassemblyjs/floating-point-hex-parser': 1.11.1
- '@webassemblyjs/helper-api-error': 1.11.1
+ '@webassemblyjs/floating-point-hex-parser': 1.11.5
+ '@webassemblyjs/helper-api-error': 1.11.5
'@xtuc/long': 4.2.2
dev: true
- /@webassemblyjs/helper-wasm-bytecode@1.11.1:
- resolution: {integrity: sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==}
+ /@webassemblyjs/helper-wasm-bytecode@1.11.5:
+ resolution: {integrity: sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA==}
dev: true
- /@webassemblyjs/helper-wasm-section@1.11.1:
- resolution: {integrity: sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==}
+ /@webassemblyjs/helper-wasm-section@1.11.5:
+ resolution: {integrity: sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA==}
dependencies:
- '@webassemblyjs/ast': 1.11.1
- '@webassemblyjs/helper-buffer': 1.11.1
- '@webassemblyjs/helper-wasm-bytecode': 1.11.1
- '@webassemblyjs/wasm-gen': 1.11.1
+ '@webassemblyjs/ast': 1.11.5
+ '@webassemblyjs/helper-buffer': 1.11.5
+ '@webassemblyjs/helper-wasm-bytecode': 1.11.5
+ '@webassemblyjs/wasm-gen': 1.11.5
dev: true
- /@webassemblyjs/ieee754@1.11.1:
- resolution: {integrity: sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==}
+ /@webassemblyjs/ieee754@1.11.5:
+ resolution: {integrity: sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg==}
dependencies:
'@xtuc/ieee754': 1.2.0
dev: true
- /@webassemblyjs/leb128@1.11.1:
- resolution: {integrity: sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==}
+ /@webassemblyjs/leb128@1.11.5:
+ resolution: {integrity: sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ==}
dependencies:
'@xtuc/long': 4.2.2
dev: true
- /@webassemblyjs/utf8@1.11.1:
- resolution: {integrity: sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==}
+ /@webassemblyjs/utf8@1.11.5:
+ resolution: {integrity: sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ==}
dev: true
- /@webassemblyjs/wasm-edit@1.11.1:
- resolution: {integrity: sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==}
+ /@webassemblyjs/wasm-edit@1.11.5:
+ resolution: {integrity: sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ==}
dependencies:
- '@webassemblyjs/ast': 1.11.1
- '@webassemblyjs/helper-buffer': 1.11.1
- '@webassemblyjs/helper-wasm-bytecode': 1.11.1
- '@webassemblyjs/helper-wasm-section': 1.11.1
- '@webassemblyjs/wasm-gen': 1.11.1
- '@webassemblyjs/wasm-opt': 1.11.1
- '@webassemblyjs/wasm-parser': 1.11.1
- '@webassemblyjs/wast-printer': 1.11.1
+ '@webassemblyjs/ast': 1.11.5
+ '@webassemblyjs/helper-buffer': 1.11.5
+ '@webassemblyjs/helper-wasm-bytecode': 1.11.5
+ '@webassemblyjs/helper-wasm-section': 1.11.5
+ '@webassemblyjs/wasm-gen': 1.11.5
+ '@webassemblyjs/wasm-opt': 1.11.5
+ '@webassemblyjs/wasm-parser': 1.11.5
+ '@webassemblyjs/wast-printer': 1.11.5
dev: true
- /@webassemblyjs/wasm-gen@1.11.1:
- resolution: {integrity: sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==}
+ /@webassemblyjs/wasm-gen@1.11.5:
+ resolution: {integrity: sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA==}
dependencies:
- '@webassemblyjs/ast': 1.11.1
- '@webassemblyjs/helper-wasm-bytecode': 1.11.1
- '@webassemblyjs/ieee754': 1.11.1
- '@webassemblyjs/leb128': 1.11.1
- '@webassemblyjs/utf8': 1.11.1
+ '@webassemblyjs/ast': 1.11.5
+ '@webassemblyjs/helper-wasm-bytecode': 1.11.5
+ '@webassemblyjs/ieee754': 1.11.5
+ '@webassemblyjs/leb128': 1.11.5
+ '@webassemblyjs/utf8': 1.11.5
dev: true
- /@webassemblyjs/wasm-opt@1.11.1:
- resolution: {integrity: sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==}
+ /@webassemblyjs/wasm-opt@1.11.5:
+ resolution: {integrity: sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw==}
dependencies:
- '@webassemblyjs/ast': 1.11.1
- '@webassemblyjs/helper-buffer': 1.11.1
- '@webassemblyjs/wasm-gen': 1.11.1
- '@webassemblyjs/wasm-parser': 1.11.1
+ '@webassemblyjs/ast': 1.11.5
+ '@webassemblyjs/helper-buffer': 1.11.5
+ '@webassemblyjs/wasm-gen': 1.11.5
+ '@webassemblyjs/wasm-parser': 1.11.5
dev: true
- /@webassemblyjs/wasm-parser@1.11.1:
- resolution: {integrity: sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==}
+ /@webassemblyjs/wasm-parser@1.11.5:
+ resolution: {integrity: sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew==}
dependencies:
- '@webassemblyjs/ast': 1.11.1
- '@webassemblyjs/helper-api-error': 1.11.1
- '@webassemblyjs/helper-wasm-bytecode': 1.11.1
- '@webassemblyjs/ieee754': 1.11.1
- '@webassemblyjs/leb128': 1.11.1
- '@webassemblyjs/utf8': 1.11.1
+ '@webassemblyjs/ast': 1.11.5
+ '@webassemblyjs/helper-api-error': 1.11.5
+ '@webassemblyjs/helper-wasm-bytecode': 1.11.5
+ '@webassemblyjs/ieee754': 1.11.5
+ '@webassemblyjs/leb128': 1.11.5
+ '@webassemblyjs/utf8': 1.11.5
dev: true
- /@webassemblyjs/wast-printer@1.11.1:
- resolution: {integrity: sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==}
+ /@webassemblyjs/wast-printer@1.11.5:
+ resolution: {integrity: sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA==}
dependencies:
- '@webassemblyjs/ast': 1.11.1
+ '@webassemblyjs/ast': 1.11.5
'@xtuc/long': 4.2.2
dev: true
@@ -782,12 +1001,23 @@ packages:
color-convert: 2.0.1
dev: true
+ /append-buffer@1.0.2:
+ resolution: {integrity: sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ buffer-equal: 1.0.1
+ dev: true
+
/argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
dependencies:
sprintf-js: 1.0.3
dev: true
+ /argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+ dev: true
+
/array-union@2.1.0:
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
engines: {node: '>=8'}
@@ -813,6 +1043,10 @@ packages:
readable-stream: 3.6.2
dev: true
+ /boolbase@1.0.0:
+ resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+ dev: true
+
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
dependencies:
@@ -827,15 +1061,55 @@ packages:
fill-range: 7.0.1
dev: true
+ /broccoli-node-api@1.7.0:
+ resolution: {integrity: sha512-QIqLSVJWJUVOhclmkmypJJH9u9s/aWH4+FH6Q6Ju5l+Io4dtwqdPUNmDfw40o6sxhbZHhqGujDJuHTML1wG8Yw==}
+ dev: true
+
+ /broccoli-node-info@2.2.0:
+ resolution: {integrity: sha512-VabSGRpKIzpmC+r+tJueCE5h8k6vON7EIMMWu6d/FyPdtijwLQ7QvzShEw+m3mHoDzUaj/kiZsDYrS8X2adsBg==}
+ engines: {node: 8.* || >= 10.*}
+ dev: true
+
+ /broccoli-output-wrapper@3.2.5:
+ resolution: {integrity: sha512-bQAtwjSrF4Nu0CK0JOy5OZqw9t5U0zzv2555EA/cF8/a8SLDTIetk9UgrtMVw7qKLKdSpOZ2liZNeZZDaKgayw==}
+ engines: {node: 10.* || >= 12.*}
+ dependencies:
+ fs-extra: 8.1.0
+ heimdalljs-logger: 0.1.10
+ symlink-or-copy: 1.3.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /broccoli-plugin@4.0.7:
+ resolution: {integrity: sha512-a4zUsWtA1uns1K7p9rExYVYG99rdKeGRymW0qOCNkvDPHQxVi3yVyJHhQbM3EZwdt2E0mnhr5e0c/bPpJ7p3Wg==}
+ engines: {node: 10.* || >= 12.*}
+ dependencies:
+ broccoli-node-api: 1.7.0
+ broccoli-output-wrapper: 3.2.5
+ fs-merger: 3.2.1
+ promise-map-series: 0.3.0
+ quick-temp: 0.1.8
+ rimraf: 3.0.2
+ symlink-or-copy: 1.3.1
+ transitivePeerDependencies:
+ - supports-color
+ 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.30001474
- electron-to-chromium: 1.4.352
+ caniuse-lite: 1.0.30001481
+ electron-to-chromium: 1.4.377
node-releases: 2.0.10
- update-browserslist-db: 1.0.10(browserslist@4.21.5)
+ update-browserslist-db: 1.0.11(browserslist@4.21.5)
+ dev: true
+
+ /buffer-equal@1.0.1:
+ resolution: {integrity: sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==}
+ engines: {node: '>=0.4'}
dev: true
/buffer-from@1.1.2:
@@ -854,6 +1128,13 @@ packages:
engines: {node: '>=6'}
dev: true
+ /call-bind@1.0.2:
+ resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
+ dependencies:
+ function-bind: 1.1.1
+ get-intrinsic: 1.2.0
+ dev: true
+
/caller-callsite@2.0.0:
resolution: {integrity: sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==}
engines: {node: '>=4'}
@@ -873,8 +1154,8 @@ packages:
engines: {node: '>=4'}
dev: true
- /caniuse-lite@1.0.30001474:
- resolution: {integrity: sha512-iaIZ8gVrWfemh5DG3T9/YqarVZoYf0r188IjaGwx68j4Pf0SGY6CQkmJUIE+NZHkkecQGohzXmBGEwWDr9aM3Q==}
+ /caniuse-lite@1.0.30001481:
+ resolution: {integrity: sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==}
dev: true
/ccount@2.0.1:
@@ -906,6 +1187,30 @@ packages:
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
dev: true
+ /cheerio-select@2.1.0:
+ resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==}
+ dependencies:
+ boolbase: 1.0.0
+ css-select: 5.1.0
+ css-what: 6.1.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ domutils: 3.0.1
+ dev: true
+
+ /cheerio@1.0.0-rc.12:
+ resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==}
+ engines: {node: '>= 6'}
+ dependencies:
+ cheerio-select: 2.1.0
+ dom-serializer: 2.0.0
+ domhandler: 5.0.3
+ domutils: 3.0.1
+ htmlparser2: 8.0.2
+ parse5: 7.1.2
+ parse5-htmlparser2-tree-adapter: 7.0.0
+ dev: true
+
/chrome-trace-event@1.0.3:
resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==}
engines: {node: '>=6.0'}
@@ -923,8 +1228,8 @@ packages:
restore-cursor: 3.1.0
dev: true
- /cli-spinners@2.7.0:
- resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==}
+ /cli-spinners@2.8.0:
+ resolution: {integrity: sha512-/eG5sJcvEIwxcdYM86k5tPwn0MUzkX5YY3eImTGpJOZgVe4SdTMY14vQpcxgBzJ0wXwAYrS8E+c3uHeK4JNyzQ==}
engines: {node: '>=6'}
dev: true
@@ -933,11 +1238,33 @@ packages:
engines: {node: '>= 10'}
dev: true
+ /clone-buffer@1.0.0:
+ resolution: {integrity: sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==}
+ engines: {node: '>= 0.10'}
+ dev: true
+
+ /clone-stats@1.0.0:
+ resolution: {integrity: sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==}
+ dev: true
+
/clone@1.0.4:
resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
engines: {node: '>=0.8'}
dev: true
+ /clone@2.1.2:
+ resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==}
+ engines: {node: '>=0.8'}
+ dev: true
+
+ /cloneable-readable@1.1.3:
+ resolution: {integrity: sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==}
+ dependencies:
+ inherits: 2.0.4
+ process-nextick-args: 2.0.1
+ readable-stream: 2.3.8
+ dev: true
+
/color-convert@1.9.3:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
dependencies:
@@ -963,10 +1290,20 @@ packages:
resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
dev: false
+ /colors@1.4.0:
+ resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==}
+ engines: {node: '>=0.1.90'}
+ dev: true
+
/comma-separated-tokens@2.0.3:
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
dev: false
+ /commander@10.0.1:
+ resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
+ engines: {node: '>=14'}
+ dev: true
+
/commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
dev: true
@@ -979,10 +1316,24 @@ packages:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
dev: true
+ /concat-stream@2.0.0:
+ resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==}
+ engines: {'0': node >= 6.0}
+ dependencies:
+ buffer-from: 1.1.2
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+ typedarray: 0.0.6
+ dev: true
+
/convert-source-map@1.9.0:
resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
dev: true
+ /core-util-is@1.0.3:
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+ dev: true
+
/cosmiconfig@5.2.1:
resolution: {integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==}
engines: {node: '>=4'}
@@ -993,9 +1344,47 @@ packages:
parse-json: 4.0.0
dev: true
+ /cross-fetch@3.1.5:
+ resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==}
+ dependencies:
+ node-fetch: 2.6.7
+ transitivePeerDependencies:
+ - encoding
+ dev: false
+
+ /css-select@5.1.0:
+ resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.1.0
+ domhandler: 5.0.3
+ domutils: 3.0.1
+ nth-check: 2.1.1
+ dev: true
+
+ /css-what@6.1.0:
+ resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
+ engines: {node: '>= 6'}
+ dev: true
+
/csstype@3.1.2:
resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
+ /de-indent@1.0.2:
+ resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
+ dev: true
+
+ /debug@2.6.9:
+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.0.0
+ dev: true
+
/debug@4.3.4:
resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
engines: {node: '>=6.0'}
@@ -1028,6 +1417,14 @@ packages:
clone: 1.0.4
dev: true
+ /define-properties@1.2.0:
+ resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-property-descriptors: 1.0.0
+ object-keys: 1.1.1
+ dev: true
+
/del@5.1.0:
resolution: {integrity: sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==}
engines: {node: '>=8'}
@@ -1064,30 +1461,115 @@ packages:
path-type: 4.0.0
dev: true
- /electron-to-chromium@1.4.352:
- resolution: {integrity: sha512-ikFUEyu5/q+wJpMOxWxTaEVk2M1qKqTGKKyfJmod1CPZxKfYnxVS41/GCBQg21ItBpZybyN8sNpRqCUGm+Zc4Q==}
+ /dom-serializer@2.0.0:
+ resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ entities: 4.5.0
+ dev: true
+
+ /domelementtype@2.3.0:
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+ dev: true
+
+ /domhandler@5.0.3:
+ resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
+ engines: {node: '>= 4'}
+ dependencies:
+ domelementtype: 2.3.0
+ dev: true
+
+ /domutils@3.0.1:
+ resolution: {integrity: sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==}
+ dependencies:
+ dom-serializer: 2.0.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ dev: true
+
+ /duplexify@3.7.1:
+ resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==}
+ dependencies:
+ end-of-stream: 1.4.4
+ inherits: 2.0.4
+ readable-stream: 2.3.8
+ stream-shift: 1.0.1
+ dev: true
+
+ /electron-to-chromium@1.4.377:
+ resolution: {integrity: sha512-H3BYG6DW5Z+l0xcfXaicJGxrpA4kMlCxnN71+iNX+dBLkRMOdVJqFJiAmbNZZKA1zISpRg17JR03qGifXNsJtw==}
dev: true
/emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
dev: true
- /enhanced-resolve@5.12.0:
- resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==}
+ /end-of-stream@1.4.4:
+ resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
+ dependencies:
+ once: 1.4.0
+ dev: true
+
+ /enhanced-resolve@5.13.0:
+ resolution: {integrity: sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg==}
engines: {node: '>=10.13.0'}
dependencies:
graceful-fs: 4.2.11
tapable: 2.2.1
dev: true
+ /ensure-posix-path@1.1.1:
+ resolution: {integrity: sha512-VWU0/zXzVbeJNXvME/5EmLuEj2TauvoaTz6aFYK1Z92JCBlDlZ3Gu0tuGR42kpW1754ywTs+QB0g5TP0oj9Zaw==}
+ dev: true
+
+ /entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+ dev: true
+
+ /eol@0.9.1:
+ resolution: {integrity: sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==}
+ dev: true
+
/error-ex@1.3.2:
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
dependencies:
is-arrayish: 0.2.1
dev: true
- /es-module-lexer@0.9.3:
- resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==}
+ /es-module-lexer@1.2.1:
+ resolution: {integrity: sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==}
+ dev: true
+
+ /esbuild@0.17.18:
+ resolution: {integrity: sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ optionalDependencies:
+ '@esbuild/android-arm': 0.17.18
+ '@esbuild/android-arm64': 0.17.18
+ '@esbuild/android-x64': 0.17.18
+ '@esbuild/darwin-arm64': 0.17.18
+ '@esbuild/darwin-x64': 0.17.18
+ '@esbuild/freebsd-arm64': 0.17.18
+ '@esbuild/freebsd-x64': 0.17.18
+ '@esbuild/linux-arm': 0.17.18
+ '@esbuild/linux-arm64': 0.17.18
+ '@esbuild/linux-ia32': 0.17.18
+ '@esbuild/linux-loong64': 0.17.18
+ '@esbuild/linux-mips64el': 0.17.18
+ '@esbuild/linux-ppc64': 0.17.18
+ '@esbuild/linux-riscv64': 0.17.18
+ '@esbuild/linux-s390x': 0.17.18
+ '@esbuild/linux-x64': 0.17.18
+ '@esbuild/netbsd-x64': 0.17.18
+ '@esbuild/openbsd-x64': 0.17.18
+ '@esbuild/sunos-x64': 0.17.18
+ '@esbuild/win32-arm64': 0.17.18
+ '@esbuild/win32-ia32': 0.17.18
+ '@esbuild/win32-x64': 0.17.18
dev: true
/escalade@3.1.1:
@@ -1151,7 +1633,6 @@ packages:
/extend@3.0.2:
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
- dev: false
/external-editor@3.1.0:
resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
@@ -1166,6 +1647,10 @@ packages:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
dev: true
+ /fast-fifo@1.2.0:
+ resolution: {integrity: sha512-NcvQXt7Cky1cNau15FWy64IjuO8X0JijhTBBrJj1YlxlDfRkJXNaK9RFUjwpfDPzMdv7wB38jr53l9tkNLxnWg==}
+ dev: true
+
/fast-glob@3.2.12:
resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
engines: {node: '>=8.6.0'}
@@ -1209,6 +1694,64 @@ packages:
resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
dev: true
+ /flush-write-stream@1.1.1:
+ resolution: {integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==}
+ dependencies:
+ inherits: 2.0.4
+ readable-stream: 2.3.8
+ dev: true
+
+ /fs-extra@11.1.1:
+ resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==}
+ engines: {node: '>=14.14'}
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 2.0.0
+ dev: true
+
+ /fs-extra@8.1.0:
+ resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
+ engines: {node: '>=6 <7 || >=8'}
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 4.0.0
+ universalify: 0.1.2
+ dev: true
+
+ /fs-merger@3.2.1:
+ resolution: {integrity: sha512-AN6sX12liy0JE7C2evclwoo0aCG3PFulLjrTLsJpWh/2mM+DinhpSGqYLbHBBbIW1PLRNcFhJG8Axtz8mQW3ug==}
+ dependencies:
+ broccoli-node-api: 1.7.0
+ broccoli-node-info: 2.2.0
+ fs-extra: 8.1.0
+ fs-tree-diff: 2.0.1
+ walk-sync: 2.2.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /fs-mkdirp-stream@1.0.0:
+ resolution: {integrity: sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==}
+ engines: {node: '>= 0.10'}
+ dependencies:
+ graceful-fs: 4.2.11
+ through2: 2.0.5
+ dev: true
+
+ /fs-tree-diff@2.0.1:
+ resolution: {integrity: sha512-x+CfAZ/lJHQqwlD64pYM5QxWjzWhSjroaVsr8PW831zOApL55qPibed0c+xebaLWVr2BnHFoHdrwOv8pzt8R5A==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+ dependencies:
+ '@types/symlink-or-copy': 1.2.0
+ heimdalljs-logger: 0.1.10
+ object-assign: 4.1.1
+ path-posix: 1.0.0
+ symlink-or-copy: 1.3.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
dev: true
@@ -1230,6 +1773,21 @@ packages:
engines: {node: '>=6.9.0'}
dev: true
+ /get-intrinsic@1.2.0:
+ resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==}
+ dependencies:
+ function-bind: 1.1.1
+ has: 1.0.3
+ has-symbols: 1.0.3
+ dev: true
+
+ /glob-parent@3.1.0:
+ resolution: {integrity: sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==}
+ dependencies:
+ is-glob: 3.1.0
+ path-dirname: 1.0.2
+ dev: true
+
/glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
@@ -1237,6 +1795,22 @@ packages:
is-glob: 4.0.3
dev: true
+ /glob-stream@6.1.0:
+ resolution: {integrity: sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==}
+ engines: {node: '>= 0.10'}
+ dependencies:
+ extend: 3.0.2
+ glob: 7.2.3
+ glob-parent: 3.1.0
+ is-negated-glob: 1.0.0
+ ordered-read-streams: 1.0.1
+ pumpify: 1.5.1
+ readable-stream: 2.3.8
+ remove-trailing-separator: 1.1.0
+ to-absolute-glob: 2.0.2
+ unique-stream: 2.3.1
+ dev: true
+
/glob-to-regexp@0.4.1:
resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
dev: true
@@ -1275,6 +1849,12 @@ packages:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
dev: true
+ /gulp-sort@2.0.0:
+ resolution: {integrity: sha512-MyTel3FXOdh1qhw1yKhpimQrAmur9q1X0ZigLmCOxouQD+BD3za9/89O+HfbgBQvvh4igEbp0/PUWO+VqGYG1g==}
+ dependencies:
+ through2: 2.0.5
+ dev: true
+
/has-flag@3.0.0:
resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
engines: {node: '>=4'}
@@ -1285,6 +1865,17 @@ packages:
engines: {node: '>=8'}
dev: true
+ /has-property-descriptors@1.0.0:
+ resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
+ dependencies:
+ get-intrinsic: 1.2.0
+ dev: true
+
+ /has-symbols@1.0.3:
+ resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
/has@1.0.3:
resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
engines: {node: '>= 0.4.0'}
@@ -1296,12 +1887,95 @@ packages:
resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==}
dev: false
+ /he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+ dev: true
+
+ /heimdalljs-logger@0.1.10:
+ resolution: {integrity: sha512-pO++cJbhIufVI/fmB/u2Yty3KJD0TqNPecehFae0/eps0hkZ3b4Zc/PezUMOpYuHFQbA7FxHZxa305EhmjLj4g==}
+ dependencies:
+ debug: 2.6.9
+ heimdalljs: 0.2.6
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /heimdalljs@0.2.6:
+ resolution: {integrity: sha512-o9bd30+5vLBvBtzCPwwGqpry2+n0Hi6H1+qwt6y+0kwRHGGF8TFIhJPmnuM0xO97zaKrDZMwO/V56fAnn8m/tA==}
+ dependencies:
+ rsvp: 3.2.1
+ dev: true
+
+ /html-parse-stringify@3.0.1:
+ resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==}
+ dependencies:
+ void-elements: 3.1.0
+ dev: false
+
+ /htmlparser2@8.0.2:
+ resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ domutils: 3.0.1
+ entities: 4.5.0
+ dev: true
+
/husky@8.0.3:
resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==}
engines: {node: '>=14'}
hasBin: true
dev: true
+ /i18next-browser-languagedetector@7.0.1:
+ resolution: {integrity: sha512-Pa5kFwaczXJAeHE56CHG2aWzFBMJNUNghf0Pm4SwSrEMps/PTKqW90EYWlIvhuYStf3Sn1K0vw+gH3+TLdkH1g==}
+ dependencies:
+ '@babel/runtime': 7.21.5
+ dev: false
+
+ /i18next-http-backend@2.2.0:
+ resolution: {integrity: sha512-Z4sM7R6tzdLknSPER9GisEBxKPg5FkI07UrQniuroZmS15PHQrcCPLyuGKj8SS68tf+O2aEDYSUnmy1TZqZSbw==}
+ dependencies:
+ cross-fetch: 3.1.5
+ transitivePeerDependencies:
+ - encoding
+ dev: false
+
+ /i18next-parser@7.7.0:
+ resolution: {integrity: sha512-t64bvrr+G+wbZSEr3nZ61j3l7YFvJnPBNTlS90VM3KnxRf6gmtZv76ppUXBEdepr2CGkO+ZY6arzBJ8gGs2suQ==}
+ engines: {node: ^14.13.1 || >=16.0.0 || >=18.0.0, npm: '>=6', yarn: '>=1'}
+ hasBin: true
+ dependencies:
+ '@babel/runtime': 7.21.5
+ broccoli-plugin: 4.0.7
+ cheerio: 1.0.0-rc.12
+ colors: 1.4.0
+ commander: 10.0.1
+ concat-stream: 2.0.0
+ eol: 0.9.1
+ esbuild: 0.17.18
+ fs-extra: 11.1.1
+ gulp-sort: 2.0.0
+ i18next: 22.4.15
+ js-yaml: 4.1.0
+ lilconfig: 2.1.0
+ rsvp: 4.8.5
+ sort-keys: 5.0.0
+ through2: 4.0.2
+ typescript: 4.9.5
+ vinyl: 3.0.0
+ vinyl-fs: 3.0.3
+ vue-template-compiler: 2.7.14
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /i18next@22.4.15:
+ resolution: {integrity: sha512-yYudtbFrrmWKLEhl6jvKUYyYunj4bTBCe2qIUYAxbXoPusY7YmdwPvOE6fx6UIfWvmlbCWDItr7wIs8KEBZ5Zg==}
+ dependencies:
+ '@babel/runtime': 7.21.5
+
/iconv-lite@0.4.24:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
@@ -1338,10 +2012,10 @@ packages:
/import-sort-parser-babylon@6.0.0:
resolution: {integrity: sha512-NyShTiNhTh4Vy7kJUVe6CuvOaQAzzfSIT72wtp3CzGjz8bHjNj59DCAjncuviicmDOgVAgmLuSh1WMcLYAMWGg==}
dependencies:
- '@babel/core': 7.21.4
- '@babel/parser': 7.21.4
- '@babel/traverse': 7.21.4
- '@babel/types': 7.21.4
+ '@babel/core': 7.21.5
+ '@babel/parser': 7.21.5
+ '@babel/traverse': 7.21.5
+ '@babel/types': 7.21.5
find-line-column: 0.5.2
transitivePeerDependencies:
- supports-color
@@ -1372,7 +2046,7 @@ packages:
import-sort-parser: 6.0.0
import-sort-style: 6.0.0
is-builtin-module: 3.2.1
- resolve: 1.22.1
+ resolve: 1.22.2
dev: true
/indent-string@4.0.0:
@@ -1409,17 +2083,29 @@ packages:
mute-stream: 0.0.8
ora: 5.4.1
run-async: 2.4.1
- rxjs: 7.8.0
+ rxjs: 7.8.1
string-width: 4.2.3
strip-ansi: 6.0.1
through: 2.3.8
wrap-ansi: 7.0.0
dev: true
+ /is-absolute@1.0.0:
+ resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-relative: 1.0.0
+ is-windows: 1.0.2
+ dev: true
+
/is-arrayish@0.2.1:
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
dev: true
+ /is-buffer@1.1.6:
+ resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==}
+ dev: true
+
/is-buffer@2.0.5:
resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
engines: {node: '>=4'}
@@ -1432,8 +2118,8 @@ packages:
builtin-modules: 3.3.0
dev: true
- /is-core-module@2.11.0:
- resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==}
+ /is-core-module@2.12.0:
+ resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==}
dependencies:
has: 1.0.3
dev: true
@@ -1453,6 +2139,13 @@ packages:
engines: {node: '>=8'}
dev: true
+ /is-glob@3.1.0:
+ resolution: {integrity: sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-extglob: 2.1.1
+ dev: true
+
/is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
@@ -1469,6 +2162,11 @@ packages:
resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
dev: true
+ /is-negated-glob@1.0.0:
+ resolution: {integrity: sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
/is-number@7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
@@ -1487,12 +2185,25 @@ packages:
/is-plain-obj@4.1.0:
resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
engines: {node: '>=12'}
- dev: false
/is-reference@1.2.1:
resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
dependencies:
- '@types/estree': 1.0.0
+ '@types/estree': 1.0.1
+ dev: true
+
+ /is-relative@1.0.0:
+ resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-unc-path: 1.0.0
+ dev: true
+
+ /is-unc-path@1.0.0:
+ resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ unc-path-regex: 0.1.2
dev: true
/is-unicode-supported@0.1.0:
@@ -1500,11 +2211,29 @@ packages:
engines: {node: '>=10'}
dev: true
+ /is-utf8@0.2.1:
+ resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==}
+ dev: true
+
+ /is-valid-glob@1.0.0:
+ resolution: {integrity: sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /is-windows@1.0.2:
+ resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /isarray@1.0.0:
+ resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
+ dev: true
+
/jest-worker@27.5.1:
resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
engines: {node: '>= 10.13.0'}
dependencies:
- '@types/node': 18.15.11
+ '@types/node': 18.16.2
merge-stream: 2.0.0
supports-color: 8.1.1
dev: true
@@ -1520,6 +2249,13 @@ packages:
esprima: 4.0.1
dev: true
+ /js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+ dependencies:
+ argparse: 2.0.1
+ dev: true
+
/jsesc@2.5.2:
resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
engines: {node: '>=4'}
@@ -1538,17 +2274,54 @@ packages:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
dev: true
+ /json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+ dev: true
+
/json5@2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
engines: {node: '>=6'}
hasBin: true
dev: true
+ /jsonfile@4.0.0:
+ resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
+ optionalDependencies:
+ graceful-fs: 4.2.11
+ dev: true
+
+ /jsonfile@6.1.0:
+ resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
+ dependencies:
+ universalify: 2.0.0
+ optionalDependencies:
+ graceful-fs: 4.2.11
+ dev: true
+
/kleur@4.1.5:
resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
engines: {node: '>=6'}
dev: false
+ /lazystream@1.0.1:
+ resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==}
+ engines: {node: '>= 0.6.3'}
+ dependencies:
+ readable-stream: 2.3.8
+ dev: true
+
+ /lead@1.0.0:
+ resolution: {integrity: sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==}
+ engines: {node: '>= 0.10'}
+ dependencies:
+ flush-write-stream: 1.1.1
+ dev: true
+
+ /lilconfig@2.1.0:
+ resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
+ engines: {node: '>=10'}
+ dev: true
+
/loader-runner@4.3.0:
resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
engines: {node: '>=6.11.5'}
@@ -1596,6 +2369,14 @@ packages:
resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==}
dev: false
+ /matcher-collection@2.0.1:
+ resolution: {integrity: sha512-daE62nS2ZQsDg9raM0IlZzLmI2u+7ZapXBwdoeBUKAYERPDDIc0qNqA8E0Rp2D+gspKR7BgIFP52GeujaGXWeQ==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+ dependencies:
+ '@types/minimatch': 3.0.5
+ minimatch: 3.1.2
+ dev: true
+
/mdast-util-definitions@5.1.2:
resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==}
dependencies:
@@ -1767,8 +2548,8 @@ packages:
uvu: 0.5.6
dev: false
- /micromark-extension-gfm-footnote@1.0.4:
- resolution: {integrity: sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==}
+ /micromark-extension-gfm-footnote@1.1.0:
+ resolution: {integrity: sha512-RWYce7j8+c0n7Djzv5NzGEGitNNYO3uj+h/XYMdS/JinH1Go+/Qkomg/rfxExFzYTiydaV6GLeffGO5qcJbMPA==}
dependencies:
micromark-core-commonmark: 1.0.6
micromark-factory-space: 1.0.0
@@ -1821,7 +2602,7 @@ packages:
resolution: {integrity: sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==}
dependencies:
micromark-extension-gfm-autolink-literal: 1.0.3
- micromark-extension-gfm-footnote: 1.0.4
+ micromark-extension-gfm-footnote: 1.1.0
micromark-extension-gfm-strikethrough: 1.0.5
micromark-extension-gfm-table: 1.0.5
micromark-extension-gfm-tagfilter: 1.0.2
@@ -2021,11 +2802,20 @@ packages:
brace-expansion: 1.1.11
dev: true
+ /mktemp@0.4.0:
+ resolution: {integrity: sha512-IXnMcJ6ZyTuhRmJSjzvHSRhlVPiN9Jwc6e59V0bEJ0ba6OBeX2L0E+mRN1QseeOF4mM+F1Rit6Nh7o+rl2Yn/A==}
+ engines: {node: '>0.9'}
+ dev: true
+
/mri@1.2.0:
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
engines: {node: '>=4'}
dev: false
+ /ms@2.0.0:
+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+ dev: true
+
/ms@2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
@@ -2037,14 +2827,61 @@ packages:
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
dev: true
+ /node-fetch@2.6.7:
+ resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+ dependencies:
+ whatwg-url: 5.0.0
+ dev: false
+
/node-releases@2.0.10:
resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==}
dev: true
+ /normalize-path@2.1.1:
+ resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ remove-trailing-separator: 1.1.0
+ dev: true
+
+ /now-and-later@2.0.1:
+ resolution: {integrity: sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==}
+ engines: {node: '>= 0.10'}
+ dependencies:
+ once: 1.4.0
+ dev: true
+
+ /nth-check@2.1.1:
+ resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
+ dependencies:
+ boolbase: 1.0.0
+ dev: true
+
/object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
+ /object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /object.assign@4.1.4:
+ resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.2.0
+ has-symbols: 1.0.3
+ object-keys: 1.1.1
+ dev: true
+
/once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
dependencies:
@@ -2065,7 +2902,7 @@ packages:
bl: 4.1.0
chalk: 4.1.2
cli-cursor: 3.1.0
- cli-spinners: 2.7.0
+ cli-spinners: 2.8.0
is-interactive: 1.0.0
is-unicode-supported: 0.1.0
log-symbols: 4.1.0
@@ -2073,6 +2910,12 @@ packages:
wcwidth: 1.0.1
dev: true
+ /ordered-read-streams@1.0.1:
+ resolution: {integrity: sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==}
+ dependencies:
+ readable-stream: 2.3.8
+ dev: true
+
/os-tmpdir@1.0.2:
resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
engines: {node: '>=0.10.0'}
@@ -2093,6 +2936,23 @@ packages:
json-parse-better-errors: 1.0.2
dev: true
+ /parse5-htmlparser2-tree-adapter@7.0.0:
+ resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==}
+ dependencies:
+ domhandler: 5.0.3
+ parse5: 7.1.2
+ dev: true
+
+ /parse5@7.1.2:
+ resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==}
+ dependencies:
+ entities: 4.5.0
+ dev: true
+
+ /path-dirname@1.0.2:
+ resolution: {integrity: sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==}
+ dev: true
+
/path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
@@ -2102,6 +2962,10 @@ packages:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
dev: true
+ /path-posix@1.0.0:
+ resolution: {integrity: sha512-1gJ0WpNIiYcQydgg3Ed8KzvIqTsDpNwq+cjBCssvBtuTWjEqY1AW+i+OepiEMqDCzyro9B2sLAe4RBPajMYFiA==}
+ dev: true
+
/path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
@@ -2116,7 +2980,7 @@ packages:
engines: {node: '>=8.6'}
dev: true
- /prettier-plugin-import-sort@0.0.7(prettier@2.8.7):
+ /prettier-plugin-import-sort@0.0.7(prettier@2.8.8):
resolution: {integrity: sha512-O0KlUSq+lwvh+UiN3wZDT6wWkf7TNxTVv2/XXE5KqpRNbFJq3nRg2ftzBYFFO8QGpdWIrOB0uCTCtFjIxmVKQw==}
peerDependencies:
prettier: '>= 2.0'
@@ -2125,17 +2989,26 @@ packages:
import-sort-config: 6.0.0
import-sort-parser-babylon: 6.0.0
import-sort-parser-typescript: 6.0.0
- prettier: 2.8.7
+ prettier: 2.8.8
transitivePeerDependencies:
- supports-color
dev: true
- /prettier@2.8.7:
- resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==}
+ /prettier@2.8.8:
+ resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
engines: {node: '>=10.13.0'}
hasBin: true
dev: true
+ /process-nextick-args@2.0.1:
+ resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+ dev: true
+
+ /promise-map-series@0.3.0:
+ resolution: {integrity: sha512-3npG2NGhTc8BWBolLLf8l/92OxMGaRLbqvIh9wjCHhDXNvk4zsxaTaCpiCunW09qWPrN2zeNSNwRLVBrQQtutA==}
+ engines: {node: 10.* || >= 12.*}
+ dev: true
+
/prop-types@15.8.1:
resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
dependencies:
@@ -2147,6 +3020,21 @@ packages:
resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==}
dev: false
+ /pump@2.0.1:
+ resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==}
+ dependencies:
+ end-of-stream: 1.4.4
+ once: 1.4.0
+ dev: true
+
+ /pumpify@1.5.1:
+ resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==}
+ dependencies:
+ duplexify: 3.7.1
+ inherits: 2.0.4
+ pump: 2.0.1
+ dev: true
+
/punycode@2.3.0:
resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
engines: {node: '>=6'}
@@ -2156,6 +3044,18 @@ packages:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
dev: true
+ /queue-tick@1.0.1:
+ resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==}
+ dev: true
+
+ /quick-temp@0.1.8:
+ resolution: {integrity: sha512-YsmIFfD9j2zaFwJkzI6eMG7y0lQP7YeWzgtFgNl38pGWZBSXJooZbOWwkcRot7Vt0Fg9L23pX0tqWU3VvLDsiA==}
+ dependencies:
+ mktemp: 0.4.0
+ rimraf: 2.7.1
+ underscore.string: 3.3.6
+ dev: true
+
/randombytes@2.1.0:
resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
dependencies:
@@ -2186,6 +3086,26 @@ packages:
react-dom: 16.14.0(react@16.14.0)
dev: false
+ /react-i18next@12.2.2(i18next@22.4.15)(react-dom@16.14.0)(react@16.14.0):
+ resolution: {integrity: sha512-KBB6buBmVKXUWNxXHdnthp+38gPyBT46hJCAIQ8rX19NFL/m2ahte2KARfIDf2tMnSAL7wwck6eDOd/9zn6aFg==}
+ peerDependencies:
+ i18next: '>= 19.0.0'
+ react: '>= 16.8.0'
+ react-dom: '*'
+ react-native: '*'
+ peerDependenciesMeta:
+ react-dom:
+ optional: true
+ react-native:
+ optional: true
+ dependencies:
+ '@babel/runtime': 7.21.5
+ html-parse-stringify: 3.0.1
+ i18next: 22.4.15
+ react: 16.14.0
+ react-dom: 16.14.0(react@16.14.0)
+ dev: false
+
/react-icons@4.8.0(react@16.14.0):
resolution: {integrity: sha512-N6+kOLcihDiAnj5Czu637waJqSnwlMNROzVZMhfX68V/9bu9qHaMIJC4UdozWoOk57gahFCNHwVvWzm0MTzRjg==}
peerDependencies:
@@ -2201,8 +3121,8 @@ packages:
resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
dev: false
- /react-markdown@8.0.6(@types/react@16.14.0)(react@16.14.0):
- resolution: {integrity: sha512-KgPWsYgHuftdx510wwIzpwf+5js/iHqBR+fzxefv8Khk3mFbnioF1bmL2idHN3ler0LMQmICKeDrWnZrX9mtbQ==}
+ /react-markdown@8.0.7(@types/react@16.14.0)(react@16.14.0):
+ resolution: {integrity: sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==}
peerDependencies:
'@types/react': '>=16'
react: '>=16'
@@ -2236,6 +3156,18 @@ packages:
object-assign: 4.1.1
prop-types: 15.8.1
+ /readable-stream@2.3.8:
+ resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
+ dependencies:
+ core-util-is: 1.0.3
+ inherits: 2.0.4
+ isarray: 1.0.0
+ process-nextick-args: 2.0.1
+ safe-buffer: 5.1.2
+ string_decoder: 1.1.1
+ util-deprecate: 1.0.2
+ dev: true
+
/readable-stream@3.6.2:
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
engines: {node: '>= 6'}
@@ -2245,6 +3177,9 @@ packages:
util-deprecate: 1.0.2
dev: true
+ /regenerator-runtime@0.13.11:
+ resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
+
/remark-gfm@3.0.1:
resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==}
dependencies:
@@ -2275,6 +3210,37 @@ packages:
unified: 10.1.2
dev: false
+ /remove-bom-buffer@3.0.0:
+ resolution: {integrity: sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-buffer: 1.1.6
+ is-utf8: 0.2.1
+ dev: true
+
+ /remove-bom-stream@1.2.0:
+ resolution: {integrity: sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==}
+ engines: {node: '>= 0.10'}
+ dependencies:
+ remove-bom-buffer: 3.0.0
+ safe-buffer: 5.2.1
+ through2: 2.0.5
+ dev: true
+
+ /remove-trailing-separator@1.1.0:
+ resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==}
+ dev: true
+
+ /replace-ext@1.0.1:
+ resolution: {integrity: sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==}
+ engines: {node: '>= 0.10'}
+ dev: true
+
+ /replace-ext@2.0.0:
+ resolution: {integrity: sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==}
+ engines: {node: '>= 10'}
+ dev: true
+
/resolve-from@3.0.0:
resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==}
engines: {node: '>=4'}
@@ -2285,11 +3251,18 @@ packages:
engines: {node: '>=4'}
dev: true
- /resolve@1.22.1:
- resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
+ /resolve-options@1.1.0:
+ resolution: {integrity: sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==}
+ engines: {node: '>= 0.10'}
+ dependencies:
+ value-or-function: 3.0.0
+ dev: true
+
+ /resolve@1.22.2:
+ resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==}
hasBin: true
dependencies:
- is-core-module: 2.11.0
+ is-core-module: 2.12.0
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
dev: true
@@ -2307,6 +3280,13 @@ packages:
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
dev: true
+ /rimraf@2.7.1:
+ resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
+ hasBin: true
+ dependencies:
+ glob: 7.2.3
+ dev: true
+
/rimraf@3.0.2:
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
hasBin: true
@@ -2350,6 +3330,15 @@ packages:
fsevents: 2.3.2
dev: true
+ /rsvp@3.2.1:
+ resolution: {integrity: sha512-Rf4YVNYpKjZ6ASAmibcwTNciQ5Co5Ztq6iZPEykHpkoflnD/K5ryE/rHehFsTm4NJj8nKDhbi3eKBWGogmNnkg==}
+ dev: true
+
+ /rsvp@4.8.5:
+ resolution: {integrity: sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==}
+ engines: {node: 6.* || >= 7.*}
+ dev: true
+
/run-async@2.4.1:
resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
engines: {node: '>=0.12.0'}
@@ -2361,8 +3350,8 @@ packages:
queue-microtask: 1.2.3
dev: true
- /rxjs@7.8.0:
- resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==}
+ /rxjs@7.8.1:
+ resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
dependencies:
tslib: 2.5.0
dev: true
@@ -2374,6 +3363,10 @@ packages:
mri: 1.2.0
dev: false
+ /safe-buffer@5.1.2:
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+ dev: true
+
/safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
dev: true
@@ -2388,8 +3381,8 @@ packages:
loose-envify: 1.4.0
object-assign: 4.1.1
- /schema-utils@3.1.1:
- resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==}
+ /schema-utils@3.1.2:
+ resolution: {integrity: sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==}
engines: {node: '>= 10.13.0'}
dependencies:
'@types/json-schema': 7.0.11
@@ -2417,6 +3410,13 @@ packages:
engines: {node: '>=8'}
dev: true
+ /sort-keys@5.0.0:
+ resolution: {integrity: sha512-Pdz01AvCAottHTPQGzndktFNdbRA75BgOfeT1hH+AMnJFv8lynkPi42rfeEhpx1saTEI3YNMWxfqu0sFD1G8pw==}
+ engines: {node: '>=12'}
+ dependencies:
+ is-plain-obj: 4.1.0
+ dev: true
+
/source-map-support@0.5.21:
resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
dependencies:
@@ -2442,6 +3442,21 @@ packages:
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
dev: true
+ /sprintf-js@1.1.2:
+ resolution: {integrity: sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==}
+ dev: true
+
+ /stream-shift@1.0.1:
+ resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==}
+ dev: true
+
+ /streamx@2.13.2:
+ resolution: {integrity: sha512-+TWqixPhGDXEG9L/XczSbhfkmwAtGs3BJX5QNU6cvno+pOLKeszByWcnaTu6dg8efsTYqR8ZZuXWHhZfgrxMvA==}
+ dependencies:
+ fast-fifo: 1.2.0
+ queue-tick: 1.0.1
+ dev: true
+
/string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
@@ -2451,6 +3466,12 @@ packages:
strip-ansi: 6.0.1
dev: true
+ /string_decoder@1.1.1:
+ resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
+ dependencies:
+ safe-buffer: 5.1.2
+ dev: true
+
/string_decoder@1.3.0:
resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
dependencies:
@@ -2496,12 +3517,22 @@ packages:
engines: {node: '>= 0.4'}
dev: true
+ /symlink-or-copy@1.3.1:
+ resolution: {integrity: sha512-0K91MEXFpBUaywiwSSkmKjnGcasG/rVBXFLJz5DrgGabpYD6N+3yZrfD6uUIfpuTu65DZLHi7N8CizHc07BPZA==}
+ dev: true
+
/tapable@2.2.1:
resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
engines: {node: '>=6'}
dev: true
- /terser-webpack-plugin@5.3.7(webpack@5.77.0):
+ /teex@1.0.1:
+ resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==}
+ dependencies:
+ streamx: 2.13.2
+ dev: true
+
+ /terser-webpack-plugin@5.3.7(webpack@5.81.0):
resolution: {integrity: sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==}
engines: {node: '>= 10.13.0'}
peerDependencies:
@@ -2517,25 +3548,45 @@ packages:
uglify-js:
optional: true
dependencies:
- '@jridgewell/trace-mapping': 0.3.17
+ '@jridgewell/trace-mapping': 0.3.18
jest-worker: 27.5.1
- schema-utils: 3.1.1
+ schema-utils: 3.1.2
serialize-javascript: 6.0.1
- terser: 5.16.8
- webpack: 5.77.0
+ terser: 5.17.1
+ webpack: 5.81.0
dev: true
- /terser@5.16.8:
- resolution: {integrity: sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA==}
+ /terser@5.17.1:
+ resolution: {integrity: sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==}
engines: {node: '>=10'}
hasBin: true
dependencies:
- '@jridgewell/source-map': 0.3.2
+ '@jridgewell/source-map': 0.3.3
acorn: 8.8.2
commander: 2.20.3
source-map-support: 0.5.21
dev: true
+ /through2-filter@3.0.0:
+ resolution: {integrity: sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==}
+ dependencies:
+ through2: 2.0.5
+ xtend: 4.0.2
+ dev: true
+
+ /through2@2.0.5:
+ resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
+ dependencies:
+ readable-stream: 2.3.8
+ xtend: 4.0.2
+ dev: true
+
+ /through2@4.0.2:
+ resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==}
+ dependencies:
+ readable-stream: 3.6.2
+ dev: true
+
/through@2.3.8:
resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
dev: true
@@ -2547,6 +3598,14 @@ packages:
os-tmpdir: 1.0.2
dev: true
+ /to-absolute-glob@2.0.2:
+ resolution: {integrity: sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-absolute: 1.0.0
+ is-negated-glob: 1.0.0
+ dev: true
+
/to-fast-properties@2.0.0:
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
engines: {node: '>=4'}
@@ -2559,6 +3618,17 @@ packages:
is-number: 7.0.0
dev: true
+ /to-through@2.0.0:
+ resolution: {integrity: sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==}
+ engines: {node: '>= 0.10'}
+ dependencies:
+ through2: 2.0.5
+ dev: true
+
+ /tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+ dev: false
+
/trim-lines@3.0.1:
resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
dev: false
@@ -2576,6 +3646,10 @@ packages:
engines: {node: '>=10'}
dev: true
+ /typedarray@0.0.6:
+ resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
+ dev: true
+
/typescript@3.9.10:
resolution: {integrity: sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==}
engines: {node: '>=4.2.0'}
@@ -2588,6 +3662,18 @@ packages:
hasBin: true
dev: true
+ /unc-path-regex@0.1.2:
+ resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /underscore.string@3.3.6:
+ resolution: {integrity: sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==}
+ dependencies:
+ sprintf-js: 1.1.2
+ util-deprecate: 1.0.2
+ dev: true
+
/unified@10.1.2:
resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==}
dependencies:
@@ -2600,6 +3686,13 @@ packages:
vfile: 5.3.7
dev: false
+ /unique-stream@2.3.1:
+ resolution: {integrity: sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==}
+ dependencies:
+ json-stable-stringify-without-jsonify: 1.0.1
+ through2-filter: 3.0.0
+ dev: true
+
/unist-util-generated@2.0.1:
resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==}
dev: false
@@ -2637,8 +3730,18 @@ packages:
unist-util-visit-parents: 5.1.3
dev: false
- /update-browserslist-db@1.0.10(browserslist@4.21.5):
- resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==}
+ /universalify@0.1.2:
+ resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
+ engines: {node: '>= 4.0.0'}
+ dev: true
+
+ /universalify@2.0.0:
+ resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
+ engines: {node: '>= 10.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'
@@ -2669,6 +3772,11 @@ packages:
sade: 1.8.1
dev: false
+ /value-or-function@3.0.0:
+ resolution: {integrity: sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==}
+ engines: {node: '>= 0.10'}
+ dev: true
+
/vfile-message@3.1.4:
resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==}
dependencies:
@@ -2685,6 +3793,87 @@ packages:
vfile-message: 3.1.4
dev: false
+ /vinyl-fs@3.0.3:
+ resolution: {integrity: sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==}
+ engines: {node: '>= 0.10'}
+ dependencies:
+ fs-mkdirp-stream: 1.0.0
+ glob-stream: 6.1.0
+ graceful-fs: 4.2.11
+ is-valid-glob: 1.0.0
+ lazystream: 1.0.1
+ lead: 1.0.0
+ object.assign: 4.1.4
+ pumpify: 1.5.1
+ readable-stream: 2.3.8
+ remove-bom-buffer: 3.0.0
+ remove-bom-stream: 1.2.0
+ resolve-options: 1.1.0
+ through2: 2.0.5
+ to-through: 2.0.0
+ value-or-function: 3.0.0
+ vinyl: 2.2.1
+ vinyl-sourcemap: 1.1.0
+ dev: true
+
+ /vinyl-sourcemap@1.1.0:
+ resolution: {integrity: sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==}
+ engines: {node: '>= 0.10'}
+ dependencies:
+ append-buffer: 1.0.2
+ convert-source-map: 1.9.0
+ graceful-fs: 4.2.11
+ normalize-path: 2.1.1
+ now-and-later: 2.0.1
+ remove-bom-buffer: 3.0.0
+ vinyl: 2.2.1
+ dev: true
+
+ /vinyl@2.2.1:
+ resolution: {integrity: sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==}
+ engines: {node: '>= 0.10'}
+ dependencies:
+ clone: 2.1.2
+ clone-buffer: 1.0.0
+ clone-stats: 1.0.0
+ cloneable-readable: 1.1.3
+ remove-trailing-separator: 1.1.0
+ replace-ext: 1.0.1
+ dev: true
+
+ /vinyl@3.0.0:
+ resolution: {integrity: sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==}
+ engines: {node: '>=10.13.0'}
+ dependencies:
+ clone: 2.1.2
+ clone-stats: 1.0.0
+ remove-trailing-separator: 1.1.0
+ replace-ext: 2.0.0
+ teex: 1.0.1
+ dev: true
+
+ /void-elements@3.1.0:
+ resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /vue-template-compiler@2.7.14:
+ resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==}
+ dependencies:
+ de-indent: 1.0.2
+ he: 1.2.0
+ dev: true
+
+ /walk-sync@2.2.0:
+ resolution: {integrity: sha512-IC8sL7aB4/ZgFcGI2T1LczZeFWZ06b3zoHH7jBPyHxOtIIz1jppWHjjEXkOFvFojBVAK9pV7g47xOZ4LW3QLfg==}
+ engines: {node: 8.* || >= 10.*}
+ dependencies:
+ '@types/minimatch': 3.0.5
+ ensure-posix-path: 1.1.1
+ matcher-collection: 2.0.1
+ minimatch: 3.1.2
+ dev: true
+
/watchpack@2.4.0:
resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==}
engines: {node: '>=10.13.0'}
@@ -2699,13 +3888,17 @@ packages:
defaults: 1.0.4
dev: true
+ /webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+ dev: false
+
/webpack-sources@3.2.3:
resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
engines: {node: '>=10.13.0'}
dev: true
- /webpack@5.77.0:
- resolution: {integrity: sha512-sbGNjBr5Ya5ss91yzjeJTLKyfiwo5C628AFjEa6WSXcZa4E+F57om3Cc8xLb1Jh0b243AWuSYRf3dn7HVeFQ9Q==}
+ /webpack@5.81.0:
+ resolution: {integrity: sha512-AAjaJ9S4hYCVODKLQTgG5p5e11hiMawBwV2v8MYLE0C/6UAGLuAF4n1qa9GOwdxnicaP+5k6M5HrLmD4+gIB8Q==}
engines: {node: '>=10.13.0'}
hasBin: true
peerDependencies:
@@ -2715,16 +3908,16 @@ packages:
optional: true
dependencies:
'@types/eslint-scope': 3.7.4
- '@types/estree': 0.0.51
- '@webassemblyjs/ast': 1.11.1
- '@webassemblyjs/wasm-edit': 1.11.1
- '@webassemblyjs/wasm-parser': 1.11.1
+ '@types/estree': 1.0.1
+ '@webassemblyjs/ast': 1.11.5
+ '@webassemblyjs/wasm-edit': 1.11.5
+ '@webassemblyjs/wasm-parser': 1.11.5
acorn: 8.8.2
acorn-import-assertions: 1.8.0(acorn@8.8.2)
browserslist: 4.21.5
chrome-trace-event: 1.0.3
- enhanced-resolve: 5.12.0
- es-module-lexer: 0.9.3
+ enhanced-resolve: 5.13.0
+ es-module-lexer: 1.2.1
eslint-scope: 5.1.1
events: 3.3.0
glob-to-regexp: 0.4.1
@@ -2733,9 +3926,9 @@ packages:
loader-runner: 4.3.0
mime-types: 2.1.35
neo-async: 2.6.2
- schema-utils: 3.1.1
+ schema-utils: 3.1.2
tapable: 2.2.1
- terser-webpack-plugin: 5.3.7(webpack@5.77.0)
+ terser-webpack-plugin: 5.3.7(webpack@5.81.0)
watchpack: 2.4.0
webpack-sources: 3.2.3
transitivePeerDependencies:
@@ -2744,6 +3937,13 @@ packages:
- uglify-js
dev: true
+ /whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+ dev: false
+
/wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
@@ -2757,6 +3957,11 @@ packages:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
dev: true
+ /xtend@4.0.2:
+ resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
+ engines: {node: '>=0.4'}
+ dev: true
+
/yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
dev: true
diff --git a/frontend/rollup.config.js b/frontend/rollup.config.js
index 46479295..7fb921fa 100644
--- a/frontend/rollup.config.js
+++ b/frontend/rollup.config.js
@@ -14,8 +14,10 @@ export default defineConfig({
input: 'src/index.tsx',
plugins: [
del({ targets: '../backend/static/*', force: true }),
- commonjs(),
- nodeResolve(),
+ commonjs({include: '../frontend/node_modules/**'}),
+ nodeResolve({
+ browser: true
+ }),
externalGlobals({
react: 'SP_REACT',
'react-dom': 'SP_REACTDOM',
@@ -44,4 +46,4 @@ export default defineConfig({
if (hiddenWarnings.some((warning) => message.code === warning)) return;
handleWarning(message);
},
-});
+}); \ No newline at end of file
diff --git a/frontend/src/components/modals/PluginInstallModal.tsx b/frontend/src/components/modals/PluginInstallModal.tsx
index 7f0683ee..0e8e3d47 100644
--- a/frontend/src/components/modals/PluginInstallModal.tsx
+++ b/frontend/src/components/modals/PluginInstallModal.tsx
@@ -1,18 +1,31 @@
import { ConfirmModal, Navigation, QuickAccessTab } from 'decky-frontend-lib';
import { FC, useState } from 'react';
+import { useTranslation } from 'react-i18next';
+
+import TPluginInstallModal, { TranslatedPart } from './TPluginInstallModal';
interface PluginInstallModalProps {
artifact: string;
version: string;
hash: string;
- // reinstall: boolean;
+ installType: number;
onOK(): void;
onCancel(): void;
closeModal?(): void;
}
-const PluginInstallModal: FC<PluginInstallModalProps> = ({ artifact, version, hash, onOK, onCancel, closeModal }) => {
+const PluginInstallModal: FC<PluginInstallModalProps> = ({
+ artifact,
+ version,
+ hash,
+ installType,
+ onOK,
+ onCancel,
+ closeModal,
+}) => {
const [loading, setLoading] = useState<boolean>(false);
+ const { t } = useTranslation();
+
return (
<ConfirmModal
bOKDisabled={loading}
@@ -26,14 +39,22 @@ const PluginInstallModal: FC<PluginInstallModalProps> = ({ artifact, version, ha
onCancel={async () => {
await onCancel();
}}
- strTitle={`Install ${artifact}`}
- strOKButtonText={loading ? 'Installing' : 'Install'}
+ strTitle={<TPluginInstallModal trans_part={TranslatedPart.TITLE} trans_type={installType} artifact={artifact} />}
+ strOKButtonText={
+ loading ? (
+ <TPluginInstallModal trans_part={TranslatedPart.BUTTON_PROC} trans_type={installType} />
+ ) : (
+ <TPluginInstallModal trans_part={TranslatedPart.BUTTON_IDLE} trans_type={installType} />
+ )
+ }
>
- Are you sure you want to install {artifact}
- {version ? ` ${version}` : ''}?
- {hash == 'False' && (
- <span style={{ color: 'red' }}> This plugin does not have a hash, you are installing it at your own risk.</span>
- )}
+ <TPluginInstallModal
+ trans_part={TranslatedPart.DESC}
+ trans_type={installType}
+ artifact={artifact}
+ version={version ? version : ''}
+ />
+ {hash == 'False' && <span style={{ color: 'red' }}>{t('PluginInstallModal.no_hash')}</span>}
</ConfirmModal>
);
};
diff --git a/frontend/src/components/modals/TPluginInstallModal.tsx b/frontend/src/components/modals/TPluginInstallModal.tsx
new file mode 100644
index 00000000..3866560e
--- /dev/null
+++ b/frontend/src/components/modals/TPluginInstallModal.tsx
@@ -0,0 +1,95 @@
+import { FC } from 'react';
+import { Translation } from 'react-i18next';
+
+import { InstallType } from '../../plugin';
+
+export enum TranslatedPart {
+ TITLE,
+ DESC,
+ BUTTON_IDLE,
+ BUTTON_PROC,
+}
+interface TPluginInstallModalProps {
+ trans_part: TranslatedPart;
+ trans_type: number;
+ artifact?: string;
+ version?: string;
+}
+
+const TPluginInstallModal: FC<TPluginInstallModalProps> = ({ trans_part, trans_type, artifact, version }) => {
+ return (
+ <Translation>
+ {(t, {}) => {
+ switch (trans_part) {
+ case TranslatedPart.TITLE:
+ switch (trans_type) {
+ case InstallType.INSTALL:
+ return <div>{t('PluginInstallModal.install.title', { artifact: artifact })}</div>;
+ case InstallType.REINSTALL:
+ return <div>{t('PluginInstallModal.reinstall.title', { artifact: artifact })}</div>;
+ case InstallType.UPDATE:
+ return <div>{t('PluginInstallModal.update.title', { artifact: artifact })}</div>;
+ default:
+ return null;
+ }
+ case TranslatedPart.DESC:
+ switch (trans_type) {
+ case InstallType.INSTALL:
+ return (
+ <div>
+ {t('PluginInstallModal.install.desc', {
+ artifact: artifact,
+ version: version,
+ })}
+ </div>
+ );
+ case InstallType.REINSTALL:
+ return (
+ <div>
+ {t('PluginInstallModal.reinstall.desc', {
+ artifact: artifact,
+ version: version,
+ })}
+ </div>
+ );
+ case InstallType.UPDATE:
+ return (
+ <div>
+ {t('PluginInstallModal.update.desc', {
+ artifact: artifact,
+ version: version,
+ })}
+ </div>
+ );
+ default:
+ return null;
+ }
+ case TranslatedPart.BUTTON_IDLE:
+ switch (trans_type) {
+ case InstallType.INSTALL:
+ return <div>{t('PluginInstallModal.install.button_idle')}</div>;
+ case InstallType.REINSTALL:
+ return <div>{t('PluginInstallModal.reinstall.button_idle')}</div>;
+ case InstallType.UPDATE:
+ return <div>{t('PluginInstallModal.update.button_idle')}</div>;
+ default:
+ return null;
+ }
+ case TranslatedPart.BUTTON_PROC:
+ switch (trans_type) {
+ case InstallType.INSTALL:
+ return <div>{t('PluginInstallModal.install.button_processing')}</div>;
+ case InstallType.REINSTALL:
+ return <div>{t('PluginInstallModal.reinstall.button_processing')}</div>;
+ case InstallType.UPDATE:
+ return <div>{t('PluginInstallModal.update.button_processing')}</div>;
+ default:
+ return null;
+ }
+ }
+ }}
+ </Translation>
+ );
+};
+
+export default TPluginInstallModal;
diff --git a/frontend/src/components/modals/filepicker/index.tsx b/frontend/src/components/modals/filepicker/index.tsx
index ec3fc260..629f4ec5 100644
--- a/frontend/src/components/modals/filepicker/index.tsx
+++ b/frontend/src/components/modals/filepicker/index.tsx
@@ -2,6 +2,7 @@ import { DialogButton, Focusable, SteamSpinner, TextField } from 'decky-frontend
import { useEffect } from 'react';
import { FunctionComponent, useState } from 'react';
import { FileIcon, defaultStyles } from 'react-file-icon';
+import { useTranslation } from 'react-i18next';
import { FaArrowUp, FaFolder } from 'react-icons/fa';
import Logger from '../../../logger';
@@ -47,6 +48,7 @@ const FilePicker: FunctionComponent<FilePickerProps> = ({
onSubmit,
closeModal,
}) => {
+ const { t } = useTranslation();
if (startPath.endsWith('/')) startPath = startPath.substring(0, startPath.length - 1); // remove trailing path
const [path, setPath] = useState<string>(startPath);
const [listing, setListing] = useState<FileListing>({ files: [], realpath: path });
@@ -158,7 +160,7 @@ const FilePicker: FunctionComponent<FilePickerProps> = ({
closeModal?.();
}}
>
- Use this folder
+ {t('FilePickerIndex.folder.select')}
</DialogButton>
)}
</div>
diff --git a/frontend/src/components/settings/index.tsx b/frontend/src/components/settings/index.tsx
index 6f104710..f3a76407 100644
--- a/frontend/src/components/settings/index.tsx
+++ b/frontend/src/components/settings/index.tsx
@@ -1,5 +1,6 @@
import { SidebarNavigation } from 'decky-frontend-lib';
import { lazy } from 'react';
+import { useTranslation } from 'react-i18next';
import { FaCode, FaPlug } from 'react-icons/fa';
import { useSetting } from '../../utils/hooks/useSetting';
@@ -12,22 +13,23 @@ const DeveloperSettings = lazy(() => import('./pages/developer'));
export default function SettingsPage() {
const [isDeveloper, setIsDeveloper] = useSetting<boolean>('developer.enabled', false);
+ const { t } = useTranslation();
const pages = [
{
- title: 'Decky',
+ title: t('SettingsIndex.general_title'),
content: <GeneralSettings isDeveloper={isDeveloper} setIsDeveloper={setIsDeveloper} />,
route: '/decky/settings/general',
icon: <DeckyIcon />,
},
{
- title: 'Plugins',
+ title: t('SettingsIndex.plugins_title'),
content: <PluginList />,
route: '/decky/settings/plugins',
icon: <FaPlug />,
},
{
- title: 'Developer',
+ title: t('SettingsIndex.developer_title'),
content: (
<WithSuspense>
<DeveloperSettings />
diff --git a/frontend/src/components/settings/pages/developer/index.tsx b/frontend/src/components/settings/pages/developer/index.tsx
index e6e37813..7a62c052 100644
--- a/frontend/src/components/settings/pages/developer/index.tsx
+++ b/frontend/src/components/settings/pages/developer/index.tsx
@@ -8,6 +8,7 @@ import {
Toggle,
} from 'decky-frontend-lib';
import { useRef, useState } from 'react';
+import { useTranslation } from 'react-i18next';
import { FaFileArchive, FaLink, FaReact, FaSteamSymbol } from 'react-icons/fa';
import { setShouldConnectToReactDevTools, setShowValveInternal } from '../../../../developer';
@@ -24,8 +25,10 @@ const installFromZip = () => {
installFromURL(url);
} else {
window.DeckyPluginLoader.toaster.toast({
+ //title: t('SettingsDeveloperIndex.toast_zip.title'),
title: 'Decky',
- body: `Installation failed! Only ZIP files are supported.`,
+ //body: t('SettingsDeveloperIndex.toast_zip.body'),
+ body: 'Installation failed! Only ZIP files are supported.',
onClick: installFromZip,
});
}
@@ -38,33 +41,47 @@ export default function DeveloperSettings() {
const [reactDevtoolsIP, setReactDevtoolsIP] = useSetting<string>('developer.rdt.ip', '');
const [pluginURL, setPluginURL] = useState('');
const textRef = useRef<HTMLDivElement>(null);
+ const { t } = useTranslation();
return (
<DialogBody>
<DialogControlsSection>
- <DialogControlsSectionHeader>Third-Party Plugins</DialogControlsSectionHeader>
- <Field label="Install Plugin from ZIP File" icon={<FaFileArchive style={{ display: 'block' }} />}>
- <DialogButton onClick={installFromZip}>Browse</DialogButton>
+ <DialogControlsSectionHeader>
+ {t('SettingsDeveloperIndex.third_party_plugins.header')}
+ </DialogControlsSectionHeader>
+ <Field
+ label={t('SettingsDeveloperIndex.third_party_plugins.label_zip')}
+ icon={<FaFileArchive style={{ display: 'block' }} />}
+ >
+ <DialogButton onClick={installFromZip}>
+ {t('SettingsDeveloperIndex.third_party_plugins.button_zip')}
+ </DialogButton>
</Field>
<Field
- label="Install Plugin from URL"
- description={<TextField label={'URL'} value={pluginURL} onChange={(e) => setPluginURL(e?.target.value)} />}
+ label={t('SettingsDeveloperIndex.third_party_plugins.label_url')}
+ description={
+ <TextField
+ label={t('SettingsDeveloperIndex.third_party_plugins.label_desc')}
+ value={pluginURL}
+ onChange={(e) => setPluginURL(e?.target.value)}
+ />
+ }
icon={<FaLink style={{ display: 'block' }} />}
>
<DialogButton disabled={pluginURL.length == 0} onClick={() => installFromURL(pluginURL)}>
- Install
+ {t('SettingsDeveloperIndex.third_party_plugins.button_install')}
</DialogButton>
</Field>
</DialogControlsSection>
<DialogControlsSection>
- <DialogControlsSectionHeader>Other</DialogControlsSectionHeader>
+ <DialogControlsSectionHeader>{t('SettingsDeveloperIndex.header_other')}</DialogControlsSectionHeader>
<RemoteDebuggingSettings />
<Field
- label="Enable Valve Internal"
+ label={t('SettingsDeveloperIndex.valve_internal.label')}
description={
<span style={{ whiteSpace: 'pre-line' }}>
- Enables the Valve internal developer menu.{' '}
- <span style={{ color: 'red' }}>Do not touch anything in this menu unless you know what it does.</span>
+ {t('SettingsDeveloperIndex.valve_internal.desc1')}{' '}
+ <span style={{ color: 'red' }}>{t('SettingsDeveloperIndex.valve_internal.desc2')}</span>
</span>
}
icon={<FaSteamSymbol style={{ display: 'block' }} />}
@@ -78,17 +95,18 @@ export default function DeveloperSettings() {
/>
</Field>
<Field
- label="Enable React DevTools"
+ label={t('SettingsDeveloperIndex.react_devtools.label')}
description={
<>
- <span style={{ whiteSpace: 'pre-line' }}>
- Enables connection to a computer running React DevTools. Changing this setting will reload Steam. Set
- the IP address before enabling.
- </span>
+ <span style={{ whiteSpace: 'pre-line' }}>{t('SettingsDeveloperIndex.react_devtools.desc')}</span>
<br />
<br />
<div ref={textRef}>
- <TextField label={'IP'} value={reactDevtoolsIP} onChange={(e) => setReactDevtoolsIP(e?.target.value)} />
+ <TextField
+ label={t('SettingsDeveloperIndex.react_devtools.ip_label')}
+ value={reactDevtoolsIP}
+ onChange={(e) => setReactDevtoolsIP(e?.target.value)}
+ />
</div>
</>
}
diff --git a/frontend/src/components/settings/pages/general/BranchSelect.tsx b/frontend/src/components/settings/pages/general/BranchSelect.tsx
index 5387b655..d966ff62 100644
--- a/frontend/src/components/settings/pages/general/BranchSelect.tsx
+++ b/frontend/src/components/settings/pages/general/BranchSelect.tsx
@@ -1,5 +1,6 @@
import { Dropdown, Field } from 'decky-frontend-lib';
import { FunctionComponent } from 'react';
+import { useTranslation } from 'react-i18next';
import Logger from '../../../../logger';
import { callUpdaterMethod } from '../../../../updater';
@@ -14,17 +15,23 @@ enum UpdateBranch {
}
const BranchSelect: FunctionComponent<{}> = () => {
+ const { t } = useTranslation();
+ const tBranches = [
+ t('BranchSelect.update_channel.stable'),
+ t('BranchSelect.update_channel.prerelease'),
+ t('BranchSelect.update_channel.testing'),
+ ];
const [selectedBranch, setSelectedBranch] = useSetting<UpdateBranch>('branch', UpdateBranch.Prerelease);
return (
// Returns numerical values from 0 to 2 (with current branch setup as of 8/28/22)
// 0 being stable, 1 being pre-release and 2 being nightly
- <Field label="Decky Update Channel" childrenContainerWidth={'fixed'}>
+ <Field label={t('BranchSelect.update_channel.label')} childrenContainerWidth={'fixed'}>
<Dropdown
rgOptions={Object.values(UpdateBranch)
.filter((branch) => typeof branch == 'string')
.map((branch) => ({
- label: branch,
+ label: tBranches[UpdateBranch[branch]],
data: UpdateBranch[branch],
}))}
selectedOption={selectedBranch}
diff --git a/frontend/src/components/settings/pages/general/RemoteDebugging.tsx b/frontend/src/components/settings/pages/general/RemoteDebugging.tsx
index db604c69..60d57d91 100644
--- a/frontend/src/components/settings/pages/general/RemoteDebugging.tsx
+++ b/frontend/src/components/settings/pages/general/RemoteDebugging.tsx
@@ -1,19 +1,17 @@
import { Field, Toggle } from 'decky-frontend-lib';
+import { useTranslation } from 'react-i18next';
import { FaChrome } from 'react-icons/fa';
import { useSetting } from '../../../../utils/hooks/useSetting';
export default function RemoteDebuggingSettings() {
const [allowRemoteDebugging, setAllowRemoteDebugging] = useSetting<boolean>('cef_forward', false);
+ const { t } = useTranslation();
return (
<Field
- label="Allow Remote CEF Debugging"
- description={
- <span style={{ whiteSpace: 'pre-line' }}>
- Allows unauthenticated access to the CEF debugger to anyone in your network.
- </span>
- }
+ label={t('RemoteDebugging.remote_cef.label')}
+ description={<span style={{ whiteSpace: 'pre-line' }}>{t('RemoteDebugging.remote_cef.desc')}</span>}
icon={<FaChrome style={{ display: 'block' }} />}
>
<Toggle
diff --git a/frontend/src/components/settings/pages/general/StoreSelect.tsx b/frontend/src/components/settings/pages/general/StoreSelect.tsx
index 40e70301..ebf1bd81 100644
--- a/frontend/src/components/settings/pages/general/StoreSelect.tsx
+++ b/frontend/src/components/settings/pages/general/StoreSelect.tsx
@@ -1,5 +1,6 @@
import { Dropdown, Field, TextField } from 'decky-frontend-lib';
import { FunctionComponent } from 'react';
+import { useTranslation } from 'react-i18next';
import { FaShapes } from 'react-icons/fa';
import Logger from '../../../../logger';
@@ -11,17 +12,23 @@ const logger = new Logger('StoreSelect');
const StoreSelect: FunctionComponent<{}> = () => {
const [selectedStore, setSelectedStore] = useSetting<Store>('store', Store.Default);
const [selectedStoreURL, setSelectedStoreURL] = useSetting<string | null>('store-url', null);
+ const { t } = useTranslation();
+ const tStores = [
+ t('StoreSelect.store_channel.default'),
+ t('StoreSelect.store_channel.testing'),
+ t('StoreSelect.store_channel.custom'),
+ ];
// Returns numerical values from 0 to 2 (with current branch setup as of 8/28/22)
// 0 being Default, 1 being Testing and 2 being Custom
return (
<>
- <Field label="Plugin Store Channel" childrenContainerWidth={'fixed'}>
+ <Field label={t('StoreSelect.store_channel.label')} childrenContainerWidth={'fixed'}>
<Dropdown
rgOptions={Object.values(Store)
.filter((store) => typeof store == 'string')
.map((store) => ({
- label: store,
+ label: tStores[Store[store]],
data: Store[store],
}))}
selectedOption={selectedStore}
@@ -33,11 +40,11 @@ const StoreSelect: FunctionComponent<{}> = () => {
</Field>
{selectedStore == Store.Custom && (
<Field
- label="Custom Store"
+ label={t('StoreSelect.custom_store.label')}
indentLevel={1}
description={
<TextField
- label={'URL'}
+ label={t('StoreSelect.custom_store.url_label')}
value={selectedStoreURL || undefined}
onChange={(e) => setSelectedStoreURL(e?.target.value || null)}
/>
diff --git a/frontend/src/components/settings/pages/general/Updater.tsx b/frontend/src/components/settings/pages/general/Updater.tsx
index 1ee31e6c..927a99b0 100644
--- a/frontend/src/components/settings/pages/general/Updater.tsx
+++ b/frontend/src/components/settings/pages/general/Updater.tsx
@@ -12,6 +12,7 @@ import {
import { useCallback } from 'react';
import { Suspense, lazy } from 'react';
import { useEffect, useState } from 'react';
+import { useTranslation } from 'react-i18next';
import { FaExclamation } from 'react-icons/fa';
import { VerInfo, callUpdaterMethod, finishUpdate } from '../../../../updater';
@@ -23,6 +24,7 @@ const MarkdownRenderer = lazy(() => import('../../../Markdown'));
function PatchNotesModal({ versionInfo, closeModal }: { versionInfo: VerInfo | null; closeModal?: () => {} }) {
const SP = findSP();
+ const { t } = useTranslation();
return (
<Focusable onCancelButton={closeModal}>
<FocusRing>
@@ -45,7 +47,7 @@ function PatchNotesModal({ versionInfo, closeModal }: { versionInfo: VerInfo | n
<MarkdownRenderer onDismiss={closeModal}>{versionInfo.all[id].body}</MarkdownRenderer>
</WithSuspense>
) : (
- 'no patch notes for this version'
+ t('Updater.no_patch_notes_desc')
)}
</div>
</Focusable>
@@ -58,7 +60,7 @@ function PatchNotesModal({ versionInfo, closeModal }: { versionInfo: VerInfo | n
initialColumn={0}
autoFocus={true}
fnGetColumnWidth={() => SP.innerWidth}
- name="Decky Updates"
+ name={t('Updater.decky_updates') as string}
/>
</FocusRing>
</Focusable>
@@ -72,6 +74,8 @@ export default function UpdaterSettings() {
const [updateProgress, setUpdateProgress] = useState<number>(-1);
const [reloading, setReloading] = useState<boolean>(false);
+ const { t } = useTranslation();
+
useEffect(() => {
window.DeckyUpdater = {
updateProgress: (i) => {
@@ -93,14 +97,14 @@ export default function UpdaterSettings() {
return (
<>
<Field
- onOptionsActionDescription={versionInfo?.all ? 'Patch Notes' : undefined}
+ onOptionsActionDescription={versionInfo?.all ? t('Updater.patch_notes_desc') : undefined}
onOptionsButton={versionInfo?.all ? showPatchNotes : undefined}
- label="Decky Updates"
+ label={t('Updater.updates.label')}
description={
checkingForUpdates || versionInfo?.remote?.tag_name != versionInfo?.current || !versionInfo?.remote ? (
''
) : (
- <span>Up to date: running {versionInfo?.current}</span>
+ <span>{t('Updater.updates.lat_version', { ver: versionInfo?.current })} </span>
)
}
icon={
@@ -129,10 +133,10 @@ export default function UpdaterSettings() {
}
>
{checkingForUpdates
- ? 'Checking'
+ ? t('Updater.updates.checking')
: !versionInfo?.remote || versionInfo?.remote?.tag_name == versionInfo?.current
- ? 'Check For Updates'
- : 'Install Update'}
+ ? t('Updater.updates.check_button')
+ : t('Updater.updates.install_button')}
</DialogButton>
) : (
<ProgressBarWithInfo
@@ -140,7 +144,7 @@ export default function UpdaterSettings() {
bottomSeparator="none"
nProgress={updateProgress}
indeterminate={reloading}
- sOperationText={reloading ? 'Reloading' : 'Updating'}
+ sOperationText={reloading ? t('Updater.updates.reloading') : t('Updater.updates.updating')}
/>
)}
</Field>
diff --git a/frontend/src/components/settings/pages/general/index.tsx b/frontend/src/components/settings/pages/general/index.tsx
index 97fd3e42..96ae6782 100644
--- a/frontend/src/components/settings/pages/general/index.tsx
+++ b/frontend/src/components/settings/pages/general/index.tsx
@@ -1,4 +1,5 @@
import { DialogBody, DialogControlsSection, DialogControlsSectionHeader, Field, Toggle } from 'decky-frontend-lib';
+import { useTranslation } from 'react-i18next';
import { useDeckyState } from '../../../DeckyState';
import BranchSelect from './BranchSelect';
@@ -13,21 +14,22 @@ export default function GeneralSettings({
setIsDeveloper: (val: boolean) => void;
}) {
const { versionInfo } = useDeckyState();
+ const { t } = useTranslation();
return (
<DialogBody>
<DialogControlsSection>
- <DialogControlsSectionHeader>Updates</DialogControlsSectionHeader>
+ <DialogControlsSectionHeader>{t('SettingsGeneralIndex.updates.header')}</DialogControlsSectionHeader>
<UpdaterSettings />
</DialogControlsSection>
<DialogControlsSection>
- <DialogControlsSectionHeader>Beta Participation</DialogControlsSectionHeader>
+ <DialogControlsSectionHeader>{t('SettingsGeneralIndex.beta.header')}</DialogControlsSectionHeader>
<BranchSelect />
<StoreSelect />
</DialogControlsSection>
<DialogControlsSection>
- <DialogControlsSectionHeader>Other</DialogControlsSectionHeader>
- <Field label="Enable Developer Mode">
+ <DialogControlsSectionHeader>{t('SettingsGeneralIndex.other.header')}</DialogControlsSectionHeader>
+ <Field label={t('SettingsGeneralIndex.developer_mode.label')}>
<Toggle
value={isDeveloper}
onChange={(toggleValue) => {
@@ -37,8 +39,8 @@ export default function GeneralSettings({
</Field>
</DialogControlsSection>
<DialogControlsSection>
- <DialogControlsSectionHeader>About</DialogControlsSectionHeader>
- <Field label="Decky Version" focusable={true}>
+ <DialogControlsSectionHeader>{t('SettingsGeneralIndex.about.header')}</DialogControlsSectionHeader>
+ <Field label={t('SettingsGeneralIndex.about.decky_version')} focusable={true}>
<div style={{ color: 'var(--gpSystemLighterGrey)' }}>{versionInfo?.current}</div>
</Field>
</DialogControlsSection>
diff --git a/frontend/src/components/settings/pages/plugin_list/index.tsx b/frontend/src/components/settings/pages/plugin_list/index.tsx
index ac954601..d7ff7bd9 100644
--- a/frontend/src/components/settings/pages/plugin_list/index.tsx
+++ b/frontend/src/components/settings/pages/plugin_list/index.tsx
@@ -10,8 +10,10 @@ import {
showContextMenu,
} from 'decky-frontend-lib';
import { useEffect, useState } from 'react';
+import { useTranslation } from 'react-i18next';
import { FaDownload, FaEllipsisH, FaRecycle } from 'react-icons/fa';
+import { InstallType } from '../../../../plugin';
import { StorePluginVersion, getPluginList, requestPluginInstall } from '../../../../store';
import { useSetting } from '../../../../utils/hooks/useSetting';
import { useDeckyState } from '../../../DeckyState';
@@ -25,19 +27,33 @@ async function reinstallPlugin(pluginName: string, currentVersion?: string) {
const remotePlugin = serverData?.find((x) => x.name == pluginName);
if (remotePlugin && remotePlugin.versions?.length > 0) {
const currentVersionData = remotePlugin.versions.find((version) => version.name == currentVersion);
- if (currentVersionData) requestPluginInstall(pluginName, currentVersionData);
+ if (currentVersionData) requestPluginInstall(pluginName, currentVersionData, InstallType.REINSTALL);
}
}
function PluginInteractables(props: { entry: ReorderableEntry<PluginData> }) {
const data = props.entry.data;
+ const { t } = useTranslation();
let pluginName = labelToName(props.entry.label, data?.version);
const showCtxMenu = (e: MouseEvent | GamepadEvent) => {
showContextMenu(
- <Menu label="Plugin Actions">
- <MenuItem onSelected={() => window.DeckyPluginLoader.importPlugin(pluginName, data?.version)}>Reload</MenuItem>
- <MenuItem onSelected={() => window.DeckyPluginLoader.uninstallPlugin(pluginName)}>Uninstall</MenuItem>
+ <Menu label={t('PluginListIndex.plugin_actions')}>
+ <MenuItem onSelected={() => window.DeckyPluginLoader.importPlugin(pluginName, data?.version)}>
+ {t('PluginListIndex.reload')}
+ </MenuItem>
+ <MenuItem
+ onSelected={() =>
+ window.DeckyPluginLoader.uninstallPlugin(
+ pluginName,
+ t('PluginLoader.plugin_uninstall.title', { name: pluginName }),
+ t('PluginLoader.plugin_uninstall.button'),
+ t('PluginLoader.plugin_uninstall.desc', { name: pluginName }),
+ )
+ }
+ >
+ {t('PluginListIndex.uninstall')}
+ </MenuItem>
</Menu>,
e.currentTarget ?? window,
);
@@ -48,11 +64,11 @@ function PluginInteractables(props: { entry: ReorderableEntry<PluginData> }) {
{data?.update ? (
<DialogButton
style={{ height: '40px', minWidth: '60px', marginRight: '10px' }}
- onClick={() => requestPluginInstall(pluginName, data?.update as StorePluginVersion)}
- onOKButton={() => requestPluginInstall(pluginName, data?.update as StorePluginVersion)}
+ onClick={() => requestPluginInstall(pluginName, data?.update as StorePluginVersion, InstallType.UPDATE)}
+ onOKButton={() => requestPluginInstall(pluginName, data?.update as StorePluginVersion, InstallType.UPDATE)}
>
<div style={{ display: 'flex', flexDirection: 'row' }}>
- Update to {data?.update?.name}
+ {t('PluginListIndex.update_to', { name: data?.update?.name })}
<FaDownload style={{ paddingLeft: '2rem' }} />
</div>
</DialogButton>
@@ -63,7 +79,7 @@ function PluginInteractables(props: { entry: ReorderableEntry<PluginData> }) {
onOKButton={() => reinstallPlugin(pluginName, data?.version)}
>
<div style={{ display: 'flex', flexDirection: 'row' }}>
- Reinstall
+ {t('PluginListIndex.reinstall')}
<FaRecycle style={{ paddingLeft: '5.3rem' }} />
</div>
</DialogButton>
@@ -90,6 +106,7 @@ export default function PluginList() {
'pluginOrder',
plugins.map((plugin) => plugin.name),
);
+ const { t } = useTranslation();
useEffect(() => {
window.DeckyPluginLoader.checkPluginUpdates();
@@ -115,7 +132,7 @@ export default function PluginList() {
if (plugins.length === 0) {
return (
<div>
- <p>No plugins installed</p>
+ <p>{t('PluginListIndex.no_plugin')}</p>
</div>
);
}
diff --git a/frontend/src/components/store/PluginCard.tsx b/frontend/src/components/store/PluginCard.tsx
index 828d3ae9..b8c622db 100644
--- a/frontend/src/components/store/PluginCard.tsx
+++ b/frontend/src/components/store/PluginCard.tsx
@@ -7,7 +7,9 @@ import {
SuspensefulImage,
} from 'decky-frontend-lib';
import { FC, useState } from 'react';
+import { useTranslation } from 'react-i18next';
+import { InstallType } from '../../plugin';
import { StorePlugin, StorePluginVersion, requestPluginInstall } from '../../store';
interface PluginCardProps {
@@ -18,6 +20,8 @@ const PluginCard: FC<PluginCardProps> = ({ plugin }) => {
const [selectedOption, setSelectedOption] = useState<number>(0);
const root: boolean = plugin.tags.some((tag) => tag === 'root');
+ const { t } = useTranslation();
+
return (
<div
className="deckyStoreCard"
@@ -97,7 +101,7 @@ const PluginCard: FC<PluginCardProps> = ({ plugin }) => {
plugin.description
) : (
<span>
- <i style={{ color: '#666' }}>No description provided.</i>
+ <i style={{ color: '#666' }}>{t('PluginCard.plugin_no_desc')}</i>
</span>
)}
</span>
@@ -109,7 +113,7 @@ const PluginCard: FC<PluginCardProps> = ({ plugin }) => {
color: '#fee75c',
}}
>
- <i>This plugin has full access to your Steam Deck.</i>{' '}
+ <i>{t('PluginCard.plugin_full_access')}</i>{' '}
<a
className="deckyStoreCardDescriptionRootLink"
href="https://deckbrew.xyz/root"
@@ -144,9 +148,11 @@ const PluginCard: FC<PluginCardProps> = ({ plugin }) => {
<ButtonItem
bottomSeparator="none"
layout="below"
- onClick={() => requestPluginInstall(plugin.name, plugin.versions[selectedOption])}
+ onClick={() =>
+ requestPluginInstall(plugin.name, plugin.versions[selectedOption], InstallType.INSTALL)
+ }
>
- <span className="deckyStoreCardInstallText">Install</span>
+ <span className="deckyStoreCardInstallText">{t('PluginCard.plugin_install')}</span>
</ButtonItem>
</div>
<div
@@ -163,7 +169,7 @@ const PluginCard: FC<PluginCardProps> = ({ plugin }) => {
label: version.name,
})) as SingleDropdownOption[]
}
- menuLabel="Plugin Version"
+ menuLabel={t('PluginCard.plugin_version_label') as string}
selectedOption={selectedOption}
onChange={({ data }) => setSelectedOption(data)}
/>
diff --git a/frontend/src/components/store/Store.tsx b/frontend/src/components/store/Store.tsx
index 68f6c077..f2d941cd 100644
--- a/frontend/src/components/store/Store.tsx
+++ b/frontend/src/components/store/Store.tsx
@@ -9,6 +9,7 @@ import {
findModule,
} from 'decky-frontend-lib';
import { FC, useEffect, useMemo, useState } from 'react';
+import { useTranslation } from 'react-i18next';
import logo from '../../../assets/plugin_store.png';
import Logger from '../../logger';
@@ -25,6 +26,8 @@ const StorePage: FC<{}> = () => {
return false;
});
+ const { t } = useTranslation();
+
useEffect(() => {
(async () => {
const res = await getPluginList();
@@ -54,13 +57,13 @@ const StorePage: FC<{}> = () => {
}}
tabs={[
{
- title: 'Browse',
+ title: t('Store.store_tabs.title'),
content: <BrowseTab children={{ data: data }} />,
id: 'browse',
renderTabAddon: () => <span className={TabCount}>{data.length}</span>,
},
{
- title: 'About',
+ title: t('Store.store_tabs.about'),
content: <AboutTab />,
id: 'about',
},
@@ -73,10 +76,12 @@ const StorePage: FC<{}> = () => {
};
const BrowseTab: FC<{ children: { data: StorePlugin[] } }> = (data) => {
+ const { t } = useTranslation();
+
const sortOptions = useMemo(
(): DropdownOption[] => [
- { data: 1, label: 'Alphabetical (A to Z)' },
- { data: 2, label: 'Alphabetical (Z to A)' },
+ { data: 1, label: t('Store.store_tabs.alph_desc') },
+ { data: 2, label: t('Store.store_tabs.alph_asce') },
],
[],
);
@@ -105,11 +110,11 @@ const BrowseTab: FC<{ children: { data: StorePlugin[] } }> = (data) => {
width: '47.5%',
}}
>
- <span className="DialogLabel">Sort</span>
+ <span className="DialogLabel">{t("Store.store_sort.label")}</span>
<Dropdown
- menuLabel="Sort"
+ menuLabel={t("Store.store_sort.label") as string}
rgOptions={sortOptions}
- strDefaultLabel="Last Updated (Newest)"
+ strDefaultLabel={t("Store.store_sort.label_def") as string}
selectedOption={selectedSort}
onChange={(e) => setSort(e.data)}
/>
@@ -122,11 +127,11 @@ const BrowseTab: FC<{ children: { data: StorePlugin[] } }> = (data) => {
marginLeft: 'auto',
}}
>
- <span className="DialogLabel">Filter</span>
+ <span className="DialogLabel">{t("Store.store_filter.label")}</span>
<Dropdown
- menuLabel="Filter"
+ menuLabel={t("Store.store_filter.label")}
rgOptions={filterOptions}
- strDefaultLabel="All"
+ strDefaultLabel={t("Store.store_filter.label_def")}
selectedOption={selectedFilter}
onChange={(e) => setFilter(e.data)}
/>
@@ -136,7 +141,7 @@ const BrowseTab: FC<{ children: { data: StorePlugin[] } }> = (data) => {
<div style={{ justifyContent: 'center', display: 'flex' }}>
<Focusable style={{ display: 'flex', alignItems: 'center', width: '96%' }}>
<div style={{ width: '100%' }}>
- <TextField label="Search" value={searchFieldValue} onChange={(e) => setSearchValue(e.target.value)} />
+ <TextField label={t("Store.store_search.label")} value={searchFieldValue} onChange={(e) => setSearchValue(e.target.value)} />
</div>
</Focusable>
</div>
@@ -151,11 +156,11 @@ const BrowseTab: FC<{ children: { data: StorePlugin[] } }> = (data) => {
maxWidth: '100%',
}}
>
- <span className="DialogLabel">Sort</span>
+ <span className="DialogLabel">{t('Store.store_sort.label')}</span>
<Dropdown
- menuLabel="Sort"
+ menuLabel={t('Store.store_sort.label') as string}
rgOptions={sortOptions}
- strDefaultLabel="Last Updated (Newest)"
+ strDefaultLabel={t('Store.store_sort.label_def') as string}
selectedOption={selectedSort}
onChange={(e) => setSort(e.data)}
/>
@@ -165,7 +170,11 @@ const BrowseTab: FC<{ children: { data: StorePlugin[] } }> = (data) => {
<div style={{ justifyContent: 'center', display: 'flex' }}>
<Focusable style={{ display: 'flex', alignItems: 'center', width: '96%' }}>
<div style={{ width: '100%' }}>
- <TextField label="Search" value={searchFieldValue} onChange={(e) => setSearchValue(e.target.value)} />
+ <TextField
+ label={t('Store.store_search.label')}
+ value={searchFieldValue}
+ onChange={(e) => setSearchValue(e.target.value)}
+ />
</div>
</Focusable>
</div>
@@ -192,6 +201,8 @@ const BrowseTab: FC<{ children: { data: StorePlugin[] } }> = (data) => {
};
const AboutTab: FC<{}> = () => {
+ const { t } = useTranslation();
+
return (
<div
style={{
@@ -216,7 +227,7 @@ const AboutTab: FC<{}> = () => {
/>
<span className="deckyStoreAboutHeader">Testing</span>
<span>
- Please consider testing new plugins to help the Decky Loader team!{' '}
+ {t('Store.store_testing_cta')}{' '}
<a
href="https://deckbrew.xyz/testing"
target="_blank"
@@ -227,13 +238,10 @@ const AboutTab: FC<{}> = () => {
deckbrew.xyz/testing
</a>
</span>
- <span className="deckyStoreAboutHeader">Contributing</span>
- <span>
- If you would like to contribute to the Decky Plugin Store, check the SteamDeckHomebrew/decky-plugin-template
- repository on GitHub. Information on development and distribution is available in the README.
- </span>
- <span className="deckyStoreAboutHeader">Source Code</span>
- <span>All plugin source code is available on SteamDeckHomebrew/decky-plugin-database repository on GitHub.</span>
+ <span className="deckyStoreAboutHeader">{t('Store.store_contrib.label')}</span>
+ <span>{t('Store.store_contrib.desc')}</span>
+ <span className="deckyStoreAboutHeader">{t('Store.store_source.label')}</span>
+ <span>{t('Store.store_source.desc')}</span>
</div>
);
};
diff --git a/frontend/src/developer.tsx b/frontend/src/developer.tsx
index 1d6b3fb2..56d28fbf 100644
--- a/frontend/src/developer.tsx
+++ b/frontend/src/developer.tsx
@@ -18,6 +18,7 @@ import {
staticClasses,
updaterFieldClasses,
} from 'decky-frontend-lib';
+import { useTranslation } from 'react-i18next';
import { FaReact } from 'react-icons/fa';
import Logger from './logger';
@@ -58,9 +59,11 @@ export async function setShowValveInternal(show: boolean) {
}
export async function setShouldConnectToReactDevTools(enable: boolean) {
+ const { t } = useTranslation();
+
window.DeckyPluginLoader.toaster.toast({
- title: (enable ? 'Enabling' : 'Disabling') + ' React DevTools',
- body: 'Reloading in 5 seconds',
+ title: (enable ? t('Developer.enabling') : t('Developer.disabling')) + ' React DevTools',
+ body: t('Developer.5secreload'),
icon: <FaReact />,
});
await sleep(5000);
diff --git a/frontend/src/index.tsx b/frontend/src/index.tsx
index eafa9616..27217f96 100644
--- a/frontend/src/index.tsx
+++ b/frontend/src/index.tsx
@@ -1,4 +1,8 @@
import { Navigation, Router, sleep } from 'decky-frontend-lib';
+import i18n from 'i18next';
+import LanguageDetector from 'i18next-browser-languagedetector';
+import Backend from 'i18next-http-backend';
+import { initReactI18next } from 'react-i18next';
import PluginLoader from './plugin-loader';
import { DeckyUpdater } from './updater';
@@ -36,9 +40,35 @@ declare global {
(async () => {
window.deckyAuthToken = await fetch('http://127.0.0.1:1337/auth/token').then((r) => r.text());
+ i18n
+ .use(Backend)
+ .use(LanguageDetector)
+ .use(initReactI18next)
+ .init({
+ load: 'currentOnly',
+ detection: {
+ order: ['querystring', 'navigator'],
+ lookupQuerystring: 'lng',
+ },
+ //debug: true,
+ fallbackLng: 'en-US',
+ interpolation: {
+ escapeValue: true,
+ },
+ returnEmptyString: false,
+ backend: {
+ loadPath: 'http://127.0.0.1:1337/locales/{{lng}}.json',
+ customHeaders: {
+ Authentication: window.deckyAuthToken,
+ },
+ requestOptions: {
+ credentials: 'include',
+ },
+ },
+ });
+
window.DeckyPluginLoader?.dismountAll();
window.DeckyPluginLoader?.deinit();
-
window.DeckyPluginLoader = new PluginLoader();
window.DeckyPluginLoader.init();
window.importDeckyPlugin = function (name: string, version: string) {
@@ -62,3 +92,5 @@ declare global {
setTimeout(() => window.syncDeckyPlugins(), 5000);
})();
+
+export default i18n;
diff --git a/frontend/src/plugin-loader.tsx b/frontend/src/plugin-loader.tsx
index a3381de7..7bc02c9a 100644
--- a/frontend/src/plugin-loader.tsx
+++ b/frontend/src/plugin-loader.tsx
@@ -98,7 +98,9 @@ class PluginLoader extends Logger {
const versionInfo = await this.updateVersion();
if (versionInfo?.remote && versionInfo?.remote?.tag_name != versionInfo?.current) {
this.toaster.toast({
+ //title: t('PluginLoader.decky_title'),
title: 'Decky',
+ //body: t('PluginLoader.decky_update_available', { tag_name: versionInfo?.remote?.tag_name }),
body: `Update to ${versionInfo?.remote?.tag_name} available!`,
onClick: () => Router.Navigate('/decky/settings'),
});
@@ -118,26 +120,35 @@ class PluginLoader extends Logger {
const updates = await this.checkPluginUpdates();
if (updates?.size > 0) {
this.toaster.toast({
+ //title: t('PluginLoader.decky_title'),
title: 'Decky',
+ //body: t('PluginLoader.plugin_update', { count: updates.size }),
body: `Updates available for ${updates.size} plugin${updates.size > 1 ? 's' : ''}!`,
onClick: () => Router.Navigate('/decky/settings/plugins'),
});
}
}
- public addPluginInstallPrompt(artifact: string, version: string, request_id: string, hash: string) {
+ public addPluginInstallPrompt(
+ artifact: string,
+ version: string,
+ request_id: string,
+ hash: string,
+ install_type: number,
+ ) {
showModal(
<PluginInstallModal
artifact={artifact}
version={version}
hash={hash}
+ installType={install_type}
onOK={() => this.callServerMethod('confirm_plugin_install', { request_id })}
onCancel={() => this.callServerMethod('cancel_plugin_install', { request_id })}
/>,
);
}
- public uninstallPlugin(name: string) {
+ public uninstallPlugin(name: string, title: string, button_text: string, description: string) {
showModal(
<ConfirmModal
onOK={async () => {
@@ -146,10 +157,10 @@ class PluginLoader extends Logger {
onCancel={() => {
// do nothing
}}
- strTitle={`Uninstall ${name}`}
- strOKButtonText={'Uninstall'}
+ strTitle={title}
+ strOKButtonText={button_text}
>
- Are you sure you want to uninstall {name}?
+ {description}
</ConfirmModal>,
);
}
@@ -242,7 +253,17 @@ class PluginLoader extends Logger {
version: version,
});
} catch (e) {
+ //this.error(t('PluginLoader.plugin_load_error.message', { name: name }), e);
this.error('Error loading plugin ' + name, e);
+ /*const TheError: FC<{}> = () => (
+ <>
+ {t('PluginLoader.error')}:{' '}
+ <pre>
+ <code>{e instanceof Error ? e.stack : JSON.stringify(e)}</code>
+ </pre>
+ <>{t('PluginLoader.plugin_error_uninstall', { icon: "<FaCog style={{ display: 'inline' }} />" })}</>
+ </>
+ );*/
const TheError: FC<{}> = () => (
<>
Error:{' '}
@@ -261,7 +282,12 @@ class PluginLoader extends Logger {
content: <TheError />,
icon: <FaExclamationCircle />,
});
- this.toaster.toast({ title: 'Error loading ' + name, body: '' + e, icon: <FaExclamationCircle /> });
+ this.toaster.toast({
+ //title: t('PluginLoader.plugin_load_error.toast', { name: name }),
+ title: 'Error loading ' + name,
+ body: '' + e,
+ icon: <FaExclamationCircle />,
+ });
}
} else throw new Error(`${name} frontend_bundle not OK`);
}
diff --git a/frontend/src/plugin.ts b/frontend/src/plugin.ts
index 37348593..c8467580 100644
--- a/frontend/src/plugin.ts
+++ b/frontend/src/plugin.ts
@@ -6,3 +6,9 @@ export interface Plugin {
onDismount?(): void;
alwaysRender?: boolean;
}
+
+export enum InstallType {
+ INSTALL,
+ REINSTALL,
+ UPDATE,
+}
diff --git a/frontend/src/store.tsx b/frontend/src/store.tsx
index 7ed71e2a..80485252 100644
--- a/frontend/src/store.tsx
+++ b/frontend/src/store.tsx
@@ -1,4 +1,4 @@
-import { Plugin } from './plugin';
+import { InstallType, Plugin } from './plugin';
import { getSetting, setSetting } from './utils/settings';
export enum Store {
@@ -73,7 +73,7 @@ export async function installFromURL(url: string) {
});
}
-export async function requestPluginInstall(plugin: string, selectedVer: StorePluginVersion) {
+export async function requestPluginInstall(plugin: string, selectedVer: StorePluginVersion, installType: InstallType) {
const artifactUrl =
selectedVer.artifact ?? `https://cdn.tzatzikiweeb.moe/file/steam-deck-homebrew/versions/${selectedVer.hash}.zip`;
await window.DeckyPluginLoader.callServerMethod('install_plugin', {
@@ -81,6 +81,7 @@ export async function requestPluginInstall(plugin: string, selectedVer: StorePlu
artifact: artifactUrl,
version: selectedVer.name,
hash: selectedVer.hash,
+ install_type: installType,
});
}
diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json
index 907c25e2..e693d3e9 100644
--- a/frontend/tsconfig.json
+++ b/frontend/tsconfig.json
@@ -16,7 +16,8 @@
"strict": true,
"suppressImplicitAnyIndexErrors": true,
"allowSyntheticDefaultImports": true,
- "skipLibCheck": true
+ "skipLibCheck": true,
+ "resolveJsonModule": true
},
"include": ["src", "index.d.ts"],
"exclude": ["node_modules"]