wider support of wildcards in multi-level masks
Massimo Melina committed
Mar 30, 2025 at 20:29 UTC
9b971f7911c9c78ac7743df6c8acce7977e1df28
1 file changed
+8
-7
src/vfs.ts
+8
-7
@@ -4,7 +4,7 @@ import fs from 'fs/promises'
4
import { basename, dirname, join, resolve } from 'path'
5
import {
6
makeMatcher, setHidden, onlyTruthy, isValidFileName, throw_, VfsPerms, Who,
7
- isWhoObject, WHO_ANY_ACCOUNT, defaultPerms, PERM_KEYS, removeStarting, HTTP_SERVER_ERROR, try_
7
+ isWhoObject, WHO_ANY_ACCOUNT, defaultPerms, PERM_KEYS, removeStarting, HTTP_SERVER_ERROR, try_, matches
8
} from './misc'
9
import Koa from 'koa'
10
import _ from 'lodash'
@@ -432,14 +432,15 @@ function inheritMasks(item: VfsNode, parent: VfsNode, virtualBasename=getNodeNam
432
const { masks } = parent
433
if (!masks) return
434
const o: Masks = {}
435
- const prefix = virtualBasename + '/'
435
for (const [k,v] of Object.entries(masks)) {
437
- if (k.startsWith('**'))
436
+ if (k.startsWith('**')) {
437
o[k] = v
439
- else if (k.startsWith('*/'))
440
- o[k.slice(2)] = v
441
- else if (k.startsWith(prefix))
442
- o[k.slice(prefix.length)] = v
438
+ continue
439
+ }
440
+ const i = k.indexOf('/')
441
+ if (i < 0) continue
442
+ if (!matches(virtualBasename, k.slice(0, i))) continue
443
+ o[k.slice(i + 1)] = v
444
}
445
if (Object.keys(o).length)
446
item.masks = Object.assign(o, item.masks) // don't change item.masks object as it is the same object of item.original