feat: add comprehensive FileSystem observer API types with full MDN spec compliance#1171
Draft
feat: add comprehensive FileSystem observer API types with full MDN spec compliance#1171
Conversation
Co-authored-by: streamich <9773803+streamich@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Add File System (FS) API observer API types
feat: add FileSystem observer API types
Aug 22, 2025
streamich
requested changes
Aug 22, 2025
src/fsa/types.ts
Outdated
| /** | ||
| * @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemObserver | ||
| */ | ||
| export interface FileSystemObserver { |
Owner
There was a problem hiding this comment.
Prefix it with I
Suggested change
| export interface FileSystemObserver { | |
| export interface IFileSystemObserver { |
The observer also needs its constructor to be typed:
js
Copy
const observer = new FileSystemObserver(callback);
The [callback function](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemObserver/FileSystemObserver#callback) body can be specified to return and process file change observations in any way you want:
js
Copy
const callback = (records, observer) => {
for (const record of records) {
console.log("Change detected:", record);
const reportContent = `Change observed to ${record.changedHandle.kind} ${record.changedHandle.name}. Type: ${record.type}.`;
sendReport(reportContent); // Some kind of user-defined reporting function
}
observer.disconnect();
};
Contributor
Author
There was a problem hiding this comment.
Updated interface name to IFileSystemObserver and added constructor signature with callback function as specified in the MDN documentation. Changes implemented in commit 38e2f13.
| /** | ||
| * @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemChangeRecord | ||
| */ | ||
| export interface FileSystemChangeRecord { |
Owner
There was a problem hiding this comment.
This interface is lacking types, see docs:
[Instance properties](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemChangeRecord#instance_properties)
[changedHandle](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemChangeRecord#changedhandle)
A reference to the file system handle that the change was observed on.
For the user-observable file system, this can be a [FileSystemFileHandle](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemFileHandle) or a [FileSystemDirectoryHandle](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryHandle).
For the [Origin Private File System](https://developer.mozilla.org/en-US/docs/Web/API/File_System_API/Origin_private_file_system) (OPFS), it can be a [FileSystemFileHandle](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemFileHandle), a [FileSystemDirectoryHandle](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryHandle), or a [FileSystemSyncAccessHandle](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemSyncAccessHandle).
This property will be null for records with a "disappeared", "errored", or "unknown" type.
[relativePathComponents](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemChangeRecord#relativepathcomponents)
An array containing the path components that make up the relative file path from the root to the changedHandle, including the changedHandle filename.
[relativePathMovedFrom](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemChangeRecord#relativepathmovedfrom)
An array containing the path components that make up the relative file path from the root to the changedHandle's former location, in the case of observations with a "moved" type. If the type is not "moved", this property will be null.
[root](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemChangeRecord#root)
A reference to the root file system handle, that is, the one passed to the observe() call that started the observation. Again, this can be a [FileSystemFileHandle](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemFileHandle), [FileSystemDirectoryHandle](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryHandle), or [FileSystemSyncAccessHandle](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemSyncAccessHandle).
[type](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemChangeRecord#type)
A string representing the type of change that was observed. Possible values are:
[appeared](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemChangeRecord#appeared)
The file or directory was created or moved into the root file structure.
[disappeared](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemChangeRecord#disappeared)
The file or directory was deleted or moved out of the root file structure. To find out which file or directory disappeared, you can query the relativePathComponents property.
[errored](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemChangeRecord#errored)
An error state occurred in the observed directory. This can result when:
The observation is no longer valid. This can occur when the observed handle (that is, the root of the observation) is deleted or moved. In this case, a "disappeared" observation will be recorded, followed by an "errored" observation. In such cases, you may wish to stop observing the file system using [FileSystemObserver.disconnect()](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemObserver/disconnect).
The maximum limit of per-origin observations is reached. This limit is dependent on the operating system and not known beforehand. If this happens, the site may decide to retry, though there's no guarantee that the operating system will have freed up enough resources.
Permission to access the directory or file handle is removed.
[modified](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemChangeRecord#modified)
The file or directory was modified.
[moved](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemChangeRecord#moved)
The file or directory was moved within the root file structure.
Note: On Windows, "moved" observations aren't supported between directories. They are reported as a "disappeared" observation in the source directory and an "appeared" observation in the destination directory.
[unknown](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemChangeRecord#unknown)
Indicates that some observations were missed. If you wish to find out information on what changed in the missed observations, you could fall back to polling the observed directory.
Contributor
Author
There was a problem hiding this comment.
Added all missing properties from the MDN spec: relativePathMovedFrom, root, nullable changedHandle, and complete type values including "errored", "moved", and "unknown". Also added support for IFileSystemSyncAccessHandle for OPFS compatibility. Changes implemented in commit 38e2f13.
Owner
|
@copilot pls |
Co-authored-by: streamich <9773803+streamich@users.noreply.github.com>
Copilot
AI
changed the title
feat: add FileSystem observer API types
feat: add comprehensive FileSystem observer API types with full MDN spec compliance
Aug 22, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Added complete TypeScript type definitions for the File System Access API observer interfaces to
src/fsa/types.ts, implementing the full MDN specification.New Types Added
FileSystemChangeRecordRepresents a file system change event with comprehensive properties:
changedHandle: IFileSystemHandle | IFileSystemSyncAccessHandle | null- The changed file system handle (null for "disappeared", "errored", or "unknown" types)relativePathComponents: string[]- Path components from the observed directory to the changed handlerelativePathMovedFrom: string[] | null- Former location path for "moved" type eventsroot: IFileSystemHandle | IFileSystemSyncAccessHandle- Reference to the root handle passed to observe()type: 'appeared' | 'disappeared' | 'modified' | 'moved' | 'errored' | 'unknown'- Complete set of change typesIFileSystemObserverObserver interface with constructor signature and methods:
(records, observer) => voidobserve(handle, options?)- Start observing changes to a directory handleunobserve(handle)- Stop observing changes to a specific directory handledisconnect()- Disconnect and stop all observationsFileSystemObserverObserveOptionsOptions interface for the
observemethod:recursive?: boolean- Whether to observe changes recursively in subdirectoriesImplementation Details
IFileSystemSyncAccessHandlenew FileSystemObserver(callback)These types enable future implementation of file system watching functionality for the
watchFile,unwatchFile, andwatchmethods inFsaNodeFs.Fixes #1170.
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.