summaryrefslogtreecommitdiff
path: root/runtime/rt/40_write_file.js
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2020-12-13 19:45:53 +0100
committerGitHub <noreply@github.com>2020-12-13 19:45:53 +0100
commit2e74f164b6dcf0ecbf8dd38fba9fae550d784bd0 (patch)
tree61abe8e09d5331ace5d9de529f0e2737a8e05dbb /runtime/rt/40_write_file.js
parent84ef9bd21fb48fb6b5fbc8dafc3de9f361bade3b (diff)
refactor: deno_runtime crate (#8640)
This commit moves Deno JS runtime, ops, permissions and inspector implementation to new "deno_runtime" crate located in "runtime/" directory. Details in "runtime/README.md". Co-authored-by: Ryan Dahl <ry@tinyclouds.org>
Diffstat (limited to 'runtime/rt/40_write_file.js')
-rw-r--r--runtime/rt/40_write_file.js92
1 files changed, 92 insertions, 0 deletions
diff --git a/runtime/rt/40_write_file.js b/runtime/rt/40_write_file.js
new file mode 100644
index 000000000..7a9cb1f40
--- /dev/null
+++ b/runtime/rt/40_write_file.js
@@ -0,0 +1,92 @@
+// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
+((window) => {
+ const { stat, statSync, chmod, chmodSync } = window.__bootstrap.fs;
+ const { open, openSync } = window.__bootstrap.files;
+ const { writeAll, writeAllSync } = window.__bootstrap.buffer;
+ const { build } = window.__bootstrap.build;
+
+ function writeFileSync(
+ path,
+ data,
+ options = {},
+ ) {
+ if (options.create !== undefined) {
+ const create = !!options.create;
+ if (!create) {
+ // verify that file exists
+ statSync(path);
+ }
+ }
+
+ const openOptions = options.append
+ ? { write: true, create: true, append: true }
+ : { write: true, create: true, truncate: true };
+ const file = openSync(path, openOptions);
+
+ if (
+ options.mode !== undefined &&
+ options.mode !== null &&
+ build.os !== "windows"
+ ) {
+ chmodSync(path, options.mode);
+ }
+
+ writeAllSync(file, data);
+ file.close();
+ }
+
+ async function writeFile(
+ path,
+ data,
+ options = {},
+ ) {
+ if (options.create !== undefined) {
+ const create = !!options.create;
+ if (!create) {
+ // verify that file exists
+ await stat(path);
+ }
+ }
+
+ const openOptions = options.append
+ ? { write: true, create: true, append: true }
+ : { write: true, create: true, truncate: true };
+ const file = await open(path, openOptions);
+
+ if (
+ options.mode !== undefined &&
+ options.mode !== null &&
+ build.os !== "windows"
+ ) {
+ await chmod(path, options.mode);
+ }
+
+ await writeAll(file, data);
+ file.close();
+ }
+
+ function writeTextFileSync(
+ path,
+ data,
+ options = {},
+ ) {
+ const encoder = new TextEncoder();
+ return writeFileSync(path, encoder.encode(data), options);
+ }
+
+ function writeTextFile(
+ path,
+ data,
+ options = {},
+ ) {
+ const encoder = new TextEncoder();
+ return writeFile(path, encoder.encode(data), options);
+ }
+
+ window.__bootstrap.writeFile = {
+ writeTextFile,
+ writeTextFileSync,
+ writeFile,
+ writeFileSync,
+ };
+})(this);