diff options
| author | Ryan Dahl <ry@tinyclouds.org> | 2018-05-28 14:39:02 -0400 |
|---|---|---|
| committer | Ryan Dahl <ry@tinyclouds.org> | 2018-05-28 14:39:02 -0400 |
| commit | 46117017c4b2b7024da27150e0eda1408a819750 (patch) | |
| tree | 5c40dea7d3651ecfb77365d74894c578f0f9781d | |
| parent | bce0ecbdb8af0d6f5c089c7f2139b58ff2f60624 (diff) | |
Add writeFileSync
| -rw-r--r-- | deno.d.ts | 5 | ||||
| -rw-r--r-- | msg.proto | 7 | ||||
| -rw-r--r-- | os.go | 14 | ||||
| -rw-r--r-- | os.ts | 13 | ||||
| -rw-r--r-- | runtime.ts | 3 | ||||
| -rw-r--r-- | tests.ts | 16 |
6 files changed, 55 insertions, 3 deletions
@@ -4,4 +4,9 @@ declare module "deno" { function pub(channel: string, payload: Uint8Array): null | ArrayBuffer; function readFileSync(filename: string): Uint8Array; + function writeFileSync( + filename: string, + data: Uint8Array, + perm: number + ): void; } @@ -21,6 +21,7 @@ message Msg { FETCH_RES = 10; READ_FILE_SYNC = 11; READ_FILE_SYNC_RES = 12; + WRITE_FILE_SYNC = 13; } Command command = 1; @@ -89,4 +90,10 @@ message Msg { // READ_FILE_SYNC_RES bytes read_file_sync_data = 120; + + // WRITE_FILE_SYNC + string write_file_sync_filename = 130; + bytes write_file_sync_data = 131; + uint32 write_file_sync_perm = 132; + // write_file_sync_perm specified by https://godoc.org/os#FileMode } @@ -34,6 +34,9 @@ func InitOS() { os.Exit(int(msg.ExitCode)) case Msg_READ_FILE_SYNC: return ReadFileSync(msg.ReadFileSyncFilename) + case Msg_WRITE_FILE_SYNC: + return WriteFileSync(msg.WriteFileSyncFilename, msg.WriteFileSyncData, + msg.WriteFileSyncPerm) default: panic("[os] Unexpected message " + string(buf)) } @@ -176,3 +179,14 @@ func ReadFileSync(filename string) []byte { check(err) return out } + +func WriteFileSync(filename string, data []byte, perm uint32) []byte { + err := afero.WriteFile(fs, filename, data, os.FileMode(perm)) + res := &Msg{} + if err != nil { + res.Error = err.Error() + } + out, err := proto.Marshal(res) + check(err) + return out +} @@ -48,3 +48,16 @@ export function readFileSync(filename: string): Uint8Array { }); return res.readFileSyncData; } + +export function writeFileSync( + filename: string, + data: Uint8Array, + perm: number +): void { + sendMsg("os", { + command: pb.Msg.Command.WRITE_FILE_SYNC, + writeFileSyncFilename: filename, + writeFileSyncData: data, + writeFileSyncPerm: perm + }); +} diff --git a/runtime.ts b/runtime.ts index 7d91484ab..e46c73c61 100644 --- a/runtime.ts +++ b/runtime.ts @@ -20,7 +20,8 @@ const EOL = "\n"; const deno = { pub, sub, - readFileSync: os.readFileSync + readFileSync: os.readFileSync, + writeFileSync: os.writeFileSync }; // tslint:disable-next-line:no-any @@ -2,7 +2,7 @@ // But it can also be run manually: // ./deno tests.ts import { test, assert, assertEqual } from "./deno_testing/testing.ts"; -import { readFileSync } from "deno"; +import { readFileSync, writeFileSync } from "deno"; test(async function tests_test() { assert(true); @@ -21,8 +21,20 @@ test(async function tests_readFileSync() { assertEqual(pkg.name, "deno"); }); +test(async function tests_writeFileSync() { + const enc = new TextEncoder(); + const data = enc.encode("Hello"); + // TODO need ability to get tmp dir. + const fn = "/tmp/test.txt"; + writeFileSync("/tmp/test.txt", data, 0o666); + const dataRead = readFileSync("/tmp/test.txt"); + const dec = new TextDecoder("utf-8"); + const actual = dec.decode(dataRead); + assertEqual("Hello", actual); +}); + test(async function tests_fetch() { - const response = await fetch('http://localhost:4545/package.json'); + const response = await fetch("http://localhost:4545/package.json"); const json = await response.json(); assertEqual(json.name, "deno"); }); |
