mock-file
Some filesystem APIs cannot be used with deno deploy (eg Deno.readFileSync
,
Deno.writeFile
).
This module makes a copy of the file in memory beforehand so that you can use the sync API and write API on deno deploy.
Warning It supports writing to files, but it does not actually cause writing to the file system. If you change the contents of the file, it only affects the memory.
Usage
Live samples are in ./example/main.ts and https://deploy-sqlite.deno.dev/.
With this module, SQLite works on deno deploy.
import {
prepareLocalFile,
prepareVirtualFile,
} from "https://deno.land/x/mock_file@$VERSION/mod.ts";
import { serve } from "https://deno.land/std@0.144.0/http/mod.ts";
import { DB } from "https://deno.land/x/sqlite@v3.4.0/mod.ts";
// Prepare the file in memory before opening it.
await prepareLocalFile("./db.sqlite");
prepareVirtualFile("./db.sqlite-journal");
// read db
const db = new DB("./db.sqlite", { mode: "read" });
// very simple server
serve(() => Response.json(db.query("SELECT * FROM people")));
API
prepareLocalFile(path: string|URL)
Reads the contents of the file into memory. The specified file will be available
to synchronization APIs such as Deno.openSync()
and Deno.readTextFileSync()
after calling this function.
prepareVirtualFile(path: string|URL, content?: Uint8Array, info: Deno.FileInfo)
Similar to prepareLocalFile, but the file does not have to exist anywhere. You can use any Uint8Array as the content of the file.
Support status
-
Deno.FsFile#read(p: Uint8Array): Promise<number | null>
-
Deno.FsFile#readSync(p: Uint8Array): number | null
-
Deno.FsFile#write(p: Uint8Array): Promise<number>
-
Deno.FsFile#writeSync(p: Uint8Array): number
-
Deno.FsFile#seek(offset: number, whence: Deno.SeekMode): Promise<number>
-
Deno.FsFile#seekSync(offset: number, whence: Deno.SeekMode): number
-
Deno.FsFile#stat(): Promise<Deno.FileInfo>
-
Deno.FsFile#statSync(): Deno.FileInfo
-
Deno.FsFile#truncate(len?: number | undefined): Promise<void>
-
Deno.FsFile#truncateSync(len?: number | undefined): void
-
Deno.FsFile#close()
-
Deno.FsFile#readable
-
Deno.FsFile#writable
-
Deno.FsFile#rid
-
Deno.read(rid: number, buffer: Uint8Array): Promise<number | null>
-
Deno.readSync(rid: number, buffer: Uint8Array): number | null
-
Deno.write(rid: number, data: Uint8Array): Promise<number>
-
Deno.writeSync(rid: number, data: Uint8Array): number
-
Deno.seek(rid: number, offset: number, whence: Deno.SeekMode): Promise<number>
-
Deno.seekSync(rid: number, offset: number, whence: Deno.SeekMode): number
-
Deno.fstat(rid: number): Promise<Deno.FileInfo>
-
Deno.fstatSync(rid: number): Deno.FileInfo
-
Deno.ftruncate(rid: number, len?: number | undefined): Promise<void>
-
Deno.ftruncateSync(rid: number, len?: number | undefined): void
-
Deno.close(rid: number): void
-
Deno.open(path: string | URL, options?: Deno.OpenOptions | undefined): Promise<Deno.FsFile>
-
Deno.openSync(path: string | URL, options?: Deno.OpenOptions | undefined): Deno.FsFile
-
Deno.readFile(path: string | URL, options?: Deno.ReadFileOptions | undefined): Promise<Uint8Array>
-
Deno.readFileSync(path: string | URL): Uint8Array
-
Deno.readTextFile(path: string | URL, options?: Deno.ReadFileOptions | undefined): Promise<string>
-
Deno.readTextFileSync(path: string | URL): string
-
Deno.writeFile(path: string | URL, data: Uint8Array, options?: Deno.WriteFileOptions | undefined): Promise<void>
-
Deno.writeFileSync(path: string | URL, data: Uint8Array, options?: Deno.WriteFileOptions | undefined): void
-
Deno.writeTextFile(path: string | URL, data: string, options?: Deno.WriteFileOptions | undefined): Promise<void>
-
Deno.writeTextFileSync(path: string | URL, data: string, options?: Deno.WriteFileOptions | undefined): void
-
Deno.fdatasyncSync(rid: number): void
-
Deno.fsync(rid: number): Promise<void>
-
Deno.fdatasyncSync(rid: number): void
-
Deno.fdatasync(rid: number): Promise<void>
-
Deno.flock(rid: number, exclusive?: boolean | undefined): Promise<void>
-
Deno.flockSync(rid: number, exclusive?: boolean | undefined): void
-
Deno.funlock(rid: number): Promise<void>
-
Deno.funlockSync(rid: number): void
-
Deno.stat(path: string | URL): Promise<Deno.FileInfo>
-
Deno.statSync(path: string | URL): Deno.FileInfo
-
Deno.truncate(name: string, len?: number | undefined): Promise<void>
-
Deno.truncateSync(name: string, len?: number | undefined): void