deno/js/write_file.ts
2018-09-11 12:00:57 -04:00

55 lines
1.6 KiB
TypeScript

// Copyright 2018 the Deno authors. All rights reserved. MIT license.
import * as fbs from "gen/msg_generated";
import { flatbuffers } from "flatbuffers";
import * as dispatch from "./dispatch";
/**
* Write a new file, with given filename and data synchronously.
*
* import { writeFileSync } from "deno";
*
* const encoder = new TextEncoder("utf-8");
* const data = encoder.encode("Hello world\n");
* writeFileSync("hello.txt", data);
*/
export function writeFileSync(
filename: string,
data: Uint8Array,
perm = 0o666
): void {
dispatch.sendSync(...req(filename, data, perm));
}
/**
* Write a new file, with given filename and data.
*
* import { writeFile } from "deno";
*
* const encoder = new TextEncoder("utf-8");
* const data = encoder.encode("Hello world\n");
* await writeFile("hello.txt", data);
*/
export async function writeFile(
filename: string,
data: Uint8Array,
perm = 0o666
): Promise<void> {
await dispatch.sendAsync(...req(filename, data, perm));
}
function req(
filename: string,
data: Uint8Array,
perm: number
): [flatbuffers.Builder, fbs.Any, flatbuffers.Offset] {
const builder = new flatbuffers.Builder();
const filename_ = builder.createString(filename);
const dataOffset = fbs.WriteFile.createDataVector(builder, data);
fbs.WriteFile.startWriteFile(builder);
fbs.WriteFile.addFilename(builder, filename_);
fbs.WriteFile.addData(builder, dataOffset);
fbs.WriteFile.addPerm(builder, perm);
const msg = fbs.WriteFile.endWriteFile(builder);
return [builder, fbs.Any.WriteFile, msg];
}