From 19da2e98279deca6257d9aae811ee2ba54cdb55b Mon Sep 17 00:00:00 2001 From: SychO9 Date: Mon, 27 Sep 2021 10:16:01 +0100 Subject: [PATCH] Minor flarum update --- extensions/package-manager/.editorconfig | 0 .../package-manager/.github/workflows/js.yml | 0 .../.github/workflows/test.yml | 0 extensions/package-manager/.gitignore | 0 extensions/package-manager/LICENSE.md | 0 extensions/package-manager/README.md | 0 extensions/package-manager/assets/flarum.svg | 20 ++ extensions/package-manager/composer.json | 0 extensions/package-manager/extend.php | 12 +- extensions/package-manager/js/admin.js | 0 extensions/package-manager/js/dist/admin.js | 184 ++++++++++++------ .../package-manager/js/dist/admin.js.map | 2 +- extensions/package-manager/js/package.json | 0 .../admin/components/ComposerFailureModal.tsx | 0 .../js/src/admin/components/Installer.tsx | 11 +- .../js/src/admin/components/Updater.tsx | 101 ++++++---- .../package-manager/js/src/admin/index.js | 0 .../js/src/admin/utils/errorHandler.ts | 12 ++ extensions/package-manager/js/tsconfig.json | 0 .../package-manager/js/webpack.config.js | 0 extensions/package-manager/js/yarn.lock | 0 extensions/package-manager/less/admin.less | 13 ++ extensions/package-manager/locale/en.yml | 2 + ...04_09_000000_create_bazaar_tasks_table.php | 0 .../Controller/CheckForUpdatesController.php | 0 .../src/Api/Controller/ListTaskController.php | 0 .../MinorFlarumUpdateController.php | 42 ++++ .../Controller/RemoveExtensionController.php | 0 .../Controller/RequireExtensionController.php | 0 .../Controller/UpdateExtensionController.php | 0 .../Api/Serializer/ExtensionSerializer.php | 0 .../src/Command/CheckForUpdates.php | 0 .../src/Command/CheckForUpdatesHandler.php | 26 +-- .../src/Command/MinorFlarumUpdate.php | 18 ++ .../src/Command/MinorFlarumUpdateHandler.php | 65 +++++++ .../src/Command/RemoveExtension.php | 0 .../src/Command/RemoveExtensionHandler.php | 0 .../src/Command/RequireExtension.php | 0 .../src/Command/RequireExtensionHandler.php | 0 .../src/Command/UpdateExtension.php | 0 .../src/Command/UpdateExtensionHandler.php | 28 +-- .../ComposerCommandFailedException.php | 0 .../ComposerCommandFailedExceptionHandler.php | 0 .../ComposerRequireFailedException.php | 0 .../ComposerUpdateFailedException.php | 0 .../src/Extension/Event/Installed.php | 0 .../src/Extension/Event/Removed.php | 0 .../src/Extension/Event/Updated.php | 0 .../src/Extension/ExtensionUtils.php | 0 .../package-manager/src/LastUpdateCheck.php | 69 +++++++ .../src/PackageManagerServiceProvider.php | 0 .../src/RequirePackageValidator.php | 0 .../src/UpdateExtensionValidator.php | 0 53 files changed, 465 insertions(+), 140 deletions(-) mode change 100644 => 100755 extensions/package-manager/.editorconfig mode change 100644 => 100755 extensions/package-manager/.github/workflows/js.yml mode change 100644 => 100755 extensions/package-manager/.github/workflows/test.yml mode change 100644 => 100755 extensions/package-manager/.gitignore mode change 100644 => 100755 extensions/package-manager/LICENSE.md mode change 100644 => 100755 extensions/package-manager/README.md create mode 100755 extensions/package-manager/assets/flarum.svg mode change 100644 => 100755 extensions/package-manager/composer.json mode change 100644 => 100755 extensions/package-manager/extend.php mode change 100644 => 100755 extensions/package-manager/js/admin.js mode change 100644 => 100755 extensions/package-manager/js/dist/admin.js mode change 100644 => 100755 extensions/package-manager/js/dist/admin.js.map mode change 100644 => 100755 extensions/package-manager/js/package.json mode change 100644 => 100755 extensions/package-manager/js/src/admin/components/ComposerFailureModal.tsx mode change 100644 => 100755 extensions/package-manager/js/src/admin/components/Installer.tsx mode change 100644 => 100755 extensions/package-manager/js/src/admin/components/Updater.tsx mode change 100644 => 100755 extensions/package-manager/js/src/admin/index.js create mode 100755 extensions/package-manager/js/src/admin/utils/errorHandler.ts mode change 100644 => 100755 extensions/package-manager/js/tsconfig.json mode change 100644 => 100755 extensions/package-manager/js/webpack.config.js mode change 100644 => 100755 extensions/package-manager/js/yarn.lock mode change 100644 => 100755 extensions/package-manager/less/admin.less mode change 100644 => 100755 extensions/package-manager/locale/en.yml mode change 100644 => 100755 extensions/package-manager/migrations/2017_04_09_000000_create_bazaar_tasks_table.php mode change 100644 => 100755 extensions/package-manager/src/Api/Controller/CheckForUpdatesController.php mode change 100644 => 100755 extensions/package-manager/src/Api/Controller/ListTaskController.php create mode 100755 extensions/package-manager/src/Api/Controller/MinorFlarumUpdateController.php mode change 100644 => 100755 extensions/package-manager/src/Api/Controller/RemoveExtensionController.php mode change 100644 => 100755 extensions/package-manager/src/Api/Controller/RequireExtensionController.php mode change 100644 => 100755 extensions/package-manager/src/Api/Controller/UpdateExtensionController.php mode change 100644 => 100755 extensions/package-manager/src/Api/Serializer/ExtensionSerializer.php mode change 100644 => 100755 extensions/package-manager/src/Command/CheckForUpdates.php mode change 100644 => 100755 extensions/package-manager/src/Command/CheckForUpdatesHandler.php create mode 100755 extensions/package-manager/src/Command/MinorFlarumUpdate.php create mode 100755 extensions/package-manager/src/Command/MinorFlarumUpdateHandler.php mode change 100644 => 100755 extensions/package-manager/src/Command/RemoveExtension.php mode change 100644 => 100755 extensions/package-manager/src/Command/RemoveExtensionHandler.php mode change 100644 => 100755 extensions/package-manager/src/Command/RequireExtension.php mode change 100644 => 100755 extensions/package-manager/src/Command/RequireExtensionHandler.php mode change 100644 => 100755 extensions/package-manager/src/Command/UpdateExtension.php mode change 100644 => 100755 extensions/package-manager/src/Command/UpdateExtensionHandler.php mode change 100644 => 100755 extensions/package-manager/src/Exception/ComposerCommandFailedException.php mode change 100644 => 100755 extensions/package-manager/src/Exception/ComposerCommandFailedExceptionHandler.php mode change 100644 => 100755 extensions/package-manager/src/Exception/ComposerRequireFailedException.php mode change 100644 => 100755 extensions/package-manager/src/Exception/ComposerUpdateFailedException.php mode change 100644 => 100755 extensions/package-manager/src/Extension/Event/Installed.php mode change 100644 => 100755 extensions/package-manager/src/Extension/Event/Removed.php mode change 100644 => 100755 extensions/package-manager/src/Extension/Event/Updated.php mode change 100644 => 100755 extensions/package-manager/src/Extension/ExtensionUtils.php create mode 100755 extensions/package-manager/src/LastUpdateCheck.php mode change 100644 => 100755 extensions/package-manager/src/PackageManagerServiceProvider.php mode change 100644 => 100755 extensions/package-manager/src/RequirePackageValidator.php mode change 100644 => 100755 extensions/package-manager/src/UpdateExtensionValidator.php diff --git a/extensions/package-manager/.editorconfig b/extensions/package-manager/.editorconfig old mode 100644 new mode 100755 diff --git a/extensions/package-manager/.github/workflows/js.yml b/extensions/package-manager/.github/workflows/js.yml old mode 100644 new mode 100755 diff --git a/extensions/package-manager/.github/workflows/test.yml b/extensions/package-manager/.github/workflows/test.yml old mode 100644 new mode 100755 diff --git a/extensions/package-manager/.gitignore b/extensions/package-manager/.gitignore old mode 100644 new mode 100755 diff --git a/extensions/package-manager/LICENSE.md b/extensions/package-manager/LICENSE.md old mode 100644 new mode 100755 diff --git a/extensions/package-manager/README.md b/extensions/package-manager/README.md old mode 100644 new mode 100755 diff --git a/extensions/package-manager/assets/flarum.svg b/extensions/package-manager/assets/flarum.svg new file mode 100755 index 000000000..afc34acdb --- /dev/null +++ b/extensions/package-manager/assets/flarum.svg @@ -0,0 +1,20 @@ + + + only symbol + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/package-manager/composer.json b/extensions/package-manager/composer.json old mode 100644 new mode 100755 diff --git a/extensions/package-manager/extend.php b/extensions/package-manager/extend.php old mode 100644 new mode 100755 index b79df3a43..086223c6f --- a/extensions/package-manager/extend.php +++ b/extensions/package-manager/extend.php @@ -9,16 +9,18 @@ namespace SychO\PackageManager; use Flarum\Extend; use Flarum\Foundation\Paths; use Flarum\Frontend\Document; -use Flarum\Settings\SettingsRepositoryInterface; +use SychO\PackageManager\Exception\ComposerCommandFailedException; use SychO\PackageManager\Exception\ComposerCommandFailedExceptionHandler; use SychO\PackageManager\Exception\ComposerRequireFailedException; +use SychO\PackageManager\Exception\ComposerUpdateFailedException; return [ (new Extend\Routes('api')) ->post('/package-manager/extensions', 'package-manager.extensions.require', Api\Controller\RequireExtensionController::class) ->patch('/package-manager/extensions/{id}', 'package-manager.extensions.update', Api\Controller\UpdateExtensionController::class) ->delete('/package-manager/extensions/{id}', 'package-manager.extensions.remove', Api\Controller\RemoveExtensionController::class) - ->post('/package-manager/check-for-updates', 'package-manager.check-for-updates', Api\Controller\CheckForUpdatesController::class), + ->post('/package-manager/check-for-updates', 'package-manager.check-for-updates', Api\Controller\CheckForUpdatesController::class) + ->post('/package-manager/minor-update', 'package-manager.minor-update', Api\Controller\MinorFlarumUpdateController::class), (new Extend\Frontend('admin')) ->css(__DIR__ . '/less/admin.less') @@ -31,7 +33,7 @@ return [ && is_writable($paths->base.'/composer.json') && is_writable($paths->base.'/composer.lock'); - $document->payload['lastUpdateCheck'] = json_decode(resolve(SettingsRepositoryInterface::class)->get('sycho-package-manager.last_update_check', '{}'), true); + $document->payload['lastUpdateCheck'] = resolve(LastUpdateCheck::class)->get(); }), new Extend\Locales(__DIR__ . '/locale'), @@ -40,5 +42,7 @@ return [ ->register(PackageManagerServiceProvider::class), (new Extend\ErrorHandling) - ->handler(ComposerRequireFailedException::class, ComposerCommandFailedExceptionHandler::class), + ->handler(ComposerCommandFailedException::class, ComposerCommandFailedExceptionHandler::class) + ->handler(ComposerRequireFailedException::class, ComposerCommandFailedExceptionHandler::class) + ->handler(ComposerUpdateFailedException::class, ComposerCommandFailedExceptionHandler::class), ]; diff --git a/extensions/package-manager/js/admin.js b/extensions/package-manager/js/admin.js old mode 100644 new mode 100755 diff --git a/extensions/package-manager/js/dist/admin.js b/extensions/package-manager/js/dist/admin.js old mode 100644 new mode 100755 index 077633019..938a6c304 --- a/extensions/package-manager/js/dist/admin.js +++ b/extensions/package-manager/js/dist/admin.js @@ -225,7 +225,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var flarum_common_utils_Stream__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(flarum_common_utils_Stream__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var flarum_admin_components_LoadingModal__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! flarum/admin/components/LoadingModal */ "flarum/admin/components/LoadingModal"); /* harmony import */ var flarum_admin_components_LoadingModal__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(flarum_admin_components_LoadingModal__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var _ComposerFailureModal__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ComposerFailureModal */ "./src/admin/components/ComposerFailureModal.tsx"); +/* harmony import */ var _utils_errorHandler__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/errorHandler */ "./src/admin/utils/errorHandler.ts"); @@ -301,17 +301,7 @@ var Installer = /*#__PURE__*/function (_Component) { body: { data: this.data() }, - errorHandler: function errorHandler(e) { - var error = e.response.errors[0]; - - if (error.code !== 'composer_command_failure') { - throw e; - } - - flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.modal.show(_ComposerFailureModal__WEBPACK_IMPORTED_MODULE_6__["default"], { - error: error - }); - } + errorHandler: _utils_errorHandler__WEBPACK_IMPORTED_MODULE_6__["default"] }).then(function (response) { var extensionId = response.id; flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.alerts.show({ @@ -357,9 +347,12 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var flarum_common_helpers_humanTime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(flarum_common_helpers_humanTime__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var flarum_admin_components_LoadingModal__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! flarum/admin/components/LoadingModal */ "flarum/admin/components/LoadingModal"); /* harmony import */ var flarum_admin_components_LoadingModal__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(flarum_admin_components_LoadingModal__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var _ComposerFailureModal__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ComposerFailureModal */ "./src/admin/components/ComposerFailureModal.tsx"); -/* harmony import */ var flarum_common_components_Tooltip__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! flarum/common/components/Tooltip */ "flarum/common/components/Tooltip"); -/* harmony import */ var flarum_common_components_Tooltip__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(flarum_common_components_Tooltip__WEBPACK_IMPORTED_MODULE_8__); +/* harmony import */ var flarum_common_components_Tooltip__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! flarum/common/components/Tooltip */ "flarum/common/components/Tooltip"); +/* harmony import */ var flarum_common_components_Tooltip__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(flarum_common_components_Tooltip__WEBPACK_IMPORTED_MODULE_7__); +/* harmony import */ var _utils_errorHandler__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/errorHandler */ "./src/admin/utils/errorHandler.ts"); +/* harmony import */ var flarum_common_utils_classList__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! flarum/common/utils/classList */ "flarum/common/utils/classList"); +/* harmony import */ var flarum_common_utils_classList__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(flarum_common_utils_classList__WEBPACK_IMPORTED_MODULE_9__); + @@ -396,7 +389,20 @@ var Updater = /*#__PURE__*/function (_Component) { var _this$lastUpdateCheck, _this2 = this; - var extensions = this.getExtensionUpdates(); // @TODO catch `flarum/core` updates and display them differently, since it is the CORE and not an extension. + var extensions = this.getExtensionUpdates(); + var coreUpdate = this.getCoreUpdate(); + var core = null; + + if (coreUpdate) { + core = { + title: flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.translator.trans('sycho-package-manager.admin.updater.flarum'), + version: flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.data.settings.version, + icon: { + backgroundImage: "url(" + flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.forum.attribute('baseUrl') + "/assets/extensions/sycho-package-manager/flarum.svg" + }, + newPackageUpdate: coreUpdate + }; + } return m("div", { className: "Form-group" @@ -417,35 +423,46 @@ var Updater = /*#__PURE__*/function (_Component) { className: "PackageManager-extensions" }, m("div", { className: "PackageManager-extensions-grid" - }, extensions.map(function (extension) { - return m("div", { - className: "PackageManager-extension" - }, m("div", { - className: "PackageManager-extension-icon ExtensionIcon", - style: extension.icon - }, extension.icon ? flarum_common_helpers_icon__WEBPACK_IMPORTED_MODULE_3___default()(extension.icon.name) : ''), m("div", { - className: "PackageManager-extension-info" - }, m("div", { - className: "PackageManager-extension-name" - }, extension.extra['flarum-extension'].title), m("div", { - className: "PackageManager-extension-version" - }, m("span", { - className: "PackageManager-extension-version-current" - }, extension.version), m("span", { - className: "PackageManager-extension-version-latest Label" - }, extension.newPackageUpdate.latest))), m("div", { - className: "PackageManager-extension-controls" - }, m(flarum_common_components_Tooltip__WEBPACK_IMPORTED_MODULE_8___default.a, { - text: flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.translator.trans('sycho-package-manager.admin.extensions.update') - }, m(flarum_common_components_Button__WEBPACK_IMPORTED_MODULE_4___default.a, { - icon: "fas fa-arrow-alt-circle-up", - className: "Button Button--icon Button--flat", - onclick: _this2.update.bind(_this2, extension), - "aria-label": flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.translator.trans('sycho-package-manager.admin.extensions.update') - })))); + }, core ? this.extensionItem(core, true) : null, extensions.map(function (extension) { + return _this2.extensionItem(extension); }))) : null); }; + _proto.extensionItem = function extensionItem(extension, isCore) { + if (isCore === void 0) { + isCore = false; + } + + return m("div", { + className: flarum_common_utils_classList__WEBPACK_IMPORTED_MODULE_9___default()({ + 'PackageManager-extension': true, + 'PackageManager-extension--core': isCore + }) + }, m("div", { + className: "PackageManager-extension-icon ExtensionIcon", + style: extension.icon + }, extension.icon ? flarum_common_helpers_icon__WEBPACK_IMPORTED_MODULE_3___default()(extension.icon.name) : ''), m("div", { + className: "PackageManager-extension-info" + }, m("div", { + className: "PackageManager-extension-name" + }, extension.title || extension.extra['flarum-extension'].title), m("div", { + className: "PackageManager-extension-version" + }, m("span", { + className: "PackageManager-extension-version-current" + }, extension.version), m("span", { + className: "PackageManager-extension-version-latest Label" + }, extension.newPackageUpdate.latest))), m("div", { + className: "PackageManager-extension-controls" + }, m(flarum_common_components_Tooltip__WEBPACK_IMPORTED_MODULE_7___default.a, { + text: flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.translator.trans('sycho-package-manager.admin.extensions.update') + }, m(flarum_common_components_Button__WEBPACK_IMPORTED_MODULE_4___default.a, { + icon: "fas fa-arrow-alt-circle-up", + className: "Button Button--icon Button--flat", + onclick: isCore ? this.updateCoreMinor.bind(this) : this.updateExtension.bind(this, extension), + "aria-label": flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.translator.trans('sycho-package-manager.admin.extensions.update') + })))); + }; + _proto.getExtensionUpdates = function getExtensionUpdates() { var _this$lastUpdateCheck2, _this$lastUpdateCheck3, _this$lastUpdateCheck4; @@ -464,36 +481,52 @@ var Updater = /*#__PURE__*/function (_Component) { }); }; + _proto.getCoreUpdate = function getCoreUpdate() { + var _this$lastUpdateCheck5, _this$lastUpdateCheck6, _this$lastUpdateCheck7; + + return (_this$lastUpdateCheck5 = this.lastUpdateCheck) == null ? void 0 : (_this$lastUpdateCheck6 = _this$lastUpdateCheck5.updates) == null ? void 0 : (_this$lastUpdateCheck7 = _this$lastUpdateCheck6.installed) == null ? void 0 : _this$lastUpdateCheck7.filter(function (composerPackage) { + return composerPackage.name === 'flarum/core'; + }).pop(); + }; + _proto.checkForUpdates = function checkForUpdates() { var _this3 = this; this.isLoading = true; flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.request({ method: 'POST', - url: flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.forum.attribute('apiUrl') + "/package-manager/check-for-updates" + url: flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.forum.attribute('apiUrl') + "/package-manager/check-for-updates", + errorHandler: _utils_errorHandler__WEBPACK_IMPORTED_MODULE_8__["default"] }).then(function (response) { - _this3.isLoading = false; _this3.lastUpdateCheck = response; + })["finally"](function () { + _this3.isLoading = false; m.redraw(); }); }; - _proto.update = function update(extension) { + _proto.updateCoreMinor = function updateCoreMinor() { + flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.modal.show(flarum_admin_components_LoadingModal__WEBPACK_IMPORTED_MODULE_6___default.a); + flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.request({ + method: 'POST', + url: flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.forum.attribute('apiUrl') + "/package-manager/minor-update", + errorHandler: _utils_errorHandler__WEBPACK_IMPORTED_MODULE_8__["default"] + }).then(function () { + flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.alerts.show({ + type: 'success' + }, flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.translator.trans('sycho-package-manager.admin.updater.minor_update_successful')); + window.location.reload(); + })["finally"](function () { + m.redraw(); + }); + }; + + _proto.updateExtension = function updateExtension(extension) { flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.modal.show(flarum_admin_components_LoadingModal__WEBPACK_IMPORTED_MODULE_6___default.a); flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.request({ method: 'PATCH', url: flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.forum.attribute('apiUrl') + "/package-manager/extensions/" + extension.id, - errorHandler: function errorHandler(e) { - var error = e.response.errors[0]; - - if (error.code !== 'composer_command_failure') { - throw e; - } - - flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.modal.show(_ComposerFailureModal__WEBPACK_IMPORTED_MODULE_7__["default"], { - error: error - }); - } + errorHandler: _utils_errorHandler__WEBPACK_IMPORTED_MODULE_8__["default"] }).then(function () { flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.alerts.show({ type: 'success' @@ -596,6 +629,34 @@ flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.initializers.add('sycho- /***/ }), +/***/ "./src/admin/utils/errorHandler.ts": +/*!*****************************************!*\ + !*** ./src/admin/utils/errorHandler.ts ***! + \*****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var flarum_admin_app__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! flarum/admin/app */ "flarum/admin/app"); +/* harmony import */ var flarum_admin_app__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(flarum_admin_app__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _components_ComposerFailureModal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/ComposerFailureModal */ "./src/admin/components/ComposerFailureModal.tsx"); + + +/* harmony default export */ __webpack_exports__["default"] = (function (e) { + var error = e.response.errors[0]; + + if (error.code !== 'composer_command_failure') { + throw e; + } + + flarum_admin_app__WEBPACK_IMPORTED_MODULE_0___default.a.modal.show(_components_ComposerFailureModal__WEBPACK_IMPORTED_MODULE_1__["default"], { + error: error + }); +}); + +/***/ }), + /***/ "flarum/admin/app": /*!**************************************************!*\ !*** external "flarum.core.compat['admin/app']" ***! @@ -737,6 +798,17 @@ module.exports = flarum.core.compat['common/helpers/icon']; module.exports = flarum.core.compat['common/utils/Stream']; +/***/ }), + +/***/ "flarum/common/utils/classList": +/*!***************************************************************!*\ + !*** external "flarum.core.compat['common/utils/classList']" ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['common/utils/classList']; + /***/ }) /******/ }); diff --git a/extensions/package-manager/js/dist/admin.js.map b/extensions/package-manager/js/dist/admin.js.map old mode 100644 new mode 100755 index b12babf37..79efbb5f2 --- a/extensions/package-manager/js/dist/admin.js.map +++ b/extensions/package-manager/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://@sycho/flarum-package-manager/webpack/bootstrap","webpack://@sycho/flarum-package-manager/./admin.js","webpack://@sycho/flarum-package-manager/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@sycho/flarum-package-manager/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@sycho/flarum-package-manager/./src/admin/components/ComposerFailureModal.tsx","webpack://@sycho/flarum-package-manager/./src/admin/components/Installer.tsx","webpack://@sycho/flarum-package-manager/./src/admin/components/Updater.tsx","webpack://@sycho/flarum-package-manager/./src/admin/index.js","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['admin/app']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['admin/components/ExtensionPage']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['admin/components/LoadingModal']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['admin/utils/isExtensionEnabled']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/Component']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/components/Alert']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/components/Button']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/components/Modal']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/components/Tooltip']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/extend']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/helpers/humanTime']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/helpers/icon']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/utils/Stream']\""],"names":["_inheritsLoose","subClass","superClass","prototype","Object","create","constructor","setPrototypeOf","_setPrototypeOf","o","p","__proto__","ComposerFailureModal","oninit","vnode","attrs","error","guessed_cause","alertAttrs","type","content","app","translator","trans","className","title","output","Modal","Installer","packageName","isLoading","Stream","view","extiverse","onsubmit","bind","data","modal","show","LoadingModal","request","method","url","forum","attribute","body","errorHandler","e","response","errors","code","then","extensionId","id","alerts","extension","window","location","href","reload","m","redraw","Component","Updater","lastUpdateCheck","extensions","getExtensionUpdates","keys","length","humanTime","checkedAt","checkForUpdates","map","icon","name","extra","version","newPackageUpdate","latest","update","updates","installed","filter","composerPackage","replace","safeToUpdate","includes","values","initializers","add","extensionData","registerSetting","isRequiredDirectoriesWritable","extend","ExtensionPage","items","isExtensionEnabled","close"],"mappings":";;QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;;AClFA;AAAA;AAAA,wC;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AACe,SAASA,cAAT,CAAwBC,QAAxB,EAAkCC,UAAlC,EAA8C;AAC3DD,UAAQ,CAACE,SAAT,GAAqBC,MAAM,CAACC,MAAP,CAAcH,UAAU,CAACC,SAAzB,CAArB;AACAF,UAAQ,CAACE,SAAT,CAAmBG,WAAnB,GAAiCL,QAAjC;AACAM,oEAAc,CAACN,QAAD,EAAWC,UAAX,CAAd;AACD,C;;;;;;;;;;;;ACLD;AAAA;AAAe,SAASM,eAAT,CAAyBC,CAAzB,EAA4BC,CAA5B,EAA+B;AAC5CF,iBAAe,GAAGJ,MAAM,CAACG,cAAP,IAAyB,SAASC,eAAT,CAAyBC,CAAzB,EAA4BC,CAA5B,EAA+B;AACxED,KAAC,CAACE,SAAF,GAAcD,CAAd;AACA,WAAOD,CAAP;AACD,GAHD;;AAKA,SAAOD,eAAe,CAACC,CAAD,EAAIC,CAAJ,CAAtB;AACD,C;;;;;;;;;;;;;;;;;;;;ACPD;AACA;;IASqBE,oB;;;;;;;;;SACnBC,M,GAAA,gBAAOC,KAAP,EAAsC;AACpC,qBAAMD,MAAN,YAAaC,KAAb;;AAEA,QAAI,KAAKC,KAAL,CAAWC,KAAX,CAAiBC,aAArB,EAAoC;AAClC,WAAKC,UAAL,GAAkB;AAChBC,YAAI,EAAE,OADU;AAEhBC,eAAO,EAAEC,uDAAG,CAACC,UAAJ,CAAeC,KAAf,8DAAgF,KAAKR,KAAL,CAAWC,KAAX,CAAiBC,aAAjG;AAFO,OAAlB;AAID;AACF,G;;SAEDO,S,GAAA,qBAAY;AACV,WAAO,mCAAP;AACD,G;;SAEDC,K,GAAA,iBAAQ;AACN,WAAOJ,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,iDAArB,CAAP;AACD,G;;SAEDH,O,GAAA,mBAAU;AACR,WACE;AAAK,eAAS,EAAC;AAAf,OACE,mBACE,mBAAUC,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,gEAArB,CAAV,CADF,EAEE;AAAK,eAAS,EAAC;AAAf,OAA8C,KAAKR,KAAL,CAAWC,KAAX,CAAiBU,MAA/D,CAFF,CADF,CADF;AAQD,G;;;EA7BwEC,qE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACT3E;AACA;AACA;AACA;AACA;AACA;;IAEqBC,S;;;;;;;;;;;UACnBC,W;UACAC,S,GAAqB,K;;;;;;SAErBjB,M,GAAA,gBAAOC,KAAP,EAAmC;AACjC,yBAAMD,MAAN,YAAaC,KAAb;;AAEA,SAAKe,WAAL,GAAmBE,iEAAM,CAAC,EAAD,CAAzB;AACD,G;;SAEDC,I,GAAA,gBAAyB;AACvB,WACE;AAAK,eAAS,EAAC;AAAf,OACE;AAAO,aAAO,EAAC;AAAf,OAAoCX,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,gDAArB,CAApC,CADF,EAEE;AAAG,eAAS,EAAC;AAAb,OAAyBF,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,qDAArB,EAA4E;AACnGU,eAAS,EAAE;AAAG,YAAI,EAAC;AAAR;AADwF,KAA5E,CAAzB,CAFF,EAKE;AAAK,eAAS,EAAC;AAAf,OACE;AAAO,eAAS,EAAC,aAAjB;AAA+B,QAAE,EAAC,mBAAlC;AAAsD,iBAAW,EAAC,qBAAlE;AAAwF,UAAI,EAAE,KAAKJ;AAAnG,MADF,EAEE,EAAC,sEAAD;AAAQ,eAAS,EAAC,QAAlB;AAA2B,UAAI,EAAC,iBAAhC;AAAkD,aAAO,EAAE,KAAKK,QAAL,CAAcC,IAAd,CAAmB,IAAnB,CAA3D;AAAqF,aAAO,EAAE,KAAKL;AAAnG,OACGT,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,gDAArB,CADH,CAFF,CALF,CADF;AAcD,G;;SAEDa,I,GAAA,gBAAY;AACV,WAAO;AACL,iBAAS,KAAKP,WAAL;AADJ,KAAP;AAGD,G;;SAEDK,Q,GAAA,oBAAiB;AAAA;;AACf,SAAKJ,SAAL,GAAiB,IAAjB;AACAT,2DAAG,CAACgB,KAAJ,CAAUC,IAAV,CAAeC,2EAAf;AAEAlB,2DAAG,CAACmB,OAAJ,CAAY;AACVC,YAAM,EAAE,MADE;AAEVC,SAAG,EAAKrB,uDAAG,CAACsB,KAAJ,CAAUC,SAAV,CAAoB,QAApB,CAAL,gCAFO;AAGVC,UAAI,EAAE;AACJT,YAAI,EAAE,KAAKA,IAAL;AADF,OAHI;AAMVU,kBAAY,EAAE,sBAACC,CAAD,EAAY;AACxB,YAAM/B,KAAK,GAAG+B,CAAC,CAACC,QAAF,CAAWC,MAAX,CAAkB,CAAlB,CAAd;;AAEA,YAAIjC,KAAK,CAACkC,IAAN,KAAe,0BAAnB,EAA+C;AAC7C,gBAAMH,CAAN;AACD;;AAED1B,+DAAG,CAACgB,KAAJ,CAAUC,IAAV,CAAe1B,6DAAf,EAAqC;AAAEI,eAAK,EAALA;AAAF,SAArC;AACD;AAdS,KAAZ,EAeGmC,IAfH,CAeQ,UAACH,QAAD,EAAc;AACpB,UAAMI,WAAW,GAAGJ,QAAQ,CAACK,EAA7B;AACAhC,6DAAG,CAACiC,MAAJ,CAAWhB,IAAX,CAAgB;AAAEnB,YAAI,EAAE;AAAR,OAAhB,EAAqCE,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,2DAArB,EAAkF;AAAEgC,iBAAS,EAAEH;AAAb,OAAlF,CAArC;AACAI,YAAM,CAACC,QAAP,CAAgBC,IAAhB,GAA0BrC,uDAAG,CAACsB,KAAJ,CAAUC,SAAV,CAAoB,UAApB,CAA1B,oBAAwEQ,WAAxE;AACAI,YAAM,CAACC,QAAP,CAAgBE,MAAhB;AACD,KApBD,aAoBW,YAAM;AACf,YAAI,CAAC7B,SAAL,GAAiB,KAAjB;AACA8B,OAAC,CAACC,MAAF;AACD,KAvBD;AAwBD,G;;;EA7DoCC,8D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACRvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IAmBqBC,O;;;;;;;;;;;UACnBjC,S,GAAqB,K;UACrBkC,e,GAAmC3C,uDAAG,CAACe,IAAJ,CAAS4B,eAAT,IAA4B,E;;;;;;SAE/DnD,M,GAAA,gBAAOC,KAAP,EAAc;AACZ,yBAAMD,MAAN,YAAaC,KAAb;AACD,G;;SAEDkB,I,GAAA,gBAAO;AAAA;AAAA;;AACL,QAAMiC,UAAe,GAAG,KAAKC,mBAAL,EAAxB,CADK,CAGL;;AAEA,WACE;AAAK,eAAS,EAAC;AAAf,OACE,iBAAQ7C,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,mDAArB,CAAR,CADF,EAEE;AAAG,eAAS,EAAC;AAAb,OAAyBF,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,kDAArB,CAAzB,CAFF,EAGGnB,MAAM,CAAC+D,IAAP,CAAY,KAAKH,eAAjB,EAAkCI,MAAlC,GACC;AAAG,eAAS,EAAC;AAAb,OACE;AAAM,eAAS,EAAC;AAAhB,OAAsD/C,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,4DAArB,CAAtD,CADF,EAEE;AAAM,eAAS,EAAC;AAAhB,OAAsD8C,sEAAS,0BAAC,KAAKL,eAAN,qBAAC,sBAAsBM,SAAvB,CAA/D,CAFF,CADD,GAKG,IARN,EASE,EAAC,sEAAD;AACE,eAAS,EAAC,QADZ;AAEE,UAAI,EAAC,iBAFP;AAGE,aAAO,EAAE,KAAKC,eAAL,CAAqBpC,IAArB,CAA0B,IAA1B,CAHX;AAIE,aAAO,EAAE,KAAKL;AAJhB,OAKGT,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,uDAArB,CALH,CATF,EAgBG0C,UAAU,CAACG,MAAX,GACC;AAAK,eAAS,EAAC;AAAf,OACE;AAAK,eAAS,EAAC;AAAf,OACGH,UAAU,CAACO,GAAX,CAAe,UAACjB,SAAD;AAAA,aACd;AAAK,iBAAS,EAAC;AAAf,SACE;AAAK,iBAAS,EAAC,6CAAf;AAA6D,aAAK,EAAEA,SAAS,CAACkB;AAA9E,SACGlB,SAAS,CAACkB,IAAV,GAAiBA,iEAAI,CAAClB,SAAS,CAACkB,IAAV,CAAeC,IAAhB,CAArB,GAA6C,EADhD,CADF,EAIE;AAAK,iBAAS,EAAC;AAAf,SACE;AAAK,iBAAS,EAAC;AAAf,SAAgDnB,SAAS,CAACoB,KAAV,CAAgB,kBAAhB,EAAoClD,KAApF,CADF,EAEE;AAAK,iBAAS,EAAC;AAAf,SACE;AAAM,iBAAS,EAAC;AAAhB,SAA4D8B,SAAS,CAACqB,OAAtE,CADF,EAEE;AAAM,iBAAS,EAAC;AAAhB,SAAiErB,SAAS,CAACsB,gBAAV,CAA2BC,MAA5F,CAFF,CAFF,CAJF,EAWE;AAAK,iBAAS,EAAC;AAAf,SACE,EAAC,uEAAD;AAAS,YAAI,EAAEzD,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,+CAArB;AAAf,SACE,EAAC,sEAAD;AACE,YAAI,EAAC,4BADP;AAEE,iBAAS,EAAC,kCAFZ;AAGE,eAAO,EAAE,MAAI,CAACwD,MAAL,CAAY5C,IAAZ,CAAiB,MAAjB,EAAuBoB,SAAvB,CAHX;AAIE,sBAAYlC,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,+CAArB;AAJd,QADF,CADF,CAXF,CADc;AAAA,KAAf,CADH,CADF,CADD,GA4BG,IA5CN,CADF;AAgDD,G;;SAED2C,mB,GAAA,+BAAsB;AAAA;;AACpB,QAAMc,OAAO,6BAAG,KAAKhB,eAAR,+CAAG,uBAAsBgB,OAAzB,+CAAG,uBAA+BC,SAAlC,qBAAG,uBAA0CC,MAA1C,CAAiD,UAACC,eAAD,EAAqC;AACpG,UAAM5B,SAAS,GAAGlC,uDAAG,CAACe,IAAJ,CAAS6B,UAAT,CAAoBkB,eAAe,CAACT,IAAhB,CAAqBU,OAArB,CAA6B,GAA7B,EAAkC,GAAlC,EAAuCA,OAAvC,CAA+C,yBAA/C,EAA0E,EAA1E,CAApB,CAAlB;AACA,UAAMC,YAAY,GAAG,CAAC,oBAAD,EAAuB,iBAAvB,EAA0CC,QAA1C,CAAmDH,eAAe,CAAC,eAAD,CAAlE,CAArB;;AAEA,UAAI5B,SAAS,IAAI8B,YAAjB,EAA+B;AAC7B9B,iBAAS,CAACsB,gBAAV,GAA6BM,eAA7B;AACD;;AAED,aAAO5B,SAAS,IAAI8B,YAApB;AACD,KATe,CAAhB;AAWA,WAAOjF,MAAM,CAACmF,MAAP,CAAclE,uDAAG,CAACe,IAAJ,CAAS6B,UAAvB,EAAmCiB,MAAnC,CAA0C,UAAC3B,SAAD;AAAA,aAAoBA,SAAS,CAACsB,gBAA9B;AAAA,KAA1C,CAAP;AACD,G;;SAEDN,e,GAAA,2BAAkB;AAAA;;AAChB,SAAKzC,SAAL,GAAiB,IAAjB;AAEAT,2DAAG,CAACmB,OAAJ,CAAY;AACVC,YAAM,EAAE,MADE;AAEVC,SAAG,EAAKrB,uDAAG,CAACsB,KAAJ,CAAUC,SAAV,CAAoB,QAApB,CAAL;AAFO,KAAZ,EAGGO,IAHH,CAGQ,UAACH,QAAD,EAAc;AACpB,YAAI,CAAClB,SAAL,GAAiB,KAAjB;AACA,YAAI,CAACkC,eAAL,GAAuBhB,QAAvB;AACAY,OAAC,CAACC,MAAF;AACD,KAPD;AAQD,G;;SAEDkB,M,GAAA,gBAAOxB,SAAP,EAAuB;AACrBlC,2DAAG,CAACgB,KAAJ,CAAUC,IAAV,CAAeC,2EAAf;AAEAlB,2DAAG,CAACmB,OAAJ,CAAY;AACVC,YAAM,EAAE,OADE;AAEVC,SAAG,EAAKrB,uDAAG,CAACsB,KAAJ,CAAUC,SAAV,CAAoB,QAApB,CAAL,oCAAiEW,SAAS,CAACF,EAFpE;AAGVP,kBAAY,EAAE,sBAACC,CAAD,EAAY;AACxB,YAAM/B,KAAK,GAAG+B,CAAC,CAACC,QAAF,CAAWC,MAAX,CAAkB,CAAlB,CAAd;;AAEA,YAAIjC,KAAK,CAACkC,IAAN,KAAe,0BAAnB,EAA+C;AAC7C,gBAAMH,CAAN;AACD;;AAED1B,+DAAG,CAACgB,KAAJ,CAAUC,IAAV,CAAe1B,6DAAf,EAAqC;AAAEI,eAAK,EAALA;AAAF,SAArC;AACD;AAXS,KAAZ,EAYGmC,IAZH,CAYQ,YAAM;AACZ9B,6DAAG,CAACiC,MAAJ,CAAWhB,IAAX,CAAgB;AAAEnB,YAAI,EAAE;AAAR,OAAhB,EAAqCE,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,0DAArB,EAAiF;AAAEgC,iBAAS,EAAEA,SAAS,CAACoB,KAAV,CAAgB,kBAAhB,EAAoClD;AAAjD,OAAjF,CAArC;AACA+B,YAAM,CAACC,QAAP,CAAgBE,MAAhB;AACD,KAfD,aAeW,YAAM;AACfC,OAAC,CAACC,MAAF;AACD,KAjBD;AAkBD,G;;;EAhHkCC,8D;;;;;;;;;;;;;;AC1BrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEAzC,uDAAG,CAACmE,YAAJ,CAAiBC,GAAjB,CAAqB,uBAArB,EAA8C,UAACpE,GAAD,EAAS;AACrDA,KAAG,CAACqE,aAAJ,QACO,uBADP,EAEGC,eAFH,CAEmB,YAAM;AACrB,QAAI,CAACtE,GAAG,CAACe,IAAJ,CAASwD,6BAAd,EAA6C;AAC3C,aACE;AAAK,iBAAS,EAAC;AAAf,SACE,EAAC,qEAAD;AAAO,YAAI,EAAC,SAAZ;AAAsB,mBAAW,EAAE;AAAnC,SAA2CvE,GAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,8CAArB,CAA3C,CADF,CADF;AAKD;AACF,GAVH,EAWGoE,eAXH,CAWmB,YAAM;AACrB,QAAItE,GAAG,CAACe,IAAJ,CAASwD,6BAAb,EAA4C;AAC1C,aACE,EAAC,6DAAD,OADF;AAGD;AACF,GAjBH,EAkBGD,eAlBH,CAkBmB,YAAM;AACrB,QAAItE,GAAG,CAACe,IAAJ,CAASwD,6BAAb,EAA4C;AAC1C,aACE,EAAC,2DAAD,OADF;AAGD;AACF,GAxBH;AA0BAC,qEAAM,CAACC,4EAAa,CAAC3F,SAAf,EAA0B,UAA1B,EAAsC,UAAU4F,KAAV,EAAiB;AAAA;;AAC3D,QAAI,KAAKxC,SAAL,CAAeF,EAAf,KAAsB,uBAAtB,IAAiD2C,4EAAkB,CAAC,KAAKzC,SAAL,CAAeF,EAAhB,CAAvE,EAA4F;AAC1F;AACD;;AAED0C,SAAK,CAACN,GAAN,CACE,QADF,EAEE,EAAC,sEAAD;AACE,eAAS,EAAC,uBADZ;AAEE,UAAI,EAAC,cAFP;AAGE,aAAO,EAAE,mBAAM;AACbpE,WAAG,CAACgB,KAAJ,CAAUC,IAAV,CAAeC,2EAAf;AAEAlB,WAAG,CAACmB,OAAJ,CAAY;AACVE,aAAG,EAAKrB,GAAG,CAACsB,KAAJ,CAAUC,SAAV,CAAoB,QAApB,CAAL,oCAAiE,KAAI,CAACW,SAAL,CAAeF,EADzE;AAEVZ,gBAAM,EAAE;AAFE,SAAZ,EAGGU,IAHH,CAGQ,YAAM;AACZ9B,aAAG,CAACiC,MAAJ,CAAWhB,IAAX,CAAgB;AAAEnB,gBAAI,EAAE;AAAR,WAAhB,EAAqCE,GAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,0DAArB,CAArC;AACAiC,gBAAM,CAACC,QAAP,GAAkBpC,GAAG,CAACsB,KAAJ,CAAUC,SAAV,CAAoB,UAApB,CAAlB;AACD,SAND,aAMW,YAAM;AACfvB,aAAG,CAACgB,KAAJ,CAAU4D,KAAV;AACD,SARD;AASD;AAfH,gBAFF;AAqBD,GA1BK,CAAN;AA2BD,CAtDD,E;;;;;;;;;;;ACVA,iD;;;;;;;;;;;ACAA,sE;;;;;;;;;;;ACAA,qE;;;;;;;;;;;ACAA,sE;;;;;;;;;;;ACAA,wD;;;;;;;;;;;ACAA,+D;;;;;;;;;;;ACAA,gE;;;;;;;;;;;ACAA,+D;;;;;;;;;;;ACAA,iE;;;;;;;;;;;ACAA,qD;;;;;;;;;;;ACAA,gE;;;;;;;;;;;ACAA,2D;;;;;;;;;;;ACAA,2D","file":"admin.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./admin.js\");\n","export * from './src/admin';","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import app from 'flarum/admin/app';\nimport Modal from 'flarum/common/components/Modal';\nimport { ComponentAttrs } from \"flarum/common/Component\";\nimport Alert from \"flarum/common/components/Alert\";\nimport Mithril from \"mithril\";\n\ninterface Attrs extends ComponentAttrs {\n output: string;\n}\n\nexport default class ComposerFailureModal extends Modal {\n oninit(vnode: Mithril.Vnode) {\n super.oninit(vnode);\n\n if (this.attrs.error.guessed_cause) {\n this.alertAttrs = {\n type: 'error',\n content: app.translator.trans(`sycho-package-manager.admin.failure_modal.guessed_cause.${this.attrs.error.guessed_cause}`),\n };\n }\n }\n\n className() {\n return 'Modal--large ComposerFailureModal';\n }\n\n title() {\n return app.translator.trans('sycho-package-manager.admin.failure_modal.title');\n }\n\n content() {\n return (\n
\n
\n {app.translator.trans('sycho-package-manager.admin.failure_modal.show_composer_output')}\n
{this.attrs.error.output}
\n
\n
\n );\n }\n}\n","import type Mithril from 'mithril';\nimport app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from \"flarum/common/components/Button\";\nimport Stream from \"flarum/common/utils/Stream\";\nimport LoadingModal from \"flarum/admin/components/LoadingModal\";\nimport ComposerFailureModal from \"./ComposerFailureModal\";\n\nexport default class Installer extends Component {\n packageName!: Stream;\n isLoading: boolean = false;\n\n oninit(vnode: Mithril.Vnode): void {\n super.oninit(vnode);\n\n this.packageName = Stream('');\n }\n\n view(): Mithril.Children {\n return (\n
\n \n

{app.translator.trans('sycho-package-manager.admin.extensions.install_help', {\n extiverse: extiverse.com\n })}

\n
\n \n \n
\n
\n );\n }\n\n data(): any {\n return {\n package: this.packageName(),\n };\n }\n\n onsubmit(): void {\n this.isLoading = true;\n app.modal.show(LoadingModal);\n\n app.request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/package-manager/extensions`,\n body: {\n data: this.data()\n },\n errorHandler: (e: any) => {\n const error = e.response.errors[0];\n\n if (error.code !== 'composer_command_failure') {\n throw e;\n }\n\n app.modal.show(ComposerFailureModal, { error });\n },\n }).then((response) => {\n const extensionId = response.id;\n app.alerts.show({ type: 'success' }, app.translator.trans('sycho-package-manager.admin.extensions.successful_install', { extension: extensionId }));\n window.location.href = `${app.forum.attribute('adminUrl')}#/extension/${extensionId}`;\n window.location.reload();\n }).finally(() => {\n this.isLoading = false;\n m.redraw();\n });\n }\n}\n","import app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport icon from \"flarum/common/helpers/icon\";\nimport Button from \"flarum/common/components/Button\";\nimport humanTime from \"flarum/common/helpers/humanTime\";\nimport LoadingModal from \"flarum/admin/components/LoadingModal\";\nimport ComposerFailureModal from \"./ComposerFailureModal\";\nimport Tooltip from \"flarum/common/components/Tooltip\";\n\ntype UpdatedPackage = {\n name: string;\n version: string;\n latest: string;\n \"latest-status\": string;\n description: string;\n};\n\ntype ComposerUpdates = {\n installed: UpdatedPackage[];\n};\n\ntype LastUpdateCheck = {\n checkedAt: Date;\n updates: ComposerUpdates;\n};\n\nexport default class Updater extends Component {\n isLoading: boolean = false;\n lastUpdateCheck: LastUpdateCheck = app.data.lastUpdateCheck || {};\n\n oninit(vnode) {\n super.oninit(vnode);\n }\n\n view() {\n const extensions: any = this.getExtensionUpdates();\n\n // @TODO catch `flarum/core` updates and display them differently, since it is the CORE and not an extension.\n\n return (\n
\n \n

{app.translator.trans('sycho-package-manager.admin.updater.updater_help')}

\n {Object.keys(this.lastUpdateCheck).length ? (\n

\n {app.translator.trans('sycho-package-manager.admin.updater.last_update_checked_at')}\n {humanTime(this.lastUpdateCheck?.checkedAt)}\n

\n ) : null}\n \n {app.translator.trans('sycho-package-manager.admin.updater.check_for_updates')}\n \n {extensions.length ? (\n
\n
\n {extensions.map((extension: any) => (\n
\n
\n {extension.icon ? icon(extension.icon.name) : ''}\n
\n
\n
{extension.extra['flarum-extension'].title}
\n
\n {extension.version}\n {extension.newPackageUpdate.latest}\n
\n
\n
\n \n \n \n
\n
\n ))}\n
\n
\n ) : null}\n
\n );\n }\n\n getExtensionUpdates() {\n const updates = this.lastUpdateCheck?.updates?.installed?.filter((composerPackage: UpdatedPackage) => {\n const extension = app.data.extensions[composerPackage.name.replace('/', '-').replace(/(flarum-ext-)|(flarum-)/, '')];\n const safeToUpdate = ['semver-safe-update', 'update-possible'].includes(composerPackage['latest-status']);\n\n if (extension && safeToUpdate) {\n extension.newPackageUpdate = composerPackage;\n }\n\n return extension && safeToUpdate;\n });\n\n return Object.values(app.data.extensions).filter((extension: any) => extension.newPackageUpdate);\n }\n\n checkForUpdates() {\n this.isLoading = true;\n\n app.request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/package-manager/check-for-updates`,\n }).then((response) => {\n this.isLoading = false;\n this.lastUpdateCheck = response as LastUpdateCheck;\n m.redraw();\n });\n }\n\n update(extension: any) {\n app.modal.show(LoadingModal);\n\n app.request({\n method: 'PATCH',\n url: `${app.forum.attribute('apiUrl')}/package-manager/extensions/${extension.id}`,\n errorHandler: (e: any) => {\n const error = e.response.errors[0];\n\n if (error.code !== 'composer_command_failure') {\n throw e;\n }\n\n app.modal.show(ComposerFailureModal, { error });\n },\n }).then(() => {\n app.alerts.show({ type: 'success' }, app.translator.trans('sycho-package-manager.admin.extensions.successful_update', { extension: extension.extra['flarum-extension'].title }));\n window.location.reload();\n }).finally(() => {\n m.redraw();\n });\n }\n}\n","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/admin/app';\nimport Alert from 'flarum/common/components/Alert';\nimport ExtensionPage from 'flarum/admin/components/ExtensionPage';\nimport Button from 'flarum/common/components/Button';\nimport LoadingModal from 'flarum/admin/components/LoadingModal';\nimport Installer from \"./components/Installer\";\nimport Updater from \"./components/Updater\";\nimport isExtensionEnabled from 'flarum/admin/utils/isExtensionEnabled';\n\napp.initializers.add('sycho-package-manager', (app) => {\n app.extensionData\n .for('sycho-package-manager')\n .registerSetting(() => {\n if (!app.data.isRequiredDirectoriesWritable) {\n return (\n
\n {app.translator.trans('sycho-package-manager.admin.file_permissions')}\n
\n );\n }\n })\n .registerSetting(() => {\n if (app.data.isRequiredDirectoriesWritable) {\n return (\n \n );\n }\n })\n .registerSetting(() => {\n if (app.data.isRequiredDirectoriesWritable) {\n return (\n \n );\n }\n });\n\n extend(ExtensionPage.prototype, 'topItems', function (items) {\n if (this.extension.id === 'sycho-package-manager' || isExtensionEnabled(this.extension.id)) {\n return;\n }\n\n items.add(\n 'remove',\n {\n app.modal.show(LoadingModal);\n\n app.request({\n url: `${app.forum.attribute('apiUrl')}/package-manager/extensions/${this.extension.id}`,\n method: 'DELETE',\n }).then(() => {\n app.alerts.show({ type: 'success' }, app.translator.trans('sycho-package-manager.admin.extensions.successful_remove'));\n window.location = app.forum.attribute('adminUrl');\n }).finally(() => {\n app.modal.close();\n });\n }}>\n Remove\n \n );\n });\n});\n","module.exports = flarum.core.compat['admin/app'];","module.exports = flarum.core.compat['admin/components/ExtensionPage'];","module.exports = flarum.core.compat['admin/components/LoadingModal'];","module.exports = flarum.core.compat['admin/utils/isExtensionEnabled'];","module.exports = flarum.core.compat['common/Component'];","module.exports = flarum.core.compat['common/components/Alert'];","module.exports = flarum.core.compat['common/components/Button'];","module.exports = flarum.core.compat['common/components/Modal'];","module.exports = flarum.core.compat['common/components/Tooltip'];","module.exports = flarum.core.compat['common/extend'];","module.exports = flarum.core.compat['common/helpers/humanTime'];","module.exports = flarum.core.compat['common/helpers/icon'];","module.exports = flarum.core.compat['common/utils/Stream'];"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://@sycho/flarum-package-manager/webpack/bootstrap","webpack://@sycho/flarum-package-manager/./admin.js","webpack://@sycho/flarum-package-manager/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@sycho/flarum-package-manager/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@sycho/flarum-package-manager/./src/admin/components/ComposerFailureModal.tsx","webpack://@sycho/flarum-package-manager/./src/admin/components/Installer.tsx","webpack://@sycho/flarum-package-manager/./src/admin/components/Updater.tsx","webpack://@sycho/flarum-package-manager/./src/admin/index.js","webpack://@sycho/flarum-package-manager/./src/admin/utils/errorHandler.ts","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['admin/app']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['admin/components/ExtensionPage']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['admin/components/LoadingModal']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['admin/utils/isExtensionEnabled']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/Component']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/components/Alert']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/components/Button']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/components/Modal']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/components/Tooltip']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/extend']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/helpers/humanTime']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/helpers/icon']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/utils/Stream']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/utils/classList']\""],"names":["_inheritsLoose","subClass","superClass","prototype","Object","create","constructor","setPrototypeOf","_setPrototypeOf","o","p","__proto__","ComposerFailureModal","oninit","vnode","attrs","error","guessed_cause","alertAttrs","type","content","app","translator","trans","className","title","output","Modal","Installer","packageName","isLoading","Stream","view","extiverse","onsubmit","bind","data","modal","show","LoadingModal","request","method","url","forum","attribute","body","errorHandler","then","response","extensionId","id","alerts","extension","window","location","href","reload","m","redraw","Component","Updater","lastUpdateCheck","extensions","getExtensionUpdates","coreUpdate","getCoreUpdate","core","version","settings","icon","backgroundImage","newPackageUpdate","keys","length","humanTime","checkedAt","checkForUpdates","extensionItem","map","isCore","classList","name","extra","latest","updateCoreMinor","updateExtension","updates","installed","filter","composerPackage","replace","safeToUpdate","includes","values","pop","initializers","add","extensionData","registerSetting","isRequiredDirectoriesWritable","extend","ExtensionPage","items","isExtensionEnabled","close","e","errors","code"],"mappings":"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","file":"admin.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./admin.js\");\n","export * from './src/admin';","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import app from 'flarum/admin/app';\nimport Modal from 'flarum/common/components/Modal';\nimport { ComponentAttrs } from \"flarum/common/Component\";\nimport Alert from \"flarum/common/components/Alert\";\nimport Mithril from \"mithril\";\n\ninterface Attrs extends ComponentAttrs {\n output: string;\n}\n\nexport default class ComposerFailureModal extends Modal {\n oninit(vnode: Mithril.Vnode) {\n super.oninit(vnode);\n\n if (this.attrs.error.guessed_cause) {\n this.alertAttrs = {\n type: 'error',\n content: app.translator.trans(`sycho-package-manager.admin.failure_modal.guessed_cause.${this.attrs.error.guessed_cause}`),\n };\n }\n }\n\n className() {\n return 'Modal--large ComposerFailureModal';\n }\n\n title() {\n return app.translator.trans('sycho-package-manager.admin.failure_modal.title');\n }\n\n content() {\n return (\n
\n
\n {app.translator.trans('sycho-package-manager.admin.failure_modal.show_composer_output')}\n
{this.attrs.error.output}
\n
\n
\n );\n }\n}\n","import type Mithril from 'mithril';\nimport app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from \"flarum/common/components/Button\";\nimport Stream from \"flarum/common/utils/Stream\";\nimport LoadingModal from \"flarum/admin/components/LoadingModal\";\nimport ComposerFailureModal from \"./ComposerFailureModal\";\nimport errorHandler from \"../utils/errorHandler\";\n\nexport default class Installer extends Component {\n packageName!: Stream;\n isLoading: boolean = false;\n\n oninit(vnode: Mithril.Vnode): void {\n super.oninit(vnode);\n\n this.packageName = Stream('');\n }\n\n view(): Mithril.Children {\n return (\n
\n \n

{app.translator.trans('sycho-package-manager.admin.extensions.install_help', {\n extiverse: extiverse.com\n })}

\n
\n \n \n
\n
\n );\n }\n\n data(): any {\n return {\n package: this.packageName(),\n };\n }\n\n onsubmit(): void {\n this.isLoading = true;\n app.modal.show(LoadingModal);\n\n app.request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/package-manager/extensions`,\n body: {\n data: this.data()\n },\n errorHandler,\n }).then((response) => {\n const extensionId = response.id;\n app.alerts.show({ type: 'success' }, app.translator.trans('sycho-package-manager.admin.extensions.successful_install', { extension: extensionId }));\n window.location.href = `${app.forum.attribute('adminUrl')}#/extension/${extensionId}`;\n window.location.reload();\n }).finally(() => {\n this.isLoading = false;\n m.redraw();\n });\n }\n}\n","import app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport icon from \"flarum/common/helpers/icon\";\nimport Button from \"flarum/common/components/Button\";\nimport humanTime from \"flarum/common/helpers/humanTime\";\nimport LoadingModal from \"flarum/admin/components/LoadingModal\";\nimport ComposerFailureModal from \"./ComposerFailureModal\";\nimport Tooltip from \"flarum/common/components/Tooltip\";\nimport errorHandler from \"../utils/errorHandler\";\nimport classList from \"flarum/common/utils/classList\";\n\ntype UpdatedPackage = {\n name: string;\n version: string;\n latest: string;\n \"latest-status\": string;\n description: string;\n};\n\ntype ComposerUpdates = {\n installed: UpdatedPackage[];\n};\n\ntype LastUpdateCheck = {\n checkedAt: Date;\n updates: ComposerUpdates;\n};\n\nexport default class Updater extends Component {\n isLoading: boolean = false;\n lastUpdateCheck: LastUpdateCheck = app.data.lastUpdateCheck || {};\n\n oninit(vnode) {\n super.oninit(vnode);\n }\n\n view() {\n const extensions: any = this.getExtensionUpdates();\n const coreUpdate: UpdatedPackage|undefined = this.getCoreUpdate();\n let core = null;\n\n if (coreUpdate) {\n core = {\n title: app.translator.trans('sycho-package-manager.admin.updater.flarum'),\n version: app.data.settings.version,\n icon: {\n backgroundImage: `url(${app.forum.attribute('baseUrl')}/assets/extensions/sycho-package-manager/flarum.svg`,\n },\n newPackageUpdate: coreUpdate,\n };\n }\n\n return (\n
\n \n

{app.translator.trans('sycho-package-manager.admin.updater.updater_help')}

\n {Object.keys(this.lastUpdateCheck).length ? (\n

\n {app.translator.trans('sycho-package-manager.admin.updater.last_update_checked_at')}\n {humanTime(this.lastUpdateCheck?.checkedAt)}\n

\n ) : null}\n \n {app.translator.trans('sycho-package-manager.admin.updater.check_for_updates')}\n \n {extensions.length ? (\n
\n
\n {core ? this.extensionItem(core, true) : null}\n {extensions.map((extension: any) => this.extensionItem(extension))}\n
\n
\n ) : null}\n
\n );\n }\n\n extensionItem(extension: any, isCore: boolean = false) {\n return (\n
\n
\n {extension.icon ? icon(extension.icon.name) : ''}\n
\n
\n
{extension.title || extension.extra['flarum-extension'].title}
\n
\n {extension.version}\n {extension.newPackageUpdate.latest}\n
\n
\n
\n \n \n \n
\n
\n );\n }\n\n getExtensionUpdates() {\n const updates = this.lastUpdateCheck?.updates?.installed?.filter((composerPackage: UpdatedPackage) => {\n const extension = app.data.extensions[composerPackage.name.replace('/', '-').replace(/(flarum-ext-)|(flarum-)/, '')];\n const safeToUpdate = ['semver-safe-update', 'update-possible'].includes(composerPackage['latest-status']);\n\n if (extension && safeToUpdate) {\n extension.newPackageUpdate = composerPackage;\n }\n\n return extension && safeToUpdate;\n });\n\n return Object.values(app.data.extensions).filter((extension: any) => extension.newPackageUpdate);\n }\n\n getCoreUpdate(): UpdatedPackage|undefined {\n return this.lastUpdateCheck?.updates?.installed?.filter((composerPackage: any) => composerPackage.name === 'flarum/core').pop();\n }\n\n checkForUpdates() {\n this.isLoading = true;\n\n app.request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/package-manager/check-for-updates`,\n errorHandler,\n }).then((response) => {\n this.lastUpdateCheck = response as LastUpdateCheck;\n }).finally(() => {\n this.isLoading = false;\n m.redraw();\n });\n }\n\n updateCoreMinor() {\n app.modal.show(LoadingModal);\n\n app.request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/package-manager/minor-update`,\n errorHandler,\n }).then(() => {\n app.alerts.show({ type: 'success' }, app.translator.trans('sycho-package-manager.admin.updater.minor_update_successful'));\n window.location.reload();\n }).finally(() => {\n m.redraw();\n });\n }\n\n updateExtension(extension: any) {\n app.modal.show(LoadingModal);\n\n app.request({\n method: 'PATCH',\n url: `${app.forum.attribute('apiUrl')}/package-manager/extensions/${extension.id}`,\n errorHandler,\n }).then(() => {\n app.alerts.show({ type: 'success' }, app.translator.trans('sycho-package-manager.admin.extensions.successful_update', { extension: extension.extra['flarum-extension'].title }));\n window.location.reload();\n }).finally(() => {\n m.redraw();\n });\n }\n}\n","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/admin/app';\nimport Alert from 'flarum/common/components/Alert';\nimport ExtensionPage from 'flarum/admin/components/ExtensionPage';\nimport Button from 'flarum/common/components/Button';\nimport LoadingModal from 'flarum/admin/components/LoadingModal';\nimport Installer from \"./components/Installer\";\nimport Updater from \"./components/Updater\";\nimport isExtensionEnabled from 'flarum/admin/utils/isExtensionEnabled';\n\napp.initializers.add('sycho-package-manager', (app) => {\n app.extensionData\n .for('sycho-package-manager')\n .registerSetting(() => {\n if (!app.data.isRequiredDirectoriesWritable) {\n return (\n
\n {app.translator.trans('sycho-package-manager.admin.file_permissions')}\n
\n );\n }\n })\n .registerSetting(() => {\n if (app.data.isRequiredDirectoriesWritable) {\n return (\n \n );\n }\n })\n .registerSetting(() => {\n if (app.data.isRequiredDirectoriesWritable) {\n return (\n \n );\n }\n });\n\n extend(ExtensionPage.prototype, 'topItems', function (items) {\n if (this.extension.id === 'sycho-package-manager' || isExtensionEnabled(this.extension.id)) {\n return;\n }\n\n items.add(\n 'remove',\n {\n app.modal.show(LoadingModal);\n\n app.request({\n url: `${app.forum.attribute('apiUrl')}/package-manager/extensions/${this.extension.id}`,\n method: 'DELETE',\n }).then(() => {\n app.alerts.show({ type: 'success' }, app.translator.trans('sycho-package-manager.admin.extensions.successful_remove'));\n window.location = app.forum.attribute('adminUrl');\n }).finally(() => {\n app.modal.close();\n });\n }}>\n Remove\n \n );\n });\n});\n","import app from \"flarum/admin/app\";\nimport ComposerFailureModal from \"../components/ComposerFailureModal\";\n\nexport default function (e: any) {\n const error = e.response.errors[0];\n\n if (error.code !== 'composer_command_failure') {\n throw e;\n }\n\n app.modal.show(ComposerFailureModal, { error });\n}\n","module.exports = flarum.core.compat['admin/app'];","module.exports = flarum.core.compat['admin/components/ExtensionPage'];","module.exports = flarum.core.compat['admin/components/LoadingModal'];","module.exports = flarum.core.compat['admin/utils/isExtensionEnabled'];","module.exports = flarum.core.compat['common/Component'];","module.exports = flarum.core.compat['common/components/Alert'];","module.exports = flarum.core.compat['common/components/Button'];","module.exports = flarum.core.compat['common/components/Modal'];","module.exports = flarum.core.compat['common/components/Tooltip'];","module.exports = flarum.core.compat['common/extend'];","module.exports = flarum.core.compat['common/helpers/humanTime'];","module.exports = flarum.core.compat['common/helpers/icon'];","module.exports = flarum.core.compat['common/utils/Stream'];","module.exports = flarum.core.compat['common/utils/classList'];"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/package-manager/js/package.json b/extensions/package-manager/js/package.json old mode 100644 new mode 100755 diff --git a/extensions/package-manager/js/src/admin/components/ComposerFailureModal.tsx b/extensions/package-manager/js/src/admin/components/ComposerFailureModal.tsx old mode 100644 new mode 100755 diff --git a/extensions/package-manager/js/src/admin/components/Installer.tsx b/extensions/package-manager/js/src/admin/components/Installer.tsx old mode 100644 new mode 100755 index fe424d2f7..cac506a4e --- a/extensions/package-manager/js/src/admin/components/Installer.tsx +++ b/extensions/package-manager/js/src/admin/components/Installer.tsx @@ -5,6 +5,7 @@ import Button from "flarum/common/components/Button"; import Stream from "flarum/common/utils/Stream"; import LoadingModal from "flarum/admin/components/LoadingModal"; import ComposerFailureModal from "./ComposerFailureModal"; +import errorHandler from "../utils/errorHandler"; export default class Installer extends Component { packageName!: Stream; @@ -49,15 +50,7 @@ export default class Installer extends Component { body: { data: this.data() }, - errorHandler: (e: any) => { - const error = e.response.errors[0]; - - if (error.code !== 'composer_command_failure') { - throw e; - } - - app.modal.show(ComposerFailureModal, { error }); - }, + errorHandler, }).then((response) => { const extensionId = response.id; app.alerts.show({ type: 'success' }, app.translator.trans('sycho-package-manager.admin.extensions.successful_install', { extension: extensionId })); diff --git a/extensions/package-manager/js/src/admin/components/Updater.tsx b/extensions/package-manager/js/src/admin/components/Updater.tsx old mode 100644 new mode 100755 index d0e1f6fa8..6bb43d634 --- a/extensions/package-manager/js/src/admin/components/Updater.tsx +++ b/extensions/package-manager/js/src/admin/components/Updater.tsx @@ -6,6 +6,8 @@ import humanTime from "flarum/common/helpers/humanTime"; import LoadingModal from "flarum/admin/components/LoadingModal"; import ComposerFailureModal from "./ComposerFailureModal"; import Tooltip from "flarum/common/components/Tooltip"; +import errorHandler from "../utils/errorHandler"; +import classList from "flarum/common/utils/classList"; type UpdatedPackage = { name: string; @@ -34,8 +36,19 @@ export default class Updater extends Component { view() { const extensions: any = this.getExtensionUpdates(); + const coreUpdate: UpdatedPackage|undefined = this.getCoreUpdate(); + let core = null; - // @TODO catch `flarum/core` updates and display them differently, since it is the CORE and not an extension. + if (coreUpdate) { + core = { + title: app.translator.trans('sycho-package-manager.admin.updater.flarum'), + version: app.data.settings.version, + icon: { + backgroundImage: `url(${app.forum.attribute('baseUrl')}/assets/extensions/sycho-package-manager/flarum.svg`, + }, + newPackageUpdate: coreUpdate, + }; + } return (
@@ -57,29 +70,8 @@ export default class Updater extends Component { {extensions.length ? (
- {extensions.map((extension: any) => ( -
-
- {extension.icon ? icon(extension.icon.name) : ''} -
-
-
{extension.extra['flarum-extension'].title}
-
- {extension.version} - {extension.newPackageUpdate.latest} -
-
-
- -
-
- ))} + {core ? this.extensionItem(core, true) : null} + {extensions.map((extension: any) => this.extensionItem(extension))}
) : null} @@ -87,6 +79,32 @@ export default class Updater extends Component { ); } + extensionItem(extension: any, isCore: boolean = false) { + return ( +
+
+ {extension.icon ? icon(extension.icon.name) : ''} +
+
+
{extension.title || extension.extra['flarum-extension'].title}
+
+ {extension.version} + {extension.newPackageUpdate.latest} +
+
+
+ +
+
+ ); + } + getExtensionUpdates() { const updates = this.lastUpdateCheck?.updates?.installed?.filter((composerPackage: UpdatedPackage) => { const extension = app.data.extensions[composerPackage.name.replace('/', '-').replace(/(flarum-ext-)|(flarum-)/, '')]; @@ -102,34 +120,47 @@ export default class Updater extends Component { return Object.values(app.data.extensions).filter((extension: any) => extension.newPackageUpdate); } + getCoreUpdate(): UpdatedPackage|undefined { + return this.lastUpdateCheck?.updates?.installed?.filter((composerPackage: any) => composerPackage.name === 'flarum/core').pop(); + } + checkForUpdates() { this.isLoading = true; app.request({ method: 'POST', url: `${app.forum.attribute('apiUrl')}/package-manager/check-for-updates`, + errorHandler, }).then((response) => { - this.isLoading = false; this.lastUpdateCheck = response as LastUpdateCheck; + }).finally(() => { + this.isLoading = false; m.redraw(); }); } - update(extension: any) { + updateCoreMinor() { + app.modal.show(LoadingModal); + + app.request({ + method: 'POST', + url: `${app.forum.attribute('apiUrl')}/package-manager/minor-update`, + errorHandler, + }).then(() => { + app.alerts.show({ type: 'success' }, app.translator.trans('sycho-package-manager.admin.updater.minor_update_successful')); + window.location.reload(); + }).finally(() => { + m.redraw(); + }); + } + + updateExtension(extension: any) { app.modal.show(LoadingModal); app.request({ method: 'PATCH', url: `${app.forum.attribute('apiUrl')}/package-manager/extensions/${extension.id}`, - errorHandler: (e: any) => { - const error = e.response.errors[0]; - - if (error.code !== 'composer_command_failure') { - throw e; - } - - app.modal.show(ComposerFailureModal, { error }); - }, + errorHandler, }).then(() => { app.alerts.show({ type: 'success' }, app.translator.trans('sycho-package-manager.admin.extensions.successful_update', { extension: extension.extra['flarum-extension'].title })); window.location.reload(); diff --git a/extensions/package-manager/js/src/admin/index.js b/extensions/package-manager/js/src/admin/index.js old mode 100644 new mode 100755 diff --git a/extensions/package-manager/js/src/admin/utils/errorHandler.ts b/extensions/package-manager/js/src/admin/utils/errorHandler.ts new file mode 100755 index 000000000..594581161 --- /dev/null +++ b/extensions/package-manager/js/src/admin/utils/errorHandler.ts @@ -0,0 +1,12 @@ +import app from "flarum/admin/app"; +import ComposerFailureModal from "../components/ComposerFailureModal"; + +export default function (e: any) { + const error = e.response.errors[0]; + + if (error.code !== 'composer_command_failure') { + throw e; + } + + app.modal.show(ComposerFailureModal, { error }); +} diff --git a/extensions/package-manager/js/tsconfig.json b/extensions/package-manager/js/tsconfig.json old mode 100644 new mode 100755 diff --git a/extensions/package-manager/js/webpack.config.js b/extensions/package-manager/js/webpack.config.js old mode 100644 new mode 100755 diff --git a/extensions/package-manager/js/yarn.lock b/extensions/package-manager/js/yarn.lock old mode 100644 new mode 100755 diff --git a/extensions/package-manager/less/admin.less b/extensions/package-manager/less/admin.less old mode 100644 new mode 100755 index a6cd8f170..065b374eb --- a/extensions/package-manager/less/admin.less +++ b/extensions/package-manager/less/admin.less @@ -64,4 +64,17 @@ font-weight: bold; } } + + &--core { + background-color: #e7672e; + color: #fff; + --button-color: #fff; + --button-bg-hover: darken(#e7672e, 5); + } + + &--core &-icon { + background-size: 100%; + background-color: transparent; + filter: grayscale(1) brightness(3.5); + } } diff --git a/extensions/package-manager/locale/en.yml b/extensions/package-manager/locale/en.yml old mode 100644 new mode 100755 index d3844f917..6042aa723 --- a/extensions/package-manager/locale/en.yml +++ b/extensions/package-manager/locale/en.yml @@ -20,6 +20,8 @@ sycho-package-manager: updater: check_for_updates: Check for updates + flarum: Flarum Core last_update_checked_at: "Last Update Check: " + minor_update_successful: Flarum successfully updated. updater_title: Updates updater_help: Runs a check for new extension and Flarum updates. diff --git a/extensions/package-manager/migrations/2017_04_09_000000_create_bazaar_tasks_table.php b/extensions/package-manager/migrations/2017_04_09_000000_create_bazaar_tasks_table.php old mode 100644 new mode 100755 diff --git a/extensions/package-manager/src/Api/Controller/CheckForUpdatesController.php b/extensions/package-manager/src/Api/Controller/CheckForUpdatesController.php old mode 100644 new mode 100755 diff --git a/extensions/package-manager/src/Api/Controller/ListTaskController.php b/extensions/package-manager/src/Api/Controller/ListTaskController.php old mode 100644 new mode 100755 diff --git a/extensions/package-manager/src/Api/Controller/MinorFlarumUpdateController.php b/extensions/package-manager/src/Api/Controller/MinorFlarumUpdateController.php new file mode 100755 index 000000000..f0cd1ee40 --- /dev/null +++ b/extensions/package-manager/src/Api/Controller/MinorFlarumUpdateController.php @@ -0,0 +1,42 @@ +bus = $bus; + } + + /** + * @throws \Flarum\User\Exception\PermissionDeniedException + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + $actor = RequestUtil::getActor($request); + + $this->bus->dispatch( + new MinorFlarumUpdate($actor) + ); + + return new EmptyResponse(); + } +} diff --git a/extensions/package-manager/src/Api/Controller/RemoveExtensionController.php b/extensions/package-manager/src/Api/Controller/RemoveExtensionController.php old mode 100644 new mode 100755 diff --git a/extensions/package-manager/src/Api/Controller/RequireExtensionController.php b/extensions/package-manager/src/Api/Controller/RequireExtensionController.php old mode 100644 new mode 100755 diff --git a/extensions/package-manager/src/Api/Controller/UpdateExtensionController.php b/extensions/package-manager/src/Api/Controller/UpdateExtensionController.php old mode 100644 new mode 100755 diff --git a/extensions/package-manager/src/Api/Serializer/ExtensionSerializer.php b/extensions/package-manager/src/Api/Serializer/ExtensionSerializer.php old mode 100644 new mode 100755 diff --git a/extensions/package-manager/src/Command/CheckForUpdates.php b/extensions/package-manager/src/Command/CheckForUpdates.php old mode 100644 new mode 100755 diff --git a/extensions/package-manager/src/Command/CheckForUpdatesHandler.php b/extensions/package-manager/src/Command/CheckForUpdatesHandler.php old mode 100644 new mode 100755 index b79209ec9..3e8541d10 --- a/extensions/package-manager/src/Command/CheckForUpdatesHandler.php +++ b/extensions/package-manager/src/Command/CheckForUpdatesHandler.php @@ -9,6 +9,8 @@ namespace SychO\PackageManager\Command; use Carbon\Carbon; use Composer\Console\Application; use Flarum\Settings\SettingsRepositoryInterface; +use SychO\PackageManager\Exception\ComposerCommandFailedException; +use SychO\PackageManager\LastUpdateCheck; use Symfony\Component\Console\Input\ArrayInput; use Symfony\Component\Console\Output\BufferedOutput; @@ -20,22 +22,23 @@ class CheckForUpdatesHandler protected $composer; /** - * @var SettingsRepositoryInterface + * @var LastUpdateCheck */ - protected $settings; + protected $lastUpdateCheck; /** * @param Application $composer - * @param SettingsRepositoryInterface $settings + * @param LastUpdateCheck $lastUpdateCheck */ - public function __construct(Application $composer, SettingsRepositoryInterface $settings) + public function __construct(Application $composer, LastUpdateCheck $lastUpdateCheck) { $this->composer = $composer; - $this->settings = $settings; + $this->lastUpdateCheck = $lastUpdateCheck; } /** * @throws \Flarum\User\Exception\PermissionDeniedException + * @throws ComposerCommandFailedException */ public function handle(CheckForUpdates $command) { @@ -50,15 +53,12 @@ class CheckForUpdatesHandler '--format' => 'json', ]); - $this->composer->run($input, $output); + $exitCode = $this->composer->run($input, $output); - $lastUpdateCheck = [ - 'checkedAt' => Carbon::now(), - 'updates' => json_decode($output->fetch(), true), - ]; + if ($exitCode !== 0) { + throw new ComposerCommandFailedException('', $output->fetch()); + } - $this->settings->set('sycho-package-manager.last_update_check', json_encode($lastUpdateCheck)); - - return $lastUpdateCheck; + return $this->lastUpdateCheck->save(json_decode($output->fetch(), true)); } } diff --git a/extensions/package-manager/src/Command/MinorFlarumUpdate.php b/extensions/package-manager/src/Command/MinorFlarumUpdate.php new file mode 100755 index 000000000..8dc3061d4 --- /dev/null +++ b/extensions/package-manager/src/Command/MinorFlarumUpdate.php @@ -0,0 +1,18 @@ +actor = $actor; + } +} diff --git a/extensions/package-manager/src/Command/MinorFlarumUpdateHandler.php b/extensions/package-manager/src/Command/MinorFlarumUpdateHandler.php new file mode 100755 index 000000000..26224beb5 --- /dev/null +++ b/extensions/package-manager/src/Command/MinorFlarumUpdateHandler.php @@ -0,0 +1,65 @@ +composer = $composer; + $this->lastUpdateCheck = $lastUpdateCheck; + } + + /** + * @throws \Flarum\User\Exception\PermissionDeniedException + * @throws ComposerUpdateFailedException + */ + public function handle(MinorFlarumUpdate $command) + { + $command->actor->assertAdmin(); + + $output = new BufferedOutput(); + $input = new ArrayInput([ + 'command' => 'update', + 'packages' => ["flarum/*"], + '--prefer-dist' => true, + '--no-dev' => true, + '-a' => true, + '--with-all-dependencies' => true, + ]); + + $exitCode = $this->composer->run($input, $output); + + if ($exitCode !== 0) { + throw new ComposerUpdateFailedException('flarum/*', $output->fetch()); + } + + $this->lastUpdateCheck->forget('flarum/*', true); + + return true; + } +} diff --git a/extensions/package-manager/src/Command/RemoveExtension.php b/extensions/package-manager/src/Command/RemoveExtension.php old mode 100644 new mode 100755 diff --git a/extensions/package-manager/src/Command/RemoveExtensionHandler.php b/extensions/package-manager/src/Command/RemoveExtensionHandler.php old mode 100644 new mode 100755 diff --git a/extensions/package-manager/src/Command/RequireExtension.php b/extensions/package-manager/src/Command/RequireExtension.php old mode 100644 new mode 100755 diff --git a/extensions/package-manager/src/Command/RequireExtensionHandler.php b/extensions/package-manager/src/Command/RequireExtensionHandler.php old mode 100644 new mode 100755 diff --git a/extensions/package-manager/src/Command/UpdateExtension.php b/extensions/package-manager/src/Command/UpdateExtension.php old mode 100644 new mode 100755 diff --git a/extensions/package-manager/src/Command/UpdateExtensionHandler.php b/extensions/package-manager/src/Command/UpdateExtensionHandler.php old mode 100644 new mode 100755 index 90e8e3368..a07413514 --- a/extensions/package-manager/src/Command/UpdateExtensionHandler.php +++ b/extensions/package-manager/src/Command/UpdateExtensionHandler.php @@ -11,6 +11,7 @@ use Flarum\Extension\ExtensionManager; use Flarum\Settings\SettingsRepositoryInterface; use SychO\PackageManager\Exception\ComposerUpdateFailedException; use SychO\PackageManager\UpdateExtensionValidator; +use SychO\PackageManager\LastUpdateCheck; use Symfony\Component\Console\Input\ArrayInput; use Symfony\Component\Console\Output\BufferedOutput; @@ -32,16 +33,16 @@ class UpdateExtensionHandler protected $validator; /** - * @var SettingsRepositoryInterface + * @var LastUpdateCheck */ - protected $settings; + protected $lastUpdateCheck; - public function __construct(Application $composer, ExtensionManager $extensions, UpdateExtensionValidator $validator, SettingsRepositoryInterface $settings) + public function __construct(Application $composer, ExtensionManager $extensions, UpdateExtensionValidator $validator, LastUpdateCheck $lastUpdateCheck) { $this->composer = $composer; $this->extensions = $extensions; $this->validator = $validator; - $this->settings = $settings; + $this->lastUpdateCheck = $lastUpdateCheck; } /** @@ -72,24 +73,7 @@ class UpdateExtensionHandler throw new ComposerUpdateFailedException($extension->name, $output->fetch()); } - $lastUpdateCheck = json_decode($this->settings->get('sycho-package-manager.last_update_check', '{}'), true); - - if (isset($lastUpdateCheck['updates']) && ! empty($lastUpdateCheck['updates']['installed'])) { - $updatesListChanged = false; - - foreach ($lastUpdateCheck['updates']['installed'] as $k => $package) { - if ($package['name'] === $extension->name) { - unset($lastUpdateCheck['updates']['installed'][$k]); - $updatesListChanged = true; - break; - } - } - - if ($updatesListChanged) { - $lastUpdateCheck['updates']['installed'] = array_values($lastUpdateCheck['updates']['installed']); - $this->settings->set('sycho-package-manager.last_update_check', json_encode($lastUpdateCheck)); - } - } + $this->lastUpdateCheck->forget($extension->name); return true; } diff --git a/extensions/package-manager/src/Exception/ComposerCommandFailedException.php b/extensions/package-manager/src/Exception/ComposerCommandFailedException.php old mode 100644 new mode 100755 diff --git a/extensions/package-manager/src/Exception/ComposerCommandFailedExceptionHandler.php b/extensions/package-manager/src/Exception/ComposerCommandFailedExceptionHandler.php old mode 100644 new mode 100755 diff --git a/extensions/package-manager/src/Exception/ComposerRequireFailedException.php b/extensions/package-manager/src/Exception/ComposerRequireFailedException.php old mode 100644 new mode 100755 diff --git a/extensions/package-manager/src/Exception/ComposerUpdateFailedException.php b/extensions/package-manager/src/Exception/ComposerUpdateFailedException.php old mode 100644 new mode 100755 diff --git a/extensions/package-manager/src/Extension/Event/Installed.php b/extensions/package-manager/src/Extension/Event/Installed.php old mode 100644 new mode 100755 diff --git a/extensions/package-manager/src/Extension/Event/Removed.php b/extensions/package-manager/src/Extension/Event/Removed.php old mode 100644 new mode 100755 diff --git a/extensions/package-manager/src/Extension/Event/Updated.php b/extensions/package-manager/src/Extension/Event/Updated.php old mode 100644 new mode 100755 diff --git a/extensions/package-manager/src/Extension/ExtensionUtils.php b/extensions/package-manager/src/Extension/ExtensionUtils.php old mode 100644 new mode 100755 diff --git a/extensions/package-manager/src/LastUpdateCheck.php b/extensions/package-manager/src/LastUpdateCheck.php new file mode 100755 index 000000000..53bfa5326 --- /dev/null +++ b/extensions/package-manager/src/LastUpdateCheck.php @@ -0,0 +1,69 @@ +settings = $settings; + } + + public function save(array $updates): array + { + $lastUpdateCheck = [ + 'checkedAt' => Carbon::now(), + 'updates' => $updates, + ]; + + $this->settings->set(self::KEY, json_encode($lastUpdateCheck)); + + return $lastUpdateCheck; + } + + public function get(): array + { + return json_decode($this->settings->get(self::KEY, '{}'), true); + } + + public function forget(string $name, bool $wildcard = false): void + { + $lastUpdateCheck = json_decode($this->settings->get(self::KEY, '{}'), true); + + if (isset($lastUpdateCheck['updates']) && ! empty($lastUpdateCheck['updates']['installed'])) { + $updatesListChanged = false; + $pattern = str_replace('*', '.*', preg_quote($name)); + + foreach ($lastUpdateCheck['updates']['installed'] as $k => $package) { + if (($wildcard && Str::of($package['name'])->test("/($pattern)/")) || $package['name'] === $name) { + unset($lastUpdateCheck['updates']['installed'][$k]); + $updatesListChanged = true; + + if (! $wildcard) { + break; + } + } + } + + if ($updatesListChanged) { + $lastUpdateCheck['updates']['installed'] = array_values($lastUpdateCheck['updates']['installed']); + $this->settings->set(self::KEY, json_encode($lastUpdateCheck)); + } + } + } +} diff --git a/extensions/package-manager/src/PackageManagerServiceProvider.php b/extensions/package-manager/src/PackageManagerServiceProvider.php old mode 100644 new mode 100755 diff --git a/extensions/package-manager/src/RequirePackageValidator.php b/extensions/package-manager/src/RequirePackageValidator.php old mode 100644 new mode 100755 diff --git a/extensions/package-manager/src/UpdateExtensionValidator.php b/extensions/package-manager/src/UpdateExtensionValidator.php old mode 100644 new mode 100755