summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarl Schwan <carl@carlschwan.eu>2022-08-30 18:07:25 +0200
committerGitHub <noreply@github.com>2022-08-30 18:07:25 +0200
commit753e88793e0525cadd8a544e3f4093cc3cf7b331 (patch)
treef544b21061e5469899f728bd9fa417a801a2d3b8
parent39ac02c03464c4cdb511d34c0232120d99dde936 (diff)
Port admin settings to vue (#1880)
* Port admin settings to vue Co-authored-by: anoy. <anoymouserver@users.noreply.github.com> Co-authored-by: Benjamin Brahmer <info@b-brahmer.de> Signed-off-by: Carl Schwan <carl@carlschwan.eu>
-rw-r--r--.eslintrc.js7
-rw-r--r--.github/workflows/lint-eslint.yml47
-rw-r--r--CHANGELOG.md1
-rw-r--r--Makefile4
-rw-r--r--babel.config.js5
-rw-r--r--css/explore.css57
-rw-r--r--css/explore.scss64
-rw-r--r--css/mobile.css (renamed from css/mobile.scss)2
-rw-r--r--js/gulpfile.js2
-rw-r--r--lib/Controller/AdminController.php114
-rw-r--r--lib/Settings/AdminSettings.php16
-rw-r--r--package-lock.json20794
-rw-r--r--package.json49
-rw-r--r--src/components/AdminSettings.vue147
-rw-r--r--src/main-admin.js20
-rw-r--r--stylelint.config.js5
-rw-r--r--templates/admin.php134
-rw-r--r--tests/Unit/Controller/AdminControllerTest.php156
-rw-r--r--webpack.config.js13
19 files changed, 21164 insertions, 473 deletions
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 000000000..76352e46c
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,7 @@
+// SPDX-FileCopyrightText: Carl Schwan <carl@carlschwan.eu>
+// SPDX-License-Identifier: AGPL-3.0-or-later
+module.exports = {
+ extends: [
+ '@nextcloud',
+ ]
+}
diff --git a/.github/workflows/lint-eslint.yml b/.github/workflows/lint-eslint.yml
new file mode 100644
index 000000000..564a4a829
--- /dev/null
+++ b/.github/workflows/lint-eslint.yml
@@ -0,0 +1,47 @@
+# This workflow is provided via the organization template repository
+#
+# https://github.com/nextcloud/.github
+# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
+# SPDX-FileCopyrightText: Nextcloud contributors
+# SPDX-License-Identifier: AGPL-3.0-or-later
+
+name: Lint
+
+on:
+ pull_request:
+ push:
+ branches:
+ - main
+ - master
+ - stable*
+
+jobs:
+ lint:
+ runs-on: ubuntu-latest
+
+ name: eslint
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+
+ - name: Read package.json node and npm engines version
+ uses: skjnldsv/read-package-engines-version-actions@v1.2
+ id: versions
+ with:
+ fallbackNode: '^12'
+ fallbackNpm: '^6'
+
+ - name: Set up node ${{ steps.versions.outputs.nodeVersion }}
+ uses: actions/setup-node@v3
+ with:
+ node-version: ${{ steps.versions.outputs.nodeVersion }}
+
+ - name: Set up npm ${{ steps.versions.outputs.npmVersion }}
+ run: npm i -g npm@"${{ steps.versions.outputs.npmVersion }}"
+
+ - name: Install dependencies
+ run: npm ci
+
+ - name: Lint
+ run: npm run lint
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4fe7e20c0..45489f10b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,7 @@ The format is mostly based on [Keep a Changelog](https://keepachangelog.com/en/1
# Unreleased
## [18.x.x]
### Changed
+- Ported the admin settings to vue (#2353)
### Fixed
- Fix PHP 8.1 deprecations (#1861)
diff --git a/Makefile b/Makefile
index 3322b3b51..7e55a1bb3 100644
--- a/Makefile
+++ b/Makefile
@@ -83,6 +83,8 @@ endif
# Installs npm dependencies
.PHONY: npm
npm:
+ $(npm) ci
+ $(npm) run build
ifneq (, $(npm))
cd js && $(npm) run build
else
@@ -171,7 +173,7 @@ appstore:
# on macOS there is no option "--parents" for the "cp" command
mkdir -p $(appstore_sign_dir)/$(app_name)/js/build $(appstore_sign_dir)/$(app_name)/js/admin
cp js/build/app.min.js $(appstore_sign_dir)/$(app_name)/js/build
- cp js/admin/Admin.js $(appstore_sign_dir)/$(app_name)/js/admin
+ cp js/build/news-admin-settings.js* $(appstore_sign_dir)/$(app_name)/js/build
# export the key and cert to a file
mkdir -p $(cert_dir)
diff --git a/babel.config.js b/babel.config.js
new file mode 100644
index 000000000..0aeac49aa
--- /dev/null
+++ b/babel.config.js
@@ -0,0 +1,5 @@
+// SPDX-FileCopyrightText: Carl Schwan <carl@carlschwan.eu>
+// SPDX-License-Identifier: AGPL-3.0-or-later
+const babelConfig = require('@nextcloud/babel-config')
+
+module.exports = babelConfig
diff --git a/css/explore.css b/css/explore.css
new file mode 100644
index 000000000..03efb07b0
--- /dev/null
+++ b/css/explore.css
@@ -0,0 +1,57 @@
+/**
+ * Nextcloud - News
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Bernhard Posselt <dev@bernhard-posselt.com>
+ * @copyright 2020, Jan C. Borchardt, https://jancborchardt.net
+ * @copyright Bernhard Posselt 2014
+ */
+/**
+ * Explore styles
+ */
+.explore #app-content-wrapper {
+ height: 100%;
+}
+
+#explore {
+ height: 100%;
+ width: 100%;
+ padding: 45px 0 45px 45px;
+}
+#explore .grid-item {
+ width: 300px;
+ border: 2px solid var(--color-border);
+ border-radius: var(--border-radius-large);
+ margin: 0 24px 24px 0;
+ padding: 24px;
+}
+#explore .grid-item .explore-title {
+ background-repeat: no-repeat;
+ background-position: 0 center;
+ background-size: 24px;
+ padding-left: 32px;
+}
+#explore .grid-item .explore-title a {
+ word-wrap: break-word;
+}
+#explore .grid-item .explore-title a:hover, #explore .grid-item .explore-title a:focus {
+ text-decoration: underline;
+}
+#explore .grid-item .explore-logo {
+ text-align: center;
+ margin-top: 25px;
+}
+#explore .grid-item .explore-logo img {
+ width: 100%;
+}
+#explore .grid-item .explore-subscribe {
+ margin-top: 16px;
+ max-width: 100%;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+/*# sourceMappingURL=explore.css.map */
diff --git a/css/explore.scss b/css/explore.scss
deleted file mode 100644
index d459ae825..000000000
--- a/css/explore.scss
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * Nextcloud - News
- *
- * This file is licensed under the Affero General Public License version 3 or
- * later. See the COPYING file.
- *
- * @author Bernhard Posselt <dev@bernhard-posselt.com>
- * @copyright 2020, Jan C. Borchardt, https://jancborchardt.net
- * @copyright Bernhard Posselt 2014
- */
-
-/**
- * Explore styles
- */
-.explore #app-content-wrapper {
- height: 100%;
-}
-
-#explore {
- height: 100%;
- width: 100%;
- padding: 45px 0 45px 45px;
-
- .grid-item {
- width: 300px;
- border: 2px solid var(--color-border);
- border-radius: var(--border-radius-large);
- margin: 0 24px 24px 0;
- padding: 24px;
-
- .explore-title {
- background-repeat: no-repeat;
- background-position: 0 center;
- background-size: 24px;
- padding-left: 32px;
-
- a {
- word-wrap: break-word;
-
- &:hover,
- &:focus {
- text-decoration: underline;
- }
- }
- }
-
- .explore-logo {
- text-align: center;
- margin-top: 25px;
-
- img {
- width: 100%;
- }
- }
-
- .explore-subscribe {
- margin-top: 16px;
- max-width: 100%;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- }
- }
-}
diff --git a/css/mobile.scss b/css/mobile.css
index 02271a263..3f2dc6343 100644
--- a/css/mobile.scss
+++ b/css/mobile.css
@@ -1,4 +1,4 @@
-@media only screen and (max-width: $breakpoint_mobile) {
+@media only screen and (max-width: 1024px) {
#app-content .utils .date {
display: none;
}
diff --git a/js/gulpfile.js b/js/gulpfile.js
index eef83d114..52a74922d 100644
--- a/js/gulpfile.js
+++ b/js/gulpfile.js
@@ -39,7 +39,7 @@ const sources = [
'directive/**/*.js'
];
const testSources = ['tests/**/*.js'];
-const watchSources = sources.concat(testSources).concat(['*.js']);
+const watchSources = sources.concat(testSources).concat(['*.js', '!news-admin-settings.js']);
const lintSources = watchSources;
// tasks
diff --git a/lib/Controller/AdminController.php b/lib/Controller/AdminController.php
deleted file mode 100644
index 8a0dfd99c..000000000
--- a/lib/Controller/AdminController.php
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php
-/**
- * Nextcloud - News
- *
- * This file is licensed under the Affero General Public License version 3 or
- * later. See the COPYING file.
- *
- * @author Alessandro Cosentino <cosenal@gmail.com>
- * @author Bernhard Posselt <dev@bernhard-posselt.com>
- *
- * @copyright 2012 Alessandro Cosentino
- * @copyright 2012-2014 Bernhard Posselt
- */
-
-namespace OCA\News\Controller;
-
-use OCA\News\AppInfo\Application;
-use OCP\AppFramework\Http\TemplateResponse;
-use OCP\IConfig;
-use OCP\IRequest;
-use OCP\AppFramework\Controller;
-
-/**
- * Class AdminController
- *
- * @package OCA\News\Controller
- */
-class AdminController extends Controller
-{
-
- /**
- * @var IConfig
- */
- private $config;
-
- /**
- * AdminController constructor.
- *
- * @param IRequest $request The request
- * @param IConfig $config Config for nextcloud
- */
- public function __construct(IRequest $request, IConfig $config)
- {
- parent::__construct(Application::NAME, $request);
-
- $this->config = $config;
- }
-
- /**
- * Controller main entry.
- *
- * There are no checks for the index method since the output is
- * rendered in admin/admin.php
- *
- * @return TemplateResponse
- */
- public function index(): TemplateResponse
- {
- return new TemplateResponse($this->appName, 'admin', $this->getData(), 'blank');
- }
-
- /**
- * Get admin data.
- *
- * @return array
- */
- private function getData(): array
- {
- $data = [];
-
- foreach (array_keys(Application::DEFAULT_SETTINGS) as $setting) {
- $data[$setting] = $this->config->getAppValue(
- Application::NAME,
- $setting,
- Application::DEFAULT_SETTINGS[$setting]
- );
- }
-
- return $data;
- }
-
- /**
- * Update the app config.
- *
- * @param int $autoPurgeMinimumInterval New minimum interval for auto-purge
- * @param int $autoPurgeCount New value of auto-purge count
- * @param int $maxRedirects New value for max amount of redirects
- * @param int $feedFetcherTimeout New timeout value for feed fetcher
- * @param bool $useCronUpdates Whether or not to use cron updates
- * @param string $exploreUrl URL to use for the explore feed
- * @param int $updateInterval Interval in which the feeds will be updated
- *
- * @return array with the updated values
- */
- public function update(
- int $autoPurgeMinimumInterval,
- int $autoPurgeCount,
- int $maxRedirects,
- int $feedFetcherTimeout,
- bool $useCronUpdates,
- string $exploreUrl,
- int $updateInterval
- ): array {
- $this->config->setAppValue($this->appName, 'autoPurgeMinimumInterval', $autoPurgeMinimumInterval);
- $this->config->setAppValue($this->appName, 'autoPurgeCount', $autoPurgeCount);
- $this->config->setAppValue($this->appName, 'maxRedirects', $maxRedirects);
- $this->config->setAppValue($this->appName, 'feedFetcherTimeout', $feedFetcherTimeout);
- $this->config->setAppValue($this->appName, 'useCronUpdates', $useCronUpdates);
- $this->config->setAppValue($this->appName, 'exploreUrl', $exploreUrl);
- $this->config->setAppValue($this->appName, 'updateInterval', $updateInterval);
-
- return $this->getData();
- }
-}
diff --git a/lib/Settings/AdminSettings.php b/lib/Settings/AdminSettings.php
index 1f3d98c08..c29b5d46c 100644
--- a/lib/Settings/AdminSettings.php
+++ b/lib/Settings/AdminSettings.php
@@ -6,6 +6,7 @@ use OCA\News\AppInfo\Application;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\IConfig;
use OCP\Settings\ISettings;
+use OCP\AppFramework\Services\IInitialState;
class AdminSettings implements ISettings
{
@@ -14,25 +15,26 @@ class AdminSettings implements ISettings
* @var IConfig
*/
private $config;
+ /** @var IInitialState */
+ private $initialState;
- public function __construct(IConfig $config)
+ public function __construct(IConfig $config, IInitialState $initialState)
{
$this->config = $config;
+ $this->initialState = $initialState;
}
public function getForm()
{
- $data = [];
-
foreach (array_keys(Application::DEFAULT_SETTINGS) as $setting) {
- $data[$setting] = $this->config->getAppValue(
+ $this->initialState->provideInitialState($setting, $this->config->getAppValue(
Application::NAME,
$setting,
- Application::DEFAULT_SETTINGS[$setting]
- );
+ (string)Application::DEFAULT_SETTINGS[$setting]
+ ));
}
- return new TemplateResponse(Application::NAME, 'admin', $data);
+ return new TemplateResponse(Application::NAME, 'admin', []);
}
public function getSection()
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 000000000..43076400c
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,20794 @@
+{
+ "name": "news",
+ "version": "0.0.1",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "news",
+ "version": "0.0.1",
+ "license": "agpl",
+ "dependencies": {
+ "@nextcloud/auth": "^2.0.0",
+ "@nextcloud/axios": "^1.10.0",
+ "@nextcloud/dialogs": "^3.1.4",
+ "@nextcloud/initial-state": "^2.0.0",
+ "@nextcloud/l10n": "^1.6.0",
+ "@nextcloud/password-confirmation": "^1.0.1",
+ "@nextcloud/router": "^2.0.0",
+ "@nextcloud/vue": "^6.0.0-beta.4",
+ "vue": "^2.7.0"
+ },
+ "devDependencies": {
+ "@nextcloud/babel-config": "^1.0.0",
+ "@nextcloud/browserslist-config": "^2.2.0",
+ "@nextcloud/eslint-config": "^8.0.0",
+ "@nextcloud/stylelint-config": "^2.1.2",
+ "@nextcloud/webpack-vue-config": "^5.2.1"
+ },
+ "engines": {
+ "node": "^16.0.0",
+ "npm": "^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@ampproject/remapping": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
+ "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.1.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
+ "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@babel/highlight": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.18.13",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.13.tgz",
+ "integrity": "sha512-5yUzC5LqyTFp2HLmDoxGQelcdYgSpP9xsnMWBphAscOdFrHSAVbLNzWiy32sVNDqJRDiJK6klfDnAgu6PAGSHw==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.18.13",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.13.tgz",
+ "integrity": "sha512-ZisbOvRRusFktksHSG6pjj1CSvkPkcZq/KHD45LAkVP/oiHJkNBZWfpvlLmX8OtHDG8IuzsFlVRWo08w7Qxn0A==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@ampproject/remapping": "^2.1.0",
+ "@babel/code-frame": "^7.18.6",
+ "@babel/generator": "^7.18.13",
+ "@babel/helper-compilation-targets": "^7.18.9",
+ "@babel/helper-module-transforms": "^7.18.9",
+ "@babel/helpers": "^7.18.9",
+ "@babel/parser": "^7.18.13",
+ "@babel/template": "^7.18.10",
+ "@babel/traverse": "^7.18.13",
+ "@babel/types": "^7.18.13",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.1",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/eslint-parser": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.18.9.tgz",
+ "integrity": "sha512-KzSGpMBggz4fKbRbWLNyPVTuQr6cmCcBhOyXTw/fieOVaw5oYAwcAj4a7UKcDYCPxQq+CG1NCDZH9e2JTXquiQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "eslint-scope": "^5.1.1",
+ "eslint-visitor-keys": "^2.1.0",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || >=14.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": ">=7.11.0",
+ "eslint": "^7.5.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.18.13",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.13.tgz",
+ "integrity": "sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@babel/types": "^7.18.13",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "jsesc": "^2.5.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
+ "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/helper-annotate-as-pure": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
+ "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz",
+ "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-explode-assignable-expression": "^7.18.6",
+ "@babel/types": "^7.18.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz",
+ "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.18.8",
+ "@babel/helper-validator-option": "^7.18.6",
+ "browserslist": "^4.20.2",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-create-class-features-plugin": {
+ "version": "7.18.13",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.13.tgz",
+ "integrity": "sha512-hDvXp+QYxSRL+23mpAlSGxHMDyIGChm0/AwTfTAAK5Ufe40nCsyNdaYCGuK91phn/fVu9kqayImRDkvNAgdrsA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.18.6",
+ "@babel/helper-environment-visitor": "^7.18.9",
+ "@babel/helper-function-name": "^7.18.9",
+ "@babel/helper-member-expression-to-functions": "^7.18.9",
+ "@babel/helper-optimise-call-expression": "^7.18.6",
+ "@babel/helper-replace-supers": "^7.18.9",
+ "@babel/helper-split-export-declaration": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-create-regexp-features-plugin": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz",
+ "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.18.6",
+ "regexpu-core": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@ba