@gjsify/fs 0.4.0 → 0.4.3

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.
Files changed (50) hide show
  1. package/package.json +51 -48
  2. package/src/callback.spec.ts +0 -296
  3. package/src/callback.ts +0 -684
  4. package/src/cp.spec.ts +0 -181
  5. package/src/cp.ts +0 -328
  6. package/src/dir.spec.ts +0 -204
  7. package/src/dir.ts +0 -199
  8. package/src/dirent.ts +0 -165
  9. package/src/encoding.ts +0 -45
  10. package/src/errors.spec.ts +0 -389
  11. package/src/errors.ts +0 -19
  12. package/src/extended.spec.ts +0 -706
  13. package/src/fd-ops.spec.ts +0 -234
  14. package/src/fd-ops.ts +0 -251
  15. package/src/file-handle.spec.ts +0 -115
  16. package/src/file-handle.ts +0 -856
  17. package/src/fs-watcher.ts +0 -198
  18. package/src/glob.spec.ts +0 -201
  19. package/src/glob.ts +0 -205
  20. package/src/index.ts +0 -313
  21. package/src/new-apis.spec.ts +0 -505
  22. package/src/promises.spec.ts +0 -812
  23. package/src/promises.ts +0 -686
  24. package/src/read-stream.ts +0 -128
  25. package/src/stat-watcher.ts +0 -116
  26. package/src/stat.spec.ts +0 -87
  27. package/src/statfs.spec.ts +0 -67
  28. package/src/statfs.ts +0 -92
  29. package/src/stats.ts +0 -207
  30. package/src/streams.spec.ts +0 -513
  31. package/src/symlink.spec.ts +0 -188
  32. package/src/sync.spec.ts +0 -377
  33. package/src/sync.ts +0 -568
  34. package/src/test.mts +0 -27
  35. package/src/types/encoding-option.ts +0 -3
  36. package/src/types/file-read-options.ts +0 -15
  37. package/src/types/file-read-result.ts +0 -4
  38. package/src/types/flag-and-open-mode.ts +0 -6
  39. package/src/types/index.ts +0 -6
  40. package/src/types/open-flags.ts +0 -14
  41. package/src/types/read-options.ts +0 -9
  42. package/src/utils.ts +0 -31
  43. package/src/utimes.spec.ts +0 -113
  44. package/src/utimes.ts +0 -97
  45. package/src/watch.spec.ts +0 -171
  46. package/src/watchfile.spec.ts +0 -185
  47. package/src/write-stream.ts +0 -142
  48. package/test/file.txt +0 -1
  49. package/tsconfig.json +0 -29
  50. package/tsconfig.tsbuildinfo +0 -1
package/package.json CHANGED
@@ -1,51 +1,54 @@
1
1
  {
2
- "name": "@gjsify/fs",
3
- "version": "0.4.0",
4
- "description": "Node.js fs module for Gjs",
5
- "module": "lib/esm/index.js",
6
- "types": "lib/types/index.d.ts",
7
- "type": "module",
8
- "exports": {
9
- ".": {
10
- "types": "./lib/types/index.d.ts",
11
- "default": "./lib/esm/index.js"
2
+ "name": "@gjsify/fs",
3
+ "version": "0.4.3",
4
+ "description": "Node.js fs module for Gjs",
5
+ "module": "lib/esm/index.js",
6
+ "types": "lib/types/index.d.ts",
7
+ "files": [
8
+ "lib"
9
+ ],
10
+ "type": "module",
11
+ "exports": {
12
+ ".": {
13
+ "types": "./lib/types/index.d.ts",
14
+ "default": "./lib/esm/index.js"
15
+ },
16
+ "./promises": {
17
+ "types": "./lib/types/promises.d.ts",
18
+ "default": "./lib/esm/promises.js"
19
+ }
12
20
  },
13
- "./promises": {
14
- "types": "./lib/types/promises.d.ts",
15
- "default": "./lib/esm/promises.js"
21
+ "scripts": {
22
+ "clear": "rm -rf lib tsconfig.tsbuildinfo tsconfig.types.tsbuildinfo test.gjs.mjs test.node.mjs || exit 0",
23
+ "check": "tsc --noEmit",
24
+ "build": "gjsify run build:gjsify && gjsify run build:types",
25
+ "build:gjsify": "gjsify build --library 'src/**/*.{ts,js}' --exclude 'src/**/*.spec.{mts,ts}' 'src/test.{mts,ts}'",
26
+ "build:types": "tsc",
27
+ "build:test": "gjsify run build:test:gjs && gjsify run build:test:node",
28
+ "build:test:gjs": "gjsify build src/test.mts --app gjs --outfile test.gjs.mjs",
29
+ "build:test:node": "gjsify build src/test.mts --app node --outfile test.node.mjs",
30
+ "test": "gjsify run build:gjsify && gjsify run build:test && gjsify run test:node && gjsify run test:gjs",
31
+ "test:gjs": "gjsify run test.gjs.mjs",
32
+ "test:node": "node test.node.mjs"
33
+ },
34
+ "keywords": [
35
+ "gjs",
36
+ "node",
37
+ "fs"
38
+ ],
39
+ "devDependencies": {
40
+ "@gjsify/cli": "workspace:^",
41
+ "@gjsify/unit": "workspace:^",
42
+ "@types/node": "^25.6.2",
43
+ "typescript": "^6.0.3"
44
+ },
45
+ "dependencies": {
46
+ "@girs/gio-2.0": "2.88.0-4.0.0-rc.15",
47
+ "@girs/glib-2.0": "2.88.0-4.0.0-rc.15",
48
+ "@gjsify/buffer": "workspace:^",
49
+ "@gjsify/events": "workspace:^",
50
+ "@gjsify/stream": "workspace:^",
51
+ "@gjsify/url": "workspace:^",
52
+ "@gjsify/utils": "workspace:^"
16
53
  }
17
- },
18
- "scripts": {
19
- "clear": "rm -rf lib tsconfig.tsbuildinfo tsconfig.types.tsbuildinfo test.gjs.mjs test.node.mjs || exit 0",
20
- "check": "tsc --noEmit",
21
- "build": "yarn build:gjsify && yarn build:types",
22
- "build:gjsify": "gjsify build --library 'src/**/*.{ts,js}' --exclude 'src/**/*.spec.{mts,ts}' 'src/test.{mts,ts}'",
23
- "build:types": "tsc",
24
- "build:test": "yarn build:test:gjs && yarn build:test:node",
25
- "build:test:gjs": "gjsify build src/test.mts --app gjs --outfile test.gjs.mjs",
26
- "build:test:node": "gjsify build src/test.mts --app node --outfile test.node.mjs",
27
- "test": "yarn build:gjsify && yarn build:test && yarn test:node && yarn test:gjs",
28
- "test:gjs": "gjsify run test.gjs.mjs",
29
- "test:node": "node test.node.mjs"
30
- },
31
- "keywords": [
32
- "gjs",
33
- "node",
34
- "fs"
35
- ],
36
- "devDependencies": {
37
- "@gjsify/cli": "^0.4.0",
38
- "@gjsify/unit": "^0.4.0",
39
- "@types/node": "^25.6.2",
40
- "typescript": "^6.0.3"
41
- },
42
- "dependencies": {
43
- "@girs/gio-2.0": "2.88.0-4.0.0-rc.15",
44
- "@girs/glib-2.0": "2.88.0-4.0.0-rc.15",
45
- "@gjsify/buffer": "^0.4.0",
46
- "@gjsify/events": "^0.4.0",
47
- "@gjsify/stream": "^0.4.0",
48
- "@gjsify/url": "^0.4.0",
49
- "@gjsify/utils": "^0.4.0"
50
- }
51
- }
54
+ }
@@ -1,296 +0,0 @@
1
- // Ported from refs/node-test/parallel/test-fs-read-file*.js, test-fs-write-file*.js
2
- // Original: MIT license, Node.js contributors
3
-
4
- import { describe, it, expect } from '@gjsify/unit';
5
- import {
6
- open, close, write, read, rm,
7
- stat, lstat, readdir, readFile, writeFile,
8
- rename, copyFile, access, appendFile, truncate,
9
- mkdir, rmdir, chmod,
10
- } from 'node:fs';
11
- import { constants } from 'node:fs';
12
- import { Buffer } from 'node:buffer';
13
-
14
- const TEST_DIR = './test-callback-' + Date.now();
15
-
16
- export default async () => {
17
- await describe('fs callback API', async () => {
18
-
19
- // ==================== stat / lstat ====================
20
- await describe('stat', async () => {
21
- await it('should stat current directory', async () => {
22
- await new Promise<void>((resolve, reject) => {
23
- stat('.', (err, stats) => {
24
- if (err) return reject(err);
25
- expect(stats).toBeDefined();
26
- expect(stats.isDirectory()).toBe(true);
27
- expect(stats.isFile()).toBe(false);
28
- expect(typeof stats.size).toBe('number');
29
- expect(typeof stats.mode).toBe('number');
30
- resolve();
31
- });
32
- });
33
- });
34
-
35
- await it('should return error for non-existent path', async () => {
36
- await new Promise<void>((resolve) => {
37
- stat('/non/existent/path/xyz', (err) => {
38
- expect(err).toBeDefined();
39
- expect(err!.code).toBe('ENOENT');
40
- resolve();
41
- });
42
- });
43
- });
44
- });
45
-
46
- await describe('lstat', async () => {
47
- await it('should lstat current directory', async () => {
48
- await new Promise<void>((resolve, reject) => {
49
- lstat('.', (err, stats) => {
50
- if (err) return reject(err);
51
- expect(stats).toBeDefined();
52
- expect(stats.isDirectory()).toBe(true);
53
- resolve();
54
- });
55
- });
56
- });
57
- });
58
-
59
- // ==================== readdir ====================
60
- await describe('readdir', async () => {
61
- await it('should list files in current directory', async () => {
62
- await new Promise<void>((resolve, reject) => {
63
- readdir('.', (err, files) => {
64
- if (err) return reject(err);
65
- expect(Array.isArray(files)).toBe(true);
66
- expect(files.length).toBeGreaterThan(0);
67
- resolve();
68
- });
69
- });
70
- });
71
- });
72
-
73
- // ==================== mkdir / rmdir ====================
74
- await describe('mkdir and rmdir', async () => {
75
- await it('should create and remove a directory', async () => {
76
- const dir = TEST_DIR + '-mkdir';
77
- await new Promise<void>((resolve, reject) => {
78
- mkdir(dir, (err) => {
79
- if (err) return reject(err);
80
- stat(dir, (err2, stats) => {
81
- if (err2) return reject(err2);
82
- expect(stats.isDirectory()).toBe(true);
83
- rmdir(dir, (err3) => {
84
- if (err3) return reject(err3);
85
- resolve();
86
- });
87
- });
88
- });
89
- });
90
- });
91
- });
92
-
93
- // ==================== writeFile / readFile ====================
94
- await describe('writeFile and readFile', async () => {
95
- await it('should write and read a file', async () => {
96
- const path = TEST_DIR + '-rw.txt';
97
- const content = 'Hello callback world';
98
-
99
- await new Promise<void>((resolve, reject) => {
100
- writeFile(path, content, 'utf8', (err) => {
101
- if (err) return reject(err);
102
- readFile(path, 'utf8', (err2, data) => {
103
- if (err2) return reject(err2);
104
- expect(data).toBe(content);
105
- rm(path, (err3) => {
106
- if (err3) return reject(err3);
107
- resolve();
108
- });
109
- });
110
- });
111
- });
112
- });
113
-
114
- await it('should write and read Buffer data', async () => {
115
- const path = TEST_DIR + '-buf.txt';
116
- const buf = Buffer.from([0x48, 0x65, 0x6c, 0x6c, 0x6f]); // "Hello"
117
-
118
- await new Promise<void>((resolve, reject) => {
119
- writeFile(path, buf, (err) => {
120
- if (err) return reject(err);
121
- readFile(path, (err2, data) => {
122
- if (err2) return reject(err2);
123
- expect(Buffer.isBuffer(data)).toBe(true);
124
- expect(data.toString()).toBe('Hello');
125
- rm(path, () => resolve());
126
- });
127
- });
128
- });
129
- });
130
-
131
- await it('should return error when reading non-existent file', async () => {
132
- await new Promise<void>((resolve) => {
133
- readFile('/non/existent/file.txt', (err) => {
134
- expect(err).toBeDefined();
135
- expect(err!.code).toBe('ENOENT');
136
- resolve();
137
- });
138
- });
139
- });
140
- });
141
-
142
- // ==================== open / write / read / close ====================
143
- await describe('open, write, read, close', async () => {
144
- await it('should open, write, read, and close a file', async () => {
145
- const path = TEST_DIR + '-open.txt';
146
-
147
- await new Promise<void>((resolve, reject) => {
148
- open(path, 'w+', 0o666, (err, fd) => {
149
- if (err) return reject(err);
150
- expect(typeof fd).toBe('number');
151
-
152
- const buf = Buffer.from('Hello World', 'utf8');
153
- write(fd, buf, 0, buf.length, 0, (err2, written) => {
154
- if (err2) return reject(err2);
155
- expect(written).toBe(buf.length);
156
-
157
- close(fd, (err3) => {
158
- if (err3) return reject(err3);
159
- rm(path, () => resolve());
160
- });
161
- });
162
- });
163
- });
164
- });
165
- });
166
-
167
- // ==================== access ====================
168
- await describe('access', async () => {
169
- await it('should succeed for existing file', async () => {
170
- const path = TEST_DIR + '-access.txt';
171
- await new Promise<void>((resolve, reject) => {
172
- writeFile(path, 'test', (err) => {
173
- if (err) return reject(err);
174
- access(path, constants.F_OK, (err2) => {
175
- expect(err2).toBeNull();
176
- rm(path, () => resolve());
177
- });
178
- });
179
- });
180
- });
181
-
182
- await it('should fail for non-existent file', async () => {
183
- await new Promise<void>((resolve) => {
184
- access('/non/existent/file', constants.F_OK, (err) => {
185
- expect(err).toBeDefined();
186
- expect(err!.code).toBe('ENOENT');
187
- resolve();
188
- });
189
- });
190
- });
191
- });
192
-
193
- // ==================== appendFile ====================
194
- await describe('appendFile', async () => {
195
- await it('should append to a file', async () => {
196
- const path = TEST_DIR + '-append.txt';
197
- await new Promise<void>((resolve, reject) => {
198
- writeFile(path, 'Hello', 'utf8', (err) => {
199
- if (err) return reject(err);
200
- appendFile(path, ' World', 'utf8', (err2) => {
201
- if (err2) return reject(err2);
202
- readFile(path, 'utf8', (err3, data) => {
203
- if (err3) return reject(err3);
204
- expect(data).toBe('Hello World');
205
- rm(path, () => resolve());
206
- });
207
- });
208
- });
209
- });
210
- });
211
- });
212
-
213
- // ==================== rename ====================
214
- await describe('rename', async () => {
215
- await it('should rename a file', async () => {
216
- const oldPath = TEST_DIR + '-rename-old.txt';
217
- const newPath = TEST_DIR + '-rename-new.txt';
218
- await new Promise<void>((resolve, reject) => {
219
- writeFile(oldPath, 'rename test', (err) => {
220
- if (err) return reject(err);
221
- rename(oldPath, newPath, (err2) => {
222
- if (err2) return reject(err2);
223
- readFile(newPath, 'utf8', (err3, data) => {
224
- if (err3) return reject(err3);
225
- expect(data).toBe('rename test');
226
- rm(newPath, () => resolve());
227
- });
228
- });
229
- });
230
- });
231
- });
232
- });
233
-
234
- // ==================== copyFile ====================
235
- await describe('copyFile', async () => {
236
- await it('should copy a file', async () => {
237
- const src = TEST_DIR + '-copy-src.txt';
238
- const dst = TEST_DIR + '-copy-dst.txt';
239
- await new Promise<void>((resolve, reject) => {
240
- writeFile(src, 'copy test', (err) => {
241
- if (err) return reject(err);
242
- copyFile(src, dst, (err2) => {
243
- if (err2) return reject(err2);
244
- readFile(dst, 'utf8', (err3, data) => {
245
- if (err3) return reject(err3);
246
- expect(data).toBe('copy test');
247
- rm(src, () => rm(dst, () => resolve()));
248
- });
249
- });
250
- });
251
- });
252
- });
253
- });
254
-
255
- // ==================== truncate ====================
256
- await describe('truncate', async () => {
257
- await it('should truncate a file', async () => {
258
- const path = TEST_DIR + '-truncate.txt';
259
- await new Promise<void>((resolve, reject) => {
260
- writeFile(path, 'Hello World', (err) => {
261
- if (err) return reject(err);
262
- truncate(path, 5, (err2) => {
263
- if (err2) return reject(err2);
264
- readFile(path, 'utf8', (err3, data) => {
265
- if (err3) return reject(err3);
266
- expect(data).toBe('Hello');
267
- rm(path, () => resolve());
268
- });
269
- });
270
- });
271
- });
272
- });
273
- });
274
-
275
- // ==================== chmod ====================
276
- await describe('chmod', async () => {
277
- await it('should change file mode', async () => {
278
- const path = TEST_DIR + '-chmod.txt';
279
- await new Promise<void>((resolve, reject) => {
280
- writeFile(path, 'chmod test', (err) => {
281
- if (err) return reject(err);
282
- chmod(path, 0o644, (err2) => {
283
- if (err2) return reject(err2);
284
- stat(path, (err3, stats) => {
285
- if (err3) return reject(err3);
286
- // Check that mode includes the permission bits
287
- expect((stats.mode & 0o777)).toBe(0o644);
288
- rm(path, () => resolve());
289
- });
290
- });
291
- });
292
- });
293
- });
294
- });
295
- });
296
- };