diff --git a/extensions/package-manager/js/dist/admin.js b/extensions/package-manager/js/dist/admin.js index d0f139ff4..9882e4612 100755 --- a/extensions/package-manager/js/dist/admin.js +++ b/extensions/package-manager/js/dist/admin.js @@ -1,2 +1,1015 @@ -module.exports=function(a){var e={};function t(n){if(e[n])return e[n].exports;var r=e[n]={i:n,l:!1,exports:{}};return a[n].call(r.exports,r,r.exports,t),r.l=!0,r.exports}return t.m=a,t.c=e,t.d=function(a,e,n){t.o(a,e)||Object.defineProperty(a,e,{enumerable:!0,get:n})},t.r=function(a){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(a,"__esModule",{value:!0})},t.t=function(a,e){if(1&e&&(a=t(a)),8&e)return a;if(4&e&&"object"==typeof a&&a&&a.__esModule)return a;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:a}),2&e&&"string"!=typeof a)for(var r in a)t.d(n,r,function(e){return a[e]}.bind(null,r));return n},t.n=function(a){var e=a&&a.__esModule?function(){return a.default}:function(){return a};return t.d(e,"a",e),e},t.o=function(a,e){return Object.prototype.hasOwnProperty.call(a,e)},t.p="",t(t.s=15)}([function(a,e){a.exports=flarum.core.compat["admin/app"]},function(a,e){a.exports=flarum.core.compat["common/components/Button"]},function(a,e){a.exports=flarum.core.compat["admin/components/LoadingModal"]},function(a,e){a.exports=flarum.core.compat["common/Component"]},function(a,e){a.exports=flarum.core.compat["common/components/Tooltip"]},function(a,e){a.exports=flarum.core.compat["common/extend"]},function(a,e){a.exports=flarum.core.compat["common/components/Alert"]},function(a,e){a.exports=flarum.core.compat["admin/components/ExtensionPage"]},function(a,e){a.exports=flarum.core.compat["common/utils/Stream"]},function(a,e){a.exports=flarum.core.compat["common/components/Modal"]},function(a,e){a.exports=flarum.core.compat["common/helpers/icon"]},function(a,e){a.exports=flarum.core.compat["common/helpers/humanTime"]},function(a,e){a.exports=flarum.core.compat["common/utils/classList"]},function(a,e){a.exports=flarum.core.compat["common/components/LoadingIndicator"]},function(a,e){a.exports=flarum.core.compat["admin/utils/isExtensionEnabled"]},function(a,e,t){"use strict";t.r(e);var n=t(5),r=t(0),o=t.n(r),s=t(6),i=t.n(s),l=t(7),c=t.n(l),u=t(1),d=t.n(u),p=t(2),f=t.n(p);function g(a,e){return(g=Object.setPrototypeOf||function(a,e){return a.__proto__=e,a})(a,e)}function h(a,e){a.prototype=Object.create(e.prototype),a.prototype.constructor=a,g(a,e)}var k=t(3),x=t.n(k),v=t(8),b=t.n(v),y=t(9),_=function(a){function e(){return a.apply(this,arguments)||this}h(e,a);var t=e.prototype;return t.oninit=function(e){a.prototype.oninit.call(this,e),this.attrs.error.guessed_cause&&(this.alertAttrs={type:"error",content:o.a.translator.trans("flarum-package-manager.admin.failure_modal.guessed_cause."+this.attrs.error.guessed_cause)})},t.className=function(){return"Modal--large ComposerFailureModal"},t.title=function(){return o.a.translator.trans("flarum-package-manager.admin.failure_modal.title")},t.content=function(){return m("div",{className:"Modal-body"},m("details",null,m("summary",null,o.a.translator.trans("flarum-package-manager.admin.failure_modal.show_composer_output")),m("pre",{className:"ComposerFailureModal-output"},this.attrs.error.output)))},e}(t.n(y).a),w=function(a){var e=a.response.errors[0];if(!["composer_command_failure","extension_already_installed","extension_not_installed"].includes(e.code))throw a;switch(e.code){case"composer_command_failure":o.a.modal.show(_,{error:e});break;case"extension_already_installed":o.a.alerts.show({type:"error"},o.a.translator.trans("flarum-package-manager.admin.exceptions.extension_already_installed")),o.a.modal.close();break;case"extension_not_installed":o.a.alerts.show({type:"error"},o.a.translator.trans("flarum-package-manager.admin.exceptions.extension_not_installed")),o.a.modal.close()}},P=function(a){function e(){for(var e,t=arguments.length,n=new Array(t),r=0;r { + app.alerts.show({ type: 'success' }, app.translator.trans('flarum-package-manager.admin.update_successful')); + window.location.reload(); + }) + .finally(() => { + this.isLoading = null; + m.redraw(); + });*/ + } + }; + + _proto.updateExtension = function updateExtension(extension) { + var _this5 = this; + + flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.modal.show(flarum_admin_components_LoadingModal__WEBPACK_IMPORTED_MODULE_6___default.a); + this.isLoading = 'extension-update'; + 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: _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('flarum-package-manager.admin.extensions.successful_update', { + extension: extension.extra['flarum-extension'].title + })); + window.location.reload(); + })["finally"](function () { + _this5.isLoading = null; + m.redraw(); + }); + }; + + _proto.updateGlobally = function updateGlobally() { + var _this6 = this; + + flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.modal.show(flarum_admin_components_LoadingModal__WEBPACK_IMPORTED_MODULE_6___default.a); + this.isLoading = 'global-update'; + 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/global-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('flarum-package-manager.admin.updater.global_update_successful')); + window.location.reload(); + })["finally"](function () { + _this6.isLoading = null; + m.redraw(); + }); + }; + + return Updater; +}(flarum_common_Component__WEBPACK_IMPORTED_MODULE_2___default.a); + + + +/***/ }), + +/***/ "./src/admin/index.tsx": +/*!*****************************!*\ + !*** ./src/admin/index.tsx ***! + \*****************************/ +/*! no exports provided */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var flarum_common_extend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! flarum/common/extend */ "flarum/common/extend"); +/* harmony import */ var flarum_common_extend__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(flarum_common_extend__WEBPACK_IMPORTED_MODULE_0__); +/* 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_Alert__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/common/components/Alert */ "flarum/common/components/Alert"); +/* harmony import */ var flarum_common_components_Alert__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_common_components_Alert__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var flarum_admin_components_ExtensionPage__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! flarum/admin/components/ExtensionPage */ "flarum/admin/components/ExtensionPage"); +/* harmony import */ var flarum_admin_components_ExtensionPage__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(flarum_admin_components_ExtensionPage__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var flarum_common_components_Button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! flarum/common/components/Button */ "flarum/common/components/Button"); +/* harmony import */ var flarum_common_components_Button__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(flarum_common_components_Button__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 _components_Installer__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/Installer */ "./src/admin/components/Installer.tsx"); +/* harmony import */ var _components_Updater__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/Updater */ "./src/admin/components/Updater.tsx"); +/* harmony import */ var flarum_admin_utils_isExtensionEnabled__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! flarum/admin/utils/isExtensionEnabled */ "flarum/admin/utils/isExtensionEnabled"); +/* harmony import */ var flarum_admin_utils_isExtensionEnabled__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(flarum_admin_utils_isExtensionEnabled__WEBPACK_IMPORTED_MODULE_8__); + + + + + + + + + +flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.initializers.add('flarum-package-manager', function (app) { + app.extensionData["for"]('flarum-package-manager').registerSetting(function () { + if (!app.data.isRequiredDirectoriesWritable) { + return m("div", { + className: "Form-group" + }, m(flarum_common_components_Alert__WEBPACK_IMPORTED_MODULE_2___default.a, { + type: "warning", + dismissible: false + }, app.translator.trans('flarum-package-manager.admin.file_permissions'))); + } + + return null; + }).registerSetting(function () { + if (app.data.isRequiredDirectoriesWritable) { + return m(_components_Installer__WEBPACK_IMPORTED_MODULE_6__["default"], null); + } + + return null; + }).registerSetting(function () { + if (app.data.isRequiredDirectoriesWritable) { + return m(_components_Updater__WEBPACK_IMPORTED_MODULE_7__["default"], null); + } + + return null; + }); + Object(flarum_common_extend__WEBPACK_IMPORTED_MODULE_0__["extend"])(flarum_admin_components_ExtensionPage__WEBPACK_IMPORTED_MODULE_3___default.a.prototype, 'topItems', function (items) { + var _this = this; + + if (this.extension.id === 'flarum-package-manager' || flarum_admin_utils_isExtensionEnabled__WEBPACK_IMPORTED_MODULE_8___default()(this.extension.id)) { + return; + } + + items.add('remove', m(flarum_common_components_Button__WEBPACK_IMPORTED_MODULE_4___default.a, { + className: "Button Button--danger", + icon: "fas fa-times", + onclick: function onclick() { + app.modal.show(flarum_admin_components_LoadingModal__WEBPACK_IMPORTED_MODULE_5___default.a); + app.request({ + url: app.forum.attribute('apiUrl') + "/package-manager/extensions/" + _this.extension.id, + method: 'DELETE' + }).then(function () { + app.alerts.show({ + type: 'success' + }, app.translator.trans('flarum-package-manager.admin.extensions.successful_remove')); + window.location = app.forum.attribute('adminUrl'); + })["finally"](function () { + app.modal.close(); + }); + } + }, "Remove")); + }); +}); + +/***/ }), + +/***/ "./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 (!['composer_command_failure', 'extension_already_installed', 'extension_not_installed'].includes(error.code)) { + throw e; + } + + 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 + }); + break; + + case 'extension_already_installed': + 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.extension_already_installed')); + flarum_admin_app__WEBPACK_IMPORTED_MODULE_0___default.a.modal.close(); + break; + + case 'extension_not_installed': + 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.extension_not_installed')); + flarum_admin_app__WEBPACK_IMPORTED_MODULE_0___default.a.modal.close(); + } +}); + +/***/ }), + +/***/ "flarum/admin/app": +/*!**************************************************!*\ + !*** external "flarum.core.compat['admin/app']" ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['admin/app']; + +/***/ }), + +/***/ "flarum/admin/components/ExtensionPage": +/*!***********************************************************************!*\ + !*** external "flarum.core.compat['admin/components/ExtensionPage']" ***! + \***********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['admin/components/ExtensionPage']; + +/***/ }), + +/***/ "flarum/admin/components/LoadingModal": +/*!**********************************************************************!*\ + !*** external "flarum.core.compat['admin/components/LoadingModal']" ***! + \**********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['admin/components/LoadingModal']; + +/***/ }), + +/***/ "flarum/admin/utils/isExtensionEnabled": +/*!***********************************************************************!*\ + !*** external "flarum.core.compat['admin/utils/isExtensionEnabled']" ***! + \***********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['admin/utils/isExtensionEnabled']; + +/***/ }), + +/***/ "flarum/common/Component": +/*!*********************************************************!*\ + !*** external "flarum.core.compat['common/Component']" ***! + \*********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['common/Component']; + +/***/ }), + +/***/ "flarum/common/components/Alert": +/*!****************************************************************!*\ + !*** external "flarum.core.compat['common/components/Alert']" ***! + \****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['common/components/Alert']; + +/***/ }), + +/***/ "flarum/common/components/Button": +/*!*****************************************************************!*\ + !*** external "flarum.core.compat['common/components/Button']" ***! + \*****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['common/components/Button']; + +/***/ }), + +/***/ "flarum/common/components/LoadingIndicator": +/*!***************************************************************************!*\ + !*** external "flarum.core.compat['common/components/LoadingIndicator']" ***! + \***************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +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']" ***! + \******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['common/components/Tooltip']; + +/***/ }), + +/***/ "flarum/common/extend": +/*!******************************************************!*\ + !*** external "flarum.core.compat['common/extend']" ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['common/extend']; + +/***/ }), + +/***/ "flarum/common/helpers/humanTime": +/*!*****************************************************************!*\ + !*** external "flarum.core.compat['common/helpers/humanTime']" ***! + \*****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['common/helpers/humanTime']; + +/***/ }), + +/***/ "flarum/common/helpers/icon": +/*!************************************************************!*\ + !*** external "flarum.core.compat['common/helpers/icon']" ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['common/helpers/icon']; + +/***/ }), + +/***/ "flarum/common/utils/Stream": +/*!************************************************************!*\ + !*** external "flarum.core.compat['common/utils/Stream']" ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +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']; + +/***/ }) + +/******/ }); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/extensions/package-manager/js/dist/admin.js.map b/extensions/package-manager/js/dist/admin.js.map index a02317d8a..ac922d289 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/external \"flarum.core.compat['admin/app']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/components/Button']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['admin/components/LoadingModal']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/Component']\"","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/components/Alert']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['admin/components/ExtensionPage']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/utils/Stream']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/components/Modal']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/helpers/icon']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/helpers/humanTime']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/utils/classList']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['common/components/LoadingIndicator']\"","webpack://@flarum/package-manager/external \"flarum.core.compat['admin/utils/isExtensionEnabled']\"","webpack://@flarum/package-manager/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@flarum/package-manager/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/package-manager/./src/admin/components/ComposerFailureModal.tsx","webpack://@flarum/package-manager/./src/admin/utils/errorHandler.ts","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.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","flarum","core","compat","_setPrototypeOf","setPrototypeOf","__proto__","_inheritsLoose","subClass","superClass","constructor","ComposerFailureModal","oninit","vnode","this","attrs","error","guessed_cause","alertAttrs","type","content","app","translator","trans","className","title","output","Modal","e","response","errors","includes","code","modal","show","alerts","close","Installer","packageName","isLoading","Stream","view","htmlFor","extiverse","href","id","placeholder","bidi","icon","onclick","onsubmit","loading","data","package","LoadingModal","request","method","url","forum","attribute","body","errorHandler","then","extensionId","extension","window","location","reload","redraw","Component","MajorUpdater","alt","src","version","coreUpdate","text","update","dryRun","Updater","lastUpdateCheck","extensions","getExtensionUpdates","getCoreUpdate","settings","backgroundImage","newPackageUpdate","keys","length","humanTime","checkedAt","checkForUpdates","disabled","updateGlobally","extensionItem","map","isCore","classList","style","extra","updateCoreMinor","updateExtension","aria-label","v","replace","updates","installed","filter","composerPackage","safeToUpdate","values","pop","initializers","add","extensionData","registerSetting","isRequiredDirectoriesWritable","dismissible","extend","ExtensionPage","items","isExtensionEnabled"],"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 = 15);\n","module.exports = flarum.core.compat['admin/app'];","module.exports = flarum.core.compat['common/components/Button'];","module.exports = flarum.core.compat['admin/components/LoadingModal'];","module.exports = flarum.core.compat['common/Component'];","module.exports = flarum.core.compat['common/components/Tooltip'];","module.exports = flarum.core.compat['common/extend'];","module.exports = flarum.core.compat['common/components/Alert'];","module.exports = flarum.core.compat['admin/components/ExtensionPage'];","module.exports = flarum.core.compat['common/utils/Stream'];","module.exports = flarum.core.compat['common/components/Modal'];","module.exports = flarum.core.compat['common/helpers/icon'];","module.exports = flarum.core.compat['common/helpers/humanTime'];","module.exports = flarum.core.compat['common/utils/classList'];","module.exports = flarum.core.compat['common/components/LoadingIndicator'];","module.exports = flarum.core.compat['admin/utils/isExtensionEnabled'];","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 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}","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 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","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 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';\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\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: string | null = null;\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('flarum-package-manager.admin.updater.flarum'),\n version: app.data.settings.version,\n icon: {\n backgroundImage: `url(${app.forum.attribute('baseUrl')}/assets/extensions/flarum-package-manager/flarum.svg`,\n },\n newPackageUpdate: coreUpdate,\n };\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: 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 {this.version(extension.version)}\n {extension.newPackageUpdate['latest-minor'] ? (\n \n {this.version(extension.newPackageUpdate['latest-minor'])}\n \n ) : null}\n {extension.newPackageUpdate['latest-major'] && !isCore ? (\n \n {this.version(extension.newPackageUpdate['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 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: 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 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 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';\nimport MajorUpdater from './components/MajorUpdater';\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 .registerSetting(() => {\n if (app.data.isRequiredDirectoriesWritable) {\n return ;\n }\n })\n .registerSetting(() => {\n if (app.data.isRequiredDirectoriesWritable) {\n return ;\n }\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"],"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/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\";\nimport MinorUpdateWarningModal from \"./MinorUpdateWarningModal\";\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 diff --git a/extensions/package-manager/js/src/admin/components/Updater.tsx b/extensions/package-manager/js/src/admin/components/Updater.tsx index d7676e0f0..9dfb6db61 100755 --- a/extensions/package-manager/js/src/admin/components/Updater.tsx +++ b/extensions/package-manager/js/src/admin/components/Updater.tsx @@ -1,3 +1,4 @@ +import Mithril from "mithril"; import app from 'flarum/admin/app'; import Component from 'flarum/common/Component'; import icon from 'flarum/common/helpers/icon'; @@ -9,6 +10,7 @@ import errorHandler from '../utils/errorHandler'; import classList from 'flarum/common/utils/classList'; import LoadingIndicator from 'flarum/common/components/LoadingIndicator'; import MajorUpdater from './MajorUpdater'; +import {Extension} from "flarum/admin/AdminApplication"; export type UpdatedPackage = { name: string; @@ -20,37 +22,44 @@ export type UpdatedPackage = { description: string; }; -type ComposerUpdates = { +export type ComposerUpdates = { installed: UpdatedPackage[]; }; -type LastUpdateCheck = { +export type LastUpdateCheck = { checkedAt: Date; updates: ComposerUpdates; }; -export default class Updater extends Component { +export default class Updater extends Component { isLoading: string | null = null; - lastUpdateCheck: LastUpdateCheck = app.data.lastUpdateCheck || {}; + lastUpdateCheck: LastUpdateCheck = (app.data.lastUpdateCheck as LastUpdateCheck) || {}; + packageUpdates: Record = {}; - oninit(vnode) { + oninit(vnode: Mithril.Vnode) { super.oninit(vnode); } view() { const extensions: any = this.getExtensionUpdates(); const coreUpdate: UpdatedPackage | undefined = this.getCoreUpdate(); - let core = null; + let core: any = null; if (coreUpdate) { core = { - title: app.translator.trans('flarum-package-manager.admin.updater.flarum'), + id: "flarum-core", version: app.data.settings.version, icon: { backgroundImage: `url(${app.forum.attribute('baseUrl')}/assets/extensions/flarum-package-manager/flarum.svg`, }, - newPackageUpdate: coreUpdate, + extra: { + 'flarum-extension': { + title: app.translator.trans('flarum-package-manager.admin.updater.flarum'), + } + } }; + + this.packageUpdates['flarum-core'] = coreUpdate; } return [ @@ -102,7 +111,7 @@ export default class Updater extends Component { ]; } - extensionItem(extension: any, isCore: boolean = false) { + extensionItem(extension: Extension, isCore: boolean = false) { return (
-
{extension.title || extension.extra['flarum-extension'].title}
+
{extension.extra['flarum-extension'].title}
{this.version(extension.version)} - {extension.newPackageUpdate['latest-minor'] ? ( + {this.packageUpdates[extension.id]['latest-minor'] ? ( - {this.version(extension.newPackageUpdate['latest-minor'])} + {this.version(this.packageUpdates[extension.id]['latest-minor']!)} ) : null} - {extension.newPackageUpdate['latest-major'] && !isCore ? ( + {this.packageUpdates[extension.id]['latest-major'] && !isCore ? ( - {this.version(extension.newPackageUpdate['latest-major'])} + {this.version(this.packageUpdates[extension.id]['latest-major']!)} ) : null}
@@ -153,13 +162,13 @@ export default class Updater extends Component { const safeToUpdate = ['semver-safe-update', 'update-possible'].includes(composerPackage['latest-status']); if (extension && safeToUpdate) { - extension.newPackageUpdate = composerPackage; + this.packageUpdates[extension.id] = composerPackage; } return extension && safeToUpdate; }); - return Object.values(app.data.extensions).filter((extension: any) => extension.newPackageUpdate); + return Object.values(app.data.extensions).filter((extension: any) => this.packageUpdates[extension.id]); } getCoreUpdate(): UpdatedPackage | undefined { @@ -185,23 +194,25 @@ export default class Updater extends Component { } updateCoreMinor() { - app.modal.show(LoadingModal); - this.isLoading = 'minor-update'; + if (confirm(app.translator.trans('flarum-package-manager.admin.minor_update_confirmation.content'))) { + app.modal.show(LoadingModal); + this.isLoading = 'minor-update'; - app - .request({ - method: 'POST', - url: `${app.forum.attribute('apiUrl')}/package-manager/minor-update`, - errorHandler, - }) - .then(() => { - app.alerts.show({ type: 'success' }, app.translator.trans('flarum-package-manager.admin.update_successful')); - window.location.reload(); - }) - .finally(() => { - this.isLoading = null; - m.redraw(); - }); + /*app + .request({ + method: 'POST', + url: `${app.forum.attribute('apiUrl')}/package-manager/minor-update`, + errorHandler, + }) + .then(() => { + app.alerts.show({ type: 'success' }, app.translator.trans('flarum-package-manager.admin.update_successful')); + window.location.reload(); + }) + .finally(() => { + this.isLoading = null; + m.redraw(); + });*/ + } } updateExtension(extension: any) { diff --git a/extensions/package-manager/js/src/admin/index.js b/extensions/package-manager/js/src/admin/index.tsx similarity index 97% rename from extensions/package-manager/js/src/admin/index.js rename to extensions/package-manager/js/src/admin/index.tsx index 32b7f3500..38c2757c0 100755 --- a/extensions/package-manager/js/src/admin/index.js +++ b/extensions/package-manager/js/src/admin/index.tsx @@ -7,7 +7,6 @@ import LoadingModal from 'flarum/admin/components/LoadingModal'; import Installer from './components/Installer'; import Updater from './components/Updater'; import isExtensionEnabled from 'flarum/admin/utils/isExtensionEnabled'; -import MajorUpdater from './components/MajorUpdater'; app.initializers.add('flarum-package-manager', (app) => { app.extensionData @@ -22,16 +21,22 @@ app.initializers.add('flarum-package-manager', (app) => {
); } + + return null; }) .registerSetting(() => { if (app.data.isRequiredDirectoriesWritable) { return ; } + + return null; }) .registerSetting(() => { if (app.data.isRequiredDirectoriesWritable) { return ; } + + return null; }); extend(ExtensionPage.prototype, 'topItems', function (items) { diff --git a/extensions/package-manager/js/tsconfig.json b/extensions/package-manager/js/tsconfig.json index e8ff4074a..a60a30754 100755 --- a/extensions/package-manager/js/tsconfig.json +++ b/extensions/package-manager/js/tsconfig.json @@ -1,11 +1,16 @@ { - "extends": "flarum-tsconfig", - "include": ["src/**/*"], - "compilerOptions": { - "declarationDir": "./dist-typings", - "baseUrl": ".", - "paths": { - "flarum/*": ["../vendor/flarum/core/js/dist-typings/*"] + // Use Flarum's tsconfig as a starting point + "extends": "flarum-tsconfig", + // This will match all .ts, .tsx, .d.ts, .js, .jsx files in your `src` folder + // and also tells your Typescript server to read core's global typings for + // access to `dayjs` and `$` in the global namespace. + "include": ["src/**/*", "../vendor/flarum/core/js/dist-typings/@types/**/*"], + "compilerOptions": { + // This will output typings to `dist-typings` + "declarationDir": "./dist-typings", + "baseUrl": ".", + "paths": { + "flarum/*": ["../vendor/flarum/core/js/dist-typings/*"] + } } - } } diff --git a/extensions/package-manager/less/admin.less b/extensions/package-manager/less/admin.less index 2f4fc32af..d2f660bbf 100755 --- a/extensions/package-manager/less/admin.less +++ b/extensions/package-manager/less/admin.less @@ -119,3 +119,12 @@ grid-area: helpText; } } + +.MinorUpdateWarningModal { + .Modal-footer { + display: flex; + align-items: center; + justify-content: center; + gap: 4px; + } +} diff --git a/extensions/package-manager/locale/en.yml b/extensions/package-manager/locale/en.yml index 195082c1e..556998d27 100755 --- a/extensions/package-manager/locale/en.yml +++ b/extensions/package-manager/locale/en.yml @@ -29,6 +29,9 @@ flarum-package-manager: title: Flarum {version} Major Update Available update: Update + minor_update_confirmation: + content: This will also update any other extensions/packages with availabe updates. + updater: check_for_updates: Check for updates flarum: Flarum Core diff --git a/extensions/package-manager/src/Command/MajorUpdateHandler.php b/extensions/package-manager/src/Command/MajorUpdateHandler.php index 7c9f1da2b..6a437ce69 100644 --- a/extensions/package-manager/src/Command/MajorUpdateHandler.php +++ b/extensions/package-manager/src/Command/MajorUpdateHandler.php @@ -83,7 +83,7 @@ class MajorUpdateHandler return true; } - $this->lastUpdateCheck->forget('flarum/*', true); + $this->lastUpdateCheck->forgetAll(); $this->events->dispatch( new FlarumUpdated(FlarumUpdated::MAJOR) diff --git a/extensions/package-manager/src/Command/MinorFlarumUpdateHandler.php b/extensions/package-manager/src/Command/MinorFlarumUpdateHandler.php index 01e5a3bb7..03ad82186 100755 --- a/extensions/package-manager/src/Command/MinorFlarumUpdateHandler.php +++ b/extensions/package-manager/src/Command/MinorFlarumUpdateHandler.php @@ -10,6 +10,7 @@ namespace Flarum\PackageManager\Command; use Flarum\PackageManager\Composer\ComposerAdapter; +use Flarum\PackageManager\Composer\ComposerJson; use Illuminate\Contracts\Events\Dispatcher; use Flarum\PackageManager\Event\FlarumUpdated; use Flarum\PackageManager\Exception\ComposerUpdateFailedException; @@ -33,11 +34,17 @@ class MinorFlarumUpdateHandler */ protected $events; - public function __construct(ComposerAdapter $composer, LastUpdateCheck $lastUpdateCheck, Dispatcher $events) + /** + * @var ComposerJson + */ + protected $composerJson; + + public function __construct(ComposerAdapter $composer, LastUpdateCheck $lastUpdateCheck, Dispatcher $events, ComposerJson $composerJson) { $this->composer = $composer; $this->lastUpdateCheck = $lastUpdateCheck; $this->events = $events; + $this->composerJson = $composerJson; } /** @@ -48,15 +55,20 @@ class MinorFlarumUpdateHandler { $command->actor->assertAdmin(); + $coreRequirement = $this->composerJson->get()['require']['flarum/core']; + + $this->composerJson->require('*', '*'); + $this->composerJson->require('flarum/core', $coreRequirement); + $output = $this->composer->run( - new StringInput("update flarum/* --prefer-dist --no-dev -a --with-all-dependencies") + new StringInput("update --prefer-dist --no-dev -a --with-all-dependencies") ); if ($output->getExitCode() !== 0) { throw new ComposerUpdateFailedException('flarum/*', $output->getContents()); } - $this->lastUpdateCheck->forget('flarum/*', true); + $this->lastUpdateCheck->forgetAll(); $this->events->dispatch( new FlarumUpdated(FlarumUpdated::MINOR) diff --git a/extensions/package-manager/src/Composer/ComposerJson.php b/extensions/package-manager/src/Composer/ComposerJson.php index e0a56c020..3210251ee 100644 --- a/extensions/package-manager/src/Composer/ComposerJson.php +++ b/extensions/package-manager/src/Composer/ComposerJson.php @@ -11,6 +11,7 @@ namespace Flarum\PackageManager\Composer; use Flarum\Foundation\Paths; use Illuminate\Filesystem\Filesystem; +use Illuminate\Support\Str; class ComposerJson { @@ -37,24 +38,26 @@ class ComposerJson public function require(string $packageName, string $version): void { - $composerJson = $this->getComposerJson(); + $composerJson = $this->get(); if (strpos($packageName, '*') === false) { $composerJson['require'][$packageName] = $version; } else { foreach ($composerJson['require'] as $p => $v) { - if (preg_match(preg_quote(str_replace('*', '.*', $packageName), '/'), $p, $matches)) { + $wildcardPackageName = str_replace('\*', '.*', preg_quote($packageName, '/')); + + if (Str::of($p)->test("/($wildcardPackageName)/")) { $composerJson['require'][$p] = $version; } } } - $this->setComposerJson($composerJson); + $this->set($composerJson); } public function revert(): void { - $this->setComposerJson($this->initialJson); + $this->set($this->initialJson); } protected function getComposerJsonPath(): string @@ -65,7 +68,7 @@ class ComposerJson /** * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException */ - protected function getComposerJson(): array + public function get(): array { $json = json_decode($this->filesystem->get($this->getComposerJsonPath()), true); @@ -76,7 +79,7 @@ class ComposerJson return $json; } - protected function setComposerJson(array $json): void + protected function set(array $json): void { $this->filesystem->put($this->getComposerJsonPath(), json_encode($json, JSON_PRETTY_PRINT)); } diff --git a/extensions/package-manager/src/LastUpdateCheck.php b/extensions/package-manager/src/LastUpdateCheck.php index 8466c2f62..885de145e 100755 --- a/extensions/package-manager/src/LastUpdateCheck.php +++ b/extensions/package-manager/src/LastUpdateCheck.php @@ -60,7 +60,7 @@ class LastUpdateCheck if (isset($lastUpdateCheck['updates']) && ! empty($lastUpdateCheck['updates']['installed'])) { $updatesListChanged = false; - $pattern = preg_quote(str_replace('*', '.*', $name)); + $pattern = str_replace('\*', '.*', preg_quote($name, '/')); foreach ($lastUpdateCheck['updates']['installed'] as $k => $package) { if (($wildcard && Str::of($package['name'])->test("/($pattern)/")) || $package['name'] === $name) { @@ -79,4 +79,9 @@ class LastUpdateCheck } } } + + public function forgetAll(): void + { + $this->save([]); + } }