hfs 0.52.4 → 0.52.6

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.
@@ -1 +1 @@
1
- @charset "UTF-8";.ariaOnly{position:absolute;clip-path:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}:root{height:100dvh;--bg: #fff;--text: #555;--text-high-contrast: #111;--ghost-contrast: #8882;--ghost-contrast-alt: #eee;--faint-contrast: #ddd;--mild-contrast: #aaa;--good-contrast: #444;--button-bg: #6080aa;--button-text: #eaeaea;--focus-color: #468;--separator: " – ";--success: #8c8;--warning: #cc8;--error: #c88}@supports (content: ""/""){:root{--separator: " – " / ""}}:root .highlightedText,:root .file-menu a:hover{color:#0006;text-shadow:0 0 3px rgba(0,0,0,.4)}:root .theme-dark{--bg: #000;--text: #999;--text-high-contrast: #eee;--ghost-contrast-alt: #181818;--faint-contrast: #2d2d2d;--good-contrast: #aaa;--button-bg: #345;--button-text: #999;--success: #383;--warning: #883;--error: #a33;color-scheme:dark}:root .theme-dark .highlightedText,:root .theme-dark .file-menu a:hover,:root .file-menu .theme-dark a:hover{color:#fff;text-shadow:0 0 3px #fff}:root .theme-dark a{color:#8ac}:root .theme-dark .dialog-closer{background:#633}:root .theme-dark .dialog-icon{color:#ccc}:root .theme-dark .dialog-icon .icon{color:#aaa}:root .theme-dark .dialog-backdrop{background:#333b}:root .theme-dark .error-msg{color:#b88;background-color:#623}:root .theme-dark button.toggled,:root .theme-dark a.toggled{color:#eee;text-shadow:0 0 3px #fff}body{background-color:var(--bg);margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body,button,select,input{font-size:12pt}.list-wrapper{max-width:54em;margin:auto;min-height:100vh;display:flex;flex-direction:column}body,input{color:var(--text)}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}input:not([type=checkbox],[type=range]),select,textarea{padding:.3em .4em;border-radius:.5em;background:var(--bg);border-color:var(--mild-contrast);color:var(--good-contrast);max-width:100%;box-sizing:border-box;width:100%}input[type=range]{width:calc(100% - 1px)}input[type=checkbox]{transform:scale(1.7);accent-color:var(--button-bg)}textarea{font-size:14pt}label input[type=checkbox]{margin-right:.8em}select{text-align:center}.hidden{display:none!important}[class^=fa-]:before,[class*=" fa-"]:before{margin:0}.icon{font-size:1.2em;height:1.2em;width:1.4em;display:inline-block;text-align:center}img.file-icon{height:1em}.file-icon{background-size:contain;background-repeat:no-repeat;background-position:center;vertical-align:text-bottom}.icon.mirror:before{transform:scaleX(-1)}a{text-decoration:none;color:var(--button-bg)}button{background-color:var(--button-bg);color:var(--button-text);padding:.5em;border:transparent;text-decoration:none;border-radius:.3em;vertical-align:middle;cursor:pointer;transition:background-color .5s}button:not(.before-sliding){min-width:min-content}button.small{padding:0 .4em;height:30px}button .icon{position:relative;top:.05em}button:hover{outline:1px solid var(--mild-contrast)}button[disabled]{background-color:var(--faint-contrast)}button.toggled{color:#fff;text-shadow:0 0 3px #fff}a.toggled{color:#223;text-shadow:0 0 5px #223}button:focus-visible,.breadcrumb:focus-visible{outline:3px solid var(--focus-color)}a>button{width:100%;height:100%}input:focus-visible,select:focus-visible,ul a:focus-visible{border-radius:.3em;border-color:transparent;outline:2px solid var(--focus-color)}.icon-button{padding:.1em;font-size:104%;height:1.8em;width:2em}.error-msg{background-color:#faa;color:#833;padding:.5em 1em}.hide-back,.upload-toolbar,header{background-color:var(--bg)}header{position:sticky;top:0;padding:.2em .1em;z-index:3}kbd{background-color:#eee;border-radius:3px;border:1px solid #b4b4b4;box-shadow:0 1px 1px #0003,0 2px #ffffffb3 inset;color:#333;display:inline-block;font-size:.85em;font-weight:700;line-height:1;padding:2px 4px;white-space:nowrap;margin-right:.5em}.before-sliding{width:0!important;flex:0!important;margin:0!important;height:0!important;padding:0!important;overflow:hidden!important;transition:flex .5s}.show-sliding{transition:flex .5s;overflow:clip;flex:1;white-space:nowrap}.ani-working{animation:1s blink infinite}@keyframes blink{0%{opacity:1}50%{opacity:.2}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.spinner,.icon.spinner:before{animation:1.5s spin infinite linear;display:inline-flex;justify-content:center;align-items:center;width:min-content}.breadcrumb{padding:.1em .6em .2em;line-height:1.8em;border-radius:.7em;background-color:var(--button-bg);color:var(--button-text);border-top:1px solid #666;margin-right:-.1em}.breadcrumb:nth-child(-n+3) .icon{padding:0 .2em}#folder-stats,#filter-bar>span{font-size:90%}#folder-stats{margin-left:.5em;line-height:2em;float:right}#folder-stats .icon{margin-right:.3em}#filter{flex:1;box-sizing:border-box}#filter-bar{display:flex;align-items:center;gap:.8em;margin:.2em 0 0;padding:2px 0 1px 3px;height:1.8em}#filter-bar input[type=checkbox]{margin-top:.3em}#filter-bar span:empty{display:none}ul.dir{flex:1;padding:0;margin:0;clear:both}ul.dir>p{text-align:center}ul.dir li{display:block;list-style-type:none;padding:.3em .3em .4em;border-bottom:1px solid var(--faint-contrast)}ul.dir li:nth-of-type(odd){background-color:var(--ghost-contrast)}ul.dir li input[type=checkbox]{margin-right:1em}@media (hover: none){ul.dir li .link-wrapper .popup-menu-button{display:none}}@media (hover: hover){ul.dir li .link-wrapper:not(:hover):not(:focus,:focus-within) .popup-menu-button{opacity:.001}ul.dir li .link-wrapper:hover{padding:1em;margin:-1em}ul.dir li .link-wrapper:hover .popup-menu-button{z-index:1}}ul.dir li .link-wrapper a:last-of-type{word-break:break-word;padding-right:.5em}ul.dir li .link-wrapper a .icon{margin-right:.5em;display:inline-block;text-align:center}ul.dir li .link-wrapper a img.icon,ul.dir li .link-wrapper a video.icon{vertical-align:bottom;position:relative;top:1px}ul.dir li .link-wrapper a:hover{text-decoration:underline}ul.dir li .entry-panel{float:right;padding-top:.3em;display:flex;align-items:center}ul.dir li .entry-panel .icon-button{margin:-3px 0 -3px .4em;font-size:.7em;width:2.4em}ul.dir li .entry-panel .entry-details{font-size:90%;margin-left:4px;font-variant-numeric:tabular-nums}ul.dir li .entry-panel .entry-details .entry-size-unit{margin-left:.3em}ul.dir li>div:last-of-type{clear:both}ul.dir li.page-separator{margin-top:.7em;position:relative}ul.dir li.page-separator:before{content:attr(label);position:absolute;top:-1.5em;font-size:smaller;margin-left:calc(50% - 1em);opacity:.9}.entry-comment{display:inline;white-space:pre-wrap;word-break:break-word;margin-bottom:.5em}.entry-comment:before,.entry-comment:after{font-size:1.5em;font-family:serif;line-height:1px;position:relative}.entry-comment:before{content:"“";margin-right:.1em;top:.2em}.entry-comment:after{content:"„";top:-.1em;margin-left:.1em}#menu-bar{display:flex;justify-content:space-evenly;flex-wrap:wrap}#menu-bar>*{flex:1;margin:.1em}#menu-bar>*:first-child{margin-left:0}#menu-bar>*:last-child{margin-right:0}#menu-bar button{padding:min(1vh,.5em) 0}#searched{margin:.2em}#user-panel{display:flex;flex-direction:column;gap:1em}#user-panel a>button{width:100%}button .icon+.label{cursor:inherit;margin-left:.4em}.dialog-backdrop.working{font-size:5em;animation:1s fade-in}.dialog-content{padding:.2em}.dialog-alert .dialog-content{text-align:center}.dialog-alert .dialog-content p{text-align:left;display:inline-block}.dialog{min-width:11em;--color: var(--button-bg)}.dialog-icon .icon{margin-left:-1px;font-size:95%;margin-top:.4em;border-radius:.6em 0}#paging{position:sticky;bottom:0;display:flex;gap:.1em;background-color:var(--bg);padding:0 .2em .2em}#paging>button{z-index:1}#paging button{box-shadow:0 0 .3em .3em #0003}#paging #paging-middle{padding:0 .5em;margin:0 -.3em;display:flex;gap:.5em;flex:1;overflow-x:auto}#paging #paging-middle>button{flex:1;min-width:unset;padding-top:0;padding-bottom:0}#paging button{background:var(--button-bg);text-align:center;white-space:nowrap;padding:.5em}.upload-toolbar{position:sticky;top:-4px;padding-top:1px;z-index:3;box-shadow:0 0 .3em .3em var(--bg)}.upload-progress:before{content:var(--separator)}.entry-size:after{content:var(--separator)}.upload-progress{min-width:4em;display:inline-block;margin-left:.5em}.upload-progress-bar{display:block;width:100%}.upload-list{margin-top:.5em}.upload-list td:nth-child(1){width:0}.upload-list td:nth-child(2){text-align:right;width:0;white-space:nowrap;padding-left:.5em}.upload-list td:nth-child(3){padding:.2em .5em;word-break:break-word}.nowrap{white-space:nowrap}.login-dialog form{display:flex;flex-direction:column;gap:1.2em}.login-dialog label{display:block;margin-bottom:.5em;margin-left:.1em}.miss-perm{margin:0 .3em}.popup-menu-button{font-size:.8em;padding:.2em .3em;position:absolute;opacity:.8;white-space:nowrap}.popup-menu-button:hover,.popup-menu-button:focus{opacity:1}.file-dialog .dialog{min-width:13em}.file-dialog-properties{word-break:break-word;line-height:1.5em;margin:0}.file-dialog-properties dt{font-weight:700}.file-dialog-properties dd{margin-left:1.5em}.file-menu{margin-top:1em;padding-top:1em;border-top:1px solid var(--faint-contrast);display:flex;flex-direction:column;gap:.7em 1em}.file-menu a{display:flex;align-items:flex-start}.file-menu a label{cursor:pointer;margin-top:.1em}.file-menu a label small{display:block}.file-menu a .icon{margin-right:.5em}.unauthorized{text-align:center}#clipBar{position:sticky;bottom:0;background:var(--bg);box-shadow:0 0 .3em .3em var(--bg);display:flex;align-items:center;gap:.5em}.tiles-mode{max-width:none;--tile-size: 5;--name-lines: 3;--name-height: calc(4.7em + var(--tile-size) * .4em + 1.2em * var(--name-lines));--tile-width: calc(5em + 1em * var(--tile-size))}@media (min-width: 42em){.tiles-mode{margin:0 1em}}.tiles-mode ul.dir{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--tile-width),1fr));grid-auto-rows:calc(var(--name-height) + 1.3em);gap:0 20px}.tiles-mode ul.dir li{text-align:center;position:relative;display:flex;flex-direction:column;border-bottom:none;overflow-x:clip;padding:.5em 0 0}.tiles-mode ul.dir li .link-wrapper:not(:hover){max-height:var(--name-height);display:block;display:-webkit-box;overflow:hidden;-webkit-line-clamp:calc(var(--name-lines) + 1);-webkit-box-orient:vertical}.tiles-mode ul.dir li .link-wrapper a:last-of-type{padding:0}.tiles-mode ul.dir li .link-wrapper a span{display:block}.tiles-mode ul.dir li .link-wrapper a .icon.icon{font-size:calc(1.2rem + .6rem * var(--tile-size))}.tiles-mode ul.dir li .link-wrapper a img.icon,.tiles-mode ul.dir li .link-wrapper a video.icon{width:auto;height:1em;padding:.1em 0}.tiles-mode ul.dir li .link-wrapper a .icon{font-size:4rem;display:block;margin:auto}.tiles-mode ul.dir li .link-wrapper:hover{overflow:visible;display:block;z-index:1}.tiles-mode ul.dir li .link-wrapper:hover .icon:before{text-decoration:none}.tiles-mode ul.dir li .link-wrapper:hover{padding:0;margin:0}.tiles-mode ul.dir li:nth-of-type(odd){background-color:inherit}.tiles-mode ul.dir li .entry-panel{justify-content:center;font-size:10pt}.tiles-mode ul.dir li .entry-details{font-size:80%}.tiles-mode ul.dir li.page-separator:before{content:""}.tiles-mode ul.dir li input[type=checkbox]{margin:0;position:absolute;top:.3em;right:1em}.tiles-mode ul.dir li .link-wrapper a{display:inline}.tiles-mode ul.dir li:hover{--bg: var(--ghost-contrast-alt);background:var(--bg)}.tiles-mode ul.dir li:hover .link-wrapper,.tiles-mode ul.dir li:hover .entry-panel{z-index:1;background:var(--bg)}.tiles-mode ul.dir li:hover input[type=checkbox]{z-index:2}.tiles-mode ul.dir li:hover .entry-panel{padding-bottom:.3em}.tiles-mode ul.dir li .entry-comment{max-height:1.2em;overflow:hidden;margin:0}.tiles-mode ul.dir li .entry-comment:hover{max-height:none;overflow:auto}.tiles-mode .entry-size:after{content:none}.tiles-mode .entry-ts{display:none}.tiles-mode .popup-menu-button{position:absolute;top:0;left:0}.tiles-mode #filter-bar{margin-bottom:1em}.tiles-mode #paging{z-index:1}#root .file-show{--nav-size: min(25vh, 25vw)}#root .file-show>div{height:100%;width:100%}@media (max-width: 30em){#root .file-show>div{flex-direction:column-reverse!important}}#root .file-show .showing-container{width:100%;height:100%;display:flex;flex-direction:column;justify-content:space-evenly;align-items:center;position:relative}#root .file-show .meta-tags{position:relative;width:100%;text-align:center;display:flex;justify-content:center}#root .file-show .meta-tags>div{position:absolute;margin:1em}#root .file-show .showing{max-width:calc(100% - (min(4vw,var(--nav-size))*2));max-height:100%}#root .file-show .cover{position:absolute;width:100%;height:100%;background-repeat:no-repeat;background-size:contain;background-position:center;z-index:-1;opacity:.3;transition:opacity 1s}#root .file-show .cover.none{opacity:0}#root .file-show audio.showing{min-width:60%}#root .file-show audio.showing,#root .file-show img.showing{max-width:100%}#root .file-show .main{flex:1;position:relative;max-height:100%;overflow:hidden}#root .file-show .freeY .main,#root .file-show .fullWidth .main{overflow-y:auto}#root .file-show .freeY .showing,#root .file-show .fullWidth .showing{max-height:initial;margin:auto}#root .file-show .freeY .showing-container,#root .file-show .fullWidth .showing-container{overflow:auto;align-items:flex-start}#root .file-show .fullWidth .showing-container,#root .file-show .fullWidth .showing{width:100%}#root .file-show .nav{position:absolute;width:.5em;font-size:var(--nav-size);cursor:pointer;opacity:.3;-webkit-text-stroke:2px black;user-select:none;transition:opacity .3s}#root .file-show .nav:hover{opacity:.7}#root .file-show .nav.nav-hidden:not(:hover){opacity:0}#root .file-show .bar{padding:.5em min(2vw,1em);background:var(--bg);opacity:.8;flex-wrap:wrap}#root .file-show .bar,#root .file-show .bar>.controls{display:flex;align-items:center;justify-content:flex-end;gap:.5em}#root .file-show .bar .entry-details{font-size:smaller;margin-left:1em}#root .file-show .bar .entry-ts{display:inherit;font-size:smaller}#root .file-show .bar .entry-size:after{display:none}.file-show-help kbd{margin:.5em}.file-show-help kbd:first-of-type{margin-top:1em}@media (min-width: 42em){body{scrollbar-width:thin;scrollbar-color:var(--button-bg) var(--ghost-contrast)}body::-webkit-scrollbar{width:12px}body::-webkit-scrollbar-track{background:var(--ghost-contrast)}body::-webkit-scrollbar-thumb{background-color:var(--button-bg);border-radius:20px;border:1px solid var(--ghost-contrast)}button{padding:.5em 1em}}@media (max-width: 42em){:root{--ghost-contrast: #8883}body,button,select{font-size:14pt}#menu-bar button .label,#filter-bar button .label,#clipBar button .label{display:none}#filter-bar{margin-top:.4em}#filter-bar button{width:17.6vw;height:2.3em}.breadcrumb{word-break:break-all}.breadcrumb .icon{font-size:24px}#root>.tiles-mode{margin:0}}@media (max-height: 600px){.file-dialog .dialog-content{display:flex;gap:3em;margin:1em}.file-dialog .dialog-content .file-menu{margin-top:0;padding-top:0;border-top:none;margin-left:2em;padding-left:2em;border-left:1px solid var(--faint-contrast)}}@media (pointer: coarse){#root>.tiles-mode .file-menu-button{font-size:1em;margin-top:.3em}}.dialog-backdrop{position:fixed;top:0;bottom:0;left:0;right:0;background:#8886;backdrop-filter:blur(2px);display:flex;justify-content:center;align-items:center;z-index:1000}.dialog{background:#fff;background:var(--bg);padding:.5em;padding:max(.5em,1vw,2vh);padding-top:0;border-radius:1em;position:relative;margin:0 3vw;overflow:hidden;max-height:calc(100vh - 2em);display:flex;flex-direction:column;justify-content:center}.dialog-icon{color:#fff;background-color:var(--color);position:absolute;top:0;width:2em;height:1.8em;text-align:center;border-radius:.8em 0}.dialog-icon-text{display:flex;align-items:center;justify-content:center}.dialog-title{font-size:120%;font-weight:400;margin:.3em 0;padding:0 .5em;min-height:1.2em}.dialog-closer~.dialog-title{margin-right:2em}.dialog-type~.dialog-title{margin-left:2em}.dialog-icon~.dialog-title{text-align:center}.dialog-closer{border-radius:0 .8em;right:0;padding:0;background-color:#c88}.dialog-icon~.dialog-content{margin-top:1em}.dialog-type{left:0;top:0;overflow:hidden;opacity:.7}.dialog-content{overflow:auto;max-height:calc(100vh - 4.5em)}.dialog-content p{white-space:pre-wrap;margin:.5em 0}.dialog-confirm .dialog-content button{margin-top:1em}.dialog-alert-info{--color: #282 }.dialog-alert-warning{--color: #c91 }.dialog-alert-error{--color: #822}@media (max-width: 42em){.dialog-icon{font-size:120%}.dialog-icon~.dialog-content{margin-top:1.5em}}.dialog-prompt label{display:block;margin:.5em .1em}.toasts{position:fixed;right:0;display:flex;flex-direction:column;margin-top:.5em;gap:.5em;z-index:1001}.toast{background:var(--faint-contrast);color:var(--text-high-contrast);transition:all .5s ease-in;position:relative;left:-.5em;overflow:hidden;display:flex;align-items:center;padding:.3em .6em;border-radius:.5em;box-shadow:0 0 .3em .3em #8883;box-sizing:border-box}.toast .toast-icon{margin-right:.3em;animation:zoomRotating 1.5s}.toast.toast-success{background-color:var(--success)}.toast.toast-warning{background-color:var(--warning)}.toast.toast-error{background-color:var(--error)}.toast.before{left:100%;transform:scale(.1);padding-top:0;padding-bottom:0}.toast.after{height:0!important;padding-top:0;padding-bottom:0;transition-duration:.2s;transform:scale(0)}@keyframes zoomRotating{0%{transform:scale(0)}to{transform:scale(1) rotate(360deg)}}
1
+ @charset "UTF-8";.ariaOnly{position:absolute;clip-path:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}:root{height:100dvh;--bg: #fff;--text: #555;--text-high-contrast: #111;--ghost-contrast: #8882;--ghost-contrast-alt: #eee;--faint-contrast: #ddd;--mild-contrast: #aaa;--good-contrast: #444;--button-bg: #6080aa;--button-text: #eaeaea;--focus-color: #468;--separator: " – ";--success: #8c8;--warning: #cc8;--error: #c88}@supports (content: ""/""){:root{--separator: " – " / ""}}:root .highlightedText,:root .file-menu a:hover{color:#0006;text-shadow:0 0 3px rgba(0,0,0,.4)}:root .theme-dark{--bg: #000;--text: #999;--text-high-contrast: #eee;--ghost-contrast-alt: #181818;--faint-contrast: #2d2d2d;--good-contrast: #aaa;--button-bg: #345;--button-text: #999;--success: #383;--warning: #883;--error: #a33;color-scheme:dark}:root .theme-dark .highlightedText,:root .theme-dark .file-menu a:hover,:root .file-menu .theme-dark a:hover{color:#fff;text-shadow:0 0 3px #fff}:root .theme-dark a{color:#8ac}:root .theme-dark .dialog-closer{background:#633}:root .theme-dark .dialog-icon{color:#ccc}:root .theme-dark .dialog-icon .icon{color:#aaa}:root .theme-dark .dialog-backdrop{background:#333b}:root .theme-dark .error-msg{color:#b88;background-color:#623}:root .theme-dark button.toggled,:root .theme-dark a.toggled{color:#eee;text-shadow:0 0 3px #fff}body{background-color:var(--bg);margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body,button,select,input{font-size:12pt}.list-wrapper{max-width:54em;margin:auto;min-height:100vh;display:flex;flex-direction:column}body,input{color:var(--text)}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}input:not([type=checkbox],[type=range]),select,textarea{padding:.3em .4em;border-radius:.5em;background:var(--bg);border-color:var(--mild-contrast);color:var(--good-contrast);max-width:100%;box-sizing:border-box;width:100%}input[type=range]{width:calc(100% - 1px)}input[type=checkbox]{transform:scale(1.7);accent-color:var(--button-bg)}textarea{font-size:14pt}label input[type=checkbox]{margin-right:.8em}select{text-align:center}.hidden{display:none!important}[class^=fa-]:before,[class*=" fa-"]:before{margin:0}.icon{font-size:1.2em;height:1.2em;width:1.4em;display:inline-block;text-align:center}img.file-icon{height:1em}.file-icon{background-size:contain;background-repeat:no-repeat;background-position:center;vertical-align:text-bottom}.icon.mirror:before{transform:scaleX(-1)}a{text-decoration:none;color:var(--button-bg)}button{background-color:var(--button-bg);color:var(--button-text);padding:.5em;border:transparent;text-decoration:none;border-radius:.3em;vertical-align:middle;cursor:pointer;transition:background-color .5s}button:not(.before-sliding){min-width:min-content}button.small{padding:0 .4em;height:30px}button .icon{position:relative;top:.05em}button:hover{outline:1px solid var(--mild-contrast)}button[disabled]{background-color:var(--faint-contrast)}button.toggled{color:#fff;text-shadow:0 0 3px #fff}a.toggled{color:#223;text-shadow:0 0 5px #223}button:focus-visible,.breadcrumb:focus-visible{outline:3px solid var(--focus-color)}a>button{width:100%;height:100%}input:focus-visible,select:focus-visible,ul a:focus-visible{border-radius:.3em;border-color:transparent;outline:2px solid var(--focus-color)}.icon-button{padding:.1em;font-size:104%;height:1.8em;width:2em}.error-msg{background-color:#faa;color:#833;padding:.5em 1em}.hide-back,.upload-toolbar,header{background-color:var(--bg)}header{position:sticky;top:0;padding:.2em .1em;z-index:3}kbd{background-color:#eee;border-radius:3px;border:1px solid #b4b4b4;box-shadow:0 1px 1px #0003,0 2px #ffffffb3 inset;color:#333;display:inline-block;font-size:.85em;font-weight:700;line-height:1;padding:2px 4px;white-space:nowrap;margin-right:.5em}.before-sliding{width:0!important;flex:0!important;margin:0!important;height:0!important;padding:0!important;overflow:hidden!important;transition:flex .5s}.show-sliding{transition:flex .5s;overflow:clip;flex:1;white-space:nowrap}.ani-working{animation:1s blink infinite}@keyframes blink{0%{opacity:1}50%{opacity:.2}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.spinner,.icon.spinner:before{animation:1.5s spin infinite linear;display:inline-flex;justify-content:center;align-items:center;width:min-content}.breadcrumb{padding:.1em .6em .2em;line-height:1.8em;border-radius:.7em;background-color:var(--button-bg);color:var(--button-text);border-top:1px solid #666;margin-right:-.1em}.breadcrumb:nth-child(-n+3) .icon{padding:0 .2em}#folder-stats,#filter-bar>span{font-size:90%}#folder-stats{margin-left:.5em;line-height:2em;float:right}#folder-stats .icon{margin-right:.3em}#filter{flex:1;box-sizing:border-box}#filter-bar{display:flex;align-items:center;gap:.8em;margin:.2em 0 0;padding:2px 0 1px 3px;height:1.8em}#filter-bar input[type=checkbox]{margin-top:.3em}#filter-bar span:empty{display:none}ul.dir{flex:1;padding:0;margin:0;clear:both}ul.dir>p{text-align:center}ul.dir li{display:block;list-style-type:none;padding:.3em .3em .4em;border-bottom:1px solid var(--faint-contrast)}ul.dir li:nth-of-type(odd){background-color:var(--ghost-contrast)}ul.dir li input[type=checkbox]{margin-right:1em}@media (hover: none){ul.dir li .link-wrapper .popup-menu-button{display:none}}@media (hover: hover){ul.dir li .link-wrapper:not(:hover):not(:focus,:focus-within) .popup-menu-button{opacity:.001}ul.dir li .link-wrapper:hover{padding:1em;margin:-1em}ul.dir li .link-wrapper:hover .popup-menu-button{z-index:1}}ul.dir li .link-wrapper a:last-of-type{word-break:break-word;padding-right:.5em}ul.dir li .link-wrapper a .icon{margin-right:.5em;display:inline-block;text-align:center}ul.dir li .link-wrapper a img.icon,ul.dir li .link-wrapper a video.icon{vertical-align:bottom;position:relative;top:1px}ul.dir li .link-wrapper a:hover{text-decoration:underline}ul.dir li .entry-panel{float:right;padding-top:.3em;display:flex;align-items:center}ul.dir li .entry-panel .icon-button{margin:-3px 0 -3px .4em;font-size:.7em;width:2.4em}ul.dir li .entry-panel .entry-details{font-size:90%;margin-left:4px;font-variant-numeric:tabular-nums}ul.dir li .entry-panel .entry-details .entry-size-unit{margin-left:.3em}ul.dir li>div:last-of-type{clear:both}ul.dir li.page-separator{margin-top:.7em;position:relative}ul.dir li.page-separator:before{content:attr(label);position:absolute;top:-1.5em;font-size:smaller;margin-left:calc(50% - 1em);opacity:.9}.entry-comment{display:inline;white-space:pre-wrap;word-break:break-word;margin-bottom:.5em}.entry-comment:before,.entry-comment:after{font-size:1.5em;font-family:serif;line-height:1px;position:relative}.entry-comment:before{content:"“";margin-right:.1em;top:.2em}.entry-comment:after{content:"„";top:-.1em;margin-left:.1em}#menu-bar{display:flex;justify-content:space-evenly;flex-wrap:wrap}#menu-bar>*{flex:1;margin:.1em}#menu-bar>*:first-child{margin-left:0}#menu-bar>*:last-child{margin-right:0}#menu-bar button{padding:min(1vh,.5em) 0}#searched{margin:.2em}#user-panel{display:flex;flex-direction:column;gap:1em}#user-panel a>button{width:100%}button .icon+.label{cursor:inherit;margin-left:.4em}.dialog-backdrop.working{font-size:5em;animation:1s fade-in}.dialog-content{padding:.2em}.dialog-alert .dialog-content{text-align:center}.dialog-alert .dialog-content p{text-align:left;display:inline-block}.dialog{min-width:11em;--color: var(--button-bg)}.dialog-icon .icon{margin-left:-1px;font-size:95%;margin-top:.4em;border-radius:.6em 0}#paging{position:sticky;bottom:0;display:flex;gap:.1em;background-color:var(--bg);padding:0 .2em .2em}#paging>button{z-index:1}#paging button{box-shadow:0 0 .3em .3em #0003}#paging #paging-middle{padding:0 .5em;margin:0 -.3em;display:flex;gap:.5em;flex:1;overflow-x:auto}#paging #paging-middle>button{flex:1;min-width:unset;padding-top:0;padding-bottom:0}#paging button{background:var(--button-bg);text-align:center;white-space:nowrap;padding:.5em}.upload-toolbar{position:sticky;top:-4px;padding-top:1px;z-index:3;box-shadow:0 0 .3em .3em var(--bg)}.upload-progress:before{content:var(--separator)}.entry-size:after{content:var(--separator)}.upload-progress{min-width:4em;display:inline-block;margin-left:.5em}.upload-progress-bar{display:block;width:100%}.upload-list{margin-top:.5em}.upload-list td:nth-child(1){width:0}.upload-list td:nth-child(2){text-align:right;width:0;white-space:nowrap;padding-left:.5em}.upload-list td:nth-child(3){padding:.2em .5em;word-break:break-word}.nowrap{white-space:nowrap}.login-dialog form{display:flex;flex-direction:column;gap:1.2em}.login-dialog label{display:block;margin-bottom:.5em;margin-left:.1em}.miss-perm{margin:0 .3em}.popup-menu-button{font-size:.8em;padding:.2em .3em;position:absolute;opacity:.8;white-space:nowrap}.popup-menu-button:hover,.popup-menu-button:focus{opacity:1}.file-dialog .dialog{min-width:13em}.file-dialog-properties{word-break:break-word;line-height:1.5em;margin:0}.file-dialog-properties dt{font-weight:700}.file-dialog-properties dd{margin-left:1.5em}.file-menu{margin-top:1em;padding-top:1em;border-top:1px solid var(--faint-contrast);display:flex;flex-direction:column;gap:.7em 1em}.file-menu a{display:flex;align-items:flex-start}.file-menu a label{cursor:pointer;margin-top:.1em}.file-menu a label small{display:block}.file-menu a .icon{margin-right:.5em}.unauthorized{text-align:center}#clipBar{position:sticky;bottom:0;background:var(--bg);box-shadow:0 0 .3em .3em var(--bg);display:flex;align-items:center;gap:.5em}.tiles-mode{max-width:none;--tile-size: 5;--name-lines: 3;--name-height: calc(4.7em + var(--tile-size) * .4em + 1.2em * var(--name-lines));--tile-width: calc(5em + 1em * var(--tile-size))}@media (min-width: 42em){.tiles-mode{margin:0 1em}}.tiles-mode ul.dir{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--tile-width),1fr));grid-auto-rows:calc(var(--name-height) + 1.3em);gap:0 20px}.tiles-mode ul.dir li{text-align:center;position:relative;display:flex;flex-direction:column;border-bottom:none;overflow-x:clip;padding:.5em 0 0}.tiles-mode ul.dir li .link-wrapper:not(:hover){max-height:var(--name-height);display:block;display:-webkit-box;overflow:hidden;-webkit-line-clamp:calc(var(--name-lines) + 1);-webkit-box-orient:vertical}.tiles-mode ul.dir li .link-wrapper a:last-of-type{padding:0}.tiles-mode ul.dir li .link-wrapper a span{display:block}.tiles-mode ul.dir li .link-wrapper a .icon.icon{font-size:calc(1.2rem + .6rem * var(--tile-size))}.tiles-mode ul.dir li .link-wrapper a img.icon,.tiles-mode ul.dir li .link-wrapper a video.icon{width:auto;height:1em;padding:.1em 0}.tiles-mode ul.dir li .link-wrapper a .icon{font-size:4rem;display:block;margin:auto}.tiles-mode ul.dir li .link-wrapper:hover{overflow:visible;display:block;z-index:1}.tiles-mode ul.dir li .link-wrapper:hover .icon:before{text-decoration:none}.tiles-mode ul.dir li .link-wrapper:hover{padding:0;margin:0}.tiles-mode ul.dir li:nth-of-type(odd){background-color:inherit}.tiles-mode ul.dir li .entry-panel{justify-content:center;font-size:10pt}.tiles-mode ul.dir li .entry-details{font-size:80%}.tiles-mode ul.dir li.page-separator:before{content:""}.tiles-mode ul.dir li input[type=checkbox]{margin:0;position:absolute;top:.3em;right:1em}.tiles-mode ul.dir li .link-wrapper a{display:inline}.tiles-mode ul.dir li:hover{--bg: var(--ghost-contrast-alt);background:var(--bg)}.tiles-mode ul.dir li:hover .link-wrapper,.tiles-mode ul.dir li:hover .entry-panel{z-index:1;background:var(--bg)}.tiles-mode ul.dir li:hover input[type=checkbox]{z-index:2}.tiles-mode ul.dir li:hover .entry-panel{padding-bottom:.3em}.tiles-mode ul.dir li .entry-comment{max-height:1.2em;overflow:hidden;margin:0}.tiles-mode ul.dir li .entry-comment:hover{max-height:none;overflow:auto}.tiles-mode .entry-size:after{content:none}.tiles-mode .entry-ts{display:none}.tiles-mode .popup-menu-button{position:absolute;top:0;left:0}.tiles-mode #filter-bar{margin-bottom:1em}.tiles-mode #paging{z-index:1}#root .file-show{--nav-size: min(25vh, 25vw)}#root .file-show>div{height:100%;width:100%}@media (max-width: 30em){#root .file-show>div{flex-direction:column-reverse!important}}#root .file-show .showing-container{width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;position:relative}#root .file-show .meta-tags{position:relative;width:100%;text-align:center;display:flex;justify-content:center}#root .file-show .meta-tags>div{position:absolute;margin:1em}#root .file-show .showing{max-width:calc(100% - (min(4vw,var(--nav-size))*2));max-height:100%}#root .file-show .cover{position:absolute;width:100%;height:100%;background-repeat:no-repeat;background-size:contain;background-position:center;z-index:-1;opacity:.3;transition:opacity 1s}#root .file-show .cover.none{opacity:0}#root .file-show audio.showing{min-width:60%}#root .file-show audio.showing,#root .file-show img.showing{max-width:100%}#root .file-show .main{flex:1;position:relative;max-height:100%;overflow:hidden}#root .file-show .freeY .main,#root .file-show .fullWidth .main{overflow-y:auto}#root .file-show .freeY .showing,#root .file-show .fullWidth .showing{max-height:initial;margin:auto}#root .file-show .freeY .showing-container,#root .file-show .fullWidth .showing-container{overflow:auto;align-items:flex-start;justify-content:flex-start}#root .file-show .fullWidth .showing-container,#root .file-show .fullWidth .showing{width:100%}#root .file-show .nav{position:absolute;width:.5em;font-size:var(--nav-size);cursor:pointer;opacity:.3;-webkit-text-stroke:2px black;user-select:none;transition:opacity .3s}#root .file-show .nav:hover{opacity:.7}#root .file-show .nav.nav-hidden:not(:hover){opacity:0}#root .file-show .bar{padding:.5em min(2vw,1em);background:var(--bg);opacity:.8;flex-wrap:wrap}#root .file-show .bar,#root .file-show .bar>.controls{display:flex;align-items:center;justify-content:flex-end;gap:.5em}#root .file-show .bar .entry-details{font-size:smaller;margin-left:1em}#root .file-show .bar .entry-ts{display:inherit;font-size:smaller}#root .file-show .bar .entry-size:after{display:none}.file-show-help kbd{margin:.5em}.file-show-help kbd:first-of-type{margin-top:1em}@media (min-width: 42em){body{scrollbar-width:thin;scrollbar-color:var(--button-bg) var(--ghost-contrast)}body::-webkit-scrollbar{width:12px}body::-webkit-scrollbar-track{background:var(--ghost-contrast)}body::-webkit-scrollbar-thumb{background-color:var(--button-bg);border-radius:20px;border:1px solid var(--ghost-contrast)}button{padding:.5em 1em}}@media (max-width: 42em){:root{--ghost-contrast: #8883}body,button,select{font-size:14pt}#menu-bar button .label,#filter-bar button .label,#clipBar button .label{display:none}#filter-bar{margin-top:.4em}#filter-bar button{width:17.6vw;height:2.3em}.breadcrumb{word-break:break-all}.breadcrumb .icon{font-size:24px}#root>.tiles-mode{margin:0}}@media (max-height: 600px){.file-dialog .dialog-content{display:flex;gap:3em;margin:1em}.file-dialog .dialog-content .file-menu{margin-top:0;padding-top:0;border-top:none;margin-left:2em;padding-left:2em;border-left:1px solid var(--faint-contrast)}}@media (pointer: coarse){#root>.tiles-mode .file-menu-button{font-size:1em;margin-top:.3em}}.dialog-backdrop{position:fixed;top:0;bottom:0;left:0;right:0;background:#8886;backdrop-filter:blur(2px);display:flex;justify-content:center;align-items:center;z-index:1000}.dialog{background:#fff;background:var(--bg);padding:.5em;padding:max(.5em,1vw,2vh);padding-top:0;border-radius:1em;position:relative;margin:0 3vw;overflow:hidden;max-height:calc(100vh - 2em);display:flex;flex-direction:column;justify-content:center}.dialog-icon{color:#fff;background-color:var(--color);position:absolute;top:0;width:2em;height:1.8em;text-align:center;border-radius:.8em 0}.dialog-icon-text{display:flex;align-items:center;justify-content:center}.dialog-title{font-size:120%;font-weight:400;margin:.3em 0;padding:0 .5em;min-height:1.2em}.dialog-closer~.dialog-title{margin-right:2em}.dialog-type~.dialog-title{margin-left:2em}.dialog-icon~.dialog-title{text-align:center}.dialog-closer{border-radius:0 .8em;right:0;padding:0;background-color:#c88}.dialog-icon~.dialog-content{margin-top:1em}.dialog-type{left:0;top:0;overflow:hidden;opacity:.7}.dialog-content{overflow:auto;max-height:calc(100vh - 4.5em)}.dialog-content p{white-space:pre-wrap;margin:.5em 0}.dialog-confirm .dialog-content button{margin-top:1em}.dialog-alert-info{--color: #282 }.dialog-alert-warning{--color: #c91 }.dialog-alert-error{--color: #822}@media (max-width: 42em){.dialog-icon{font-size:120%}.dialog-icon~.dialog-content{margin-top:1.5em}}.dialog-prompt label{display:block;margin:.5em .1em}.toasts{position:fixed;right:0;display:flex;flex-direction:column;margin-top:.5em;gap:.5em;z-index:1001}.toast{background:var(--faint-contrast);color:var(--text-high-contrast);transition:all .5s ease-in;position:relative;left:-.5em;overflow:hidden;display:flex;align-items:center;padding:.3em .6em;border-radius:.5em;box-shadow:0 0 .3em .3em #8883;box-sizing:border-box}.toast .toast-icon{margin-right:.3em;animation:zoomRotating 1.5s}.toast.toast-success{background-color:var(--success)}.toast.toast-warning{background-color:var(--warning)}.toast.toast-error{background-color:var(--error)}.toast.before{left:100%;transform:scale(.1);padding-top:0;padding-bottom:0}.toast.after{height:0!important;padding-top:0;padding-bottom:0;transition-duration:.2s;transform:scale(0)}@keyframes zoomRotating{0%{transform:scale(0)}to{transform:scale(1) rotate(360deg)}}
@@ -1,4 +1,4 @@
1
- import{g as OF,c as UF}from"./index-c8LVGHJd.js";function gF(sF,hF){for(var eF=0;eF<hF.length;eF++){const tF=hF[eF];if(typeof tF!="string"&&!Array.isArray(tF)){for(const w in tF)if(w!=="default"&&!(w in sF)){const lF=Object.getOwnPropertyDescriptor(tF,w);lF&&Object.defineProperty(sF,w,lF.get?lF:{enumerable:!0,get:()=>tF[w]})}}}return Object.freeze(Object.defineProperty(sF,Symbol.toStringTag,{value:"Module"}))}var dF={exports:{}};/*
1
+ import{g as OF,c as UF}from"./index-68E4YlBH.js";function gF(sF,hF){for(var eF=0;eF<hF.length;eF++){const tF=hF[eF];if(typeof tF!="string"&&!Array.isArray(tF)){for(const w in tF)if(w!=="default"&&!(w in sF)){const lF=Object.getOwnPropertyDescriptor(tF,w);lF&&Object.defineProperty(sF,w,lF.get?lF:{enumerable:!0,get:()=>tF[w]})}}}return Object.freeze(Object.defineProperty(sF,Symbol.toStringTag,{value:"Module"}))}var dF={exports:{}};/*
2
2
  * [js-sha512]{@link https://github.com/emn178/js-sha512}
3
3
  *
4
4
  * @version 0.8.0
@@ -4,8 +4,8 @@
4
4
  <meta charset="utf-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=0" />
6
6
  <link href="/fontello.css" rel="stylesheet" />
7
- <script type="module" crossorigin src="/assets/index-c8LVGHJd.js"></script>
8
- <link rel="stylesheet" crossorigin href="/assets/index-oekM6dN8.css">
7
+ <script type="module" crossorigin src="/assets/index-68E4YlBH.js"></script>
8
+ <link rel="stylesheet" crossorigin href="/assets/index-dsMqb07K.css">
9
9
  </head>
10
10
  <body>
11
11
  <noscript>You need to enable JavaScript to run this app.</noscript>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hfs",
3
- "version": "0.52.4",
3
+ "version": "0.52.6",
4
4
  "description": "HTTP File Server",
5
5
  "keywords": [
6
6
  "file server",
package/src/adminApis.js CHANGED
@@ -104,7 +104,7 @@ exports.adminApis = {
104
104
  platform: process.platform,
105
105
  urls: await (0, listen_1.getUrls)(),
106
106
  ips: await (0, listen_1.getIps)(false),
107
- baseUrl: (0, listen_1.getBaseUrlOrDefault)(),
107
+ baseUrl: await (0, listen_1.getBaseUrlOrDefault)(),
108
108
  roots: roots_1.roots.get(),
109
109
  updatePossible: !await (0, update_1.updateSupported)() ? false : (await (0, update_1.localUpdateAvailable)()) ? 'local' : true,
110
110
  proxyDetected: (0, middlewares_1.getProxyDetected)(),
@@ -95,11 +95,9 @@ const apis = {
95
95
  // avoid creating N listeners on ctx.req, and getting a warning
96
96
  const undo = [];
97
97
  ctx.req.once('close', () => undo.forEach(x => x()));
98
- const folder2repo = (0, github_1.getFolder2repo)();
99
- for await (const pl of await (0, github_1.searchPlugins)(text)) {
98
+ const already = Object.values((0, github_1.getFolder2repo)()).map(String);
99
+ for await (const pl of await (0, github_1.searchPlugins)(text, { skipRepos: already })) {
100
100
  const repo = pl.repo || pl.id; // .repo property can be more trustworthy in case github user renamed and left the previous link in 'repo'
101
- if (lodash_1.default.includes(folder2repo, repo))
102
- continue; // don't include installed plugins
103
101
  const missing = await (0, plugins_1.getMissingDependencies)(pl);
104
102
  if (missing.length)
105
103
  pl.missing = missing;
package/src/api.vfs.js CHANGED
@@ -124,7 +124,7 @@ const apis = {
124
124
  simplifyName(child);
125
125
  (parentNode.children || (parentNode.children = [])).unshift(child);
126
126
  (0, vfs_1.saveVfs)();
127
- const link = rest.url ? undefined : (0, listen_1.getBaseUrlOrDefault)()
127
+ const link = rest.url ? undefined : await (0, listen_1.getBaseUrlOrDefault)()
128
128
  + (parent ? (0, misc_1.enforceFinal)('/', parent) : '/')
129
129
  + encodeURIComponent((0, vfs_1.getNodeName)(child))
130
130
  + (isDir ? '/' : '');
@@ -36,19 +36,9 @@ function apiMiddleware(apis) {
36
36
  // we don't rely on SameSite cookie option because it's https-only
37
37
  let res;
38
38
  try {
39
- if (ctx.state.revProxyPath)
40
- for (const [k, v] of Object.entries(params))
41
- if (k.startsWith('uri'))
42
- if (typeof v === 'string')
43
- fixUri(params, k);
44
- else if (typeof (v === null || v === void 0 ? void 0 : v[0]) === 'string')
45
- v.forEach((x, i) => fixUri(v, i));
46
39
  res = await apiFun(params, ctx);
47
40
  if (res === null)
48
41
  return;
49
- function fixUri(obj, k) {
50
- obj[k] = (0, misc_1.removeStarting)(ctx.state.revProxyPath, obj[k]);
51
- }
52
42
  }
53
43
  catch (e) {
54
44
  if (typeof e === 'string') // message meant to be transmitted
package/src/block.js CHANGED
@@ -1,16 +1,16 @@
1
1
  "use strict";
2
2
  // This file is part of HFS - Copyright 2021-2023, Massimo Melina <a@rejetto.com> - License https://www.gnu.org/licenses/gpl-3.0.txt
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.applyBlock = void 0;
4
+ exports.applyBlock = exports.block = void 0;
5
5
  const config_1 = require("./config");
6
6
  const connections_1 = require("./connections");
7
7
  const misc_1 = require("./misc");
8
- const block = (0, config_1.defineConfig)('block', [], rules => {
8
+ exports.block = (0, config_1.defineConfig)('block', [], rules => {
9
9
  const now = new Date();
10
10
  const ret = !Array.isArray(rules) ? []
11
11
  : (0, misc_1.onlyTruthy)(rules.map(rule => {
12
12
  rule.expire && (rule.expire = new Date(rule.expire));
13
- return !rule.disabled && (rule.expire || now) <= now && (0, misc_1.makeNetMatcher)(rule.ip);
13
+ return !rule.disabled && (rule.expire || now) >= now && (0, misc_1.makeNetMatcher)(rule.ip);
14
14
  }));
15
15
  // reapply new block to existing connections
16
16
  for (const { socket, ip } of (0, connections_1.getConnections)())
@@ -18,16 +18,16 @@ const block = (0, config_1.defineConfig)('block', [], rules => {
18
18
  return ret;
19
19
  });
20
20
  function applyBlock(socket, ip = (0, connections_1.normalizeIp)(socket.remoteAddress || '')) {
21
- if (ip && block.compiled().find(rule => rule(ip)))
21
+ if (ip && exports.block.compiled().find(rule => rule(ip)))
22
22
  return (0, connections_1.disconnect)(socket, 'block-ip');
23
23
  }
24
24
  exports.applyBlock = applyBlock;
25
25
  setInterval(() => {
26
26
  const now = new Date();
27
- const next = block.get().filter(x => !x.expire || x.expire > now);
28
- const n = block.get().length - next.length;
27
+ const next = exports.block.get().filter(x => !x.expire || x.expire > now);
28
+ const n = exports.block.get().length - next.length;
29
29
  if (!n)
30
30
  return;
31
31
  console.log("blocking rules:", n, "expired");
32
- block.set(next);
32
+ exports.block.set(next);
33
33
  }, misc_1.MINUTE / 2);
package/src/const.js CHANGED
@@ -45,7 +45,7 @@ exports.DEV = process.env.DEV || exports.argv.dev ? 'DEV' : '';
45
45
  exports.ORIGINAL_CWD = process.cwd();
46
46
  exports.HFS_STARTED = new Date();
47
47
  const PKG_PATH = (0, path_1.join)(__dirname, '..', 'package.json');
48
- exports.BUILD_TIMESTAMP = "2024-04-29T20:42:43.065Z";
48
+ exports.BUILD_TIMESTAMP = "2024-05-11T20:19:38.447Z";
49
49
  const pkg = JSON.parse(fs.readFileSync(PKG_PATH, 'utf8'));
50
50
  exports.VERSION = pkg.version;
51
51
  exports.RUNNING_BETA = exports.VERSION.includes('-');
package/src/github.js CHANGED
@@ -161,13 +161,27 @@ async function apiGithub(uri) {
161
161
  : e;
162
162
  });
163
163
  }
164
- async function searchPlugins(text = '') {
164
+ async function* apiGithubPaginated(uri) {
165
+ const PAGE_SIZE = 100;
166
+ let page = 1;
167
+ let n = 0;
168
+ while (1) {
169
+ const res = await apiGithub(uri + `&page=${page++}&per_page=${PAGE_SIZE}`);
170
+ for (const x of res.items)
171
+ yield x;
172
+ const now = res.items.length;
173
+ n += now;
174
+ if (!now || n >= res.total_count)
175
+ break;
176
+ }
177
+ }
178
+ async function searchPlugins(text = '', { skipRepos = [''] } = {}) {
165
179
  const projectInfo = await (0, exports.getProjectInfo)();
166
- const list = await apiGithub('search/repositories?q=topic:hfs-plugin+' + encodeURI(text));
167
- return new misc_1.AsapStream(list.items.map(async (it) => {
180
+ const list = await (0, misc_1.asyncGeneratorToArray)(apiGithubPaginated(`search/repositories?q=topic:hfs-plugin+` + encodeURI(text)));
181
+ return new misc_1.AsapStream(list.map(async (it) => {
168
182
  var _a, _b;
169
183
  const repo = it.full_name;
170
- if ((_a = projectInfo === null || projectInfo === void 0 ? void 0 : projectInfo.plugins_blacklist) === null || _a === void 0 ? void 0 : _a.includes(repo))
184
+ if (((_a = projectInfo === null || projectInfo === void 0 ? void 0 : projectInfo.plugins_blacklist) === null || _a === void 0 ? void 0 : _a.includes(repo)) || skipRepos.includes(repo))
171
185
  return;
172
186
  const pl = await readOnlineCompatiblePlugin(repo, it.default_branch).catch(() => undefined);
173
187
  if (!pl)
package/src/listen.js CHANGED
@@ -49,8 +49,8 @@ let httpSrv;
49
49
  let httpsSrv;
50
50
  const openBrowserAtStart = (0, config_1.defineConfig)('open_browser_at_start', !const_1.DEV);
51
51
  exports.baseUrl = (0, config_1.defineConfig)('base_url', '', x => { var _a; return (_a = /(?<=\/\/)[^\/]+/.exec(x)) === null || _a === void 0 ? void 0 : _a[0]; }); // compiled is host only
52
- function getBaseUrlOrDefault() {
53
- return exports.baseUrl.get() || nat_1.defaultBaseUrl.get();
52
+ async function getBaseUrlOrDefault() {
53
+ return exports.baseUrl.get() || await nat_1.defaultBaseUrl.get();
54
54
  }
55
55
  exports.getBaseUrlOrDefault = getBaseUrlOrDefault;
56
56
  function getHttpsWorkingPort() {
package/src/nat.js CHANGED
@@ -22,9 +22,11 @@ exports.defaultBaseUrl = (0, valtio_1.proxy)({
22
22
  externalIp: '',
23
23
  localIp: '',
24
24
  port: 0,
25
- get() {
25
+ async get() {
26
26
  const defPort = this.proto === 'https' ? 443 : 80;
27
- return `${this.proto}://${this.publicIps[0] || this.externalIp || this.localIp}${!this.port || this.port === defPort ? '' : ':' + this.port}`;
27
+ const status = await (0, listen_1.getServerStatus)();
28
+ const port = this.port || (this.proto === 'https' ? status.https.port : status.http.port);
29
+ return `${this.proto}://${this.publicIps[0] || this.externalIp || this.localIp}${!port || port === defPort ? '' : ':' + port}`;
28
30
  }
29
31
  });
30
32
  exports.upnpClient = new nat_upnp_rejetto_1.Client({ timeout: 4000 });
package/src/perm.js CHANGED
@@ -41,8 +41,9 @@ const createAdminConfig = (0, config_1.defineConfig)('create-admin', '');
41
41
  createAdminConfig.sub(v => {
42
42
  if (!v)
43
43
  return;
44
- createAdmin(v);
45
44
  createAdminConfig.set('');
45
+ // we can't createAdmin right away, as its changes will be lost after return, when our caller (setConfig) applies undefined properties. setTimeout is good enough, as the process is sync.
46
+ setTimeout(() => createAdmin(v));
46
47
  });
47
48
  async function createAdmin(password, username = 'admin') {
48
49
  const acc = await addAccount(username, { admin: true, password });
package/src/roots.js CHANGED
@@ -45,12 +45,16 @@ const rootsMiddleware = (ctx, next) => (() => {
45
45
  return true; // true will avoid calling next
46
46
  }
47
47
  if (!params) {
48
- ctx.path = join(root, ctx.path);
48
+ ctx.path = join(root, ctx.path, '');
49
49
  return;
50
50
  }
51
51
  for (const [k, v] of Object.entries(params))
52
52
  if (k.startsWith('uri'))
53
53
  params[k] = Array.isArray(v) ? v.map(x => join(root, x)) : join(root, v);
54
+ function join(a, b, removePrefix = ctx.state.revProxyPath) {
55
+ return a + (b && b[0] !== '/' ? '/' : '')
56
+ + (0, misc_1.removeStarting)(removePrefix, b); // removal must be done before adding the root
57
+ }
54
58
  })() || next();
55
59
  exports.rootsMiddleware = rootsMiddleware;
56
60
  function join(a, b) {
package/src/throttler.js CHANGED
@@ -21,6 +21,7 @@ const maxKbpsPerIp = (0, config_1.defineConfig)('max_kbps_per_ip', Infinity);
21
21
  const throttler = async (ctx, next) => {
22
22
  await next();
23
23
  let { body } = ctx;
24
+ const downloadTotal = ctx.response.length;
24
25
  if (typeof body === 'string' || body && body instanceof Buffer)
25
26
  ctx.body = body = stream_1.Readable.from(body);
26
27
  if (!body || !(body instanceof stream_1.Readable))
@@ -65,11 +66,10 @@ const throttler = async (ctx, next) => {
65
66
  (_a = ipGroup.destroy) === null || _a === void 0 ? void 0 : _a.call(ipGroup);
66
67
  delete ip2group[ctx.ip];
67
68
  });
68
- const downloadTotal = ctx.response.length;
69
69
  ctx.state.originalStream = body;
70
70
  ctx.body = body.pipe(ts);
71
- if (downloadTotal) // preserve this info
72
- ctx.response.length = downloadTotal;
71
+ if (downloadTotal !== undefined) // undefined will break SSE
72
+ ctx.response.length = downloadTotal; // preserve this info
73
73
  ts.once('close', () => // in case of compressed response, we offer calculation of real size
74
74
  ctx.state.length = ts.getBytesSent() - offset);
75
75
  };