Skip to content

Commit 96af1b4

Browse files
pgodwincursoragent
andcommitted
Fix welcome-pack Catalog typing so ensureDir returns a VNode.
importExpandedTree stamps folder metadata on the node from ensureDir, so WelcomePackFs must match Catalog instead of returning only an id. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent d4e5c54 commit 96af1b4

2 files changed

Lines changed: 22 additions & 19 deletions

File tree

src/fs/welcome-pack.test.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,20 @@ function ascii(s: string): Uint8Array {
3030
return b;
3131
}
3232

33+
function dirNode(id: number, parentId: number, name: string): VNode {
34+
return {
35+
id,
36+
parentId,
37+
name,
38+
isDir: true,
39+
data: new Uint8Array(),
40+
resource: new Uint8Array(),
41+
finderInfo: new Uint8Array(32),
42+
createDate: 1,
43+
modDate: 1,
44+
};
45+
}
46+
3347
function mockStore(): WelcomePackStore & {
3448
files: Map<string, { id: number; isDir: boolean; name: string }>;
3549
blobs: { parentId: number; name: string }[];
@@ -64,9 +78,9 @@ function mockStore(): WelcomePackStore & {
6478
async ensureDir(parentId, name) {
6579
const k = key(parentId, name);
6680
const existing = files.get(k);
67-
if (existing?.isDir) return existing;
68-
const node = { id: nextId++, isDir: true, name };
69-
files.set(k, node);
81+
if (existing?.isDir) return dirNode(existing.id, parentId, name);
82+
const node = dirNode(nextId++, parentId, name);
83+
files.set(k, { id: node.id, isDir: true, name });
7084
byId.set(node.id, { parentId, name });
7185
return node;
7286
},

src/fs/welcome-pack.ts

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { be32 } from '../protocol/binary';
66
import { AS_MAGIC, AD_MAGIC, buildAppleSingle } from './appledouble';
77
import { expandIncoming, isExpandableArchive, type ExpandedNode } from './expand-incoming';
88
import { importExpandedTree, type ImportItemTrack } from './import-transfer';
9-
import type { VNode } from './virtual-fs';
9+
import type { Catalog } from './virtual-fs';
1010
import { log } from '../util/logger';
1111

1212
export const WELCOME_PACK_BASE = '/welcome';
@@ -36,23 +36,12 @@ export type WelcomePackProgress = {
3636
}) => ImportItemTrack | undefined;
3737
};
3838

39-
export type WelcomePackFs = {
40-
rootId(): number;
39+
export type WelcomePackFs = Pick<
40+
Catalog,
41+
'rootId' | 'ensureDir' | 'beginBatch' | 'endBatch' | 'createFile' | 'put' | 'remove'
42+
> & {
4143
lookup(parentId: number, name: string): Promise<{ id: number; isDir: boolean } | undefined>;
42-
ensureDir(parentId: number, name: string): Promise<{ id: number }>;
43-
beginBatch(): void;
44-
endBatch(): void;
4544
importBlob(parentId: number, file: File): Promise<unknown>;
46-
createFile(
47-
parentId: number,
48-
name: string,
49-
data: Uint8Array,
50-
resource?: Uint8Array,
51-
finderInfo?: Uint8Array,
52-
onBytes?: (n: number) => void,
53-
): Promise<VNode>;
54-
put(node: VNode): Promise<void>;
55-
remove(id: number): Promise<void>;
5645
};
5746

5847
export type WelcomePackStore = WelcomePackFs & {

0 commit comments

Comments
 (0)