blob: 9abc04c6868c20f962c31351bc269c9d05d20c37 [file] [log] [blame]
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
//
// API docs from [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web).
// Attributions and copyright licensing by Mozilla Contributors is licensed
// under [CC-BY-SA 2.5](https://creativecommons.org/licenses/by-sa/2.5/.
// Generated from Web IDL definitions.
// ignore_for_file: unintended_html_in_doc_comment
@JS()
library;
import 'dart:js_interop';
import 'fileapi.dart';
import 'streams.dart';
import 'webidl.dart';
typedef FileSystemWriteChunkType = JSAny;
typedef FileSystemHandleKind = String;
typedef WriteCommandType = String;
/// The **`FileSystemHandle`** interface of the [File System API] is an object
/// which represents a file or directory entry. Multiple handles can represent
/// the same entry. For the most part you do not work with `FileSystemHandle`
/// directly but rather its child interfaces [FileSystemFileHandle] and
/// [FileSystemDirectoryHandle].
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemHandle).
extension type FileSystemHandle._(JSObject _) implements JSObject {
/// The **`isSameEntry()`** method of the
/// [FileSystemHandle] interface compares two [FileSystemHandle] to see if the
/// associated entries (either a file or directory) match.
external JSPromise<JSBoolean> isSameEntry(FileSystemHandle other);
/// The **`kind`** read-only property of the
/// [FileSystemHandle] interface returns the type of entry. This is
/// `'file'` if the associated entry is a file or `'directory'`. It is
/// used to distinguish files from directories when iterating over the
/// contents of a
/// directory.
external FileSystemHandleKind get kind;
/// The **`name`** read-only property of the
/// [FileSystemHandle] interface returns the name of the entry represented by
/// handle.
external String get name;
}
extension type FileSystemCreateWritableOptions._(JSObject _)
implements JSObject {
external factory FileSystemCreateWritableOptions({bool keepExistingData});
external bool get keepExistingData;
external set keepExistingData(bool value);
}
/// The **`FileSystemFileHandle`** interface of the [File System API] represents
/// a handle to a file system entry. The interface is accessed through the
/// [window.showOpenFilePicker] method.
///
/// Note that read and write operations depend on file-access permissions that
/// do not persist after a page refresh if no other tabs for that origin remain
/// open. The [FileSystemHandle.queryPermission] method of the
/// [FileSystemHandle] interface can be used to verify permission state before
/// accessing a file.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemFileHandle).
extension type FileSystemFileHandle._(JSObject _)
implements FileSystemHandle, JSObject {
/// The **`getFile()`** method of the
/// [FileSystemFileHandle] interface returns a `Promise` which resolves to a
/// [File] object representing the state on disk of the entry represented by
/// the handle.
///
/// If the file on disk changes or is removed after this method is called, the
/// returned
/// [File] object will likely be no longer readable.
external JSPromise<File> getFile();
/// The **`createWritable()`** method of the [FileSystemFileHandle] interface
/// creates a [FileSystemWritableFileStream] that can be used to write to a
/// file.
/// The method returns a `Promise` which resolves to this created stream.
///
/// Any changes made through the stream won't be reflected in the file
/// represented by the file handle until the stream has been closed.
/// This is typically implemented by writing data to a temporary file, and
/// only replacing the file represented by file handle with the temporary file
/// when the writable file stream is closed.
external JSPromise<FileSystemWritableFileStream> createWritable(
[FileSystemCreateWritableOptions options]);
/// @AvailableInWorkers("dedicated")
///
/// The **`createSyncAccessHandle()`** method of the
/// [FileSystemFileHandle] interface returns a `Promise` which resolves to a
/// [FileSystemSyncAccessHandle] object
/// that can be used to synchronously read from and write to a file. The
/// synchronous nature of this method brings performance advantages,
/// but it is only usable inside dedicated
/// [Web Workers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API)
/// for files within the
/// [origin private file system](https://developer.mozilla.org/en-US/docs/Web/API/File_System_API/Origin_private_file_system).
///
/// Creating a [FileSystemSyncAccessHandle] takes an exclusive lock on the
/// file associated with the file handle. This prevents the creation of
/// further [FileSystemSyncAccessHandle]s or [FileSystemWritableFileStream]s
/// for the file until the existing access handle is closed.
external JSPromise<FileSystemSyncAccessHandle> createSyncAccessHandle();
}
extension type FileSystemGetFileOptions._(JSObject _) implements JSObject {
external factory FileSystemGetFileOptions({bool create});
external bool get create;
external set create(bool value);
}
extension type FileSystemGetDirectoryOptions._(JSObject _) implements JSObject {
external factory FileSystemGetDirectoryOptions({bool create});
external bool get create;
external set create(bool value);
}
extension type FileSystemRemoveOptions._(JSObject _) implements JSObject {
external factory FileSystemRemoveOptions({bool recursive});
external bool get recursive;
external set recursive(bool value);
}
/// The **`FileSystemDirectoryHandle`** interface of the [File System API]
/// provides a handle to a file system directory.
///
/// The interface can be accessed via the [window.showDirectoryPicker],
/// [StorageManager.getDirectory], [DataTransferItem.getAsFileSystemHandle], and
/// [FileSystemDirectoryHandle.getDirectoryHandle] methods.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryHandle).
extension type FileSystemDirectoryHandle._(JSObject _)
implements FileSystemHandle, JSObject {
/// The **`getFileHandle()`** method of the
/// [FileSystemDirectoryHandle] interface returns a
/// [FileSystemFileHandle] for a file with the specified name, within the
/// directory the method is called.
external JSPromise<FileSystemFileHandle> getFileHandle(
String name, [
FileSystemGetFileOptions options,
]);
/// The **`getDirectoryHandle()`** method of the
/// [FileSystemDirectoryHandle] interface returns a
/// [FileSystemDirectoryHandle] for a subdirectory with the specified name
/// within the directory handle on which the method is called.
external JSPromise<FileSystemDirectoryHandle> getDirectoryHandle(
String name, [
FileSystemGetDirectoryOptions options,
]);
/// The **`removeEntry()`** method of the
/// [FileSystemDirectoryHandle] interface attempts to remove an entry if the
/// directory handle contains a file or directory called the name specified.
external JSPromise<JSAny?> removeEntry(
String name, [
FileSystemRemoveOptions options,
]);
/// The **`resolve()`** method of the
/// [FileSystemDirectoryHandle] interface returns an `Array` of
/// directory names from the parent handle to the specified child entry, with
/// the name of
/// the child entry as the last array item.
external JSPromise<JSArray<JSString>?> resolve(
FileSystemHandle possibleDescendant);
}
extension type WriteParams._(JSObject _) implements JSObject {
external factory WriteParams({
required WriteCommandType type,
int? size,
int? position,
JSAny? data,
});
external WriteCommandType get type;
external set type(WriteCommandType value);
external int? get size;
external set size(int? value);
external int? get position;
external set position(int? value);
external JSAny? get data;
external set data(JSAny? value);
}
/// The **`FileSystemWritableFileStream`** interface of the [File System API] is
/// a [WritableStream] object with additional convenience methods, which
/// operates on a single file on disk. The interface is accessed through the
/// [FileSystemFileHandle.createWritable] method.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemWritableFileStream).
extension type FileSystemWritableFileStream._(JSObject _)
implements WritableStream, JSObject {
/// The **`write()`** method of the [FileSystemWritableFileStream] interface
/// writes content into the file the method is called on, at the current file
/// cursor offset.
///
/// No changes are written to the actual file on disk until the stream has
/// been closed.
/// Changes are typically written to a temporary file instead. This method can
/// also be used to seek to a byte point within the stream and truncate to
/// modify the total bytes the file contains.
external JSPromise<JSAny?> write(FileSystemWriteChunkType data);
/// The **`seek()`** method of the [FileSystemWritableFileStream] interface
/// updates the current file cursor offset to the position (in bytes)
/// specified when calling the method.
external JSPromise<JSAny?> seek(int position);
/// The **`truncate()`** method of the [FileSystemWritableFileStream]
/// interface resizes the file associated with the stream to the specified
/// size in bytes.
///
/// If the size specified is larger than the current file size the file is
/// padded with `0x00` bytes.
///
/// The file cursor is also updated when `truncate()` is called.
/// If the offset is smaller than the size, it remains unchanged.
/// If the offset is larger than size, the offset is set to that size.
/// This ensures that subsequent writes do not error.
///
/// No changes are written to the actual file on disk until the stream has
/// been closed.
/// Changes are typically written to a temporary file instead.
external JSPromise<JSAny?> truncate(int size);
}
extension type FileSystemReadWriteOptions._(JSObject _) implements JSObject {
external factory FileSystemReadWriteOptions({int at});
external int get at;
external set at(int value);
}
/// @AvailableInWorkers("dedicated")
///
/// The **`FileSystemSyncAccessHandle`** interface of the [File System API]
/// represents a synchronous handle to a file system entry.
///
/// This class is only accessible inside dedicated
/// [Web Workers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API)
/// (so that its methods do not block execution on the main thread) for files
/// within the
/// [origin private file system](https://developer.mozilla.org/en-US/docs/Web/API/File_System_API/Origin_private_file_system),
/// which is not visible to end-users.
///
/// As a result, its methods are not subject to the same security checks as
/// methods running on files within the user-visible file system, and so are
/// much more performant. This makes them suitable for significant, large-scale
/// file updates such as [SQLite](https://www.sqlite.org/wasm) database
/// modifications.
///
/// The interface is accessed through the
/// [FileSystemFileHandle.createSyncAccessHandle] method.
///
/// > [!NOTE]
/// > In earlier versions of the spec, [FileSystemSyncAccessHandle.close],
/// > [FileSystemSyncAccessHandle.flush], [FileSystemSyncAccessHandle.getSize],
/// > and [FileSystemSyncAccessHandle.truncate] were wrongly specified as
/// > asynchronous methods, and older versions of some browsers implement them
/// > in this way. However, all current browsers that support these methods
/// > implement them as synchronous methods.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemSyncAccessHandle).
extension type FileSystemSyncAccessHandle._(JSObject _) implements JSObject {
/// @AvailableInWorkers("dedicated")
///
/// The **`read()`** method of the
/// [FileSystemSyncAccessHandle] interface reads the content of the file
/// associated with the handle into a specified buffer, optionally at a given
/// offset.
external int read(
AllowSharedBufferSource buffer, [
FileSystemReadWriteOptions options,
]);
/// @AvailableInWorkers("dedicated")
///
/// The **`write()`** method of the
/// [FileSystemSyncAccessHandle] interface writes the content of a specified
/// buffer to the file associated with the handle, optionally at a given
/// offset.
///
/// Files within the
/// [origin private file system](https://developer.mozilla.org/en-US/docs/Web/API/File_System_API/Origin_private_file_system)
/// are not visible to end-users, therefore are not subject to the same
/// security checks as methods running on files within the user-visible file
/// system. As a result, writes performed using
/// `FileSystemSyncAccessHandle.write()` are much more performant. This makes
/// them suitable for significant, large-scale file updates such as
/// [SQLite](https://www.sqlite.org/wasm) database modifications.
external int write(
AllowSharedBufferSource buffer, [
FileSystemReadWriteOptions options,
]);
/// @AvailableInWorkers("dedicated")
///
/// The **`truncate()`** method of the
/// [FileSystemSyncAccessHandle] interface resizes the file associated with
/// the handle to a specified number of bytes.
///
/// > [!NOTE]
/// > In earlier versions of the spec, [FileSystemSyncAccessHandle.close],
/// > [FileSystemSyncAccessHandle.flush],
/// > [FileSystemSyncAccessHandle.getSize], and `truncate()` were wrongly
/// > specified as asynchronous methods, and older versions of some browsers
/// > implement them in this way. However, all current browsers that support
/// > these methods implement them as synchronous methods.
external void truncate(int newSize);
/// @AvailableInWorkers("dedicated")
///
/// The **`getSize()`** method of the
/// [FileSystemSyncAccessHandle] interface returns the size of the file
/// associated with the handle in bytes.
///
/// > [!NOTE]
/// > In earlier versions of the spec, [FileSystemSyncAccessHandle.close],
/// > [FileSystemSyncAccessHandle.flush], `getSize()`, and
/// > [FileSystemSyncAccessHandle.truncate] were wrongly specified as
/// > asynchronous methods, and older versions of some browsers implement them
/// > in this way. However, all current browsers that support these methods
/// > implement them as synchronous methods.
external int getSize();
/// @AvailableInWorkers("dedicated")
///
/// The **`flush()`** method of the
/// [FileSystemSyncAccessHandle] interface persists any changes made to the
/// file associated with the handle via the [FileSystemSyncAccessHandle.write]
/// method to disk.
///
/// Bear in mind that you only need to call this method if you need the
/// changes committed to disk at a specific time, otherwise you can leave the
/// underlying operating system to handle this when it sees fit, which should
/// be OK in most cases.
///
/// > [!NOTE]
/// > In earlier versions of the spec, [FileSystemSyncAccessHandle.close],
/// > `flush()`, [FileSystemSyncAccessHandle.getSize], and
/// > [FileSystemSyncAccessHandle.truncate] were wrongly specified as
/// > asynchronous methods, and older versions of some browsers implement them
/// > in this way. However, all current browsers that support these methods
/// > implement them as synchronous methods.
external void flush();
/// @AvailableInWorkers("dedicated")
///
/// The **`close()`** method of the
/// [FileSystemSyncAccessHandle] interface closes an open synchronous file
/// handle, disabling any further operations on it and releasing the exclusive
/// lock previously put on the file associated with the file handle.
///
/// > [!NOTE]
/// > In earlier versions of the spec, `close()`,
/// > [FileSystemSyncAccessHandle.flush],
/// > [FileSystemSyncAccessHandle.getSize], and
/// > [FileSystemSyncAccessHandle.truncate] were wrongly specified as
/// > asynchronous methods, and older versions of some browsers implement them
/// > in this way. However, all current browsers that support these methods
/// > implement them as synchronous methods.
external void close();
}