summaryrefslogtreecommitdiff
path: root/runtime/js/40_write_file.js
diff options
context:
space:
mode:
authorLeo Kettmeir <crowlkats@toaxl.com>2023-02-07 20:22:46 +0100
committerGitHub <noreply@github.com>2023-02-07 20:22:46 +0100
commitb4aa1530970f7b9cc4e6f2f27e077852c4e178d3 (patch)
tree3d008912affe8550692183bd2697a386db5e3c79 /runtime/js/40_write_file.js
parent65500f36e870b4ada3996b06aa287e30177d21a3 (diff)
refactor: Use ES modules for internal runtime code (#17648)
This PR refactors all internal js files (except core) to be written as ES modules. `__bootstrap`has been mostly replaced with static imports in form in `internal:[path to file from repo root]`. To specify if files are ESM, an `esm` method has been added to `Extension`, similar to the `js` method. A new ModuleLoader called `InternalModuleLoader` has been added to enable the loading of internal specifiers, which is used in all situations except when a snapshot is only loaded, and not a new one is created from it. --------- Co-authored-by: Bartek IwaƄczuk <biwanczuk@gmail.com>
Diffstat (limited to 'runtime/js/40_write_file.js')
-rw-r--r--runtime/js/40_write_file.js183
1 files changed, 88 insertions, 95 deletions
diff --git a/runtime/js/40_write_file.js b/runtime/js/40_write_file.js
index a32ef441b..a9c870ca3 100644
--- a/runtime/js/40_write_file.js
+++ b/runtime/js/40_write_file.js
@@ -1,107 +1,100 @@
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
-"use strict";
-((window) => {
- const core = window.__bootstrap.core;
- const ops = core.ops;
- const { abortSignal } = window.__bootstrap;
- const { pathFromURL } = window.__bootstrap.util;
- const { open } = window.__bootstrap.files;
- const { ReadableStreamPrototype } = window.__bootstrap.streams;
- const { ObjectPrototypeIsPrototypeOf } = window.__bootstrap.primordials;
+const core = globalThis.Deno.core;
+const ops = core.ops;
+const primordials = globalThis.__bootstrap.primordials;
+import * as abortSignal from "internal:ext/web/03_abort_signal.js";
+import { pathFromURL } from "internal:runtime/js/06_util.js";
+import { open } from "internal:runtime/js/40_files.js";
+import { ReadableStreamPrototype } from "internal:ext/web/06_streams.js";
+const { ObjectPrototypeIsPrototypeOf } = primordials;
- function writeFileSync(
- path,
+function writeFileSync(
+ path,
+ data,
+ options = {},
+) {
+ options.signal?.throwIfAborted();
+ ops.op_write_file_sync(
+ pathFromURL(path),
+ options.mode,
+ options.append ?? false,
+ options.create ?? true,
+ options.createNew ?? false,
data,
- options = {},
- ) {
- options.signal?.throwIfAborted();
- ops.op_write_file_sync(
- pathFromURL(path),
- options.mode,
- options.append ?? false,
- options.create ?? true,
- options.createNew ?? false,
- data,
- );
- }
+ );
+}
- async function writeFile(
- path,
- data,
- options = {},
- ) {
- let cancelRid;
- let abortHandler;
- if (options.signal) {
- options.signal.throwIfAborted();
- cancelRid = ops.op_cancel_handle();
- abortHandler = () => core.tryClose(cancelRid);
- options.signal[abortSignal.add](abortHandler);
+async function writeFile(
+ path,
+ data,
+ options = {},
+) {
+ let cancelRid;
+ let abortHandler;
+ if (options.signal) {
+ options.signal.throwIfAborted();
+ cancelRid = ops.op_cancel_handle();
+ abortHandler = () => core.tryClose(cancelRid);
+ options.signal[abortSignal.add](abortHandler);
+ }
+ try {
+ if (ObjectPrototypeIsPrototypeOf(ReadableStreamPrototype, data)) {
+ const file = await open(path, {
+ mode: options.mode,
+ append: options.append ?? false,
+ create: options.create ?? true,
+ createNew: options.createNew ?? false,
+ write: true,
+ });
+ await data.pipeTo(file.writable, {
+ signal: options.signal,
+ });
+ } else {
+ await core.opAsync(
+ "op_write_file_async",
+ pathFromURL(path),
+ options.mode,
+ options.append ?? false,
+ options.create ?? true,
+ options.createNew ?? false,
+ data,
+ cancelRid,
+ );
}
- try {
- if (ObjectPrototypeIsPrototypeOf(ReadableStreamPrototype, data)) {
- const file = await open(path, {
- mode: options.mode,
- append: options.append ?? false,
- create: options.create ?? true,
- createNew: options.createNew ?? false,
- write: true,
- });
- await data.pipeTo(file.writable, {
- signal: options.signal,
- });
- } else {
- await core.opAsync(
- "op_write_file_async",
- pathFromURL(path),
- options.mode,
- options.append ?? false,
- options.create ?? true,
- options.createNew ?? false,
- data,
- cancelRid,
- );
- }
- } finally {
- if (options.signal) {
- options.signal[abortSignal.remove](abortHandler);
+ } finally {
+ if (options.signal) {
+ options.signal[abortSignal.remove](abortHandler);
- // always throw the abort error when aborted
- options.signal.throwIfAborted();
- }
+ // always throw the abort error when aborted
+ options.signal.throwIfAborted();
}
}
+}
- function writeTextFileSync(
- path,
- data,
- options = {},
- ) {
- const encoder = new TextEncoder();
- return writeFileSync(path, encoder.encode(data), options);
- }
+function writeTextFileSync(
+ path,
+ data,
+ options = {},
+) {
+ const encoder = new TextEncoder();
+ return writeFileSync(path, encoder.encode(data), options);
+}
- function writeTextFile(
- path,
- data,
- options = {},
- ) {
- if (ObjectPrototypeIsPrototypeOf(ReadableStreamPrototype, data)) {
- return writeFile(
- path,
- data.pipeThrough(new TextEncoderStream()),
- options,
- );
- } else {
- const encoder = new TextEncoder();
- return writeFile(path, encoder.encode(data), options);
- }
+function writeTextFile(
+ path,
+ data,
+ options = {},
+) {
+ if (ObjectPrototypeIsPrototypeOf(ReadableStreamPrototype, data)) {
+ return writeFile(
+ path,
+ data.pipeThrough(new TextEncoderStream()),
+ options,
+ );
+ } else {
+ const encoder = new TextEncoder();
+ return writeFile(path, encoder.encode(data), options);
}
+}
- window.__bootstrap.writeFile = {
- writeTextFile,
- writeTextFileSync,
- writeFile,
- writeFileSync,
- };
-})(this);
+export { writeFile, writeFileSync, writeTextFile, writeTextFileSync };