Skip to content

VirtualFileSystem

type VirtualFileSystem =
    {
        DirectoryExists: (string -> bool voption) voption
        FileExists: (string -> bool voption) voption
        GetAccessibleEntries: (string -> FileSystemEntries voption) voption
        ReadFile: (string -> FileRead) voption
        Realpath: (string -> string voption) voption
        WriteFile: (string -> string -> unit) voption
    }
AssemblyXantham.TypeScript.Wire

The virtual filesystem the server delegates to when the process is started with --callbacks=, mirroring dist/api/fs.d.ts. Every member is optional, and one left unset is not registered at all, so the server never asks about it.

This exists because the raw TsGoCallback surface is unforgiving: each callback has its own reply shape, the shapes appear nowhere in the schema, and a wrong one is not an error but a Go panic that kills the process mid-request. The encoding is applied here once, transcribed from dist/api/sync/client.js:35-56.

ValueNone from a member means "not answered" - the empty reply the server reads as "fall back to the real filesystem" - which is why ReadFile has its own three-way type rather than returning an option.

Fields

DirectoryExists: (string -> bool voption) voption
FileExists: (string -> bool voption) voption
GetAccessibleEntries: (string -> FileSystemEntries voption) voption
ReadFile: (string -> FileRead) voption
Realpath: (string -> string voption) voption
WriteFile: (string -> string -> unit) voption

Takes the path and then the content to write. The server expects no answer.

Functions and values

callbacks (fs: VirtualFileSystem) : IDictionary<string,TsGoCallback>

The callback table to hand to TscChannel or TscMailbox. Only the members that are set appear in it, and only those names reach --callbacks=.

Properties

static member Default: VirtualFileSystem

A filesystem that answers nothing, so every path falls back to the real one. Copy-update it with the members you mean to serve.