diff --git a/.github/workflows/backend.yml b/.github/workflows/backend.yml
index c9ed0f2..6b2f0c7 100644
--- a/.github/workflows/backend.yml
+++ b/.github/workflows/backend.yml
@@ -7,10 +7,7 @@ jobs:
uses: flarum/framework/.github/workflows/REUSABLE_backend.yml@1.x
with:
enable_backend_testing: false
- enable_phpstan: false
- php_versions: '["7.4", "8.0", "8.1", "8.2", "8.3"]'
+ enable_phpstan: true
+ php_versions: '["7.4", "8.0", "8.1", "8.2", "8.3", "8.4"]'
backend_directory: .
-
- secrets:
- composer_auth: '{"bearer":{"extiverse.com": "${{secrets.EXTIVERSE_COMPOSER_TOKEN}}"}}'
diff --git a/.github/workflows/frontend.yml b/.github/workflows/frontend.yml
index 2a786cf..643d2ee 100644
--- a/.github/workflows/frontend.yml
+++ b/.github/workflows/frontend.yml
@@ -17,4 +17,3 @@ jobs:
secrets:
bundlewatch_github_token: ${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }}
- composer_auth: '{"bearer":{"extiverse.com": "${{secrets.EXTIVERSE_COMPOSER_TOKEN}}"}}'
diff --git a/composer.json b/composer.json
index 883ac1d..189e3b6 100644
--- a/composer.json
+++ b/composer.json
@@ -18,8 +18,8 @@
},
"homepage": "https://glowingblue.com",
"require": {
- "flarum/core": "^1.2.0",
- "blomstra/flarum-redis": "^0.4.0"
+ "flarum/core": "^1.8.5",
+ "fof/redis": "^1.0"
},
"authors": [
{
@@ -52,11 +52,22 @@
"color": "#fff"
},
"optional-dependencies": [
- "blomstra/horizon"
+ "fof/horizon"
]
},
"extiverse": {
"discuss": "https://discuss.flarum.org/d/27455"
}
+ },
+ "require-dev": {
+ "flarum/phpstan": "*",
+ "fof/horizon": "^1.0"
+ },
+ "scripts": {
+ "analyse:phpstan": "phpstan analyse",
+ "clear-cache:phpstan": "phpstan clear-result-cache"
+ },
+ "scripts-descriptions": {
+ "analyse:phpstan": "Run static analysis"
}
}
diff --git a/js/admin.js b/js/admin.ts
similarity index 100%
rename from js/admin.js
rename to js/admin.ts
diff --git a/js/package.json b/js/package.json
index 9ea22de..dc47d51 100644
--- a/js/package.json
+++ b/js/package.json
@@ -6,11 +6,11 @@
"dependencies": {
"flarum-webpack-config": "^2.0.0",
"webpack": "^5.72.0",
- "webpack-cli": "^4.9.2"
+ "webpack-cli": "^5.0"
},
"devDependencies": {
"@glowingblue-dev/prettier-config": "^1.0.0",
- "prettier": "^2.6.1"
+ "prettier": "^3.5.1"
},
"scripts": {
"dev": "webpack --mode development --watch",
diff --git a/js/src/admin/index.js b/js/src/admin/index.tsx
similarity index 88%
rename from js/src/admin/index.js
rename to js/src/admin/index.tsx
index c0d324f..de311b5 100644
--- a/js/src/admin/index.js
+++ b/js/src/admin/index.tsx
@@ -36,7 +36,7 @@ app.initializers.add(slug, () => {
label: t(`${prfx}.enable_queue`),
});
- if (app.initializers.has('blomstra/horizon')) {
+ if (app.initializers.has('fof/horizon')) {
app.extensionData.for(slug).registerSetting({
setting: 'glowingblue-redis.horizonConfig',
type: 'textarea',
@@ -46,15 +46,16 @@ app.initializers.add(slug, () => {
}
extend(StatusWidget.prototype, 'items', (items) => {
- const loads = app.data.blomstraQueuesLoad;
+ const loads = app.data.fofQueuesLoad;
if (loads === undefined) {
return;
}
- for (let queue of app.data.blomstraQueuesSeen) {
+ // @ts-ignore
+ for (let queue of app.data.fofQueuesSeen) {
const load = loads[queue] || null;
- items.add('blomstra-queue-size-' + queue, [
+ items.add('fof-queue-size-' + queue, [
Queue {queue},
,
load || '0',
diff --git a/js/src/common/index.js b/js/src/common/index.ts
similarity index 100%
rename from js/src/common/index.js
rename to js/src/common/index.ts
diff --git a/js/tsconfig.json b/js/tsconfig.json
new file mode 100644
index 0000000..61246ad
--- /dev/null
+++ b/js/tsconfig.json
@@ -0,0 +1,17 @@
+{
+ // Use Flarum's tsconfig as a starting point
+ "extends": "flarum-tsconfig",
+ // This will match all .ts, .tsx, .d.ts, .js, .jsx files in your `src` folder
+ // and also tells your Typescript server to read core's global typings for
+ // access to `dayjs` and `$` in the global namespace.
+ "include": ["src/**/*", "../vendor/flarum/core/js/dist-typings/@types/**/*"],
+ "compilerOptions": {
+ // This will output typings to `dist-typings`
+ "declarationDir": "./dist-typings",
+ "baseUrl": ".",
+ "paths": {
+ "flarum/*": ["../vendor/flarum/core/js/dist-typings/*"]
+ }
+ }
+ }
+
diff --git a/js/yarn.lock b/js/yarn.lock
index 4319a4b..c7a51b7 100644
--- a/js/yarn.lock
+++ b/js/yarn.lock
@@ -1266,22 +1266,20 @@
"@webassemblyjs/ast" "1.11.6"
"@xtuc/long" "4.2.2"
-"@webpack-cli/configtest@^1.2.0":
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5"
- integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==
+"@webpack-cli/configtest@^2.1.1":
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646"
+ integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==
-"@webpack-cli/info@^1.5.0":
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1"
- integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==
- dependencies:
- envinfo "^7.7.3"
+"@webpack-cli/info@^2.0.2":
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd"
+ integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==
-"@webpack-cli/serve@^1.7.0":
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1"
- integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==
+"@webpack-cli/serve@^2.0.5":
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e"
+ integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==
"@xtuc/ieee754@^1.2.0":
version "1.2.0"
@@ -1429,12 +1427,17 @@ colorette@^2.0.14:
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==
+commander@^10.0.1:
+ version "10.0.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06"
+ integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==
+
commander@^2.20.0:
version "2.20.3"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
-commander@^7.0.0, commander@^7.2.0:
+commander@^7.2.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
@@ -1666,6 +1669,13 @@ hasown@^2.0.0:
dependencies:
function-bind "^1.1.2"
+hasown@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
+ integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
+ dependencies:
+ function-bind "^1.1.2"
+
html-escaper@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
@@ -1679,10 +1689,10 @@ import-local@^3.0.2:
pkg-dir "^4.2.0"
resolve-cwd "^3.0.0"
-interpret@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9"
- integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
+interpret@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4"
+ integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==
is-core-module@^2.13.0:
version "2.13.1"
@@ -1691,6 +1701,13 @@ is-core-module@^2.13.0:
dependencies:
hasown "^2.0.0"
+is-core-module@^2.16.0:
+ version "2.16.1"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4"
+ integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==
+ dependencies:
+ hasown "^2.0.2"
+
is-plain-object@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
@@ -1885,10 +1902,10 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0:
dependencies:
find-up "^4.0.0"
-prettier@^2.6.1:
- version "2.8.8"
- resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da"
- integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==
+prettier@^3.5.1:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.5.1.tgz#22fac9d0b18c0b92055ac8fb619ac1c7bef02fb7"
+ integrity sha512-hPpFQvHwL3Qv5AdRvBFMhnKo4tYxp0ReXiPn2bxkiohEX6mBeBwEpBSQTkD458RaaDKQMYSp4hX4UtfUTA5wDw==
punycode@^2.1.0:
version "2.3.1"
@@ -1902,12 +1919,12 @@ randombytes@^2.1.0:
dependencies:
safe-buffer "^5.1.0"
-rechoir@^0.7.0:
- version "0.7.1"
- resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686"
- integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==
+rechoir@^0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22"
+ integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==
dependencies:
- resolve "^1.9.0"
+ resolve "^1.20.0"
regenerate-unicode-properties@^10.1.0:
version "10.1.1"
@@ -1964,7 +1981,7 @@ resolve-from@^5.0.0:
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
-resolve@^1.14.2, resolve@^1.9.0:
+resolve@^1.14.2:
version "1.22.8"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
@@ -1973,6 +1990,15 @@ resolve@^1.14.2, resolve@^1.9.0:
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
+resolve@^1.20.0:
+ version "1.22.10"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39"
+ integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==
+ dependencies:
+ is-core-module "^2.16.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
safe-buffer@^5.1.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
@@ -2179,22 +2205,23 @@ webpack-bundle-analyzer@^4.5.0:
sirv "^2.0.3"
ws "^7.3.1"
-webpack-cli@^4.9.2:
- version "4.10.0"
- resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31"
- integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==
+webpack-cli@^5.0:
+ version "5.1.4"
+ resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b"
+ integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==
dependencies:
"@discoveryjs/json-ext" "^0.5.0"
- "@webpack-cli/configtest" "^1.2.0"
- "@webpack-cli/info" "^1.5.0"
- "@webpack-cli/serve" "^1.7.0"
+ "@webpack-cli/configtest" "^2.1.1"
+ "@webpack-cli/info" "^2.0.2"
+ "@webpack-cli/serve" "^2.0.5"
colorette "^2.0.14"
- commander "^7.0.0"
+ commander "^10.0.1"
cross-spawn "^7.0.3"
+ envinfo "^7.7.3"
fastest-levenshtein "^1.0.12"
import-local "^3.0.2"
- interpret "^2.2.0"
- rechoir "^0.7.0"
+ interpret "^3.1.1"
+ rechoir "^0.8.0"
webpack-merge "^5.7.3"
webpack-merge@^5.7.3:
diff --git a/phpstan.neon b/phpstan.neon
new file mode 100644
index 0000000..03cf261
--- /dev/null
+++ b/phpstan.neon
@@ -0,0 +1,13 @@
+includes:
+ - vendor/flarum/phpstan/extension.neon
+
+parameters:
+ # The level will be increased in Flarum 2.0
+ level: 5
+ paths:
+ - extend.php
+ - src
+ excludePaths:
+ - *.blade.php
+ checkMissingIterableValueType: false
+ databaseMigrationsPath: ['migrations']
diff --git a/src/Extend/ConfigureHorizon.php b/src/Extend/ConfigureHorizon.php
index 4a14588..1eaabe8 100644
--- a/src/Extend/ConfigureHorizon.php
+++ b/src/Extend/ConfigureHorizon.php
@@ -12,7 +12,7 @@
namespace GlowingBlue\RedisSetup\Extend;
-use Blomstra\Horizon\Extend\Horizon;
+use FoF\Horizon\Extend\Horizon;
use Flarum\Extend\ExtenderInterface;
use Flarum\Extension\Extension;
use Flarum\Extension\ExtensionManager;
@@ -25,7 +25,7 @@ class ConfigureHorizon implements ExtenderInterface
{
$extensions = resolve(ExtensionManager::class);
- if (!$extensions->isEnabled('blomstra-horizon') || !class_exists(Horizon::class)) {
+ if (!$extensions->isEnabled('fof-horizon') || !class_exists(Horizon::class)) {
return;
}
diff --git a/src/Extend/EnableRedis.php b/src/Extend/EnableRedis.php
index bdc0583..aab063a 100644
--- a/src/Extend/EnableRedis.php
+++ b/src/Extend/EnableRedis.php
@@ -12,7 +12,7 @@
namespace GlowingBlue\RedisSetup\Extend;
-use Blomstra\Redis\Extend\Redis;
+use FoF\Redis\Extend\Redis;
use Flarum\Extend\ExtenderInterface;
use Flarum\Extension\Extension;
use Flarum\Settings\SettingsRepositoryInterface;
@@ -30,8 +30,7 @@ class EnableRedis implements ExtenderInterface
$config = $this->buildConfig();
(new Redis($config))
- ->disable($this->getDisabledServices())
- ->extend($container, $extension);
+ ->disable($this->getDisabledServices());
}
private function getDisabledServices(): array
diff --git a/src/Provider/QueueProvider.php b/src/Provider/QueueProvider.php
index 3dc4cff..59559ab 100644
--- a/src/Provider/QueueProvider.php
+++ b/src/Provider/QueueProvider.php
@@ -55,7 +55,7 @@ class QueueProvider extends AbstractServiceProvider
/** @var QueueContract $queue */
$queue = resolve(QueueContract::class);
- $queues = $cache->get('blomstra.queue.queues-seen') ?? [];
+ $queues = $cache->get('fof.queue.queues-seen') ?? [];
if ($queue instanceof RedisQueue) {
$load = [];
@@ -67,8 +67,8 @@ class QueueProvider extends AbstractServiceProvider
}
}
- $document->payload['blomstraQueuesSeen'] = $queues;
- $document->payload['blomstraQueuesLoad'] = $load ?? null;
+ $document->payload['fofQueuesSeen'] = $queues;
+ $document->payload['fofQueuesLoad'] = $load ?? null;
}
public function trackQueues(Looping $event)
@@ -76,8 +76,8 @@ class QueueProvider extends AbstractServiceProvider
/** @var Store $cache */
$cache = resolve('cache.store');
- $queues = $cache->get('blomstra.queue.queues-seen') ?? [];
+ $queues = $cache->get('fof.queue.queues-seen') ?? [];
$queues = array_merge($queues, (array) explode(',', $event->queue));
- $cache->put('blomstra.queue.queues-seen', array_unique($queues), 60);
+ $cache->put('fof.queue.queues-seen', array_unique($queues), 60);
}
}