vfs: rename file in source folder

Massimo Melina committed Dec 15, 2021 at 00:16 UTC eb2dcb130d87ffbd3af3e76390ff5f03f7974478
3 files changed +12 -5
dev-notes.md
-1
@@ -8,7 +8,6 @@
8 - https://www.tutorialspoint.com/koajs/koajs_quick_guide.htm
9
10 # To do
11 -- vfs: rename file in source folder
11 - vfs: serve an html for a folder?
12 - "default" property for vfsNode?
13 - sticky breadcrumbs
src/apis.ts
+2 -1
@@ -44,7 +44,8 @@ export const frontEndApis: ApiHandlers = {
44 onlyFiles: false,
45 ignore: wantArray(node.hide).map(x => path+x),
46 })
47 - list.push( ...res.map(x => statToFile(x.name, x.stats!)) )
47 + const { rename } = node
48 + list.push( ...res.map(x => statToFile(rename?.[x.name] || x.name, x.stats!)) )
49 }
50 return { list }
51 }
src/vfs.ts
+10 -3
@@ -14,6 +14,7 @@ export interface VfsNode {
14 source?: string,
15 children?: VfsNode[],
16 hide?: string | string[],
17 + rename?: Record<string,string>,
18 }
19
20 export class Vfs {
@@ -60,13 +61,19 @@ export class Vfs {
61 let run = this.root
62 const rest = url.split('/').filter(Boolean)
63 while (rest.length) {
63 - const piece = rest[0]
64 + let piece = rest.shift()
65 + const { rename } = run
66 + if (rename)
67 + for (const k in rename)
68 + if (rename[k] === piece) {
69 + piece = k
70 + break
71 + }
72 // @ts-ignore
73 const find = run?.children?.find(x => x.name === piece)
74 if (!find)
67 - return run.source ? { source:run.source + '/' + rest.join('/') } : null
75 + return run.source ? { source:run.source + '/' + piece + '/' + rest.join('/') } : null
76 run = find
69 - rest.shift()
77 }
78 return run
79 }