diff --git a/extensions/package-manager/extend.php b/extensions/package-manager/extend.php index 59bbad1a1..2184f5ee1 100755 --- a/extensions/package-manager/extend.php +++ b/extensions/package-manager/extend.php @@ -13,11 +13,10 @@ use Flarum\Extend; use Flarum\Foundation\Paths; use Flarum\Frontend\Document; use Flarum\PackageManager\Exception\ComposerCommandFailedException; -use Flarum\PackageManager\Exception\ComposerCommandFailedExceptionHandler; +use Flarum\PackageManager\Exception\ExceptionHandler; use Flarum\PackageManager\Exception\ComposerRequireFailedException; use Flarum\PackageManager\Exception\ComposerUpdateFailedException; -use Flarum\PackageManager\Exception\ExtensionAlreadyInstalledException; -use Flarum\PackageManager\Exception\ExtensionNotInstalledException; +use Flarum\PackageManager\Exception\MajorUpdateFailedException; return [ (new Extend\Routes('api')) @@ -25,7 +24,8 @@ return [ ->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/minor-update', 'package-manager.minor-update', Api\Controller\MinorFlarumUpdateController::class) + ->post('/package-manager/minor-update', 'package-manager.minor-update', Api\Controller\MinorUpdateController::class) + ->post('/package-manager/major-update', 'package-manager.major-update', Api\Controller\MajorUpdateController::class) ->post('/package-manager/global-update', 'package-manager.global-update', Api\Controller\GlobalUpdateController::class), (new Extend\Frontend('admin')) @@ -44,15 +44,23 @@ return [ new Extend\Locales(__DIR__ . '/locale'), + (new Extend\Settings()) + ->default('flarum-package-manager.last_update_check', json_encode([ + 'checkedAt' => null, + 'updates' => [ + 'installed' => [], + ], + ])), + (new Extend\ServiceProvider) ->register(PackageManagerServiceProvider::class), (new Extend\ErrorHandling) - ->handler(ComposerCommandFailedException::class, ComposerCommandFailedExceptionHandler::class) - ->handler(ComposerRequireFailedException::class, ComposerCommandFailedExceptionHandler::class) - ->handler(ComposerUpdateFailedException::class, ComposerCommandFailedExceptionHandler::class) - ->type(ExtensionAlreadyInstalledException::class, 'extension_already_installed') + ->handler(ComposerCommandFailedException::class, ExceptionHandler::class) + ->handler(ComposerRequireFailedException::class, ExceptionHandler::class) + ->handler(ComposerUpdateFailedException::class, ExceptionHandler::class) + ->handler(MajorUpdateFailedException::class, ExceptionHandler::class) ->status('extension_already_installed', 409) - ->type(ExtensionNotInstalledException::class, 'extension_not_installed') - ->status('extension_not_installed', 409), + ->status('extension_not_installed', 409) + ->status('no_new_major_version', 409), ]; diff --git a/extensions/package-manager/js/dist/admin.js b/extensions/package-manager/js/dist/admin.js index 478eb9c17..4456c2bfb 100755 --- a/extensions/package-manager/js/dist/admin.js +++ b/extensions/package-manager/js/dist/admin.js @@ -140,68 +140,6 @@ function _setPrototypeOf(o, p) { return _setPrototypeOf(o, p); } -/***/ }), - -/***/ "./src/admin/components/ComposerFailureModal.tsx": -/*!*******************************************************!*\ - !*** ./src/admin/components/ComposerFailureModal.tsx ***! - \*******************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ComposerFailureModal; }); -/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); -/* harmony import */ var flarum_admin_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/admin/app */ "flarum/admin/app"); -/* harmony import */ var flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_admin_app__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var flarum_common_components_Modal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/common/components/Modal */ "flarum/common/components/Modal"); -/* harmony import */ var flarum_common_components_Modal__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_common_components_Modal__WEBPACK_IMPORTED_MODULE_2__); - - - - -var ComposerFailureModal = /*#__PURE__*/function (_Modal) { - Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(ComposerFailureModal, _Modal); - - function ComposerFailureModal() { - return _Modal.apply(this, arguments) || this; - } - - var _proto = ComposerFailureModal.prototype; - - _proto.oninit = function oninit(vnode) { - _Modal.prototype.oninit.call(this, vnode); - - if (this.attrs.error.guessed_cause) { - this.alertAttrs = { - type: 'error', - content: flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.translator.trans("flarum-package-manager.admin.failure_modal.guessed_cause." + this.attrs.error.guessed_cause) - }; - } - }; - - _proto.className = function className() { - return 'Modal--large ComposerFailureModal'; - }; - - _proto.title = function title() { - return flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.translator.trans('flarum-package-manager.admin.failure_modal.title'); - }; - - _proto.content = function content() { - return m("div", { - className: "Modal-body" - }, m("details", null, m("summary", null, flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.translator.trans('flarum-package-manager.admin.failure_modal.show_composer_output')), m("pre", { - className: "ComposerFailureModal-output" - }, this.attrs.error.output))); - }; - - return ComposerFailureModal; -}(flarum_common_components_Modal__WEBPACK_IMPORTED_MODULE_2___default.a); - - - /***/ }), /***/ "./src/admin/components/Installer.tsx": @@ -813,8 +751,6 @@ flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.initializers.add('flarum __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]; @@ -825,9 +761,13 @@ __webpack_require__.r(__webpack_exports__); switch (error.code) { case 'composer_command_failure': - flarum_admin_app__WEBPACK_IMPORTED_MODULE_0___default.a.modal.show(_components_ComposerFailureModal__WEBPACK_IMPORTED_MODULE_1__["default"], { - error: error - }); + if (error.guessed_cause) { + flarum_admin_app__WEBPACK_IMPORTED_MODULE_0___default.a.alerts.show({ + type: 'error' + }, flarum_admin_app__WEBPACK_IMPORTED_MODULE_0___default.a.translator.trans("flarum-package-manager.admin.exceptions.guessed_cause." + error.guessed_cause)); + flarum_admin_app__WEBPACK_IMPORTED_MODULE_0___default.a.modal.close(); + } + break; case 'extension_already_installed': @@ -935,17 +875,6 @@ module.exports = flarum.core.compat['common/components/LoadingIndicator']; /***/ }), -/***/ "flarum/common/components/Modal": -/*!****************************************************************!*\ - !*** external "flarum.core.compat['common/components/Modal']" ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['common/components/Modal']; - -/***/ }), - /***/ "flarum/common/components/Tooltip": /*!******************************************************************!*\ !*** external "flarum.core.compat['common/components/Tooltip']" ***! diff --git a/extensions/package-manager/js/dist/admin.js.map b/extensions/package-manager/js/dist/admin.js.map index 3eff47418..d1f87e77b 100755 --- a/extensions/package-manager/js/dist/admin.js.map +++ b/extensions/package-manager/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://@flarum/package-manager/webpack/bootstrap","webpack://@flarum/package-manager/./admin.js","webpack://@flarum/package-manager/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/package-manager/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@flarum/package-manager/./src/admin/components/ComposerFailureModal.tsx","webpack://@flarum/package-manager/./src/admin/components/Installer.tsx","webpack://@flarum/package-manager/./src/admin/components/MajorUpdater.tsx","webpack://@flarum/package-manager/./src/admin/components/Updater.tsx","webpack://@flarum/package-manager/./src/admin/index.tsx","webpack://@flarum/package-manager/./src/admin/utils/errorHandler.ts","webpack://@flarum/package-manager/external \"flarum.core.compat['admin/app']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['admin/components/ExtensionPage']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['admin/components/LoadingModal']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['admin/utils/isExtensionEnabled']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/Component']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/components/Alert']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/components/Button']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/components/LoadingIndicator']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/components/Modal']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/components/Tooltip']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/extend']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/helpers/humanTime']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/helpers/icon']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/utils/Stream']\"","webpack://@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","MajorUpdater","version","coreUpdate","update","dryRun","Updater","lastUpdateCheck","packageUpdates","extensions","getExtensionUpdates","getCoreUpdate","core","settings","icon","backgroundImage","extra","keys","length","humanTime","checkedAt","checkForUpdates","updateGlobally","extensionItem","map","isCore","classList","name","updateCoreMinor","updateExtension","v","replace","updates","installed","filter","composerPackage","safeToUpdate","includes","values","pop","confirm","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(`flarum-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('flarum-package-manager.admin.failure_modal.title');\n }\n\n content() {\n return (\n
\n
\n {app.translator.trans('flarum-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

\n {app.translator.trans('flarum-package-manager.admin.extensions.install_help', {\n extiverse: extiverse.com,\n })}\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\n .request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/package-manager/extensions`,\n body: {\n data: this.data(),\n },\n errorHandler,\n })\n .then((response) => {\n const extensionId = response.id;\n app.alerts.show(\n { type: 'success' },\n app.translator.trans('flarum-package-manager.admin.extensions.successful_install', { extension: extensionId })\n );\n window.location.href = `${app.forum.attribute('adminUrl')}#/extension/${extensionId}`;\n window.location.reload();\n })\n .finally(() => {\n this.isLoading = false;\n m.redraw();\n });\n }\n}\n","import app from 'flarum/admin/app';\nimport Component, { ComponentAttrs } from 'flarum/common/Component';\nimport Mithril from 'mithril';\nimport Button from 'flarum/common/components/Button';\nimport Tooltip from 'flarum/common/components/Tooltip';\nimport { UpdatedPackage } from './Updater';\nimport LoadingModal from 'flarum/admin/components/LoadingModal';\nimport errorHandler from '../utils/errorHandler';\n\ninterface MajorUpdaterAttrs extends ComponentAttrs {\n coreUpdate: UpdatedPackage;\n}\n\nexport default class MajorUpdater extends Component {\n isLoading: string | null = null;\n\n view(vnode: Mithril.Vnode): Mithril.Children {\n return (\n
\n \"flarum\n \n

{app.translator.trans('flarum-package-manager.admin.major_updater.description')}

\n
\n \n \n \n \n
\n
\n );\n }\n\n update(dryRun: boolean) {\n this.isLoading = `update-${dryRun ? 'dry-run' : 'run'}`;\n app.modal.show(LoadingModal);\n\n app\n .request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/package-manager/major-update`,\n body: {\n data: { dryRun },\n },\n errorHandler,\n })\n .then(() => {\n app.alerts.show({ type: 'success' }, app.translator.trans('flarum-package-manager.admin.update_successful'));\n window.location.reload();\n })\n .finally(() => {\n this.isLoading = null;\n m.redraw();\n });\n }\n}\n","import Mithril from \"mithril\";\nimport 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 Tooltip from 'flarum/common/components/Tooltip';\nimport errorHandler from '../utils/errorHandler';\nimport classList from 'flarum/common/utils/classList';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport MajorUpdater from './MajorUpdater';\nimport {Extension} from \"flarum/admin/AdminApplication\";\n\nexport type UpdatedPackage = {\n name: string;\n version: string;\n latest: string;\n 'latest-minor': string | null;\n 'latest-major': string | null;\n 'latest-status': string;\n description: string;\n};\n\nexport type ComposerUpdates = {\n installed: UpdatedPackage[];\n};\n\nexport type LastUpdateCheck = {\n checkedAt: Date;\n updates: ComposerUpdates;\n};\n\nexport default class Updater extends Component {\n isLoading: string | null = null;\n lastUpdateCheck: LastUpdateCheck = (app.data.lastUpdateCheck as LastUpdateCheck) || {};\n packageUpdates: Record = {};\n\n oninit(vnode: Mithril.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: any = null;\n\n if (coreUpdate) {\n core = {\n id: \"flarum-core\",\n version: app.data.settings.version,\n icon: {\n backgroundImage: `url(${app.forum.attribute('baseUrl')}/assets/extensions/flarum-package-manager/flarum.svg`,\n },\n extra: {\n 'flarum-extension': {\n title: app.translator.trans('flarum-package-manager.admin.updater.flarum'),\n }\n }\n };\n\n this.packageUpdates['flarum-core'] = coreUpdate;\n }\n\n return [\n
\n \n

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

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

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

\n ) : null}\n
\n \n {app.translator.trans('flarum-package-manager.admin.updater.check_for_updates')}\n \n \n {app.translator.trans('flarum-package-manager.admin.updater.run_global_update')}\n \n
\n {this.isLoading !== null ? (\n
\n \n
\n ) : extensions.length || core ? (\n
\n
\n {core ? this.extensionItem(core, true) : null}\n {extensions.map((extension: any) => this.extensionItem(extension))}\n
\n
\n ) : null}\n
,\n coreUpdate && coreUpdate['latest-major'] ? : null,\n ];\n }\n\n extensionItem(extension: Extension, isCore: boolean = false) {\n return (\n \n
\n {extension.icon ? icon(extension.icon.name) : ''}\n
\n
\n
{extension.extra['flarum-extension'].title}
\n
\n {this.version(extension.version)}\n {this.packageUpdates[extension.id]['latest-minor'] ? (\n \n {this.version(this.packageUpdates[extension.id]['latest-minor']!)}\n \n ) : null}\n {this.packageUpdates[extension.id]['latest-major'] && !isCore ? (\n \n {this.version(this.packageUpdates[extension.id]['latest-major']!)}\n \n ) : null}\n
\n
\n
\n \n \n \n
\n \n );\n }\n\n version(v: string) {\n return 'v' + v.replace('v', '');\n }\n\n getExtensionUpdates() {\n 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 this.packageUpdates[extension.id] = composerPackage;\n }\n\n return extension && safeToUpdate;\n });\n\n return Object.values(app.data.extensions).filter((extension: any) => this.packageUpdates[extension.id]);\n }\n\n getCoreUpdate(): UpdatedPackage | undefined {\n return this.lastUpdateCheck?.updates?.installed?.filter((composerPackage: UpdatedPackage) => composerPackage.name === 'flarum/core').pop();\n }\n\n checkForUpdates() {\n this.isLoading = 'check';\n\n app\n .request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/package-manager/check-for-updates`,\n errorHandler,\n })\n .then((response) => {\n this.lastUpdateCheck = response as LastUpdateCheck;\n })\n .finally(() => {\n this.isLoading = null;\n m.redraw();\n });\n }\n\n updateCoreMinor() {\n if (confirm(app.translator.trans('flarum-package-manager.admin.minor_update_confirmation.content'))) {\n app.modal.show(LoadingModal);\n this.isLoading = 'minor-update';\n\n app\n .request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/package-manager/minor-update`,\n errorHandler,\n })\n .then(() => {\n app.alerts.show({ type: 'success' }, app.translator.trans('flarum-package-manager.admin.update_successful'));\n window.location.reload();\n })\n .finally(() => {\n this.isLoading = null;\n m.redraw();\n });\n }\n }\n\n updateExtension(extension: any) {\n app.modal.show(LoadingModal);\n this.isLoading = 'extension-update';\n\n app\n .request({\n method: 'PATCH',\n url: `${app.forum.attribute('apiUrl')}/package-manager/extensions/${extension.id}`,\n errorHandler,\n })\n .then(() => {\n app.alerts.show(\n { type: 'success' },\n app.translator.trans('flarum-package-manager.admin.extensions.successful_update', { extension: extension.extra['flarum-extension'].title })\n );\n window.location.reload();\n })\n .finally(() => {\n this.isLoading = null;\n m.redraw();\n });\n }\n\n updateGlobally() {\n app.modal.show(LoadingModal);\n this.isLoading = 'global-update';\n\n app\n .request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/package-manager/global-update`,\n errorHandler,\n })\n .then(() => {\n app.alerts.show({ type: 'success' }, app.translator.trans('flarum-package-manager.admin.updater.global_update_successful'));\n window.location.reload();\n })\n .finally(() => {\n this.isLoading = null;\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('flarum-package-manager', (app) => {\n app.extensionData\n .for('flarum-package-manager')\n .registerSetting(() => {\n if (!app.data.isRequiredDirectoriesWritable) {\n return (\n
\n \n {app.translator.trans('flarum-package-manager.admin.file_permissions')}\n \n
\n );\n }\n\n return null;\n })\n .registerSetting(() => {\n if (app.data.isRequiredDirectoriesWritable) {\n return ;\n }\n\n return null;\n })\n .registerSetting(() => {\n if (app.data.isRequiredDirectoriesWritable) {\n return ;\n }\n\n return null;\n });\n\n extend(ExtensionPage.prototype, 'topItems', function (items) {\n if (this.extension.id === 'flarum-package-manager' || isExtensionEnabled(this.extension.id)) {\n return;\n }\n\n items.add(\n 'remove',\n {\n app.modal.show(LoadingModal);\n\n app\n .request({\n url: `${app.forum.attribute('apiUrl')}/package-manager/extensions/${this.extension.id}`,\n method: 'DELETE',\n })\n .then(() => {\n app.alerts.show({ type: 'success' }, app.translator.trans('flarum-package-manager.admin.extensions.successful_remove'));\n window.location = app.forum.attribute('adminUrl');\n })\n .finally(() => {\n app.modal.close();\n });\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 (!['composer_command_failure', 'extension_already_installed', 'extension_not_installed'].includes(error.code)) {\n throw e;\n }\n\n switch (error.code) {\n case 'composer_command_failure':\n app.modal.show(ComposerFailureModal, { error });\n break;\n\n case 'extension_already_installed':\n app.alerts.show({ type: 'error' }, app.translator.trans('flarum-package-manager.admin.exceptions.extension_already_installed'));\n app.modal.close();\n break;\n\n case 'extension_not_installed':\n app.alerts.show({ type: 'error' }, app.translator.trans('flarum-package-manager.admin.exceptions.extension_not_installed'));\n app.modal.close();\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/LoadingIndicator'];","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 +{"version":3,"sources":["webpack://@flarum/package-manager/webpack/bootstrap","webpack://@flarum/package-manager/./admin.js","webpack://@flarum/package-manager/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/package-manager/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@flarum/package-manager/./src/admin/components/Installer.tsx","webpack://@flarum/package-manager/./src/admin/components/MajorUpdater.tsx","webpack://@flarum/package-manager/./src/admin/components/Updater.tsx","webpack://@flarum/package-manager/./src/admin/index.tsx","webpack://@flarum/package-manager/./src/admin/utils/errorHandler.ts","webpack://@flarum/package-manager/external \"flarum.core.compat['admin/app']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['admin/components/ExtensionPage']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['admin/components/LoadingModal']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['admin/utils/isExtensionEnabled']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/Component']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/components/Alert']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/components/Button']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/components/LoadingIndicator']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/components/Tooltip']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/extend']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/helpers/humanTime']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/helpers/icon']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/utils/Stream']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/utils/classList']\""],"names":["_inheritsLoose","subClass","superClass","prototype","Object","create","constructor","setPrototypeOf","_setPrototypeOf","o","p","__proto__","Installer","packageName","isLoading","oninit","vnode","Stream","view","app","translator","trans","extiverse","onsubmit","bind","data","modal","show","LoadingModal","request","method","url","forum","attribute","body","errorHandler","then","response","extensionId","id","alerts","type","extension","window","location","href","reload","m","redraw","Component","MajorUpdater","version","attrs","coreUpdate","update","dryRun","Updater","lastUpdateCheck","packageUpdates","extensions","getExtensionUpdates","getCoreUpdate","core","settings","icon","backgroundImage","extra","title","keys","length","humanTime","checkedAt","checkForUpdates","updateGlobally","extensionItem","map","isCore","classList","name","updateCoreMinor","updateExtension","v","replace","updates","installed","filter","composerPackage","safeToUpdate","includes","values","pop","confirm","initializers","add","extensionData","registerSetting","isRequiredDirectoriesWritable","extend","ExtensionPage","items","isExtensionEnabled","close","e","error","errors","code","guessed_cause"],"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;;;;;;;;;;;;;;;;;;;;;;;;;;;ACND;AACA;AACA;AACA;AACA;AACA;;IAEqBE,S;;;;;;;;;;;UACnBC,W;UACAC,S,GAAqB,K;;;;;;SAErBC,M,GAAA,gBAAOC,KAAP,EAAgD;AAC9C,yBAAMD,MAAN,YAAaC,KAAb;;AAEA,SAAKH,WAAL,GAAmBI,iEAAM,CAAC,EAAD,CAAzB;AACD,G;;SAEDC,I,GAAA,gBAAyB;AACvB,WACE;AAAK,eAAS,EAAC;AAAf,OACE;AAAO,aAAO,EAAC;AAAf,OAAoCC,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,iDAArB,CAApC,CADF,EAEE;AAAG,eAAS,EAAC;AAAb,OACGF,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,sDAArB,EAA6E;AAC5EC,eAAS,EAAE;AAAG,YAAI,EAAC;AAAR;AADiE,KAA7E,CADH,CAFF,EAOE;AAAK,eAAS,EAAC;AAAf,OACE;AAAO,eAAS,EAAC,aAAjB;AAA+B,QAAE,EAAC,mBAAlC;AAAsD,iBAAW,EAAC,qBAAlE;AAAwF,UAAI,EAAE,KAAKT;AAAnG,MADF,EAEE,EAAC,sEAAD;AAAQ,eAAS,EAAC,QAAlB;AAA2B,UAAI,EAAC,iBAAhC;AAAkD,aAAO,EAAE,KAAKU,QAAL,CAAcC,IAAd,CAAmB,IAAnB,CAA3D;AAAqF,aAAO,EAAE,KAAKV;AAAnG,OACGK,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,iDAArB,CADH,CAFF,CAPF,CADF;AAgBD,G;;SAEDI,I,GAAA,gBAAY;AACV,WAAO;AACL,iBAAS,KAAKZ,WAAL;AADJ,KAAP;AAGD,G;;SAEDU,Q,GAAA,oBAAiB;AAAA;;AACf,SAAKT,SAAL,GAAiB,IAAjB;AACAK,2DAAG,CAACO,KAAJ,CAAUC,IAAV,CAAeC,2EAAf;AAEAT,2DAAG,CACAU,OADH,CACW;AACPC,YAAM,EAAE,MADD;AAEPC,SAAG,EAAKZ,uDAAG,CAACa,KAAJ,CAAUC,SAAV,CAAoB,QAApB,CAAL,gCAFI;AAGPC,UAAI,EAAE;AACJT,YAAI,EAAE,KAAKA,IAAL;AADF,OAHC;AAMPU,kBAAY,EAAZA,2DAAYA;AANL,KADX,EASGC,IATH,CASQ,UAACC,QAAD,EAAc;AAClB,UAAMC,WAAW,GAAGD,QAAQ,CAACE,EAA7B;AACApB,6DAAG,CAACqB,MAAJ,CAAWb,IAAX,CACE;AAAEc,YAAI,EAAE;AAAR,OADF,EAEEtB,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,4DAArB,EAAmF;AAAEqB,iBAAS,EAAEJ;AAAb,OAAnF,CAFF;AAIAK,YAAM,CAACC,QAAP,CAAgBC,IAAhB,GAA0B1B,uDAAG,CAACa,KAAJ,CAAUC,SAAV,CAAoB,UAApB,CAA1B,oBAAwEK,WAAxE;AACAK,YAAM,CAACC,QAAP,CAAgBE,MAAhB;AACD,KAjBH,aAkBW,YAAM;AACb,YAAI,CAAChC,SAAL,GAAiB,KAAjB;AACAiC,OAAC,CAACC,MAAF;AACD,KArBH;AAsBD,G;;;EA7D2CC,8D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACR9C;AACA;AAEA;AACA;AAEA;AACA;;IAMqBC,Y;;;;;;;;;;;UACnBpC,S,GAA2B,I;;;;;;SAE3BI,I,GAAA,cAAKF,KAAL,EAAmE;AACjE,WACE;AAAK,eAAS,EAAC;AAAf,OACE;AAAK,SAAG,EAAC,aAAT;AAAuB,SAAG,EAAEG,uDAAG,CAACa,KAAJ,CAAUC,SAAV,CAAoB,SAApB,IAAiC;AAA7D,MADF,EAEE,iBAAQd,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,kDAArB,EAAyE;AAAE8B,aAAO,EAAE,KAAKC,KAAL,CAAWC,UAAX,CAAsB,cAAtB;AAAX,KAAzE,CAAR,CAFF,EAGE;AAAG,eAAS,EAAC;AAAb,OAAyBlC,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,wDAArB,CAAzB,CAHF,EAIE;AAAK,eAAS,EAAC;AAAf,OACE,EAAC,uEAAD;AAAS,UAAI,EAAEF,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,yDAArB;AAAf,OACE,EAAC,sEAAD;AAAQ,eAAS,EAAC,QAAlB;AAA2B,UAAI,EAAC,aAAhC;AAA8C,aAAO,EAAE,KAAKiC,MAAL,CAAY9B,IAAZ,CAAiB,IAAjB,EAAuB,IAAvB;AAAvD,OACGL,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,oDAArB,CADH,CADF,CADF,EAME,EAAC,sEAAD;AAAQ,eAAS,EAAC,QAAlB;AAA2B,UAAI,EAAC,aAAhC;AAA8C,aAAO,EAAE,KAAKiC,MAAL,CAAY9B,IAAZ,CAAiB,IAAjB,EAAuB,KAAvB;AAAvD,OACGL,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,mDAArB,CADH,CANF,CAJF,CADF;AAiBD,G;;SAEDiC,M,GAAA,gBAAOC,MAAP,EAAwB;AAAA;;AACtB,SAAKzC,SAAL,gBAA2ByC,MAAM,GAAG,SAAH,GAAe,KAAhD;AACApC,2DAAG,CAACO,KAAJ,CAAUC,IAAV,CAAeC,2EAAf;AAEAT,2DAAG,CACAU,OADH,CACW;AACPC,YAAM,EAAE,MADD;AAEPC,SAAG,EAAKZ,uDAAG,CAACa,KAAJ,CAAUC,SAAV,CAAoB,QAApB,CAAL,kCAFI;AAGPC,UAAI,EAAE;AACJT,YAAI,EAAE;AAAE8B,gBAAM,EAANA;AAAF;AADF,OAHC;AAMPpB,kBAAY,EAAZA,2DAAYA;AANL,KADX,EASGC,IATH,CASQ,YAAM;AACVjB,6DAAG,CAACqB,MAAJ,CAAWb,IAAX,CAAgB;AAAEc,YAAI,EAAE;AAAR,OAAhB,EAAqCtB,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,gDAArB,CAArC;AACAsB,YAAM,CAACC,QAAP,CAAgBE,MAAhB;AACD,KAZH,aAaW,YAAM;AACb,YAAI,CAAChC,SAAL,GAAiB,IAAjB;AACAiC,OAAC,CAACC,MAAF;AACD,KAhBH;AAiBD,G;;;EA5CwFC,8D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZ3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IAsBqBO,O;;;;;;;;;;;UACnB1C,S,GAA2B,I;UAC3B2C,e,GAAoCtC,uDAAG,CAACM,IAAJ,CAASgC,eAAV,IAAiD,E;UACpFC,c,GAAiD,E;;;;;;SAEjD3C,M,GAAA,gBAAOC,KAAP,EAA0C;AACxC,yBAAMD,MAAN,YAAaC,KAAb;AACD,G;;SAEDE,I,GAAA,gBAAO;AAAA;AAAA;;AACL,QAAMyC,UAAe,GAAG,KAAKC,mBAAL,EAAxB;AACA,QAAMP,UAAsC,GAAG,KAAKQ,aAAL,EAA/C;AACA,QAAIC,IAAS,GAAG,IAAhB;;AAEA,QAAIT,UAAJ,EAAgB;AACdS,UAAI,GAAG;AACLvB,UAAE,EAAE,aADC;AAELY,eAAO,EAAEhC,uDAAG,CAACM,IAAJ,CAASsC,QAAT,CAAkBZ,OAFtB;AAGLa,YAAI,EAAE;AACJC,yBAAe,WAAS9C,uDAAG,CAACa,KAAJ,CAAUC,SAAV,CAAoB,SAApB,CAAT;AADX,SAHD;AAMLiC,aAAK,EAAE;AACL,8BAAoB;AAClBC,iBAAK,EAAEhD,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,6CAArB;AADW;AADf;AANF,OAAP;AAaA,WAAKqC,cAAL,CAAoB,aAApB,IAAqCL,UAArC;AACD;;AAED,WAAO,CACL;AAAK,eAAS,EAAC;AAAf,OACE,iBAAQlC,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,oDAArB,CAAR,CADF,EAEE;AAAG,eAAS,EAAC;AAAb,OAAyBF,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,mDAArB,CAAzB,CAFF,EAGGjB,MAAM,CAACgE,IAAP,CAAY,KAAKX,eAAjB,EAAkCY,MAAlC,GACC;AAAG,eAAS,EAAC;AAAb,OACE;AAAM,eAAS,EAAC;AAAhB,OACGlD,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,6DAArB,CADH,CADF,EAIE;AAAM,eAAS,EAAC;AAAhB,OAAsDiD,sEAAS,0BAAC,KAAKb,eAAN,qBAAC,sBAAsBc,SAAvB,CAA/D,CAJF,CADD,GAOG,IAVN,EAWE;AAAK,eAAS,EAAC;AAAf,OACE,EAAC,sEAAD;AACE,eAAS,EAAC,QADZ;AAEE,UAAI,EAAC,iBAFP;AAGE,aAAO,EAAE,KAAKC,eAAL,CAAqBhD,IAArB,CAA0B,IAA1B,CAHX;AAIE,aAAO,EAAE,KAAKV,SAAL,KAAmB,OAJ9B;AAKE,cAAQ,EAAE,KAAKA,SAAL,KAAmB,IAAnB,IAA2B,KAAKA,SAAL,KAAmB;AAL1D,OAOGK,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,wDAArB,CAPH,CADF,EAUE,EAAC,sEAAD;AACE,eAAS,EAAC,QADZ;AAEE,UAAI,EAAC,aAFP;AAGE,aAAO,EAAE,KAAKoD,cAAL,CAAoBjD,IAApB,CAAyB,IAAzB,CAHX;AAIE,aAAO,EAAE,KAAKV,SAAL,KAAmB,eAJ9B;AAKE,cAAQ,EAAE,KAAKA,SAAL,KAAmB,IAAnB,IAA2B,KAAKA,SAAL,KAAmB;AAL1D,OAOGK,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,wDAArB,CAPH,CAVF,CAXF,EA+BG,KAAKP,SAAL,KAAmB,IAAnB,GACC;AAAK,eAAS,EAAC;AAAf,OACE,EAAC,iFAAD,OADF,CADD,GAIG6C,UAAU,CAACU,MAAX,IAAqBP,IAArB,GACF;AAAK,eAAS,EAAC;AAAf,OACE;AAAK,eAAS,EAAC;AAAf,OACGA,IAAI,GAAG,KAAKY,aAAL,CAAmBZ,IAAnB,EAAyB,IAAzB,CAAH,GAAoC,IAD3C,EAEGH,UAAU,CAACgB,GAAX,CAAe,UAACjC,SAAD;AAAA,aAAoB,MAAI,CAACgC,aAAL,CAAmBhC,SAAnB,CAApB;AAAA,KAAf,CAFH,CADF,CADE,GAOA,IA1CN,CADK,EA6CLW,UAAU,IAAIA,UAAU,CAAC,cAAD,CAAxB,GAA2C,EAAC,sDAAD;AAAc,gBAAU,EAAEA;AAA1B,MAA3C,GAAsF,IA7CjF,CAAP;AA+CD,G;;SAEDqB,a,GAAA,uBAAchC,SAAd,EAAoCkC,MAApC,EAA6D;AAAA,QAAzBA,MAAyB;AAAzBA,YAAyB,GAAP,KAAO;AAAA;;AAC3D,WACE;AACE,eAAS,EAAEC,oEAAS,CAAC;AACnB,oCAA4B,IADT;AAEnB,0CAAkCD;AAFf,OAAD;AADtB,OAME;AAAK,eAAS,EAAC,6CAAf;AAA6D,WAAK,EAAElC,SAAS,CAACsB;AAA9E,OACGtB,SAAS,CAACsB,IAAV,GAAiBA,iEAAI,CAACtB,SAAS,CAACsB,IAAV,CAAec,IAAhB,CAArB,GAA6C,EADhD,CANF,EASE;AAAK,eAAS,EAAC;AAAf,OACE;AAAK,eAAS,EAAC;AAAf,OAAgDpC,SAAS,CAACwB,KAAV,CAAgB,kBAAhB,EAAoCC,KAApF,CADF,EAEE;AAAK,eAAS,EAAC;AAAf,OACE;AAAM,eAAS,EAAC;AAAhB,OAA4D,KAAKhB,OAAL,CAAaT,SAAS,CAACS,OAAvB,CAA5D,CADF,EAEG,KAAKO,cAAL,CAAoBhB,SAAS,CAACH,EAA9B,EAAkC,cAAlC,IACC;AAAM,eAAS,EAAC;AAAhB,OACG,KAAKY,OAAL,CAAa,KAAKO,cAAL,CAAoBhB,SAAS,CAACH,EAA9B,EAAkC,cAAlC,CAAb,CADH,CADD,GAIG,IANN,EAOG,KAAKmB,cAAL,CAAoBhB,SAAS,CAACH,EAA9B,EAAkC,cAAlC,KAAqD,CAACqC,MAAtD,GACC;AAAM,eAAS,EAAC;AAAhB,OACG,KAAKzB,OAAL,CAAa,KAAKO,cAAL,CAAoBhB,SAAS,CAACH,EAA9B,EAAkC,cAAlC,CAAb,CADH,CADD,GAIG,IAXN,CAFF,CATF,EAyBE;AAAK,eAAS,EAAC;AAAf,OACE,EAAC,uEAAD;AAAS,UAAI,EAAEpB,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,gDAArB;AAAf,OACE,EAAC,sEAAD;AACE,UAAI,EAAC,4BADP;AAEE,eAAS,EAAC,kCAFZ;AAGE,aAAO,EAAEuD,MAAM,GAAG,KAAKG,eAAL,CAAqBvD,IAArB,CAA0B,IAA1B,CAAH,GAAqC,KAAKwD,eAAL,CAAqBxD,IAArB,CAA0B,IAA1B,EAAgCkB,SAAhC,CAHtD;AAIE,oBAAYvB,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,gDAArB;AAJd,MADF,CADF,CAzBF,CADF;AAsCD,G;;SAED8B,O,GAAA,iBAAQ8B,CAAR,EAAmB;AACjB,WAAO,MAAMA,CAAC,CAACC,OAAF,CAAU,GAAV,EAAe,EAAf,CAAb;AACD,G;;SAEDtB,mB,GAAA,+BAAsB;AAAA;AAAA;AAAA;AAAA;;AACpB,mCAAKH,eAAL,sEAAsB0B,OAAtB,sEAA+BC,SAA/B,4CAA0CC,MAA1C,CAAiD,UAACC,eAAD,EAAqC;AACpF,UAAM5C,SAAS,GAAGvB,uDAAG,CAACM,IAAJ,CAASkC,UAAT,CAAoB2B,eAAe,CAACR,IAAhB,CAAqBI,OAArB,CAA6B,GAA7B,EAAkC,GAAlC,EAAuCA,OAAvC,CAA+C,yBAA/C,EAA0E,EAA1E,CAApB,CAAlB;AACA,UAAMK,YAAY,GAAG,CAAC,oBAAD,EAAuB,iBAAvB,EAA0CC,QAA1C,CAAmDF,eAAe,CAAC,eAAD,CAAlE,CAArB;;AAEA,UAAI5C,SAAS,IAAI6C,YAAjB,EAA+B;AAC7B,cAAI,CAAC7B,cAAL,CAAoBhB,SAAS,CAACH,EAA9B,IAAoC+C,eAApC;AACD;;AAED,aAAO5C,SAAS,IAAI6C,YAApB;AACD,KATD;AAWA,WAAOnF,MAAM,CAACqF,MAAP,CAActE,uDAAG,CAACM,IAAJ,CAASkC,UAAvB,EAAmC0B,MAAnC,CAA0C,UAAC3C,SAAD;AAAA,aAAoB,MAAI,CAACgB,cAAL,CAAoBhB,SAAS,CAACH,EAA9B,CAApB;AAAA,KAA1C,CAAP;AACD,G;;SAEDsB,a,GAAA,yBAA4C;AAAA;;AAC1C,qCAAO,KAAKJ,eAAZ,+CAAO,uBAAsB0B,OAA7B,+CAAO,uBAA+BC,SAAtC,qBAAO,uBAA0CC,MAA1C,CAAiD,UAACC,eAAD;AAAA,aAAqCA,eAAe,CAACR,IAAhB,KAAyB,aAA9D;AAAA,KAAjD,EAA8HY,GAA9H,EAAP;AACD,G;;SAEDlB,e,GAAA,2BAAkB;AAAA;;AAChB,SAAK1D,SAAL,GAAiB,OAAjB;AAEAK,2DAAG,CACAU,OADH,CACW;AACPC,YAAM,EAAE,MADD;AAEPC,SAAG,EAAKZ,uDAAG,CAACa,KAAJ,CAAUC,SAAV,CAAoB,QAApB,CAAL,uCAFI;AAGPE,kBAAY,EAAZA,2DAAYA;AAHL,KADX,EAMGC,IANH,CAMQ,UAACC,QAAD,EAAc;AAClB,YAAI,CAACoB,eAAL,GAAuBpB,QAAvB;AACD,KARH,aASW,YAAM;AACb,YAAI,CAACvB,SAAL,GAAiB,IAAjB;AACAiC,OAAC,CAACC,MAAF;AACD,KAZH;AAaD,G;;SAED+B,e,GAAA,2BAAkB;AAAA;;AAChB,QAAIY,OAAO,CAACxE,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,gEAArB,CAAD,CAAX,EAAqG;AACnGF,6DAAG,CAACO,KAAJ,CAAUC,IAAV,CAAeC,2EAAf;AACA,WAAKd,SAAL,GAAiB,cAAjB;AAEAK,6DAAG,CACAU,OADH,CACW;AACPC,cAAM,EAAE,MADD;AAEPC,WAAG,EAAKZ,uDAAG,CAACa,KAAJ,CAAUC,SAAV,CAAoB,QAApB,CAAL,kCAFI;AAGPE,oBAAY,EAAZA,2DAAYA;AAHL,OADX,EAMGC,IANH,CAMQ,YAAM;AACVjB,+DAAG,CAACqB,MAAJ,CAAWb,IAAX,CAAgB;AAAEc,cAAI,EAAE;AAAR,SAAhB,EAAqCtB,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,gDAArB,CAArC;AACAsB,cAAM,CAACC,QAAP,CAAgBE,MAAhB;AACD,OATH,aAUW,YAAM;AACb,cAAI,CAAChC,SAAL,GAAiB,IAAjB;AACAiC,SAAC,CAACC,MAAF;AACD,OAbH;AAcD;AACF,G;;SAEDgC,e,GAAA,yBAAgBtC,SAAhB,EAAgC;AAAA;;AAC9BvB,2DAAG,CAACO,KAAJ,CAAUC,IAAV,CAAeC,2EAAf;AACA,SAAKd,SAAL,GAAiB,kBAAjB;AAEAK,2DAAG,CACAU,OADH,CACW;AACPC,YAAM,EAAE,OADD;AAEPC,SAAG,EAAKZ,uDAAG,CAACa,KAAJ,CAAUC,SAAV,CAAoB,QAApB,CAAL,oCAAiES,SAAS,CAACH,EAFvE;AAGPJ,kBAAY,EAAZA,2DAAYA;AAHL,KADX,EAMGC,IANH,CAMQ,YAAM;AACVjB,6DAAG,CAACqB,MAAJ,CAAWb,IAAX,CACE;AAAEc,YAAI,EAAE;AAAR,OADF,EAEEtB,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,2DAArB,EAAkF;AAAEqB,iBAAS,EAAEA,SAAS,CAACwB,KAAV,CAAgB,kBAAhB,EAAoCC;AAAjD,OAAlF,CAFF;AAIAxB,YAAM,CAACC,QAAP,CAAgBE,MAAhB;AACD,KAZH,aAaW,YAAM;AACb,YAAI,CAAChC,SAAL,GAAiB,IAAjB;AACAiC,OAAC,CAACC,MAAF;AACD,KAhBH;AAiBD,G;;SAEDyB,c,GAAA,0BAAiB;AAAA;;AACftD,2DAAG,CAACO,KAAJ,CAAUC,IAAV,CAAeC,2EAAf;AACA,SAAKd,SAAL,GAAiB,eAAjB;AAEAK,2DAAG,CACAU,OADH,CACW;AACPC,YAAM,EAAE,MADD;AAEPC,SAAG,EAAKZ,uDAAG,CAACa,KAAJ,CAAUC,SAAV,CAAoB,QAApB,CAAL,mCAFI;AAGPE,kBAAY,EAAZA,2DAAYA;AAHL,KADX,EAMGC,IANH,CAMQ,YAAM;AACVjB,6DAAG,CAACqB,MAAJ,CAAWb,IAAX,CAAgB;AAAEc,YAAI,EAAE;AAAR,OAAhB,EAAqCtB,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,+DAArB,CAArC;AACAsB,YAAM,CAACC,QAAP,CAAgBE,MAAhB;AACD,KATH,aAUW,YAAM;AACb,YAAI,CAAChC,SAAL,GAAiB,IAAjB;AACAiC,OAAC,CAACC,MAAF;AACD,KAbH;AAcD,G;;;EAjOyCC,8D;;;;;;;;;;;;;;ACjC5C;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;AAEA9B,uDAAG,CAACyE,YAAJ,CAAiBC,GAAjB,CAAqB,wBAArB,EAA+C,UAAC1E,GAAD,EAAS;AACtDA,KAAG,CAAC2E,aAAJ,QACO,wBADP,EAEGC,eAFH,CAEmB,YAAM;AACrB,QAAI,CAAC5E,GAAG,CAACM,IAAJ,CAASuE,6BAAd,EAA6C;AAC3C,aACE;AAAK,iBAAS,EAAC;AAAf,SACE,EAAC,qEAAD;AAAO,YAAI,EAAC,SAAZ;AAAsB,mBAAW,EAAE;AAAnC,SACG7E,GAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,+CAArB,CADH,CADF,CADF;AAOD;;AAED,WAAO,IAAP;AACD,GAdH,EAeG0E,eAfH,CAemB,YAAM;AACrB,QAAI5E,GAAG,CAACM,IAAJ,CAASuE,6BAAb,EAA4C;AAC1C,aAAO,EAAC,6DAAD,OAAP;AACD;;AAED,WAAO,IAAP;AACD,GArBH,EAsBGD,eAtBH,CAsBmB,YAAM;AACrB,QAAI5E,GAAG,CAACM,IAAJ,CAASuE,6BAAb,EAA4C;AAC1C,aAAO,EAAC,2DAAD,OAAP;AACD;;AAED,WAAO,IAAP;AACD,GA5BH;AA8BAC,qEAAM,CAACC,4EAAa,CAAC/F,SAAf,EAA0B,UAA1B,EAAsC,UAAUgG,KAAV,EAAiB;AAAA;;AAC3D,QAAI,KAAKzD,SAAL,CAAeH,EAAf,KAAsB,wBAAtB,IAAkD6D,4EAAkB,CAAC,KAAK1D,SAAL,CAAeH,EAAhB,CAAxE,EAA6F;AAC3F;AACD;;AAED4D,SAAK,CAACN,GAAN,CACE,QADF,EAEE,EAAC,sEAAD;AACE,eAAS,EAAC,uBADZ;AAEE,UAAI,EAAC,cAFP;AAGE,aAAO,EAAE,mBAAM;AACb1E,WAAG,CAACO,KAAJ,CAAUC,IAAV,CAAeC,2EAAf;AAEAT,WAAG,CACAU,OADH,CACW;AACPE,aAAG,EAAKZ,GAAG,CAACa,KAAJ,CAAUC,SAAV,CAAoB,QAApB,CAAL,oCAAiE,KAAI,CAACS,SAAL,CAAeH,EAD5E;AAEPT,gBAAM,EAAE;AAFD,SADX,EAKGM,IALH,CAKQ,YAAM;AACVjB,aAAG,CAACqB,MAAJ,CAAWb,IAAX,CAAgB;AAAEc,gBAAI,EAAE;AAAR,WAAhB,EAAqCtB,GAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,2DAArB,CAArC;AACAsB,gBAAM,CAACC,QAAP,GAAkBzB,GAAG,CAACa,KAAJ,CAAUC,SAAV,CAAoB,UAApB,CAAlB;AACD,SARH,aASW,YAAM;AACbd,aAAG,CAACO,KAAJ,CAAU2E,KAAV;AACD,SAXH;AAYD;AAlBH,gBAFF;AAyBD,GA9BK,CAAN;AA+BD,CA9DD,E;;;;;;;;;;;;ACVA;AAAA;AAAA;AAAA;AAEe,yEAAUC,CAAV,EAAkB;AAC/B,MAAMC,KAAK,GAAGD,CAAC,CAACjE,QAAF,CAAWmE,MAAX,CAAkB,CAAlB,CAAd;;AAEA,MAAI,CAAC,CAAC,0BAAD,EAA6B,6BAA7B,EAA4D,yBAA5D,EAAuFhB,QAAvF,CAAgGe,KAAK,CAACE,IAAtG,CAAL,EAAkH;AAChH,UAAMH,CAAN;AACD;;AAED,UAAQC,KAAK,CAACE,IAAd;AACE,SAAK,0BAAL;AACE,UAAIF,KAAK,CAACG,aAAV,EAAyB;AACvBvF,+DAAG,CAACqB,MAAJ,CAAWb,IAAX,CAAgB;AAACc,cAAI,EAAE;AAAP,SAAhB,EAAiCtB,uDAAG,CAACC,UAAJ,CAAeC,KAAf,4DAA8EkF,KAAK,CAACG,aAApF,CAAjC;AACAvF,+DAAG,CAACO,KAAJ,CAAU2E,KAAV;AACD;;AACD;;AAEF,SAAK,6BAAL;AACElF,6DAAG,CAACqB,MAAJ,CAAWb,IAAX,CAAgB;AAAEc,YAAI,EAAE;AAAR,OAAhB,EAAmCtB,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,qEAArB,CAAnC;AACAF,6DAAG,CAACO,KAAJ,CAAU2E,KAAV;AACA;;AAEF,SAAK,yBAAL;AACElF,6DAAG,CAACqB,MAAJ,CAAWb,IAAX,CAAgB;AAAEc,YAAI,EAAE;AAAR,OAAhB,EAAmCtB,uDAAG,CAACC,UAAJ,CAAeC,KAAf,CAAqB,iEAArB,CAAnC;AACAF,6DAAG,CAACO,KAAJ,CAAU2E,KAAV;AAfJ;AAiBD,C;;;;;;;;;;;AC1BD,iD;;;;;;;;;;;ACAA,sE;;;;;;;;;;;ACAA,qE;;;;;;;;;;;ACAA,sE;;;;;;;;;;;ACAA,wD;;;;;;;;;;;ACAA,+D;;;;;;;;;;;ACAA,gE;;;;;;;;;;;ACAA,0E;;;;;;;;;;;ACAA,iE;;;;;;;;;;;ACAA,qD;;;;;;;;;;;ACAA,gE;;;;;;;;;;;ACAA,2D;;;;;;;;;;;ACAA,2D;;;;;;;;;;;ACAA,8D","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 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 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

\n {app.translator.trans('flarum-package-manager.admin.extensions.install_help', {\n extiverse: extiverse.com,\n })}\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\n .request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/package-manager/extensions`,\n body: {\n data: this.data(),\n },\n errorHandler,\n })\n .then((response) => {\n const extensionId = response.id;\n app.alerts.show(\n { type: 'success' },\n app.translator.trans('flarum-package-manager.admin.extensions.successful_install', { extension: extensionId })\n );\n window.location.href = `${app.forum.attribute('adminUrl')}#/extension/${extensionId}`;\n window.location.reload();\n })\n .finally(() => {\n this.isLoading = false;\n m.redraw();\n });\n }\n}\n","import app from 'flarum/admin/app';\nimport Component, { ComponentAttrs } from 'flarum/common/Component';\nimport Mithril from 'mithril';\nimport Button from 'flarum/common/components/Button';\nimport Tooltip from 'flarum/common/components/Tooltip';\nimport { UpdatedPackage } from './Updater';\nimport LoadingModal from 'flarum/admin/components/LoadingModal';\nimport errorHandler from '../utils/errorHandler';\n\ninterface MajorUpdaterAttrs extends ComponentAttrs {\n coreUpdate: UpdatedPackage;\n}\n\nexport default class MajorUpdater extends Component {\n isLoading: string | null = null;\n\n view(vnode: Mithril.Vnode): Mithril.Children {\n return (\n
\n \"flarum\n \n

{app.translator.trans('flarum-package-manager.admin.major_updater.description')}

\n
\n \n \n \n \n
\n
\n );\n }\n\n update(dryRun: boolean) {\n this.isLoading = `update-${dryRun ? 'dry-run' : 'run'}`;\n app.modal.show(LoadingModal);\n\n app\n .request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/package-manager/major-update`,\n body: {\n data: { dryRun },\n },\n errorHandler,\n })\n .then(() => {\n app.alerts.show({ type: 'success' }, app.translator.trans('flarum-package-manager.admin.update_successful'));\n window.location.reload();\n })\n .finally(() => {\n this.isLoading = null;\n m.redraw();\n });\n }\n}\n","import Mithril from \"mithril\";\nimport 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 Tooltip from 'flarum/common/components/Tooltip';\nimport errorHandler from '../utils/errorHandler';\nimport classList from 'flarum/common/utils/classList';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport MajorUpdater from './MajorUpdater';\nimport {Extension} from \"flarum/admin/AdminApplication\";\n\nexport type UpdatedPackage = {\n name: string;\n version: string;\n latest: string;\n 'latest-minor': string | null;\n 'latest-major': string | null;\n 'latest-status': string;\n description: string;\n};\n\nexport type ComposerUpdates = {\n installed: UpdatedPackage[];\n};\n\nexport type LastUpdateCheck = {\n checkedAt: Date;\n updates: ComposerUpdates;\n};\n\nexport default class Updater extends Component {\n isLoading: string | null = null;\n lastUpdateCheck: LastUpdateCheck = (app.data.lastUpdateCheck as LastUpdateCheck) || {};\n packageUpdates: Record = {};\n\n oninit(vnode: Mithril.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: any = null;\n\n if (coreUpdate) {\n core = {\n id: \"flarum-core\",\n version: app.data.settings.version,\n icon: {\n backgroundImage: `url(${app.forum.attribute('baseUrl')}/assets/extensions/flarum-package-manager/flarum.svg`,\n },\n extra: {\n 'flarum-extension': {\n title: app.translator.trans('flarum-package-manager.admin.updater.flarum'),\n }\n }\n };\n\n this.packageUpdates['flarum-core'] = coreUpdate;\n }\n\n return [\n
\n \n

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

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

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

\n ) : null}\n
\n \n {app.translator.trans('flarum-package-manager.admin.updater.check_for_updates')}\n \n \n {app.translator.trans('flarum-package-manager.admin.updater.run_global_update')}\n \n
\n {this.isLoading !== null ? (\n
\n \n
\n ) : extensions.length || core ? (\n
\n
\n {core ? this.extensionItem(core, true) : null}\n {extensions.map((extension: any) => this.extensionItem(extension))}\n
\n
\n ) : null}\n
,\n coreUpdate && coreUpdate['latest-major'] ? : null,\n ];\n }\n\n extensionItem(extension: Extension, isCore: boolean = false) {\n return (\n \n
\n {extension.icon ? icon(extension.icon.name) : ''}\n
\n
\n
{extension.extra['flarum-extension'].title}
\n
\n {this.version(extension.version)}\n {this.packageUpdates[extension.id]['latest-minor'] ? (\n \n {this.version(this.packageUpdates[extension.id]['latest-minor']!)}\n \n ) : null}\n {this.packageUpdates[extension.id]['latest-major'] && !isCore ? (\n \n {this.version(this.packageUpdates[extension.id]['latest-major']!)}\n \n ) : null}\n
\n
\n
\n \n \n \n
\n \n );\n }\n\n version(v: string) {\n return 'v' + v.replace('v', '');\n }\n\n getExtensionUpdates() {\n 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 this.packageUpdates[extension.id] = composerPackage;\n }\n\n return extension && safeToUpdate;\n });\n\n return Object.values(app.data.extensions).filter((extension: any) => this.packageUpdates[extension.id]);\n }\n\n getCoreUpdate(): UpdatedPackage | undefined {\n return this.lastUpdateCheck?.updates?.installed?.filter((composerPackage: UpdatedPackage) => composerPackage.name === 'flarum/core').pop();\n }\n\n checkForUpdates() {\n this.isLoading = 'check';\n\n app\n .request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/package-manager/check-for-updates`,\n errorHandler,\n })\n .then((response) => {\n this.lastUpdateCheck = response as LastUpdateCheck;\n })\n .finally(() => {\n this.isLoading = null;\n m.redraw();\n });\n }\n\n updateCoreMinor() {\n if (confirm(app.translator.trans('flarum-package-manager.admin.minor_update_confirmation.content'))) {\n app.modal.show(LoadingModal);\n this.isLoading = 'minor-update';\n\n app\n .request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/package-manager/minor-update`,\n errorHandler,\n })\n .then(() => {\n app.alerts.show({ type: 'success' }, app.translator.trans('flarum-package-manager.admin.update_successful'));\n window.location.reload();\n })\n .finally(() => {\n this.isLoading = null;\n m.redraw();\n });\n }\n }\n\n updateExtension(extension: any) {\n app.modal.show(LoadingModal);\n this.isLoading = 'extension-update';\n\n app\n .request({\n method: 'PATCH',\n url: `${app.forum.attribute('apiUrl')}/package-manager/extensions/${extension.id}`,\n errorHandler,\n })\n .then(() => {\n app.alerts.show(\n { type: 'success' },\n app.translator.trans('flarum-package-manager.admin.extensions.successful_update', { extension: extension.extra['flarum-extension'].title })\n );\n window.location.reload();\n })\n .finally(() => {\n this.isLoading = null;\n m.redraw();\n });\n }\n\n updateGlobally() {\n app.modal.show(LoadingModal);\n this.isLoading = 'global-update';\n\n app\n .request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/package-manager/global-update`,\n errorHandler,\n })\n .then(() => {\n app.alerts.show({ type: 'success' }, app.translator.trans('flarum-package-manager.admin.updater.global_update_successful'));\n window.location.reload();\n })\n .finally(() => {\n this.isLoading = null;\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('flarum-package-manager', (app) => {\n app.extensionData\n .for('flarum-package-manager')\n .registerSetting(() => {\n if (!app.data.isRequiredDirectoriesWritable) {\n return (\n
\n \n {app.translator.trans('flarum-package-manager.admin.file_permissions')}\n \n
\n );\n }\n\n return null;\n })\n .registerSetting(() => {\n if (app.data.isRequiredDirectoriesWritable) {\n return ;\n }\n\n return null;\n })\n .registerSetting(() => {\n if (app.data.isRequiredDirectoriesWritable) {\n return ;\n }\n\n return null;\n });\n\n extend(ExtensionPage.prototype, 'topItems', function (items) {\n if (this.extension.id === 'flarum-package-manager' || isExtensionEnabled(this.extension.id)) {\n return;\n }\n\n items.add(\n 'remove',\n {\n app.modal.show(LoadingModal);\n\n app\n .request({\n url: `${app.forum.attribute('apiUrl')}/package-manager/extensions/${this.extension.id}`,\n method: 'DELETE',\n })\n .then(() => {\n app.alerts.show({ type: 'success' }, app.translator.trans('flarum-package-manager.admin.extensions.successful_remove'));\n window.location = app.forum.attribute('adminUrl');\n })\n .finally(() => {\n app.modal.close();\n });\n }}\n >\n Remove\n \n );\n });\n});\n","import app from 'flarum/admin/app';\n\nexport default function (e: any) {\n const error = e.response.errors[0];\n\n if (!['composer_command_failure', 'extension_already_installed', 'extension_not_installed'].includes(error.code)) {\n throw e;\n }\n\n switch (error.code) {\n case 'composer_command_failure':\n if (error.guessed_cause) {\n app.alerts.show({type: 'error'}, app.translator.trans(`flarum-package-manager.admin.exceptions.guessed_cause.${error.guessed_cause}`))\n app.modal.close();\n }\n break;\n\n case 'extension_already_installed':\n app.alerts.show({ type: 'error' }, app.translator.trans('flarum-package-manager.admin.exceptions.extension_already_installed'));\n app.modal.close();\n break;\n\n case 'extension_not_installed':\n app.alerts.show({ type: 'error' }, app.translator.trans('flarum-package-manager.admin.exceptions.extension_not_installed'));\n app.modal.close();\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/LoadingIndicator'];","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/src/admin/components/ComposerFailureModal.tsx b/extensions/package-manager/js/src/admin/components/ComposerFailureModal.tsx deleted file mode 100755 index eddd682c8..000000000 --- a/extensions/package-manager/js/src/admin/components/ComposerFailureModal.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import app from 'flarum/admin/app'; -import Modal from 'flarum/common/components/Modal'; -import { ComponentAttrs } from 'flarum/common/Component'; -import Alert from 'flarum/common/components/Alert'; -import Mithril from 'mithril'; - -interface Attrs extends ComponentAttrs { - output: string; -} - -export default class ComposerFailureModal extends Modal { - oninit(vnode: Mithril.Vnode) { - super.oninit(vnode); - - if (this.attrs.error.guessed_cause) { - this.alertAttrs = { - type: 'error', - content: app.translator.trans(`flarum-package-manager.admin.failure_modal.guessed_cause.${this.attrs.error.guessed_cause}`), - }; - } - } - - className() { - return 'Modal--large ComposerFailureModal'; - } - - title() { - return app.translator.trans('flarum-package-manager.admin.failure_modal.title'); - } - - content() { - return ( -
-
- {app.translator.trans('flarum-package-manager.admin.failure_modal.show_composer_output')} -
{this.attrs.error.output}
-
-
- ); - } -} diff --git a/extensions/package-manager/js/src/admin/components/Installer.tsx b/extensions/package-manager/js/src/admin/components/Installer.tsx index 08fd69162..c8b67a79d 100755 --- a/extensions/package-manager/js/src/admin/components/Installer.tsx +++ b/extensions/package-manager/js/src/admin/components/Installer.tsx @@ -4,14 +4,13 @@ import Component from 'flarum/common/Component'; 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 { +export default class Installer extends Component { packageName!: Stream; isLoading: boolean = false; - oninit(vnode: Mithril.Vnode): void { + oninit(vnode: Mithril.Vnode): void { super.oninit(vnode); this.packageName = Stream(''); diff --git a/extensions/package-manager/js/src/admin/utils/errorHandler.ts b/extensions/package-manager/js/src/admin/utils/errorHandler.ts index bf216d187..db9cb9050 100755 --- a/extensions/package-manager/js/src/admin/utils/errorHandler.ts +++ b/extensions/package-manager/js/src/admin/utils/errorHandler.ts @@ -1,5 +1,4 @@ import app from 'flarum/admin/app'; -import ComposerFailureModal from '../components/ComposerFailureModal'; export default function (e: any) { const error = e.response.errors[0]; @@ -10,7 +9,10 @@ export default function (e: any) { switch (error.code) { case 'composer_command_failure': - app.modal.show(ComposerFailureModal, { error }); + if (error.guessed_cause) { + app.alerts.show({type: 'error'}, app.translator.trans(`flarum-package-manager.admin.exceptions.guessed_cause.${error.guessed_cause}`)) + app.modal.close(); + } break; case 'extension_already_installed': diff --git a/extensions/package-manager/locale/en.yml b/extensions/package-manager/locale/en.yml index 556998d27..8099d37f0 100755 --- a/extensions/package-manager/locale/en.yml +++ b/extensions/package-manager/locale/en.yml @@ -4,6 +4,12 @@ flarum-package-manager: extension_already_installed: Extension is already installed. extension_not_installed: Extension not found. + guessed_cause: + extension_incompatible_with_instance: The extension is most likely incompatible with your current Flarum instance. + extensions_incompatible_with_new_major: > + Some installed extensions are not compatible with the newest major release. + Please wait until the extensions are updated to be compatible by the authors, or remove them before proceeding. + extensions: install: Install a new extension install_help: Fill in the extension package name to proceed. Visit {extiverse} to browse extensions. @@ -13,12 +19,6 @@ flarum-package-manager: successful_update: "{extension} was updated successfully, redirecting.." update: Update - failure_modal: - title: Operation Failed - guessed_cause: - extension_incompatible_with_instance: The extension is most likely incompatible with your current Flarum instance. - show_composer_output: Show Advanced Details - file_permissions: > The package manager requires read and write permissions on the following files and directories: composer.json, composer.lock, vendor, storage/.composer diff --git a/extensions/package-manager/src/Api/Controller/MajorUpdateController.php b/extensions/package-manager/src/Api/Controller/MajorUpdateController.php index 066569d23..ee2bebfa3 100755 --- a/extensions/package-manager/src/Api/Controller/MajorUpdateController.php +++ b/extensions/package-manager/src/Api/Controller/MajorUpdateController.php @@ -33,7 +33,7 @@ class MajorUpdateController implements RequestHandlerInterface public function handle(ServerRequestInterface $request): ResponseInterface { $actor = RequestUtil::getActor($request); - $dryRun = (bool) (int) Arr::get($request->getParsedBody(), 'data.dryRun'); + $dryRun = (bool) (int) Arr::get($request->getParsedBody(), 'data.dryRun', 0); $this->bus->dispatch( new MajorUpdate($actor, $dryRun) diff --git a/extensions/package-manager/src/Api/Controller/MinorFlarumUpdateController.php b/extensions/package-manager/src/Api/Controller/MinorUpdateController.php similarity index 84% rename from extensions/package-manager/src/Api/Controller/MinorFlarumUpdateController.php rename to extensions/package-manager/src/Api/Controller/MinorUpdateController.php index b240dbc29..32f220146 100755 --- a/extensions/package-manager/src/Api/Controller/MinorFlarumUpdateController.php +++ b/extensions/package-manager/src/Api/Controller/MinorUpdateController.php @@ -15,9 +15,9 @@ use Laminas\Diactoros\Response\EmptyResponse; use Psr\Http\Message\ResponseInterface; use Psr\Http\Server\RequestHandlerInterface; use Psr\Http\Message\ServerRequestInterface; -use Flarum\PackageManager\Command\MinorFlarumUpdate; +use Flarum\PackageManager\Command\MinorUpdate; -class MinorFlarumUpdateController implements RequestHandlerInterface +class MinorUpdateController implements RequestHandlerInterface { /** * @var Dispatcher @@ -37,7 +37,7 @@ class MinorFlarumUpdateController implements RequestHandlerInterface $actor = RequestUtil::getActor($request); $this->bus->dispatch( - new MinorFlarumUpdate($actor) + new MinorUpdate($actor) ); return new EmptyResponse(); diff --git a/extensions/package-manager/src/Command/CheckForUpdatesHandler.php b/extensions/package-manager/src/Command/CheckForUpdatesHandler.php index e4dab09dc..ec004286a 100755 --- a/extensions/package-manager/src/Command/CheckForUpdatesHandler.php +++ b/extensions/package-manager/src/Command/CheckForUpdatesHandler.php @@ -71,7 +71,9 @@ class CheckForUpdatesHandler if ($majorUpdates) { $secondOutput = $this->runComposerCommand(true); $secondOutput = json_decode($secondOutput, true); - } else { + } + + if (! isset($secondOutput)) { $secondOutput = ['installed' => []]; } @@ -101,14 +103,17 @@ class CheckForUpdatesHandler */ protected function runComposerCommand(bool $minorOnly): string { - $output = $this->composer->run( - new ArrayInput([ - 'command' => 'outdated', - '-D' => true, - '--minor-only' => $minorOnly, - '--format' => 'json', - ]) - ); + $input = [ + 'command' => 'outdated', + '-D' => true, + '--format' => 'json', + ]; + + if ($minorOnly) { + $input['--minor-only'] = true; + } + + $output = $this->composer->run(new ArrayInput($input)); if ($output->getExitCode() !== 0) { throw new ComposerCommandFailedException('', $output->getContents()); diff --git a/extensions/package-manager/src/Command/MajorUpdateHandler.php b/extensions/package-manager/src/Command/MajorUpdateHandler.php index 6a437ce69..e471b5236 100644 --- a/extensions/package-manager/src/Command/MajorUpdateHandler.php +++ b/extensions/package-manager/src/Command/MajorUpdateHandler.php @@ -11,9 +11,10 @@ namespace Flarum\PackageManager\Command; use Flarum\PackageManager\Composer\ComposerAdapter; use Flarum\PackageManager\Composer\ComposerJson; +use Flarum\PackageManager\Exception\MajorUpdateFailedException; +use Flarum\PackageManager\Exception\NoNewMajorVersionException; use Illuminate\Contracts\Events\Dispatcher; use Flarum\PackageManager\Event\FlarumUpdated; -use Flarum\PackageManager\Exception\ComposerUpdateFailedException; use Flarum\PackageManager\LastUpdateCheck; use Symfony\Component\Console\Input\ArrayInput; @@ -61,7 +62,7 @@ class MajorUpdateHandler * Run migrations. * * @throws \Flarum\User\Exception\PermissionDeniedException - * @throws ComposerUpdateFailedException + * @throws NoNewMajorVersionException|MajorUpdateFailedException */ public function handle(MajorUpdate $command) { @@ -70,12 +71,12 @@ class MajorUpdateHandler $majorVersion = $this->lastUpdateCheck->getNewMajorVersion(); if (! $majorVersion) { - return false; + throw new NoNewMajorVersionException(); } $this->updateComposerJson($majorVersion); - $this->runCommand($command->dryRun); + $this->runCommand($command->dryRun, $majorVersion); if ($command->dryRun) { $this->composerJson->revert(); @@ -94,29 +95,34 @@ class MajorUpdateHandler protected function updateComposerJson(string $majorVersion): void { + $versionNumber = str_replace('v', '', $majorVersion); + $this->composerJson->require('*', '*'); - $this->composerJson->require('flarum/core', '^'.str_replace('v', '', $majorVersion)); + $this->composerJson->require('flarum/core', '^'.$versionNumber); } /** - * @throws ComposerUpdateFailedException + * @throws MajorUpdateFailedException */ - protected function runCommand(bool $dryRun): void + protected function runCommand(bool $dryRun, string $majorVersion): void { - $output = $this->composer->run( - new ArrayInput([ - 'command' => 'update', - '--prefer-dist' => true, - '--no-plugins' => true, - '--no-dev' => true, - '-a' => true, - '--with-all-dependencies' => true, - '--dry-run' => $dryRun, - ]) - ); + $input = [ + 'command' => 'update', + '--prefer-dist' => true, + '--no-plugins' => true, + '--no-dev' => true, + '-a' => true, + '--with-all-dependencies' => true, + ]; + + if ($dryRun) { + $input['--dry-run'] = true; + } + + $output = $this->composer->run(new ArrayInput($input)); if ($output->getExitCode() !== 0) { - throw new ComposerUpdateFailedException('*', $output->getContents()); + throw new MajorUpdateFailedException('*', $output->getContents(), $majorVersion); } } } diff --git a/extensions/package-manager/src/Command/MinorFlarumUpdate.php b/extensions/package-manager/src/Command/MinorUpdate.php similarity index 94% rename from extensions/package-manager/src/Command/MinorFlarumUpdate.php rename to extensions/package-manager/src/Command/MinorUpdate.php index b646dbdde..87b36224f 100755 --- a/extensions/package-manager/src/Command/MinorFlarumUpdate.php +++ b/extensions/package-manager/src/Command/MinorUpdate.php @@ -11,7 +11,7 @@ namespace Flarum\PackageManager\Command; use Flarum\User\User; -class MinorFlarumUpdate +class MinorUpdate { /** * @var \Flarum\User\User diff --git a/extensions/package-manager/src/Command/MinorFlarumUpdateHandler.php b/extensions/package-manager/src/Command/MinorUpdateHandler.php similarity index 95% rename from extensions/package-manager/src/Command/MinorFlarumUpdateHandler.php rename to extensions/package-manager/src/Command/MinorUpdateHandler.php index 03ad82186..7ead1bdea 100755 --- a/extensions/package-manager/src/Command/MinorFlarumUpdateHandler.php +++ b/extensions/package-manager/src/Command/MinorUpdateHandler.php @@ -17,7 +17,7 @@ use Flarum\PackageManager\Exception\ComposerUpdateFailedException; use Flarum\PackageManager\LastUpdateCheck; use Symfony\Component\Console\Input\StringInput; -class MinorFlarumUpdateHandler +class MinorUpdateHandler { /** * @var ComposerAdapter @@ -51,7 +51,7 @@ class MinorFlarumUpdateHandler * @throws \Flarum\User\Exception\PermissionDeniedException * @throws ComposerUpdateFailedException */ - public function handle(MinorFlarumUpdate $command) + public function handle(MinorUpdate $command) { $command->actor->assertAdmin(); diff --git a/extensions/package-manager/src/Composer/ComposerAdapter.php b/extensions/package-manager/src/Composer/ComposerAdapter.php index c94aaa0e1..8cdc827dc 100644 --- a/extensions/package-manager/src/Composer/ComposerAdapter.php +++ b/extensions/package-manager/src/Composer/ComposerAdapter.php @@ -14,6 +14,9 @@ use Flarum\PackageManager\OutputLogger; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\BufferedOutput; +/** + * @internal + */ class ComposerAdapter { /** @@ -26,19 +29,23 @@ class ComposerAdapter */ private $logger; + /** + * @var BufferedOutput + */ + private $output; + public function __construct(Application $application, OutputLogger $logger) { $this->application = $application; $this->logger = $logger; + $this->output = new BufferedOutput(); } public function run(InputInterface $input): ComposerOutput { - $output = new BufferedOutput(); + $exitCode = $this->application->run($input, $this->output); - $exitCode = $this->application->run($input, $output); - - $outputContents = $output->fetch(); + $outputContents = $this->output->fetch(); $this->logger->log($input->__toString(), $outputContents, $exitCode); diff --git a/extensions/package-manager/src/Composer/ComposerJson.php b/extensions/package-manager/src/Composer/ComposerJson.php index 3210251ee..7e8571ff1 100644 --- a/extensions/package-manager/src/Composer/ComposerJson.php +++ b/extensions/package-manager/src/Composer/ComposerJson.php @@ -44,6 +44,10 @@ class ComposerJson $composerJson['require'][$packageName] = $version; } else { foreach ($composerJson['require'] as $p => $v) { + if ($version === '*@dev') { + continue; + } + $wildcardPackageName = str_replace('\*', '.*', preg_quote($packageName, '/')); if (Str::of($p)->test("/($wildcardPackageName)/")) { @@ -81,6 +85,6 @@ class ComposerJson protected function set(array $json): void { - $this->filesystem->put($this->getComposerJsonPath(), json_encode($json, JSON_PRETTY_PRINT)); + $this->filesystem->put($this->getComposerJsonPath(), json_encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)); } } diff --git a/extensions/package-manager/src/Exception/ComposerCommandFailedException.php b/extensions/package-manager/src/Exception/ComposerCommandFailedException.php index 42c65502f..318f1fb37 100755 --- a/extensions/package-manager/src/Exception/ComposerCommandFailedException.php +++ b/extensions/package-manager/src/Exception/ComposerCommandFailedException.php @@ -18,6 +18,11 @@ class ComposerCommandFailedException extends Exception */ public $packageName; + /** + * @var array + */ + public $details = []; + public function __construct(string $packageName, string $output) { $this->packageName = $packageName; diff --git a/extensions/package-manager/src/Exception/ComposerCommandFailedExceptionHandler.php b/extensions/package-manager/src/Exception/ExceptionHandler.php similarity index 88% rename from extensions/package-manager/src/Exception/ComposerCommandFailedExceptionHandler.php rename to extensions/package-manager/src/Exception/ExceptionHandler.php index 13cd5e100..29a2b4971 100755 --- a/extensions/package-manager/src/Exception/ComposerCommandFailedExceptionHandler.php +++ b/extensions/package-manager/src/Exception/ExceptionHandler.php @@ -11,7 +11,7 @@ namespace Flarum\PackageManager\Exception; use Flarum\Foundation\ErrorHandling\HandledError; -class ComposerCommandFailedExceptionHandler +class ExceptionHandler { public function handle(ComposerCommandFailedException $e): HandledError { @@ -32,6 +32,10 @@ class ComposerCommandFailedExceptionHandler $details['guessed_cause'] = $guessedCause; } + if (! empty($e->details)) { + $details = array_merge($details, $e->details); + } + return [$details]; } diff --git a/extensions/package-manager/src/Exception/MajorUpdateFailedException.php b/extensions/package-manager/src/Exception/MajorUpdateFailedException.php new file mode 100644 index 000000000..d82517c22 --- /dev/null +++ b/extensions/package-manager/src/Exception/MajorUpdateFailedException.php @@ -0,0 +1,39 @@ +[A-z0-9\/-]+) [A-z0-9.-_\/]+ requires flarum\/core (?(?:[A-z0-9.><=_ -](?!->))+)/m'; + + /** + * @var string + */ + private $majorVersion; + + public function __construct(string $packageName, string $output, string $majorVersion) + { + $this->majorVersion = $majorVersion; + + parent::__construct($packageName, $output); + } + + public function guessCause(): ?string + { + if (preg_match_all(self::INCOMPATIBLE_REGEX, $this->getMessage(), $matches) !== false) { + $this->details['incompatible_extensions'] = []; + + foreach ($matches['ext'] as $k => $name) { + if (! Semver::satisfies($this->majorVersion, $matches['coreReq'][$k])) { + $this->details['incompatible_extensions'][] = $name; + } + } + + return 'extensions_incompatible_with_new_major'; + } + + return null; + } +} diff --git a/extensions/package-manager/src/Exception/NoNewMajorVersionException.php b/extensions/package-manager/src/Exception/NoNewMajorVersionException.php new file mode 100755 index 000000000..b209a72d6 --- /dev/null +++ b/extensions/package-manager/src/Exception/NoNewMajorVersionException.php @@ -0,0 +1,26 @@ +settings->get(self::KEY, '{}'), true); + return json_decode($this->settings->get(self::KEY), true); } public function getNewMajorVersion(): ?string { - $core = Arr::first($this->get()['updates']['installed'], function ($package) { + $core = Arr::first(Arr::get($this->get(), 'updates.installed', []), function ($package) { return $package['name'] === 'flarum/core'; });