@cordisjs/fs 1.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,5 @@
1
+ # @cordisjs/fs
2
+
3
+ [![npm](https://img.shields.io/npm/v/@cordisjs/fs?style=flat-square)](https://www.npmjs.com/package/@cordisjs/fs)
4
+
5
+ Node.js fs module ponyfill for browser.
@@ -0,0 +1,56 @@
1
+ export declare const UV_FS_SYMLINK_DIR = 1;
2
+ export declare const UV_FS_SYMLINK_JUNCTION = 2;
3
+ export declare const O_RDONLY = 0;
4
+ export declare const O_WRONLY = 1;
5
+ export declare const O_RDWR = 2;
6
+ export declare const UV_DIRENT_UNKNOWN = 0;
7
+ export declare const UV_DIRENT_FILE = 1;
8
+ export declare const UV_DIRENT_DIR = 2;
9
+ export declare const UV_DIRENT_LINK = 3;
10
+ export declare const UV_DIRENT_FIFO = 4;
11
+ export declare const UV_DIRENT_SOCKET = 5;
12
+ export declare const UV_DIRENT_CHAR = 6;
13
+ export declare const UV_DIRENT_BLOCK = 7;
14
+ export declare const S_IFMT = 61440;
15
+ export declare const S_IFREG = 32768;
16
+ export declare const S_IFDIR = 16384;
17
+ export declare const S_IFCHR = 8192;
18
+ export declare const S_IFBLK = 24576;
19
+ export declare const S_IFIFO = 4096;
20
+ export declare const S_IFLNK = 40960;
21
+ export declare const S_IFSOCK = 49152;
22
+ export declare const O_CREAT = 512;
23
+ export declare const O_EXCL = 2048;
24
+ export declare const UV_FS_O_FILEMAP = 0;
25
+ export declare const O_NOCTTY = 131072;
26
+ export declare const O_TRUNC = 1024;
27
+ export declare const O_APPEND = 8;
28
+ export declare const O_DIRECTORY = 1048576;
29
+ export declare const O_NOFOLLOW = 256;
30
+ export declare const O_SYNC = 128;
31
+ export declare const O_DSYNC = 4194304;
32
+ export declare const O_SYMLINK = 2097152;
33
+ export declare const O_NONBLOCK = 4;
34
+ export declare const S_IRWXU = 448;
35
+ export declare const S_IRUSR = 256;
36
+ export declare const S_IWUSR = 128;
37
+ export declare const S_IXUSR = 64;
38
+ export declare const S_IRWXG = 56;
39
+ export declare const S_IRGRP = 32;
40
+ export declare const S_IWGRP = 16;
41
+ export declare const S_IXGRP = 8;
42
+ export declare const S_IRWXO = 7;
43
+ export declare const S_IROTH = 4;
44
+ export declare const S_IWOTH = 2;
45
+ export declare const S_IXOTH = 1;
46
+ export declare const F_OK = 0;
47
+ export declare const R_OK = 4;
48
+ export declare const W_OK = 2;
49
+ export declare const X_OK = 1;
50
+ export declare const UV_FS_COPYFILE_EXCL = 1;
51
+ export declare const COPYFILE_EXCL = 1;
52
+ export declare const UV_FS_COPYFILE_FICLONE = 2;
53
+ export declare const COPYFILE_FICLONE = 2;
54
+ export declare const UV_FS_COPYFILE_FICLONE_FORCE = 4;
55
+ export declare const COPYFILE_FICLONE_FORCE = 4;
56
+ export declare function parseFlags(flags: string | number): number;
@@ -0,0 +1,219 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+
21
+ // src/constants.ts
22
+ var constants_exports = {};
23
+ __export(constants_exports, {
24
+ COPYFILE_EXCL: () => COPYFILE_EXCL,
25
+ COPYFILE_FICLONE: () => COPYFILE_FICLONE,
26
+ COPYFILE_FICLONE_FORCE: () => COPYFILE_FICLONE_FORCE,
27
+ F_OK: () => F_OK,
28
+ O_APPEND: () => O_APPEND,
29
+ O_CREAT: () => O_CREAT,
30
+ O_DIRECTORY: () => O_DIRECTORY,
31
+ O_DSYNC: () => O_DSYNC,
32
+ O_EXCL: () => O_EXCL,
33
+ O_NOCTTY: () => O_NOCTTY,
34
+ O_NOFOLLOW: () => O_NOFOLLOW,
35
+ O_NONBLOCK: () => O_NONBLOCK,
36
+ O_RDONLY: () => O_RDONLY,
37
+ O_RDWR: () => O_RDWR,
38
+ O_SYMLINK: () => O_SYMLINK,
39
+ O_SYNC: () => O_SYNC,
40
+ O_TRUNC: () => O_TRUNC,
41
+ O_WRONLY: () => O_WRONLY,
42
+ R_OK: () => R_OK,
43
+ S_IFBLK: () => S_IFBLK,
44
+ S_IFCHR: () => S_IFCHR,
45
+ S_IFDIR: () => S_IFDIR,
46
+ S_IFIFO: () => S_IFIFO,
47
+ S_IFLNK: () => S_IFLNK,
48
+ S_IFMT: () => S_IFMT,
49
+ S_IFREG: () => S_IFREG,
50
+ S_IFSOCK: () => S_IFSOCK,
51
+ S_IRGRP: () => S_IRGRP,
52
+ S_IROTH: () => S_IROTH,
53
+ S_IRUSR: () => S_IRUSR,
54
+ S_IRWXG: () => S_IRWXG,
55
+ S_IRWXO: () => S_IRWXO,
56
+ S_IRWXU: () => S_IRWXU,
57
+ S_IWGRP: () => S_IWGRP,
58
+ S_IWOTH: () => S_IWOTH,
59
+ S_IWUSR: () => S_IWUSR,
60
+ S_IXGRP: () => S_IXGRP,
61
+ S_IXOTH: () => S_IXOTH,
62
+ S_IXUSR: () => S_IXUSR,
63
+ UV_DIRENT_BLOCK: () => UV_DIRENT_BLOCK,
64
+ UV_DIRENT_CHAR: () => UV_DIRENT_CHAR,
65
+ UV_DIRENT_DIR: () => UV_DIRENT_DIR,
66
+ UV_DIRENT_FIFO: () => UV_DIRENT_FIFO,
67
+ UV_DIRENT_FILE: () => UV_DIRENT_FILE,
68
+ UV_DIRENT_LINK: () => UV_DIRENT_LINK,
69
+ UV_DIRENT_SOCKET: () => UV_DIRENT_SOCKET,
70
+ UV_DIRENT_UNKNOWN: () => UV_DIRENT_UNKNOWN,
71
+ UV_FS_COPYFILE_EXCL: () => UV_FS_COPYFILE_EXCL,
72
+ UV_FS_COPYFILE_FICLONE: () => UV_FS_COPYFILE_FICLONE,
73
+ UV_FS_COPYFILE_FICLONE_FORCE: () => UV_FS_COPYFILE_FICLONE_FORCE,
74
+ UV_FS_O_FILEMAP: () => UV_FS_O_FILEMAP,
75
+ UV_FS_SYMLINK_DIR: () => UV_FS_SYMLINK_DIR,
76
+ UV_FS_SYMLINK_JUNCTION: () => UV_FS_SYMLINK_JUNCTION,
77
+ W_OK: () => W_OK,
78
+ X_OK: () => X_OK,
79
+ parseFlags: () => parseFlags
80
+ });
81
+ module.exports = __toCommonJS(constants_exports);
82
+ var UV_FS_SYMLINK_DIR = 1;
83
+ var UV_FS_SYMLINK_JUNCTION = 2;
84
+ var O_RDONLY = 0;
85
+ var O_WRONLY = 1;
86
+ var O_RDWR = 2;
87
+ var UV_DIRENT_UNKNOWN = 0;
88
+ var UV_DIRENT_FILE = 1;
89
+ var UV_DIRENT_DIR = 2;
90
+ var UV_DIRENT_LINK = 3;
91
+ var UV_DIRENT_FIFO = 4;
92
+ var UV_DIRENT_SOCKET = 5;
93
+ var UV_DIRENT_CHAR = 6;
94
+ var UV_DIRENT_BLOCK = 7;
95
+ var S_IFMT = 61440;
96
+ var S_IFREG = 32768;
97
+ var S_IFDIR = 16384;
98
+ var S_IFCHR = 8192;
99
+ var S_IFBLK = 24576;
100
+ var S_IFIFO = 4096;
101
+ var S_IFLNK = 40960;
102
+ var S_IFSOCK = 49152;
103
+ var O_CREAT = 512;
104
+ var O_EXCL = 2048;
105
+ var UV_FS_O_FILEMAP = 0;
106
+ var O_NOCTTY = 131072;
107
+ var O_TRUNC = 1024;
108
+ var O_APPEND = 8;
109
+ var O_DIRECTORY = 1048576;
110
+ var O_NOFOLLOW = 256;
111
+ var O_SYNC = 128;
112
+ var O_DSYNC = 4194304;
113
+ var O_SYMLINK = 2097152;
114
+ var O_NONBLOCK = 4;
115
+ var S_IRWXU = 448;
116
+ var S_IRUSR = 256;
117
+ var S_IWUSR = 128;
118
+ var S_IXUSR = 64;
119
+ var S_IRWXG = 56;
120
+ var S_IRGRP = 32;
121
+ var S_IWGRP = 16;
122
+ var S_IXGRP = 8;
123
+ var S_IRWXO = 7;
124
+ var S_IROTH = 4;
125
+ var S_IWOTH = 2;
126
+ var S_IXOTH = 1;
127
+ var F_OK = 0;
128
+ var R_OK = 4;
129
+ var W_OK = 2;
130
+ var X_OK = 1;
131
+ var UV_FS_COPYFILE_EXCL = 1;
132
+ var COPYFILE_EXCL = 1;
133
+ var UV_FS_COPYFILE_FICLONE = 2;
134
+ var COPYFILE_FICLONE = 2;
135
+ var UV_FS_COPYFILE_FICLONE_FORCE = 4;
136
+ var COPYFILE_FICLONE_FORCE = 4;
137
+ function parseFlags(flags) {
138
+ if (typeof flags === "number") return flags;
139
+ let result = 0;
140
+ for (const flag of flags) {
141
+ switch (flag) {
142
+ case "r":
143
+ break;
144
+ case "w":
145
+ break;
146
+ case "a":
147
+ result |= O_APPEND;
148
+ break;
149
+ case "x":
150
+ result |= O_EXCL;
151
+ break;
152
+ case "+":
153
+ break;
154
+ default:
155
+ throw new Error(`invalid flags: ${flags}`);
156
+ }
157
+ }
158
+ return result;
159
+ }
160
+ __name(parseFlags, "parseFlags");
161
+ // Annotate the CommonJS export names for ESM import in node:
162
+ 0 && (module.exports = {
163
+ COPYFILE_EXCL,
164
+ COPYFILE_FICLONE,
165
+ COPYFILE_FICLONE_FORCE,
166
+ F_OK,
167
+ O_APPEND,
168
+ O_CREAT,
169
+ O_DIRECTORY,
170
+ O_DSYNC,
171
+ O_EXCL,
172
+ O_NOCTTY,
173
+ O_NOFOLLOW,
174
+ O_NONBLOCK,
175
+ O_RDONLY,
176
+ O_RDWR,
177
+ O_SYMLINK,
178
+ O_SYNC,
179
+ O_TRUNC,
180
+ O_WRONLY,
181
+ R_OK,
182
+ S_IFBLK,
183
+ S_IFCHR,
184
+ S_IFDIR,
185
+ S_IFIFO,
186
+ S_IFLNK,
187
+ S_IFMT,
188
+ S_IFREG,
189
+ S_IFSOCK,
190
+ S_IRGRP,
191
+ S_IROTH,
192
+ S_IRUSR,
193
+ S_IRWXG,
194
+ S_IRWXO,
195
+ S_IRWXU,
196
+ S_IWGRP,
197
+ S_IWOTH,
198
+ S_IWUSR,
199
+ S_IXGRP,
200
+ S_IXOTH,
201
+ S_IXUSR,
202
+ UV_DIRENT_BLOCK,
203
+ UV_DIRENT_CHAR,
204
+ UV_DIRENT_DIR,
205
+ UV_DIRENT_FIFO,
206
+ UV_DIRENT_FILE,
207
+ UV_DIRENT_LINK,
208
+ UV_DIRENT_SOCKET,
209
+ UV_DIRENT_UNKNOWN,
210
+ UV_FS_COPYFILE_EXCL,
211
+ UV_FS_COPYFILE_FICLONE,
212
+ UV_FS_COPYFILE_FICLONE_FORCE,
213
+ UV_FS_O_FILEMAP,
214
+ UV_FS_SYMLINK_DIR,
215
+ UV_FS_SYMLINK_JUNCTION,
216
+ W_OK,
217
+ X_OK,
218
+ parseFlags
219
+ });
package/lib/index.d.ts ADDED
@@ -0,0 +1,24 @@
1
+ import * as constants from './constants';
2
+ import * as promises from './promises';
3
+ import EventEmitter from 'events';
4
+ import { Matcher } from 'anymatch';
5
+ export { constants, promises };
6
+ export declare class Dirent {
7
+ private handle;
8
+ name: string;
9
+ constructor(handle: FileSystemHandle);
10
+ isFile(): boolean;
11
+ isDirectory(): boolean;
12
+ }
13
+ export interface WatchOptions {
14
+ ignored?: Matcher;
15
+ ignoreInitial?: boolean;
16
+ cwd?: string;
17
+ depth?: number;
18
+ interval?: number;
19
+ }
20
+ export declare class FSWatcher extends EventEmitter {
21
+ constructor(paths: string | readonly string[], options?: WatchOptions);
22
+ close(): void;
23
+ }
24
+ export declare function watch(paths: string | readonly string[], options?: WatchOptions): FSWatcher;
package/lib/index.js ADDED
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+
31
+ // src/index.ts
32
+ var index_exports = {};
33
+ __export(index_exports, {
34
+ Dirent: () => Dirent,
35
+ FSWatcher: () => FSWatcher,
36
+ constants: () => constants,
37
+ promises: () => promises,
38
+ watch: () => watch
39
+ });
40
+ module.exports = __toCommonJS(index_exports);
41
+ var constants = __toESM(require("./constants"));
42
+ var promises = __toESM(require("./promises"));
43
+ var import_events = __toESM(require("events"));
44
+ var Dirent = class {
45
+ constructor(handle) {
46
+ this.handle = handle;
47
+ this.name = handle.name;
48
+ }
49
+ static {
50
+ __name(this, "Dirent");
51
+ }
52
+ name;
53
+ isFile() {
54
+ return this.handle.kind === "file";
55
+ }
56
+ isDirectory() {
57
+ return this.handle.kind === "directory";
58
+ }
59
+ };
60
+ var FSWatcher = class extends import_events.default {
61
+ static {
62
+ __name(this, "FSWatcher");
63
+ }
64
+ constructor(paths, options) {
65
+ super();
66
+ }
67
+ close() {
68
+ }
69
+ };
70
+ function watch(paths, options) {
71
+ return new FSWatcher(paths, options);
72
+ }
73
+ __name(watch, "watch");
74
+ // Annotate the CommonJS export names for ESM import in node:
75
+ 0 && (module.exports = {
76
+ Dirent,
77
+ FSWatcher,
78
+ constants,
79
+ promises,
80
+ watch
81
+ });
@@ -0,0 +1,90 @@
1
+ import { Buffer } from 'buffer';
2
+ import { Dirent } from '.';
3
+ declare global {
4
+ interface FileSystemCreateWritableOptions {
5
+ keepExistingData?: boolean;
6
+ }
7
+ interface FileSystemWritableFileStream extends WritableStream {
8
+ seek(position: number): Promise<void>;
9
+ truncate(size: number): Promise<void>;
10
+ write(data: string | ArrayBuffer | ArrayBufferView | Blob | DataView): Promise<void>;
11
+ }
12
+ interface FileSystemReadWriteOptions {
13
+ at: number;
14
+ }
15
+ interface FileSystemSyncAccessHandle {
16
+ close(): Promise<void>;
17
+ flush(): Promise<void>;
18
+ getSize(): Promise<number>;
19
+ read(buffer: ArrayBuffer | ArrayBufferView, options?: FileSystemReadWriteOptions): Promise<number>;
20
+ truncate(newSize: number): Promise<void>;
21
+ write(buffer: ArrayBuffer | ArrayBufferView, options?: FileSystemReadWriteOptions): Promise<number>;
22
+ }
23
+ interface FileSystemFileHandle {
24
+ createWritable(options?: FileSystemCreateWritableOptions): Promise<FileSystemWritableFileStream>;
25
+ createSyncAccessHandle(): Promise<FileSystemSyncAccessHandle>;
26
+ }
27
+ interface FileSystemDirectoryHandle {
28
+ entries(): AsyncIterable<[string, FileSystemHandle]>;
29
+ keys(): AsyncIterable<string>;
30
+ values(): AsyncIterable<FileSystemHandle>;
31
+ }
32
+ }
33
+ export interface EncodingOptions {
34
+ encoding?: BufferEncoding;
35
+ }
36
+ export declare function writeFile(path: string, data: string | ArrayBuffer | ArrayBufferView | Blob | DataView): Promise<void>;
37
+ export declare function appendFile(path: string, data: string | ArrayBuffer | ArrayBufferView | Blob | DataView): Promise<void>;
38
+ export declare function readFile(path: string, options?: BufferEncoding): Promise<string | Buffer<ArrayBuffer>>;
39
+ export interface ReadDirectoryOptions {
40
+ withFileTypes?: boolean;
41
+ }
42
+ export declare function readdir(path: string, options: ReadDirectoryOptions & {
43
+ withFileTypes: true;
44
+ }): Promise<Dirent[]>;
45
+ export declare function readdir(path: string, options?: ReadDirectoryOptions & {
46
+ withFileTypes?: false;
47
+ }): Promise<string[]>;
48
+ export interface MakeDirectoryOptions {
49
+ recursive?: boolean;
50
+ }
51
+ export declare function mkdir(path: string, options?: MakeDirectoryOptions): Promise<void>;
52
+ export interface RemoveOptions {
53
+ force?: boolean;
54
+ recursive?: boolean;
55
+ }
56
+ export declare function rm(path: string, options?: RemoveOptions): Promise<void>;
57
+ export { rm as unlink, rm as rmdir };
58
+ export interface CopyOptions {
59
+ force?: boolean;
60
+ recursive?: boolean;
61
+ }
62
+ export declare function cp(src: string, dst: string, options?: CopyOptions): Promise<void>;
63
+ export { cp as copyFile };
64
+ export declare function rename(oldPath: string, newPath: string): Promise<void>;
65
+ export declare function getHandle(path: string, kind: 'file'): Promise<FileSystemFileHandle>;
66
+ export declare function getHandle(path: string, kind: 'directory'): Promise<FileSystemDirectoryHandle>;
67
+ export declare function getHandle(path: string, kind?: FileSystemHandleKind): Promise<FileSystemHandle>;
68
+ export interface StatOptions {
69
+ }
70
+ export declare function stat(path: string, options?: StatOptions): Promise<{
71
+ isFile: () => boolean;
72
+ isDirectory: () => boolean;
73
+ }>;
74
+ export declare function access(path: string, mode?: number): Promise<void>;
75
+ interface FileHandleWriteResult<T> {
76
+ bytesWritten: number;
77
+ buffer: T;
78
+ }
79
+ declare class FileHandle {
80
+ private handle;
81
+ private flags;
82
+ private _streamTask?;
83
+ constructor(handle: FileSystemFileHandle, flags: number);
84
+ stream(): Promise<FileSystemWritableFileStream>;
85
+ readFile(encoding?: BufferEncoding): Promise<string | Buffer<ArrayBuffer>>;
86
+ write<T extends Uint8Array>(buffer: T, offset?: number, length?: number, position?: number): Promise<FileHandleWriteResult<T>>;
87
+ write(data: string, position?: number, encoding?: BufferEncoding): Promise<FileHandleWriteResult<string>>;
88
+ close(): Promise<void>;
89
+ }
90
+ export declare function open(path: string, flags: string | number, mode?: number): Promise<FileHandle>;
@@ -0,0 +1,325 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+
21
+ // src/promises.ts
22
+ var promises_exports = {};
23
+ __export(promises_exports, {
24
+ access: () => access,
25
+ appendFile: () => appendFile,
26
+ copyFile: () => cp,
27
+ cp: () => cp,
28
+ getHandle: () => getHandle,
29
+ mkdir: () => mkdir,
30
+ open: () => open,
31
+ readFile: () => readFile,
32
+ readdir: () => readdir,
33
+ rename: () => rename,
34
+ rm: () => rm,
35
+ rmdir: () => rm,
36
+ stat: () => stat,
37
+ unlink: () => rm,
38
+ writeFile: () => writeFile
39
+ });
40
+ module.exports = __toCommonJS(promises_exports);
41
+ var import_buffer = require("buffer");
42
+ var import_constants = require("./constants");
43
+ var import__ = require(".");
44
+ var SystemError = class extends Error {
45
+ static {
46
+ __name(this, "SystemError");
47
+ }
48
+ constructor(message, options) {
49
+ super(`${options.code}: ${message}, ${options.syscall} '${options.path}'`);
50
+ }
51
+ };
52
+ var ENOENT = class extends SystemError {
53
+ static {
54
+ __name(this, "ENOENT");
55
+ }
56
+ constructor(syscall2, path) {
57
+ super("no such file or directory", {
58
+ errno: -2,
59
+ code: "EEXIST",
60
+ syscall: syscall2,
61
+ path
62
+ });
63
+ }
64
+ };
65
+ var EEXIST = class extends SystemError {
66
+ static {
67
+ __name(this, "EEXIST");
68
+ }
69
+ constructor(syscall2, path) {
70
+ super("file already exists", {
71
+ errno: -17,
72
+ code: "EEXIST",
73
+ syscall: syscall2,
74
+ path
75
+ });
76
+ }
77
+ };
78
+ var ENOTDIR = class extends SystemError {
79
+ static {
80
+ __name(this, "ENOTDIR");
81
+ }
82
+ constructor(syscall2, path) {
83
+ super("not a directory", {
84
+ errno: -20,
85
+ code: "ENOTDIR",
86
+ syscall: syscall2,
87
+ path
88
+ });
89
+ }
90
+ };
91
+ var EISDIR = class extends SystemError {
92
+ static {
93
+ __name(this, "EISDIR");
94
+ }
95
+ constructor(syscall2, path) {
96
+ super("illegal operation on a directory", {
97
+ errno: -21,
98
+ code: "EISDIR",
99
+ syscall: syscall2,
100
+ path
101
+ });
102
+ }
103
+ };
104
+ async function syscall(type, path, cb, dict) {
105
+ try {
106
+ return await cb();
107
+ } catch (e) {
108
+ if (!(e instanceof DOMException)) throw e;
109
+ const constructor = dict[e.code];
110
+ if (!constructor) throw e;
111
+ throw new constructor(type, path);
112
+ }
113
+ }
114
+ __name(syscall, "syscall");
115
+ async function getDirectoryHandle(type, path, parts, create) {
116
+ let root = await navigator.storage.getDirectory();
117
+ for (const part of parts) {
118
+ await syscall(type, path, async () => {
119
+ root = await root.getDirectoryHandle(part, { create });
120
+ }, {
121
+ [DOMException.TYPE_MISMATCH_ERR]: ENOTDIR,
122
+ [DOMException.NOT_FOUND_ERR]: ENOENT
123
+ });
124
+ }
125
+ return root;
126
+ }
127
+ __name(getDirectoryHandle, "getDirectoryHandle");
128
+ async function getParent(type, path, create = false) {
129
+ const parts = path.split("/").filter(Boolean);
130
+ const filename = parts.pop();
131
+ return [await getDirectoryHandle(type, path, parts, create), filename];
132
+ }
133
+ __name(getParent, "getParent");
134
+ async function getFileHandle(type, path, create = false) {
135
+ const [root, filename] = await getParent(type, path);
136
+ return syscall(type, path, () => root.getFileHandle(filename, { create }), {
137
+ [DOMException.TYPE_MISMATCH_ERR]: EISDIR,
138
+ [DOMException.NOT_FOUND_ERR]: ENOENT
139
+ });
140
+ }
141
+ __name(getFileHandle, "getFileHandle");
142
+ async function writeOrAppendFile(type, path, data, keepExistingData) {
143
+ const handle = await getFileHandle(type, path, true);
144
+ const stream = await handle.createWritable({ keepExistingData });
145
+ if (typeof data === "string") {
146
+ data = new TextEncoder().encode(data);
147
+ }
148
+ await stream.write(data);
149
+ await stream.close();
150
+ }
151
+ __name(writeOrAppendFile, "writeOrAppendFile");
152
+ async function writeFile(path, data) {
153
+ await writeOrAppendFile("write", path, data, false);
154
+ }
155
+ __name(writeFile, "writeFile");
156
+ async function appendFile(path, data) {
157
+ await writeOrAppendFile("append", path, data, true);
158
+ }
159
+ __name(appendFile, "appendFile");
160
+ async function _readFile(handle, encoding) {
161
+ const file = await handle.getFile();
162
+ if (encoding === "utf8" || encoding === "utf-8") {
163
+ return await file.text();
164
+ } else {
165
+ return import_buffer.Buffer.from(await file.arrayBuffer());
166
+ }
167
+ }
168
+ __name(_readFile, "_readFile");
169
+ async function readFile(path, options) {
170
+ const handle = await getFileHandle("read", path);
171
+ return await _readFile(handle, options);
172
+ }
173
+ __name(readFile, "readFile");
174
+ async function readdir(path, options = {}) {
175
+ const parts = path.split("/").filter(Boolean);
176
+ const root = await getDirectoryHandle("readdir", path, parts, false);
177
+ const results = [];
178
+ for await (const [name, handle] of root.entries()) {
179
+ results.push(options.withFileTypes ? new import__.Dirent(handle) : name);
180
+ }
181
+ return results;
182
+ }
183
+ __name(readdir, "readdir");
184
+ async function mkdir(path, options = {}) {
185
+ if (options.recursive) {
186
+ await getDirectoryHandle("mkdir", path, path.split("/").filter(Boolean), true);
187
+ return;
188
+ }
189
+ const [root, filename] = await getParent("mkdir", path);
190
+ try {
191
+ await root.getDirectoryHandle(filename);
192
+ } catch (e) {
193
+ if (!(e instanceof DOMException)) throw e;
194
+ if (e.code === DOMException.NOT_FOUND_ERR) {
195
+ await root.getDirectoryHandle(filename, { create: true });
196
+ return;
197
+ } else if (e.code === DOMException.TYPE_MISMATCH_ERR) {
198
+ throw new EEXIST("mkdir", path);
199
+ }
200
+ throw e;
201
+ }
202
+ throw new EEXIST("mkdir", path);
203
+ }
204
+ __name(mkdir, "mkdir");
205
+ async function rm(path, options = {}) {
206
+ try {
207
+ const [root, filename] = await getParent("rm", path);
208
+ await root.removeEntry(filename, { recursive: options.recursive });
209
+ } catch (e) {
210
+ if (options.force && e instanceof ENOENT) return;
211
+ throw e;
212
+ }
213
+ }
214
+ __name(rm, "rm");
215
+ async function cp(src, dst, options = {}) {
216
+ const oldHandle = await getHandle(src);
217
+ const newHandle = await getHandle(dst, oldHandle.kind);
218
+ if (oldHandle.kind === "file") {
219
+ const buffer = await oldHandle.getFile().then((file) => file.arrayBuffer());
220
+ const stream = await newHandle.createWritable();
221
+ await stream.write(buffer);
222
+ await stream.close();
223
+ } else {
224
+ for await (const name of oldHandle.keys()) {
225
+ await cp(src + "/" + name, dst + "/" + name);
226
+ }
227
+ }
228
+ }
229
+ __name(cp, "cp");
230
+ async function rename(oldPath, newPath) {
231
+ await cp(oldPath, newPath, { recursive: true });
232
+ await rm(oldPath, { recursive: true });
233
+ }
234
+ __name(rename, "rename");
235
+ async function getHandle(path, kind) {
236
+ const [root, filename] = await getParent("lstat", path, !!kind);
237
+ if (kind === "file") {
238
+ return await root.getFileHandle(filename, { create: true });
239
+ } else if (kind === "directory") {
240
+ return await root.getDirectoryHandle(filename, { create: true });
241
+ }
242
+ try {
243
+ return await root.getFileHandle(filename);
244
+ } catch {
245
+ return await root.getDirectoryHandle(filename);
246
+ }
247
+ }
248
+ __name(getHandle, "getHandle");
249
+ async function stat(path, options) {
250
+ const handle = await getHandle(path);
251
+ return {
252
+ isFile: /* @__PURE__ */ __name(() => handle.kind === "file", "isFile"),
253
+ isDirectory: /* @__PURE__ */ __name(() => handle.kind === "directory", "isDirectory")
254
+ };
255
+ }
256
+ __name(stat, "stat");
257
+ async function access(path, mode) {
258
+ await getHandle(path);
259
+ }
260
+ __name(access, "access");
261
+ var FileHandle = class {
262
+ constructor(handle, flags) {
263
+ this.handle = handle;
264
+ this.flags = flags;
265
+ }
266
+ static {
267
+ __name(this, "FileHandle");
268
+ }
269
+ _streamTask;
270
+ stream() {
271
+ return this._streamTask ||= this.handle.createWritable({
272
+ keepExistingData: !!(this.flags & import_constants.O_APPEND)
273
+ });
274
+ }
275
+ async readFile(encoding) {
276
+ return _readFile(this.handle, encoding);
277
+ }
278
+ async write(data, ...args) {
279
+ if (typeof data === "string") {
280
+ const result = await this.write(new TextEncoder().encode(data), void 0, void 0, args[1]);
281
+ return { ...result, buffer: data };
282
+ }
283
+ const offset = args[0] ?? 0;
284
+ const length = args[1] ?? data.byteLength - offset;
285
+ data = data.slice(offset, offset + length);
286
+ const stream = await this.stream();
287
+ await stream.write(data);
288
+ return { bytesWritten: data.byteLength, buffer: data };
289
+ }
290
+ async close() {
291
+ const stream = await this.stream();
292
+ await stream.close();
293
+ }
294
+ };
295
+ async function open(path, flags, mode) {
296
+ flags = (0, import_constants.parseFlags)(flags);
297
+ if (flags & import_constants.O_EXCL) {
298
+ try {
299
+ await getHandle(path);
300
+ } catch {
301
+ return new FileHandle(await getHandle(path, "file"), flags);
302
+ }
303
+ throw new EEXIST("open", path);
304
+ }
305
+ return new FileHandle(await getHandle(path, "file"), flags);
306
+ }
307
+ __name(open, "open");
308
+ // Annotate the CommonJS export names for ESM import in node:
309
+ 0 && (module.exports = {
310
+ access,
311
+ appendFile,
312
+ copyFile,
313
+ cp,
314
+ getHandle,
315
+ mkdir,
316
+ open,
317
+ readFile,
318
+ readdir,
319
+ rename,
320
+ rm,
321
+ rmdir,
322
+ stat,
323
+ unlink,
324
+ writeFile
325
+ });
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@cordisjs/fs",
3
+ "version": "1.3.7",
4
+ "description": "Node.js fs module ponyfill for browser",
5
+ "type": "commonjs",
6
+ "exports": {
7
+ ".": "./lib/index.js",
8
+ "./constants": "./lib/constants.js",
9
+ "./promises": "./lib/promises.js",
10
+ "./src/*": "./src/*",
11
+ "./package.json": "./package.json"
12
+ },
13
+ "files": [
14
+ "lib"
15
+ ],
16
+ "license": "MIT",
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/cordiverse/ponyfills.git",
20
+ "directory": "packages/fs"
21
+ },
22
+ "bugs": {
23
+ "url": "https://github.com/cordiverse/ponyfills/issues"
24
+ },
25
+ "homepage": "https://github.com/cordiverse/ponyfills",
26
+ "author": "Shigma <shigma10826@gmail.com>",
27
+ "keywords": [
28
+ "fs",
29
+ "filesystem",
30
+ "browserify",
31
+ "ponyfill",
32
+ "polyfill",
33
+ "node"
34
+ ],
35
+ "dependencies": {
36
+ "anymatch": "^3.1.3"
37
+ }
38
+ }