@dylanpiercey/work 0.0.116 → 0.0.118
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/work.mjs +7 -29
- package/dist/_BIDn_RW1.js +2 -0
- package/dist/{_BHPrqqev.js → _CeVZfkIY.js} +95 -79
- package/dist/{_CmheBYWi.js → _DE2RUdbF.js} +43 -26
- package/dist/{_CEKO5mam.js → _EzN3zMKL.js} +39 -39
- package/dist/index.mjs +555 -526
- package/dist/public/assets/{_C5GxdpIx.js → _5MxjuuKr.js} +1 -1
- package/dist/public/assets/_5MxjuuKr.js.br +0 -0
- package/dist/public/assets/{_CmwkZmX02.js → _6hN6Ymx42.js} +1 -1
- package/dist/public/assets/_6hN6Ymx42.js.br +0 -0
- package/dist/public/assets/{_DbphB3_Y.js → _6nWMLOH4.js} +1 -1
- package/dist/public/assets/_6nWMLOH4.js.br +0 -0
- package/dist/public/assets/{_BNuVdL222.js → _A2tLqg9y2.js} +1 -1
- package/dist/public/assets/_A2tLqg9y2.js.br +0 -0
- package/dist/public/assets/{_DJfRmyos.js → _Ar4UEz40.js} +1 -1
- package/dist/public/assets/_Ar4UEz40.js.br +0 -0
- package/dist/public/assets/{_DwnEEAN3.js → _B-wISkbs.js} +1 -1
- package/dist/public/assets/_B-wISkbs.js.br +0 -0
- package/dist/public/assets/{_DvlwodnH2.js → _B0HJN5ud2.js} +1 -1
- package/dist/public/assets/_B0HJN5ud2.js.br +0 -0
- package/dist/public/assets/{_BlLpqMok.js → _B6RbG5-A.js} +1 -1
- package/dist/public/assets/_B6RbG5-A.js.br +0 -0
- package/dist/public/assets/{_Cy6vUvOf.js → _B7cCygGe.js} +1 -1
- package/dist/public/assets/_B7cCygGe.js.br +0 -0
- package/dist/public/assets/{_CXfVimxX2.js → _B7n-BASn2.js} +1 -1
- package/dist/public/assets/{_BFDzSRUb.js → _BBPUNQgX.js} +1 -1
- package/dist/public/assets/_BBPUNQgX.js.br +0 -0
- package/dist/public/assets/{_BbZSZ8_I2.js → _BHhGmIxX2.js} +1 -1
- package/dist/public/assets/_BHhGmIxX2.js.br +0 -0
- package/dist/public/assets/{_bNejHwcl2.js → _BJjI-m6s2.js} +1 -1
- package/dist/public/assets/_BJjI-m6s2.js.br +0 -0
- package/dist/public/assets/{_BE2qRsPs.js → _BJz-Y1HI.js} +1 -1
- package/dist/public/assets/_BJz-Y1HI.js.br +0 -0
- package/dist/public/assets/{_CSBn-Hvt2.js → _BLeHC7zC2.js} +1 -1
- package/dist/public/assets/_BLeHC7zC2.js.br +0 -0
- package/dist/public/assets/{_zGSRZWQr.js → _BO_BKeKC.js} +1 -1
- package/dist/public/assets/_BO_BKeKC.js.br +0 -0
- package/dist/public/assets/{_DM1EXBbo.js → _BVhnP3T6.js} +1 -1
- package/dist/public/assets/_BVhnP3T6.js.br +0 -0
- package/dist/public/assets/{_DB_C0F-Z2.js → _BXK6LHvo2.js} +1 -1
- package/dist/public/assets/_BXK6LHvo2.js.br +0 -0
- package/dist/public/assets/{_CfRbL_Ta2.js → _BYPDDEEO2.js} +1 -1
- package/dist/public/assets/_BYPDDEEO2.js.br +0 -0
- package/dist/public/assets/{_BZou6DQD.js → _BbB3wFGa.js} +1 -1
- package/dist/public/assets/_BbB3wFGa.js.br +0 -0
- package/dist/public/assets/{_CASdx3AE.js → _BicOIlC8.js} +1 -1
- package/dist/public/assets/_BicOIlC8.js.br +0 -0
- package/dist/public/assets/{_DzazkU0O.js → _BjVuWYXf.js} +1 -1
- package/dist/public/assets/_BjVuWYXf.js.br +0 -0
- package/dist/public/assets/{_BYis3bU3.js → _BjeXgSse.js} +1 -1
- package/dist/public/assets/_BjeXgSse.js.br +0 -0
- package/dist/public/assets/{_DmHNNuUl2.js → _Bk7GDGa82.js} +1 -1
- package/dist/public/assets/_Bk7GDGa82.js.br +0 -0
- package/dist/public/assets/{_CDwswGat.js → _BmJ9IUv4.js} +1 -1
- package/dist/public/assets/_BmJ9IUv4.js.br +0 -0
- package/dist/public/assets/{_chJ5r2KH2.js → _BtxdHY0V2.js} +1 -1
- package/dist/public/assets/_BtxdHY0V2.js.br +0 -0
- package/dist/public/assets/{_DAcB8FCB.js → _Bu7Rb2KV.js} +1 -1
- package/dist/public/assets/_Bu7Rb2KV.js.br +0 -0
- package/dist/public/assets/{_R6H7Mgwp.js → _BzIW49zC.js} +1 -1
- package/dist/public/assets/_BzIW49zC.js.br +0 -0
- package/dist/public/assets/{_p7Nk6TN_.js → _C1oox0_T.js} +1 -1
- package/dist/public/assets/_C1oox0_T.js.br +0 -0
- package/dist/public/assets/{_BzAD6TBo.js → _C45kLCWD.js} +8 -8
- package/dist/public/assets/_C45kLCWD.js.br +0 -0
- package/dist/public/assets/{_ClccdQK9.js → _C4B_GVHB.js} +1 -1
- package/dist/public/assets/_C4B_GVHB.js.br +0 -0
- package/dist/public/assets/{_BqkNbZMs.js → _C4tiWhG4.js} +1 -1
- package/dist/public/assets/_C4tiWhG4.js.br +0 -0
- package/dist/public/assets/{_C9TtAENI.js → _C7wuWtJ1.js} +1 -1
- package/dist/public/assets/{_DAHhUiki.js → _CE6eJWkd.js} +1 -1
- package/dist/public/assets/_CE6eJWkd.js.br +0 -0
- package/dist/public/assets/{_BY4vFN-X.js → _CHWTX_c6.js} +1 -1
- package/dist/public/assets/_CHWTX_c6.js.br +0 -0
- package/dist/public/assets/{_B0e3Ak7A.js → _CK9tV5oJ.js} +1 -1
- package/dist/public/assets/_CK9tV5oJ.js.br +0 -0
- package/dist/public/assets/{_B5uwAcaB.js → _CQRIuNJi.js} +1 -1
- package/dist/public/assets/_CQRIuNJi.js.br +0 -0
- package/dist/public/assets/{_B4Nu-wag.js → _CUgERK7S.js} +1 -1
- package/dist/public/assets/_CUgERK7S.js.br +0 -0
- package/dist/public/assets/{_B_qJHbwz.js → _CV5RGu5i.js} +1 -1
- package/dist/public/assets/_CV5RGu5i.js.br +0 -0
- package/dist/public/assets/{_JMdaap6W.js → _CVtWHYIm.js} +21 -21
- package/dist/public/assets/_CVtWHYIm.js.br +0 -0
- package/dist/public/assets/{_BB3PfRLa2.js → _CYUpTPHg2.js} +1 -1
- package/dist/public/assets/_CYUpTPHg2.js.br +0 -0
- package/dist/public/assets/{_mbrwXzyQ.js → _CYemOBLN.js} +1 -1
- package/dist/public/assets/_CYemOBLN.js.br +0 -0
- package/dist/public/assets/{_Ht8V87dw2.js → _CZ0_xhSs2.js} +1 -1
- package/dist/public/assets/{_CMtRRt5X2.js → _C_mUeGVh2.js} +1 -1
- package/dist/public/assets/_C_mUeGVh2.js.br +0 -0
- package/dist/public/assets/{_D5BeGelx.js → _Cb-dgrCB.js} +1 -1
- package/dist/public/assets/_Cb-dgrCB.js.br +0 -0
- package/dist/public/assets/{_C2NMRiCh.js → _CdAkLhxG.js} +1 -1
- package/dist/public/assets/_CdAkLhxG.js.br +0 -0
- package/dist/public/assets/{_Da_nvZ5y.js → _Cf4M5kpG.js} +1 -1
- package/dist/public/assets/_Cf4M5kpG.js.br +0 -0
- package/dist/public/assets/{_BaJXK68-.js → _CoGdSkvu.js} +1 -1
- package/dist/public/assets/_CoGdSkvu.js.br +0 -0
- package/dist/public/assets/{_ChrrA5fF.js → _Cpm5RoWi.js} +1 -1
- package/dist/public/assets/_Cpm5RoWi.js.br +0 -0
- package/dist/public/assets/{_CbbUwTEJ.js → _CpuBCvd6.js} +1 -1
- package/dist/public/assets/_CpuBCvd6.js.br +0 -0
- package/dist/public/assets/{_CTlZ1Lkv2.js → _CsM5ftwz2.js} +1 -1
- package/dist/public/assets/_CsM5ftwz2.js.br +0 -0
- package/dist/public/assets/{_Ddq_uzCH2.js → _CtcH3ZyQ2.js} +1 -1
- package/dist/public/assets/_CtcH3ZyQ2.js.br +0 -0
- package/dist/public/assets/{_DN-QtD1c.js → _CyDfS08K.js} +1 -1
- package/dist/public/assets/_CyDfS08K.js.br +0 -0
- package/dist/public/assets/{_BshAqMBd2.js → _D5qcTAVE2.js} +1 -1
- package/dist/public/assets/_D5qcTAVE2.js.br +0 -0
- package/dist/public/assets/{_BbXYlhz_2.js → _DAGSDF8g2.js} +1 -1
- package/dist/public/assets/_DAGSDF8g2.js.br +0 -0
- package/dist/public/assets/{_CXKoguEA.js → _DIBThzVN.js} +1 -1
- package/dist/public/assets/_DIBThzVN.js.br +0 -0
- package/dist/public/assets/{_BVkMt2PY2.js → _DJEzPcA82.js} +1 -1
- package/dist/public/assets/_DJEzPcA82.js.br +0 -0
- package/dist/public/assets/{_DCM_uGbe.js → _DLBE7zID.js} +1 -1
- package/dist/public/assets/_DLBE7zID.js.br +0 -0
- package/dist/public/assets/{_C6_jrqyQ2.js → _DP-5FfqK2.js} +1 -1
- package/dist/public/assets/_DP-5FfqK2.js.br +0 -0
- package/dist/public/assets/{_Cj0z289t.js → _DglnXAKo.js} +1 -1
- package/dist/public/assets/_DglnXAKo.js.br +0 -0
- package/dist/public/assets/{_BynYlMA5.js → _Dh3HoKhq.js} +1 -1
- package/dist/public/assets/_Dh3HoKhq.js.br +0 -0
- package/dist/public/assets/{_NlAtY9z9.js → _DkxpDwXy.js} +1 -1
- package/dist/public/assets/_DkxpDwXy.js.br +0 -0
- package/dist/public/assets/{_BomcrPR22.js → _DoWF8ByT2.js} +1 -1
- package/dist/public/assets/_DoWF8ByT2.js.br +0 -0
- package/dist/public/assets/{_Rwpt_eYd.js → _HSgzwAmZ.js} +1 -1
- package/dist/public/assets/_HSgzwAmZ.js.br +0 -0
- package/dist/public/assets/{_BoLijUVS.js → _J22ldpof.js} +1 -1
- package/dist/public/assets/_J22ldpof.js.br +0 -0
- package/dist/public/assets/{_yu6_Donv2.js → _J98Rxkdb2.js} +1 -1
- package/dist/public/assets/_J98Rxkdb2.js.br +0 -0
- package/dist/public/assets/{_DZMpOq_k2.js → _JVw8w_7p2.js} +1 -1
- package/dist/public/assets/_JVw8w_7p2.js.br +0 -0
- package/dist/public/assets/{_BSIklgtS.js → _JoWlQVpX.js} +1 -1
- package/dist/public/assets/_JoWlQVpX.js.br +0 -0
- package/dist/public/assets/{_BvXxAv4T.js → _TbUx96Br.js} +1 -1
- package/dist/public/assets/_TbUx96Br.js.br +0 -0
- package/dist/public/assets/{_Dz1I8UR4.js → _akTAmktB.js} +1 -1
- package/dist/public/assets/_akTAmktB.js.br +0 -0
- package/dist/public/assets/{_BK6OZyLT2.js → _dFDJ9A9g2.js} +1 -1
- package/dist/public/assets/_dFDJ9A9g2.js.br +0 -0
- package/dist/public/assets/{_BhTLJW2Y.js → _gHuYn_71.js} +1 -1
- package/dist/public/assets/_gHuYn_71.js.br +0 -0
- package/dist/public/assets/{_Df3c1-mC.js → _j9TQP7q5.js} +1 -1
- package/dist/public/assets/_j9TQP7q5.js.br +0 -0
- package/dist/public/assets/_sWLklcDZ.js +1 -0
- package/dist/public/assets/{_Bp0PawFO.js → _tshHvoEk.js} +1 -1
- package/dist/public/assets/_tshHvoEk.js.br +0 -0
- package/dist/public/assets/{_2AY1cevg.js → _xVSWwNNy.js} +1 -1
- package/dist/public/assets/_xVSWwNNy.js.br +0 -0
- package/dist/public/assets/{_-3KGdeyo.js → _x_T0NsDl.js} +1 -1
- package/dist/public/assets/_x_T0NsDl.js.br +0 -0
- package/dist/public/assets/app-page-LDZ2KXKs.css +1 -0
- package/dist/public/assets/app-page-LDZ2KXKs.css.br +0 -0
- package/dist/public/assets/diff-view-0Uofj0Dv.css +1 -0
- package/dist/public/assets/diff-view-0Uofj0Dv.css.br +0 -0
- package/dist/public/assets/new-CwlftYMt.js +1 -0
- package/dist/public/assets/settings-CwlftYMt.js +1 -0
- package/dist/public/assets/shiki-wasm-stub-sWLklcDZ.js +1 -0
- package/dist/public/assets/w-CwlftYMt.js +1 -0
- package/dist/public/assets/w._-BGFF38Oe.js +1 -0
- package/dist/public/assets/w._-CwlftYMt.js +1 -0
- package/dist/public/assets/{worker-DZo603XT.js → worker-hTZla-j_.js} +1 -1
- package/dist/public/assets/worker-hTZla-j_.js.br +0 -0
- package/lib/setup/doctor.d.mts +0 -2
- package/lib/setup/doctor.mjs +17 -3
- package/lib/usage/format.d.mts +2 -0
- package/lib/usage/format.mjs +22 -0
- package/package.json +1 -1
- package/scripts/migrate.mjs +25 -0
- package/dist/_BBEL67Rf.js +0 -2
- package/dist/public/assets/_-3KGdeyo.js.br +0 -0
- package/dist/public/assets/_2AY1cevg.js.br +0 -0
- package/dist/public/assets/_B0e3Ak7A.js.br +0 -0
- package/dist/public/assets/_B4Nu-wag.js.br +0 -0
- package/dist/public/assets/_B5uwAcaB.js.br +0 -0
- package/dist/public/assets/_BB3PfRLa2.js.br +0 -0
- package/dist/public/assets/_BE2qRsPs.js.br +0 -0
- package/dist/public/assets/_BFDzSRUb.js.br +0 -0
- package/dist/public/assets/_BK6OZyLT2.js.br +0 -0
- package/dist/public/assets/_BNuVdL222.js.br +0 -0
- package/dist/public/assets/_BSIklgtS.js.br +0 -0
- package/dist/public/assets/_BVkMt2PY2.js.br +0 -0
- package/dist/public/assets/_BY4vFN-X.js.br +0 -0
- package/dist/public/assets/_BYis3bU3.js.br +0 -0
- package/dist/public/assets/_BZou6DQD.js.br +0 -0
- package/dist/public/assets/_B_qJHbwz.js.br +0 -0
- package/dist/public/assets/_BaJXK68-.js.br +0 -0
- package/dist/public/assets/_BbXYlhz_2.js.br +0 -0
- package/dist/public/assets/_BbZSZ8_I2.js.br +0 -0
- package/dist/public/assets/_BhTLJW2Y.js.br +0 -0
- package/dist/public/assets/_BlLpqMok.js.br +0 -0
- package/dist/public/assets/_BnjxR4X6.js +0 -1
- package/dist/public/assets/_BnjxR4X6.js.br +0 -0
- package/dist/public/assets/_BoLijUVS.js.br +0 -0
- package/dist/public/assets/_BomcrPR22.js.br +0 -0
- package/dist/public/assets/_Bp0PawFO.js.br +0 -0
- package/dist/public/assets/_BqkNbZMs.js.br +0 -0
- package/dist/public/assets/_BshAqMBd2.js.br +0 -0
- package/dist/public/assets/_BvXxAv4T.js.br +0 -0
- package/dist/public/assets/_BynYlMA5.js.br +0 -0
- package/dist/public/assets/_BzAD6TBo.js.br +0 -0
- package/dist/public/assets/_C2NMRiCh.js.br +0 -0
- package/dist/public/assets/_C5GxdpIx.js.br +0 -0
- package/dist/public/assets/_C6_jrqyQ2.js.br +0 -0
- package/dist/public/assets/_CASdx3AE.js.br +0 -0
- package/dist/public/assets/_CDwswGat.js.br +0 -0
- package/dist/public/assets/_CMtRRt5X2.js.br +0 -0
- package/dist/public/assets/_CSBn-Hvt2.js.br +0 -0
- package/dist/public/assets/_CTlZ1Lkv2.js.br +0 -0
- package/dist/public/assets/_CXKoguEA.js.br +0 -0
- package/dist/public/assets/_CbbUwTEJ.js.br +0 -0
- package/dist/public/assets/_CfRbL_Ta2.js.br +0 -0
- package/dist/public/assets/_ChrrA5fF.js.br +0 -0
- package/dist/public/assets/_Cj0z289t.js.br +0 -0
- package/dist/public/assets/_ClccdQK9.js.br +0 -0
- package/dist/public/assets/_CmwkZmX02.js.br +0 -0
- package/dist/public/assets/_Cy6vUvOf.js.br +0 -0
- package/dist/public/assets/_D5BeGelx.js.br +0 -0
- package/dist/public/assets/_DAHhUiki.js.br +0 -0
- package/dist/public/assets/_DAcB8FCB.js.br +0 -0
- package/dist/public/assets/_DB_C0F-Z2.js.br +0 -0
- package/dist/public/assets/_DCM_uGbe.js.br +0 -0
- package/dist/public/assets/_DJfRmyos.js.br +0 -0
- package/dist/public/assets/_DM1EXBbo.js.br +0 -0
- package/dist/public/assets/_DN-QtD1c.js.br +0 -0
- package/dist/public/assets/_DZMpOq_k2.js.br +0 -0
- package/dist/public/assets/_Da_nvZ5y.js.br +0 -0
- package/dist/public/assets/_DbphB3_Y.js.br +0 -0
- package/dist/public/assets/_Ddq_uzCH2.js.br +0 -0
- package/dist/public/assets/_Df3c1-mC.js.br +0 -0
- package/dist/public/assets/_DmHNNuUl2.js.br +0 -0
- package/dist/public/assets/_DvlwodnH2.js.br +0 -0
- package/dist/public/assets/_DwnEEAN3.js.br +0 -0
- package/dist/public/assets/_Dz1I8UR4.js.br +0 -0
- package/dist/public/assets/_DzazkU0O.js.br +0 -0
- package/dist/public/assets/_JMdaap6W.js.br +0 -0
- package/dist/public/assets/_NlAtY9z9.js.br +0 -0
- package/dist/public/assets/_R6H7Mgwp.js.br +0 -0
- package/dist/public/assets/_Rwpt_eYd.js.br +0 -0
- package/dist/public/assets/_bNejHwcl2.js.br +0 -0
- package/dist/public/assets/_chJ5r2KH2.js.br +0 -0
- package/dist/public/assets/_mbrwXzyQ.js.br +0 -0
- package/dist/public/assets/_p7Nk6TN_.js.br +0 -0
- package/dist/public/assets/_yu6_Donv2.js.br +0 -0
- package/dist/public/assets/_zGSRZWQr.js.br +0 -0
- package/dist/public/assets/app-page-xZ7ggaFZ.css +0 -1
- package/dist/public/assets/app-page-xZ7ggaFZ.css.br +0 -0
- package/dist/public/assets/diff-view-COEkSsJh.css +0 -1
- package/dist/public/assets/diff-view-COEkSsJh.css.br +0 -0
- package/dist/public/assets/new-B4TVUCf9.js +0 -1
- package/dist/public/assets/settings-B4TVUCf9.js +0 -1
- package/dist/public/assets/w-B4TVUCf9.js +0 -1
- package/dist/public/assets/w._-B4TVUCf9.js +0 -1
- package/dist/public/assets/w._-CJLLzbFK.js +0 -1
- package/dist/public/assets/wasm-S0UXjx1m.js +0 -1
- package/dist/public/assets/wasm-S0UXjx1m.js.br +0 -0
- package/dist/public/assets/worker-DZo603XT.js.br +0 -0
package/bin/work.mjs
CHANGED
|
@@ -25,6 +25,7 @@ import { createRequire } from "node:module";
|
|
|
25
25
|
import { doctor, formatDoctor, setupPath } from "../lib/setup/doctor.mjs";
|
|
26
26
|
import { installTool } from "../lib/setup/install.mjs";
|
|
27
27
|
import { commentMarkdown } from "../lib/review/markdown.mjs";
|
|
28
|
+
import { duration, pctText } from "../lib/usage/format.mjs";
|
|
28
29
|
|
|
29
30
|
const pkgRoot = path.dirname(path.dirname(fileURLToPath(import.meta.url)));
|
|
30
31
|
const pkg = JSON.parse(fs.readFileSync(path.join(pkgRoot, "package.json"), "utf8"));
|
|
@@ -104,17 +105,10 @@ async function start() {
|
|
|
104
105
|
* this table can never disagree, which is also why this asks over HTTP instead
|
|
105
106
|
* of re-reading every provider's credentials itself. */
|
|
106
107
|
async function usage() {
|
|
107
|
-
const
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
const res = await fetch(url, { signal: AbortSignal.timeout(30_000) });
|
|
112
|
-
if (!res.ok) die(`server answered ${res.status} for /api/usage`);
|
|
113
|
-
data = await res.json();
|
|
114
|
-
} catch {
|
|
115
|
-
die(`no work server on port ${port}. Start one with: work start`);
|
|
116
|
-
}
|
|
117
|
-
if (args.includes("--json")) {
|
|
108
|
+
const data = await apiGet(
|
|
109
|
+
`/api/usage${args.includes("--refresh") ? "?refresh" : ""}`,
|
|
110
|
+
);
|
|
111
|
+
if (jsonOut) {
|
|
118
112
|
console.log(JSON.stringify(data, null, 2));
|
|
119
113
|
return;
|
|
120
114
|
}
|
|
@@ -139,7 +133,7 @@ async function usage() {
|
|
|
139
133
|
// enough to read as a warning rather than another window.
|
|
140
134
|
if (agent.note) console.log(` ⚠ ${agent.note}`);
|
|
141
135
|
if (agent.stale_seconds != null) {
|
|
142
|
-
console.log(` ⚠ ${
|
|
136
|
+
console.log(` ⚠ ${duration(agent.stale_seconds * 1000)} old`);
|
|
143
137
|
}
|
|
144
138
|
}
|
|
145
139
|
}
|
|
@@ -285,23 +279,7 @@ async function reviewCmd() {
|
|
|
285
279
|
function until(iso) {
|
|
286
280
|
if (!iso) return null;
|
|
287
281
|
const ms = new Date(iso).getTime() - Date.now();
|
|
288
|
-
return ms > 0 ?
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
/** Percent, with a decimal only where rounding would lie: 99.6% must not
|
|
292
|
-
* read as a spent 100%, and 0.4% must not read as an untouched 0%. */
|
|
293
|
-
function pctText(pct) {
|
|
294
|
-
const rounded = Math.round(pct);
|
|
295
|
-
return rounded !== pct && (rounded === 100 || rounded === 0)
|
|
296
|
-
? `${pct.toFixed(1)}%`
|
|
297
|
-
: `${rounded}%`;
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
function short(ms) {
|
|
301
|
-
const m = Math.round(ms / 60_000);
|
|
302
|
-
if (m < 60) return `${m}m`;
|
|
303
|
-
const h = Math.round(m / 60);
|
|
304
|
-
return h < 48 ? `${h}h` : `${Math.round(h / 24)}d`;
|
|
282
|
+
return ms > 0 ? duration(ms) : null;
|
|
305
283
|
}
|
|
306
284
|
|
|
307
285
|
async function setup() {
|