summaryrefslogtreecommitdiff
path: root/cli/js2/40_write_file.js
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2020-07-19 19:49:44 +0200
committerGitHub <noreply@github.com>2020-07-19 19:49:44 +0200
commitfa61956f03491101b6ef64423ea2f1f73af26a73 (patch)
treec3800702071ca78aa4dd71bdd0a59a9bbe460bdd /cli/js2/40_write_file.js
parent53adde866dd399aa2509d14508642fce37afb8f5 (diff)
Port internal TS code to JS (#6793)
Co-authored-by: Ryan Dahl <ry@tinyclouds.org>
Diffstat (limited to 'cli/js2/40_write_file.js')
-rw-r--r--cli/js2/40_write_file.js92
1 files changed, 92 insertions, 0 deletions
diff --git a/cli/js2/40_write_file.js b/cli/js2/40_write_file.js
new file mode 100644
index 000000000..2f54aa1cf
--- /dev/null
+++ b/cli/js2/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);