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); } }