# Filesystem Git Database JSGit repositories need `loadAs`, `saveAs`, `loadRaw`, `saveRaw`, `readRef`, and `updateRef` methods. Depending on the backing storage, there are various ways to implement these methods. The implementation for in-memory storage is `js-git/mixins/mem-db`, and there are variants for using Github or IndexDB for storage. The `js-git/mixins/fs-db` implementation provides these methods as well, but depends on a file system interface providing `readFile`, `readChunk`, `writeFile`, and `readDir`. These file system methods are implemented by the `git-fs-db` and `git-chrome-db` packages. For the purpose of this document, `=>` implies that the function does not block and accepts a Node.js-style callback. The arrow points to the type of the result. None of these methods need to return a continuable if the nodeback is missing. The type `binary` stands for whatever binary representation is appropriate for the underlying platform. For browsers, binary is a `Uint8Array`. For Node.js, binary is a `Buffer`. ## readFile(path) => binary | undefined Reads the entirety of the file at the given path and produces the binary. If the file does not exist, readFile provides `undefined` instead. ## readChunk(path, start, end) => binary | undefined Reads a byte range of the file at the given path. The byte range is a half open interval, including the byte at the initial index, and excluding the byte at the terminal index, such that the end minus the start is the length of the resulting binary data. The end offset may be negative, in which case it should count back from the end of the size of the file at the path, such that the size plus the negative end is the positive end. If the file does not exist, readChunk provides `undefined` instead. ## writeFile(path, binary) => undefined Writes the given bytes to the file at the given path. The method creates any directories leading up to the path if they do not already exist. ## readDir(path) => array of names | undefined Reads the names of the entries in the directory at the given path. The names are not fully qualified paths, just the name of the entry within the given directory.