mirror of
https://github.com/rowboatlabs/rowboat.git
synced 2026-04-29 10:26:23 +02:00
bootstrap new electron app
This commit is contained in:
parent
2491bacea1
commit
505e3ea620
89 changed files with 12397 additions and 8435 deletions
93
apps/x/packages/shared/src/workspace.ts
Normal file
93
apps/x/packages/shared/src/workspace.ts
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
import { z } from 'zod';
|
||||
|
||||
// ============================================================================
|
||||
// Workspace Filesystem Schema Definitions
|
||||
// ============================================================================
|
||||
|
||||
// All paths are workspace-relative POSIX strings
|
||||
export const RelPath = z.string().min(1);
|
||||
|
||||
export const NodeKind = z.enum(['file', 'dir']);
|
||||
|
||||
export const Encoding = z.enum(['utf8', 'base64', 'binary']);
|
||||
|
||||
export const Stat = z.object({
|
||||
kind: NodeKind,
|
||||
size: z.number().min(0),
|
||||
mtimeMs: z.number().min(0),
|
||||
ctimeMs: z.number().min(0),
|
||||
isSymlink: z.boolean().optional(),
|
||||
});
|
||||
|
||||
export const DirEntry = z.object({
|
||||
name: z.string(),
|
||||
path: RelPath,
|
||||
kind: NodeKind,
|
||||
stat: z
|
||||
.object({
|
||||
size: z.number().min(0),
|
||||
mtimeMs: z.number().min(0),
|
||||
})
|
||||
.optional(),
|
||||
});
|
||||
|
||||
export const ReaddirOptions = z.object({
|
||||
recursive: z.boolean().optional(),
|
||||
includeStats: z.boolean().optional(),
|
||||
includeHidden: z.boolean().optional(),
|
||||
allowedExtensions: z.array(z.string()).optional(),
|
||||
});
|
||||
|
||||
export const ReadFileResult = z.object({
|
||||
path: RelPath,
|
||||
encoding: Encoding,
|
||||
data: z.string(),
|
||||
stat: Stat,
|
||||
etag: z.string(),
|
||||
});
|
||||
|
||||
export const WriteFileOptions = z.object({
|
||||
encoding: Encoding.optional(),
|
||||
atomic: z.boolean().optional(),
|
||||
mkdirp: z.boolean().optional(),
|
||||
expectedEtag: z.string().optional(),
|
||||
});
|
||||
|
||||
export const WriteFileResult = ReadFileResult.pick({
|
||||
path: true,
|
||||
stat: true,
|
||||
etag: true,
|
||||
});
|
||||
|
||||
export const RemoveOptions = z.object({
|
||||
recursive: z.boolean().optional(),
|
||||
trash: z.boolean().optional(),
|
||||
});
|
||||
|
||||
export const WorkspaceChangeEvent = z.discriminatedUnion('type', [
|
||||
z.object({
|
||||
type: z.literal('created'),
|
||||
path: RelPath,
|
||||
kind: NodeKind.optional(),
|
||||
}),
|
||||
z.object({
|
||||
type: z.literal('deleted'),
|
||||
path: RelPath,
|
||||
kind: NodeKind.optional(),
|
||||
}),
|
||||
z.object({
|
||||
type: z.literal('changed'),
|
||||
path: RelPath,
|
||||
kind: NodeKind.optional(),
|
||||
}),
|
||||
z.object({
|
||||
type: z.literal('moved'),
|
||||
from: RelPath,
|
||||
to: RelPath,
|
||||
kind: NodeKind.optional(),
|
||||
}),
|
||||
z.object({
|
||||
type: z.literal('bulkChanged'),
|
||||
paths: z.array(RelPath).optional(),
|
||||
}),
|
||||
]);
|
||||
Loading…
Add table
Add a link
Reference in a new issue