memfs 4.7.5 → 4.7.6

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 (64) hide show
  1. package/package.json +2 -2
  2. package/lib/__tests__/util.d.ts +0 -13
  3. package/lib/__tests__/util.js +0 -30
  4. package/lib/__tests__/util.js.map +0 -1
  5. package/lib/crud/__tests__/matryoshka.test.d.ts +0 -1
  6. package/lib/crud/__tests__/matryoshka.test.js +0 -69
  7. package/lib/crud/__tests__/matryoshka.test.js.map +0 -1
  8. package/lib/crud/__tests__/testCrudfs.d.ts +0 -6
  9. package/lib/crud/__tests__/testCrudfs.js +0 -278
  10. package/lib/crud/__tests__/testCrudfs.js.map +0 -1
  11. package/lib/crud-to-cas/__tests__/CrudCas.test.d.ts +0 -1
  12. package/lib/crud-to-cas/__tests__/CrudCas.test.js +0 -38
  13. package/lib/crud-to-cas/__tests__/CrudCas.test.js.map +0 -1
  14. package/lib/crud-to-cas/__tests__/testCasfs.d.ts +0 -9
  15. package/lib/crud-to-cas/__tests__/testCasfs.js +0 -108
  16. package/lib/crud-to-cas/__tests__/testCasfs.js.map +0 -1
  17. package/lib/fsa-to-crud/__tests__/FsaCrud.test.d.ts +0 -1
  18. package/lib/fsa-to-crud/__tests__/FsaCrud.test.js +0 -17
  19. package/lib/fsa-to-crud/__tests__/FsaCrud.test.js.map +0 -1
  20. package/lib/fsa-to-node/__tests__/FsaNodeFs.test.d.ts +0 -1
  21. package/lib/fsa-to-node/__tests__/FsaNodeFs.test.js +0 -892
  22. package/lib/fsa-to-node/__tests__/FsaNodeFs.test.js.map +0 -1
  23. package/lib/fsa-to-node/__tests__/util.test.d.ts +0 -1
  24. package/lib/fsa-to-node/__tests__/util.test.js +0 -32
  25. package/lib/fsa-to-node/__tests__/util.test.js.map +0 -1
  26. package/lib/node-to-crud/__tests__/FsaCrud.test.d.ts +0 -1
  27. package/lib/node-to-crud/__tests__/FsaCrud.test.js +0 -18
  28. package/lib/node-to-crud/__tests__/FsaCrud.test.js.map +0 -1
  29. package/lib/node-to-fsa/__tests__/NodeFileSystemDirectoryHandle.test.d.ts +0 -1
  30. package/lib/node-to-fsa/__tests__/NodeFileSystemDirectoryHandle.test.js +0 -568
  31. package/lib/node-to-fsa/__tests__/NodeFileSystemDirectoryHandle.test.js.map +0 -1
  32. package/lib/node-to-fsa/__tests__/NodeFileSystemFileHandle.test.d.ts +0 -1
  33. package/lib/node-to-fsa/__tests__/NodeFileSystemFileHandle.test.js +0 -183
  34. package/lib/node-to-fsa/__tests__/NodeFileSystemFileHandle.test.js.map +0 -1
  35. package/lib/node-to-fsa/__tests__/NodeFileSystemHandle.test.d.ts +0 -1
  36. package/lib/node-to-fsa/__tests__/NodeFileSystemHandle.test.js +0 -41
  37. package/lib/node-to-fsa/__tests__/NodeFileSystemHandle.test.js.map +0 -1
  38. package/lib/node-to-fsa/__tests__/NodeFileSystemSyncAccessHandle.test.d.ts +0 -1
  39. package/lib/node-to-fsa/__tests__/NodeFileSystemSyncAccessHandle.test.js +0 -175
  40. package/lib/node-to-fsa/__tests__/NodeFileSystemSyncAccessHandle.test.js.map +0 -1
  41. package/lib/node-to-fsa/__tests__/NodeFileSystemWritableFileStream.test.d.ts +0 -1
  42. package/lib/node-to-fsa/__tests__/NodeFileSystemWritableFileStream.test.js +0 -98
  43. package/lib/node-to-fsa/__tests__/NodeFileSystemWritableFileStream.test.js.map +0 -1
  44. package/lib/node-to-fsa/__tests__/scenarios.test.d.ts +0 -1
  45. package/lib/node-to-fsa/__tests__/scenarios.test.js +0 -38
  46. package/lib/node-to-fsa/__tests__/scenarios.test.js.map +0 -1
  47. package/lib/node-to-fsa/__tests__/util.test.d.ts +0 -1
  48. package/lib/node-to-fsa/__tests__/util.test.js +0 -30
  49. package/lib/node-to-fsa/__tests__/util.test.js.map +0 -1
  50. package/lib/print/__tests__/index.test.d.ts +0 -1
  51. package/lib/print/__tests__/index.test.js +0 -77
  52. package/lib/print/__tests__/index.test.js.map +0 -1
  53. package/lib/snapshot/__tests__/async.test.d.ts +0 -1
  54. package/lib/snapshot/__tests__/async.test.js +0 -63
  55. package/lib/snapshot/__tests__/async.test.js.map +0 -1
  56. package/lib/snapshot/__tests__/binary.test.d.ts +0 -1
  57. package/lib/snapshot/__tests__/binary.test.js +0 -59
  58. package/lib/snapshot/__tests__/binary.test.js.map +0 -1
  59. package/lib/snapshot/__tests__/json.test.d.ts +0 -1
  60. package/lib/snapshot/__tests__/json.test.js +0 -68
  61. package/lib/snapshot/__tests__/json.test.js.map +0 -1
  62. package/lib/snapshot/__tests__/sync.test.d.ts +0 -1
  63. package/lib/snapshot/__tests__/sync.test.js +0 -63
  64. package/lib/snapshot/__tests__/sync.test.js.map +0 -1
@@ -1,568 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- const __1 = require("../..");
5
- const NodeFileSystemDirectoryHandle_1 = require("../NodeFileSystemDirectoryHandle");
6
- const NodeFileSystemFileHandle_1 = require("../NodeFileSystemFileHandle");
7
- const util_1 = require("../../__tests__/util");
8
- const setup = (json = {}) => {
9
- const { fs } = (0, __1.memfs)(json, '/');
10
- const dir = new NodeFileSystemDirectoryHandle_1.NodeFileSystemDirectoryHandle(fs, '/', { mode: 'readwrite' });
11
- return { dir, fs };
12
- };
13
- (0, util_1.onlyOnNode20)('NodeFileSystemDirectoryHandle', () => {
14
- test('can instantiate', () => {
15
- const { dir } = setup();
16
- expect(dir).toBeInstanceOf(NodeFileSystemDirectoryHandle_1.NodeFileSystemDirectoryHandle);
17
- });
18
- describe('.keys()', () => {
19
- test('returns an empty iterator for an empty directory', async () => {
20
- const { dir } = setup();
21
- const keys = dir.keys();
22
- expect(await keys.next()).toStrictEqual({ done: true, value: undefined });
23
- });
24
- test('returns a folder', async () => {
25
- var _a, e_1, _b, _c;
26
- const { dir } = setup({ folder: null });
27
- const list = [];
28
- try {
29
- for (var _d = true, _e = tslib_1.__asyncValues(dir.keys()), _f; _f = await _e.next(), _a = _f.done, !_a; _d = true) {
30
- _c = _f.value;
31
- _d = false;
32
- const key = _c;
33
- list.push(key);
34
- }
35
- }
36
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
37
- finally {
38
- try {
39
- if (!_d && !_a && (_b = _e.return)) await _b.call(_e);
40
- }
41
- finally { if (e_1) throw e_1.error; }
42
- }
43
- expect(list).toStrictEqual(['folder']);
44
- });
45
- test('returns two folders', async () => {
46
- var _a, e_2, _b, _c;
47
- const { dir } = setup({
48
- folder: null,
49
- 'another/folder': null,
50
- });
51
- const list = [];
52
- try {
53
- for (var _d = true, _e = tslib_1.__asyncValues(dir.keys()), _f; _f = await _e.next(), _a = _f.done, !_a; _d = true) {
54
- _c = _f.value;
55
- _d = false;
56
- const key = _c;
57
- list.push(key);
58
- }
59
- }
60
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
61
- finally {
62
- try {
63
- if (!_d && !_a && (_b = _e.return)) await _b.call(_e);
64
- }
65
- finally { if (e_2) throw e_2.error; }
66
- }
67
- expect(list.length).toBe(2);
68
- });
69
- test('returns a file', async () => {
70
- var _a, e_3, _b, _c;
71
- const { dir } = setup({
72
- 'file.txt': 'Hello, world!',
73
- });
74
- const list = [];
75
- try {
76
- for (var _d = true, _e = tslib_1.__asyncValues(dir.keys()), _f; _f = await _e.next(), _a = _f.done, !_a; _d = true) {
77
- _c = _f.value;
78
- _d = false;
79
- const key = _c;
80
- list.push(key);
81
- }
82
- }
83
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
84
- finally {
85
- try {
86
- if (!_d && !_a && (_b = _e.return)) await _b.call(_e);
87
- }
88
- finally { if (e_3) throw e_3.error; }
89
- }
90
- expect(list).toStrictEqual(['file.txt']);
91
- });
92
- });
93
- describe('.entries()', () => {
94
- test('returns an empty iterator for an empty directory', async () => {
95
- const { dir } = setup();
96
- const keys = dir.entries();
97
- expect(await keys.next()).toStrictEqual({ done: true, value: undefined });
98
- });
99
- test('returns a folder', async () => {
100
- var _a, e_4, _b, _c;
101
- const { dir } = setup({ 'My Documents': null });
102
- try {
103
- for (var _d = true, _e = tslib_1.__asyncValues(dir.entries()), _f; _f = await _e.next(), _a = _f.done, !_a; _d = true) {
104
- _c = _f.value;
105
- _d = false;
106
- const [name, subdir] = _c;
107
- expect(name).toBe('My Documents');
108
- expect(subdir).toBeInstanceOf(NodeFileSystemDirectoryHandle_1.NodeFileSystemDirectoryHandle);
109
- expect(subdir.kind).toBe('directory');
110
- expect(subdir.name).toBe('My Documents');
111
- }
112
- }
113
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
114
- finally {
115
- try {
116
- if (!_d && !_a && (_b = _e.return)) await _b.call(_e);
117
- }
118
- finally { if (e_4) throw e_4.error; }
119
- }
120
- });
121
- test('returns a file', async () => {
122
- var _a, e_5, _b, _c;
123
- const { dir } = setup({
124
- 'file.txt': 'Hello, world!',
125
- });
126
- try {
127
- for (var _d = true, _e = tslib_1.__asyncValues(dir.entries()), _f; _f = await _e.next(), _a = _f.done, !_a; _d = true) {
128
- _c = _f.value;
129
- _d = false;
130
- const [name, file] = _c;
131
- expect(name).toBe('file.txt');
132
- expect(file).toBeInstanceOf(NodeFileSystemFileHandle_1.NodeFileSystemFileHandle);
133
- expect(file.kind).toBe('file');
134
- expect(file.name).toBe('file.txt');
135
- }
136
- }
137
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
138
- finally {
139
- try {
140
- if (!_d && !_a && (_b = _e.return)) await _b.call(_e);
141
- }
142
- finally { if (e_5) throw e_5.error; }
143
- }
144
- });
145
- test('returns two entries', async () => {
146
- var _a, e_6, _b, _c;
147
- const { dir } = setup({
148
- 'index.html': '<nobr>Hello, world!</nobr>',
149
- 'another/folder': null,
150
- });
151
- const handles = [];
152
- try {
153
- for (var _d = true, _e = tslib_1.__asyncValues(dir.entries()), _f; _f = await _e.next(), _a = _f.done, !_a; _d = true) {
154
- _c = _f.value;
155
- _d = false;
156
- const entry = _c;
157
- handles.push(entry[1]);
158
- }
159
- }
160
- catch (e_6_1) { e_6 = { error: e_6_1 }; }
161
- finally {
162
- try {
163
- if (!_d && !_a && (_b = _e.return)) await _b.call(_e);
164
- }
165
- finally { if (e_6) throw e_6.error; }
166
- }
167
- expect(handles.length).toBe(2);
168
- expect(handles.find(handle => handle.name === 'index.html')).toBeInstanceOf(NodeFileSystemFileHandle_1.NodeFileSystemFileHandle);
169
- expect(handles.find(handle => handle.name === 'another')).toBeInstanceOf(NodeFileSystemDirectoryHandle_1.NodeFileSystemDirectoryHandle);
170
- });
171
- });
172
- describe('.values()', () => {
173
- test('returns an empty iterator for an empty directory', async () => {
174
- const { dir } = setup();
175
- const values = dir.values();
176
- expect(await values.next()).toStrictEqual({ done: true, value: undefined });
177
- });
178
- test('returns a folder', async () => {
179
- var _a, e_7, _b, _c;
180
- const { dir } = setup({ 'My Documents': null });
181
- try {
182
- for (var _d = true, _e = tslib_1.__asyncValues(dir.values()), _f; _f = await _e.next(), _a = _f.done, !_a; _d = true) {
183
- _c = _f.value;
184
- _d = false;
185
- const subdir = _c;
186
- expect(subdir).toBeInstanceOf(NodeFileSystemDirectoryHandle_1.NodeFileSystemDirectoryHandle);
187
- expect(subdir.kind).toBe('directory');
188
- expect(subdir.name).toBe('My Documents');
189
- }
190
- }
191
- catch (e_7_1) { e_7 = { error: e_7_1 }; }
192
- finally {
193
- try {
194
- if (!_d && !_a && (_b = _e.return)) await _b.call(_e);
195
- }
196
- finally { if (e_7) throw e_7.error; }
197
- }
198
- });
199
- test('returns a file', async () => {
200
- var _a, e_8, _b, _c;
201
- const { dir } = setup({
202
- 'file.txt': 'Hello, world!',
203
- });
204
- try {
205
- for (var _d = true, _e = tslib_1.__asyncValues(dir.values()), _f; _f = await _e.next(), _a = _f.done, !_a; _d = true) {
206
- _c = _f.value;
207
- _d = false;
208
- const file = _c;
209
- expect(file).toBeInstanceOf(NodeFileSystemFileHandle_1.NodeFileSystemFileHandle);
210
- expect(file.kind).toBe('file');
211
- expect(file.name).toBe('file.txt');
212
- }
213
- }
214
- catch (e_8_1) { e_8 = { error: e_8_1 }; }
215
- finally {
216
- try {
217
- if (!_d && !_a && (_b = _e.return)) await _b.call(_e);
218
- }
219
- finally { if (e_8) throw e_8.error; }
220
- }
221
- });
222
- test('returns two entries', async () => {
223
- var _a, e_9, _b, _c;
224
- const { dir } = setup({
225
- 'index.html': '<nobr>Hello, world!</nobr>',
226
- 'another/folder': null,
227
- });
228
- const handles = [];
229
- try {
230
- for (var _d = true, _e = tslib_1.__asyncValues(dir.values()), _f; _f = await _e.next(), _a = _f.done, !_a; _d = true) {
231
- _c = _f.value;
232
- _d = false;
233
- const entry = _c;
234
- handles.push(entry);
235
- }
236
- }
237
- catch (e_9_1) { e_9 = { error: e_9_1 }; }
238
- finally {
239
- try {
240
- if (!_d && !_a && (_b = _e.return)) await _b.call(_e);
241
- }
242
- finally { if (e_9) throw e_9.error; }
243
- }
244
- expect(handles.length).toBe(2);
245
- expect(handles.find(handle => handle.name === 'index.html')).toBeInstanceOf(NodeFileSystemFileHandle_1.NodeFileSystemFileHandle);
246
- expect(handles.find(handle => handle.name === 'another')).toBeInstanceOf(NodeFileSystemDirectoryHandle_1.NodeFileSystemDirectoryHandle);
247
- });
248
- });
249
- describe('.getDirectoryHandle()', () => {
250
- test('throws "NotFoundError" DOMException if sub-directory not found', async () => {
251
- const { dir } = setup({ a: null });
252
- try {
253
- await dir.getDirectoryHandle('b');
254
- throw new Error('Not this error.');
255
- }
256
- catch (error) {
257
- expect(error).toBeInstanceOf(DOMException);
258
- expect(error.name).toBe('NotFoundError');
259
- expect(error.message).toBe('A requested file or directory could not be found at the time an operation was processed.');
260
- }
261
- });
262
- test('throws "TypeMismatchError" DOMException if entry is not a directory', async () => {
263
- const { dir } = setup({ file: 'contents' });
264
- try {
265
- await dir.getDirectoryHandle('file');
266
- throw new Error('Not this error.');
267
- }
268
- catch (error) {
269
- expect(error).toBeInstanceOf(DOMException);
270
- expect(error.name).toBe('TypeMismatchError');
271
- expect(error.message).toBe('The path supplied exists, but was not an entry of requested type.');
272
- }
273
- });
274
- test('throws if not in "readwrite" mode and attempting to create a directory', async () => {
275
- const { fs } = (0, __1.memfs)({}, '/');
276
- const dir = new NodeFileSystemDirectoryHandle_1.NodeFileSystemDirectoryHandle(fs, '/', { mode: 'read' });
277
- try {
278
- await dir.getDirectoryHandle('test', { create: true });
279
- throw new Error('Not this error');
280
- }
281
- catch (error) {
282
- expect(error).toBeInstanceOf(DOMException);
283
- expect(error.name).toBe('NotAllowedError');
284
- expect(error.message).toBe('The request is not allowed by the user agent or the platform in the current context.');
285
- }
286
- });
287
- const invalidNames = [
288
- '.',
289
- '..',
290
- '/',
291
- '/a',
292
- 'a/',
293
- 'a//b',
294
- 'a/.',
295
- 'a/..',
296
- 'a/b/.',
297
- 'a/b/..',
298
- '\\',
299
- '\\a',
300
- 'a\\',
301
- 'a\\\\b',
302
- 'a\\.',
303
- ];
304
- for (const invalidName of invalidNames) {
305
- test(`throws on invalid file name: "${invalidName}"`, async () => {
306
- const { dir } = setup({ file: 'contents' });
307
- try {
308
- await dir.getDirectoryHandle(invalidName);
309
- throw new Error('Not this error.');
310
- }
311
- catch (error) {
312
- expect(error).toBeInstanceOf(TypeError);
313
- expect(error.message).toBe(`Failed to execute 'getDirectoryHandle' on 'FileSystemDirectoryHandle': Name is not allowed.`);
314
- }
315
- });
316
- }
317
- test('can retrieve a child directory', async () => {
318
- const { dir } = setup({ file: 'contents', subdir: null });
319
- const subdir = await dir.getDirectoryHandle('subdir');
320
- expect(subdir.kind).toBe('directory');
321
- expect(subdir.name).toBe('subdir');
322
- expect(subdir).toBeInstanceOf(NodeFileSystemDirectoryHandle_1.NodeFileSystemDirectoryHandle);
323
- });
324
- test('can create a sub-directory', async () => {
325
- const { dir, fs } = setup({});
326
- expect(fs.existsSync('/subdir')).toBe(false);
327
- const subdir = await dir.getDirectoryHandle('subdir', { create: true });
328
- expect(fs.existsSync('/subdir')).toBe(true);
329
- expect(fs.statSync('/subdir').isDirectory()).toBe(true);
330
- expect(subdir.kind).toBe('directory');
331
- expect(subdir.name).toBe('subdir');
332
- expect(subdir).toBeInstanceOf(NodeFileSystemDirectoryHandle_1.NodeFileSystemDirectoryHandle);
333
- });
334
- });
335
- describe('.getFileHandle()', () => {
336
- test('throws "NotFoundError" DOMException if file not found', async () => {
337
- const { dir } = setup({ a: null });
338
- try {
339
- await dir.getFileHandle('b');
340
- throw new Error('Not this error.');
341
- }
342
- catch (error) {
343
- expect(error).toBeInstanceOf(DOMException);
344
- expect(error.name).toBe('NotFoundError');
345
- expect(error.message).toBe('A requested file or directory could not be found at the time an operation was processed.');
346
- }
347
- });
348
- test('throws "TypeMismatchError" DOMException if entry is not a file', async () => {
349
- const { dir } = setup({ directory: null });
350
- try {
351
- await dir.getFileHandle('directory');
352
- throw new Error('Not this error.');
353
- }
354
- catch (error) {
355
- expect(error).toBeInstanceOf(DOMException);
356
- expect(error.name).toBe('TypeMismatchError');
357
- expect(error.message).toBe('The path supplied exists, but was not an entry of requested type.');
358
- }
359
- });
360
- test('throws if not in "readwrite" mode and attempting to create a file', async () => {
361
- const { fs } = (0, __1.memfs)({}, '/');
362
- const dir = new NodeFileSystemDirectoryHandle_1.NodeFileSystemDirectoryHandle(fs, '/', { mode: 'read' });
363
- try {
364
- await dir.getFileHandle('test', { create: true });
365
- throw new Error('Not this error');
366
- }
367
- catch (error) {
368
- expect(error).toBeInstanceOf(DOMException);
369
- expect(error.name).toBe('NotAllowedError');
370
- expect(error.message).toBe('The request is not allowed by the user agent or the platform in the current context.');
371
- }
372
- });
373
- const invalidNames = [
374
- '',
375
- '.',
376
- '..',
377
- '/',
378
- '/a',
379
- 'a/',
380
- 'a//b',
381
- 'a/.',
382
- 'a/..',
383
- 'a/b/.',
384
- 'a/b/..',
385
- '\\',
386
- '\\a',
387
- 'a\\',
388
- 'a\\\\b',
389
- 'a\\.',
390
- ];
391
- for (const invalidName of invalidNames) {
392
- test(`throws on invalid file name: "${invalidName}"`, async () => {
393
- const { dir } = setup({ file: 'contents' });
394
- try {
395
- await dir.getFileHandle(invalidName);
396
- throw new Error('Not this error.');
397
- }
398
- catch (error) {
399
- expect(error).toBeInstanceOf(TypeError);
400
- expect(error.message).toBe(`Failed to execute 'getFileHandle' on 'FileSystemDirectoryHandle': Name is not allowed.`);
401
- }
402
- });
403
- }
404
- test('can retrieve a child file', async () => {
405
- const { dir } = setup({ file: 'contents', subdir: null });
406
- const subdir = await dir.getFileHandle('file');
407
- expect(subdir.kind).toBe('file');
408
- expect(subdir.name).toBe('file');
409
- expect(subdir).toBeInstanceOf(NodeFileSystemFileHandle_1.NodeFileSystemFileHandle);
410
- });
411
- test('can create a file', async () => {
412
- const { dir, fs } = setup({});
413
- expect(fs.existsSync('/text.txt')).toBe(false);
414
- const subdir = await dir.getFileHandle('text.txt', { create: true });
415
- expect(fs.existsSync('/text.txt')).toBe(true);
416
- expect(fs.statSync('/text.txt').isFile()).toBe(true);
417
- expect(subdir.kind).toBe('file');
418
- expect(subdir.name).toBe('text.txt');
419
- expect(subdir).toBeInstanceOf(NodeFileSystemFileHandle_1.NodeFileSystemFileHandle);
420
- });
421
- });
422
- describe('.removeEntry()', () => {
423
- test('throws "NotFoundError" DOMException if file not found', async () => {
424
- const { dir } = setup({ a: null });
425
- try {
426
- await dir.removeEntry('b');
427
- throw new Error('Not this error.');
428
- }
429
- catch (error) {
430
- expect(error).toBeInstanceOf(DOMException);
431
- expect(error.name).toBe('NotFoundError');
432
- expect(error.message).toBe('A requested file or directory could not be found at the time an operation was processed.');
433
- }
434
- });
435
- test('throws if not in "readwrite" mode and attempting to remove a file', async () => {
436
- const { fs } = (0, __1.memfs)({ a: 'b' }, '/');
437
- const dir = new NodeFileSystemDirectoryHandle_1.NodeFileSystemDirectoryHandle(fs, '/', { mode: 'read' });
438
- try {
439
- await dir.removeEntry('a');
440
- throw new Error('Not this error');
441
- }
442
- catch (error) {
443
- expect(error).toBeInstanceOf(DOMException);
444
- expect(error.name).toBe('NotAllowedError');
445
- expect(error.message).toBe('The request is not allowed by the user agent or the platform in the current context.');
446
- }
447
- });
448
- test('throws if not in "readwrite" mode and attempting to remove a folder', async () => {
449
- const { fs } = (0, __1.memfs)({ a: null }, '/');
450
- const dir = new NodeFileSystemDirectoryHandle_1.NodeFileSystemDirectoryHandle(fs, '/', { mode: 'read' });
451
- try {
452
- await dir.removeEntry('a');
453
- throw new Error('Not this error');
454
- }
455
- catch (error) {
456
- expect(error).toBeInstanceOf(DOMException);
457
- expect(error.name).toBe('NotAllowedError');
458
- expect(error.message).toBe('The request is not allowed by the user agent or the platform in the current context.');
459
- }
460
- });
461
- const invalidNames = [
462
- '',
463
- '.',
464
- '..',
465
- '/',
466
- '/a',
467
- 'a/',
468
- 'a//b',
469
- 'a/.',
470
- 'a/..',
471
- 'a/b/.',
472
- 'a/b/..',
473
- '\\',
474
- '\\a',
475
- 'a\\',
476
- 'a\\\\b',
477
- 'a\\.',
478
- ];
479
- for (const invalidName of invalidNames) {
480
- test(`throws on invalid file name: "${invalidName}"`, async () => {
481
- const { dir } = setup({ file: 'contents' });
482
- try {
483
- await dir.removeEntry(invalidName);
484
- throw new Error('Not this error.');
485
- }
486
- catch (error) {
487
- expect(error).toBeInstanceOf(TypeError);
488
- expect(error.message).toBe(`Failed to execute 'removeEntry' on 'FileSystemDirectoryHandle': Name is not allowed.`);
489
- }
490
- });
491
- }
492
- test('can delete a file', async () => {
493
- const { dir, fs } = setup({ file: 'contents', subdir: null });
494
- expect(fs.statSync('/file').isFile()).toBe(true);
495
- const res = await dir.removeEntry('file');
496
- expect(fs.existsSync('/file')).toBe(false);
497
- expect(res).toBe(undefined);
498
- });
499
- test('can delete a folder', async () => {
500
- const { dir, fs } = setup({ dir: null });
501
- expect(fs.statSync('/dir').isDirectory()).toBe(true);
502
- const res = await dir.removeEntry('dir');
503
- expect(fs.existsSync('/dir')).toBe(false);
504
- expect(res).toBe(undefined);
505
- });
506
- test('throws "InvalidModificationError" DOMException if directory has contents', async () => {
507
- const { dir, fs } = setup({
508
- 'dir/file': 'contents',
509
- });
510
- expect(fs.statSync('/dir').isDirectory()).toBe(true);
511
- let res;
512
- try {
513
- res = await dir.removeEntry('dir');
514
- throw new Error('Not this error.');
515
- }
516
- catch (error) {
517
- expect(res).toBe(undefined);
518
- expect(error).toBeInstanceOf(DOMException);
519
- expect(error.name).toBe('InvalidModificationError');
520
- expect(error.message).toBe('The object can not be modified in this way.');
521
- }
522
- });
523
- test('can recursively delete a folder with "recursive" flag', async () => {
524
- const { dir, fs } = setup({
525
- 'dir/file': 'contents',
526
- });
527
- expect(fs.statSync('/dir').isDirectory()).toBe(true);
528
- const res = await dir.removeEntry('dir', { recursive: true });
529
- expect(fs.existsSync('/dir')).toBe(false);
530
- expect(res).toBe(undefined);
531
- });
532
- });
533
- describe('.resolve()', () => {
534
- test('return empty array for itself', async () => {
535
- const { dir } = setup({});
536
- const res = await dir.resolve(dir);
537
- expect(res).toStrictEqual([]);
538
- });
539
- test('can resolve one level deep child', async () => {
540
- const { dir } = setup({
541
- file: 'contents',
542
- });
543
- const child = await dir.getFileHandle('file');
544
- const res = await dir.resolve(child);
545
- expect(res).toStrictEqual(['file']);
546
- });
547
- test('can resolve two level deep child', async () => {
548
- const { dir } = setup({
549
- 'dir/file': 'contents',
550
- });
551
- const child1 = await dir.getDirectoryHandle('dir');
552
- const child2 = await child1.getFileHandle('file');
553
- const res = await dir.resolve(child2);
554
- expect(res).toStrictEqual(['dir', 'file']);
555
- const res2 = await child1.resolve(child2);
556
- expect(res2).toStrictEqual(['file']);
557
- });
558
- test('returns "null" if not a descendant', async () => {
559
- const { dir } = setup({
560
- 'dir/file': 'contents',
561
- });
562
- const child1 = await dir.getDirectoryHandle('dir');
563
- const res = await child1.resolve(dir);
564
- expect(res).toBe(null);
565
- });
566
- });
567
- });
568
- //# sourceMappingURL=NodeFileSystemDirectoryHandle.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NodeFileSystemDirectoryHandle.test.js","sourceRoot":"","sources":["../../../src/node-to-fsa/__tests__/NodeFileSystemDirectoryHandle.test.ts"],"names":[],"mappings":"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"}