diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2019-10-04 20:28:51 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-04 20:28:51 -0400 |
commit | b81e5db17aa8b3088d6034ddf86b79c69410f012 (patch) | |
tree | 579e4c23d60d1b0d038156bc28a04f74ea87b2f0 /cli/js/write_file.ts | |
parent | 9049213867d30f7df090a83b6baf3e0717a4d2d2 (diff) |
Merge deno_cli_snapshots into deno_cli (#3064)
Diffstat (limited to 'cli/js/write_file.ts')
-rw-r--r-- | cli/js/write_file.ts | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/cli/js/write_file.ts b/cli/js/write_file.ts new file mode 100644 index 000000000..d6307e002 --- /dev/null +++ b/cli/js/write_file.ts @@ -0,0 +1,76 @@ +// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +import { stat, statSync } from "./stat.ts"; +import { open, openSync } from "./files.ts"; +import { chmod, chmodSync } from "./chmod.ts"; +import { writeAll, writeAllSync } from "./buffer.ts"; + +/** Options for writing to a file. + * `perm` would change the file's permission if set. + * `create` decides if the file should be created if not exists (default: true) + * `append` decides if the file should be appended (default: false) + */ +export interface WriteFileOptions { + perm?: number; + create?: boolean; + append?: boolean; +} + +/** Write a new file, with given filename and data synchronously. + * + * const encoder = new TextEncoder(); + * const data = encoder.encode("Hello world\n"); + * Deno.writeFileSync("hello.txt", data); + */ +export function writeFileSync( + filename: string, + data: Uint8Array, + options: WriteFileOptions = {} +): void { + if (options.create !== undefined) { + const create = !!options.create; + if (!create) { + // verify that file exists + statSync(filename); + } + } + + const openMode = !!options.append ? "a" : "w"; + const file = openSync(filename, openMode); + + if (options.perm !== undefined && options.perm !== null) { + chmodSync(filename, options.perm); + } + + writeAllSync(file, data); + file.close(); +} + +/** Write a new file, with given filename and data. + * + * const encoder = new TextEncoder(); + * const data = encoder.encode("Hello world\n"); + * await Deno.writeFile("hello.txt", data); + */ +export async function writeFile( + filename: string, + data: Uint8Array, + options: WriteFileOptions = {} +): Promise<void> { + if (options.create !== undefined) { + const create = !!options.create; + if (!create) { + // verify that file exists + await stat(filename); + } + } + + const openMode = !!options.append ? "a" : "w"; + const file = await open(filename, openMode); + + if (options.perm !== undefined && options.perm !== null) { + await chmod(filename, options.perm); + } + + await writeAll(file, data); + file.close(); +} |