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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memfs",
3
- "version": "4.7.5",
3
+ "version": "4.7.6",
4
4
  "description": "In-memory file-system with Node's fs API.",
5
5
  "keywords": [
6
6
  "fs",
@@ -50,7 +50,7 @@
50
50
  "demo/runkit.js"
51
51
  ],
52
52
  "scripts": {
53
- "build": "tsc -p .",
53
+ "build": "tsc -p . && rimraf --glob lib/__tests__ 'lib/**/__tests__'",
54
54
  "build:webfs": "NODE_ENV=production webpack --config ./src/webfs/webpack.config.js",
55
55
  "clean": "rimraf lib types",
56
56
  "demo:crud-and-cas": "webpack serve --config ./demo/crud-and-cas/webpack.config.js",
@@ -1,13 +0,0 @@
1
- /// <reference types="jest" />
2
- import { Link, Node } from '../node';
3
- export declare const create: (json?: {
4
- [s: string]: string;
5
- }) => import("../volume").Volume;
6
- export declare const createFs: (json?: any) => import("..").IFs;
7
- export declare const tryGetChild: (link: Link, name: string) => Link;
8
- export declare const tryGetChildNode: (link: Link, name: string) => Node;
9
- /**
10
- * The `File` global is available only starting in Node v20. Hence we run the
11
- * tests only in those versions.
12
- */
13
- export declare const onlyOnNode20: jest.Describe;
@@ -1,30 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.onlyOnNode20 = exports.tryGetChildNode = exports.tryGetChild = exports.createFs = exports.create = void 0;
4
- const __1 = require("..");
5
- const create = (json = { '/foo': 'bar' }) => {
6
- const vol = __1.Volume.fromJSON(json);
7
- return vol;
8
- };
9
- exports.create = create;
10
- const createFs = (json) => {
11
- return (0, __1.createFsFromVolume)((0, exports.create)(json));
12
- };
13
- exports.createFs = createFs;
14
- const tryGetChild = (link, name) => {
15
- const child = link.getChild(name);
16
- if (!child) {
17
- throw new Error(`expected link to have a child named "${name}"`);
18
- }
19
- return child;
20
- };
21
- exports.tryGetChild = tryGetChild;
22
- const tryGetChildNode = (link, name) => (0, exports.tryGetChild)(link, name).getNode();
23
- exports.tryGetChildNode = tryGetChildNode;
24
- const nodeMajorVersion = +process.version.split('.')[0].slice(1);
25
- /**
26
- * The `File` global is available only starting in Node v20. Hence we run the
27
- * tests only in those versions.
28
- */
29
- exports.onlyOnNode20 = nodeMajorVersion >= 20 ? describe : describe.skip;
30
- //# sourceMappingURL=util.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/__tests__/util.ts"],"names":[],"mappings":";;;AAAA,0BAAgD;AAGzC,MAAM,MAAM,GAAG,CAAC,OAAgC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;IAC1E,MAAM,GAAG,GAAG,UAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAHW,QAAA,MAAM,UAGjB;AAEK,MAAM,QAAQ,GAAG,CAAC,IAAK,EAAE,EAAE;IAChC,OAAO,IAAA,sBAAkB,EAAC,IAAA,cAAM,EAAC,IAAI,CAAC,CAAC,CAAC;AAC1C,CAAC,CAAC;AAFW,QAAA,QAAQ,YAEnB;AAEK,MAAM,WAAW,GAAG,CAAC,IAAU,EAAE,IAAY,EAAQ,EAAE;IAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAElC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,wCAAwC,IAAI,GAAG,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AARW,QAAA,WAAW,eAQtB;AAEK,MAAM,eAAe,GAAG,CAAC,IAAU,EAAE,IAAY,EAAQ,EAAE,CAAC,IAAA,mBAAW,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;AAAxF,QAAA,eAAe,mBAAyE;AAErG,MAAM,gBAAgB,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEjE;;;GAGG;AACU,QAAA,YAAY,GAAG,gBAAgB,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,69 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const __1 = require("../..");
4
- const util_1 = require("../../__tests__/util");
5
- const node_to_fsa_1 = require("../../node-to-fsa");
6
- const fsa_to_node_1 = require("../../fsa-to-node");
7
- const node_to_crud_1 = require("../../node-to-crud");
8
- const testCrudfs_1 = require("../../crud/__tests__/testCrudfs");
9
- const fsa_to_crud_1 = require("../../fsa-to-crud");
10
- (0, util_1.onlyOnNode20)('CRUD matryoshka', () => {
11
- describe('crud(memfs)', () => {
12
- (0, testCrudfs_1.testCrudfs)(() => {
13
- const { fs } = (0, __1.memfs)();
14
- const crud = new node_to_crud_1.NodeCrud({ fs: fs.promises, dir: '/' });
15
- return { crud, snapshot: () => fs.__vol.toJSON() };
16
- });
17
- });
18
- describe('crud(fsa(memfs))', () => {
19
- (0, testCrudfs_1.testCrudfs)(() => {
20
- const { fs } = (0, __1.memfs)();
21
- const fsa = new node_to_fsa_1.NodeFileSystemDirectoryHandle(fs, '/', { mode: 'readwrite' });
22
- const crud = new fsa_to_crud_1.FsaCrud(fsa);
23
- return { crud, snapshot: () => fs.__vol.toJSON() };
24
- });
25
- });
26
- describe('crud(fs(fsa(memfs)))', () => {
27
- (0, testCrudfs_1.testCrudfs)(() => {
28
- const { fs } = (0, __1.memfs)();
29
- const fsa = new node_to_fsa_1.NodeFileSystemDirectoryHandle(fs, '/', { mode: 'readwrite' });
30
- const fs2 = new fsa_to_node_1.FsaNodeFs(fsa);
31
- const crud = new node_to_crud_1.NodeCrud({ fs: fs2.promises, dir: '/' });
32
- return { crud, snapshot: () => fs.__vol.toJSON() };
33
- });
34
- });
35
- describe('crud(fsa(fs(fsa(memfs))))', () => {
36
- (0, testCrudfs_1.testCrudfs)(() => {
37
- const { fs } = (0, __1.memfs)();
38
- const fsa = new node_to_fsa_1.NodeFileSystemDirectoryHandle(fs, '/', { mode: 'readwrite' });
39
- const fs2 = new fsa_to_node_1.FsaNodeFs(fsa);
40
- const fsa2 = new node_to_fsa_1.NodeFileSystemDirectoryHandle(fs2, '/', { mode: 'readwrite' });
41
- const crud = new fsa_to_crud_1.FsaCrud(fsa2);
42
- return { crud, snapshot: () => fs.__vol.toJSON() };
43
- });
44
- });
45
- describe('crud(fs(fsa(fs(fsa(memfs)))))', () => {
46
- (0, testCrudfs_1.testCrudfs)(() => {
47
- const { fs } = (0, __1.memfs)();
48
- const fsa = new node_to_fsa_1.NodeFileSystemDirectoryHandle(fs, '/', { mode: 'readwrite' });
49
- const fs2 = new fsa_to_node_1.FsaNodeFs(fsa);
50
- const fsa2 = new node_to_fsa_1.NodeFileSystemDirectoryHandle(fs2, '/', { mode: 'readwrite' });
51
- const fs3 = new fsa_to_node_1.FsaNodeFs(fsa2);
52
- const crud = new node_to_crud_1.NodeCrud({ fs: fs3.promises, dir: '/' });
53
- return { crud, snapshot: () => fs.__vol.toJSON() };
54
- });
55
- });
56
- describe('crud(fsa(fs(fsa(fs(fsa(memfs))))))', () => {
57
- (0, testCrudfs_1.testCrudfs)(() => {
58
- const { fs } = (0, __1.memfs)();
59
- const fsa = new node_to_fsa_1.NodeFileSystemDirectoryHandle(fs, '/', { mode: 'readwrite' });
60
- const fs2 = new fsa_to_node_1.FsaNodeFs(fsa);
61
- const fsa2 = new node_to_fsa_1.NodeFileSystemDirectoryHandle(fs2, '/', { mode: 'readwrite' });
62
- const fs3 = new fsa_to_node_1.FsaNodeFs(fsa2);
63
- const fsa3 = new node_to_fsa_1.NodeFileSystemDirectoryHandle(fs3, '/', { mode: 'readwrite' });
64
- const crud = new fsa_to_crud_1.FsaCrud(fsa3);
65
- return { crud, snapshot: () => fs.__vol.toJSON() };
66
- });
67
- });
68
- });
69
- //# sourceMappingURL=matryoshka.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"matryoshka.test.js","sourceRoot":"","sources":["../../../src/crud/__tests__/matryoshka.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import type { CrudApi } from '../types';
2
- export type Setup = () => {
3
- crud: CrudApi;
4
- snapshot: () => Record<string, string | null>;
5
- };
6
- export declare const testCrudfs: (setup: Setup) => void;
@@ -1,278 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.testCrudfs = void 0;
4
- const thingies_1 = require("../../thingies");
5
- const b = (str) => {
6
- const buf = Buffer.from(str);
7
- return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
8
- };
9
- const testCrudfs = (setup) => {
10
- describe('.put()', () => {
11
- test('throws if the type is not valid', async () => {
12
- const { crud } = setup();
13
- const [, err] = await (0, thingies_1.of)(crud.put(['.', 'foo'], 'bar', new Uint8Array()));
14
- expect(err).toBeInstanceOf(TypeError);
15
- expect(err.message).toBe("Failed to execute 'put' on 'crudfs': Name is not allowed.");
16
- });
17
- test('throws if id is not valid', async () => {
18
- const { crud } = setup();
19
- const [, err] = await (0, thingies_1.of)(crud.put(['foo'], '..', new Uint8Array()));
20
- expect(err).toBeInstanceOf(TypeError);
21
- expect(err.message).toBe("Failed to execute 'put' on 'crudfs': Name is not allowed.");
22
- });
23
- test('can store a resource at root', async () => {
24
- const { crud, snapshot } = setup();
25
- await crud.put([], 'bar', b('abc'));
26
- expect(snapshot()).toStrictEqual({
27
- '/bar': 'abc',
28
- });
29
- });
30
- test('can store a resource in two levels deep collection', async () => {
31
- const { crud, snapshot } = setup();
32
- await crud.put(['a', 'b'], 'bar', b('abc'));
33
- expect(snapshot()).toStrictEqual({
34
- '/a/b/bar': 'abc',
35
- });
36
- });
37
- test('can overwrite existing resource', async () => {
38
- const { crud, snapshot } = setup();
39
- await crud.put(['a', 'b'], 'bar', b('abc'));
40
- await crud.put(['a', 'b'], 'bar', b('efg'));
41
- expect(snapshot()).toStrictEqual({
42
- '/a/b/bar': 'efg',
43
- });
44
- });
45
- test('can choose to throw if item already exists', async () => {
46
- const { crud } = setup();
47
- await crud.put(['a', 'b'], 'bar', b('abc'), { throwIf: 'exists' });
48
- const [, err] = await (0, thingies_1.of)(crud.put(['a', 'b'], 'bar', b('efg'), { throwIf: 'exists' }));
49
- expect(err).toBeInstanceOf(DOMException);
50
- expect(err.name).toBe('Exists');
51
- });
52
- test('can choose to throw if item does not exist', async () => {
53
- const { crud, snapshot } = setup();
54
- const [, err] = await (0, thingies_1.of)(crud.put(['a', 'b'], 'bar', b('1'), { throwIf: 'missing' }));
55
- await crud.put(['a', 'b'], 'bar', b('2'));
56
- await crud.put(['a', 'b'], 'bar', b('3'), { throwIf: 'missing' });
57
- expect(err).toBeInstanceOf(DOMException);
58
- expect(err.name).toBe('Missing');
59
- expect(snapshot()).toStrictEqual({
60
- '/a/b/bar': '3',
61
- });
62
- });
63
- });
64
- describe('.get()', () => {
65
- test('throws if the type is not valid', async () => {
66
- const { crud } = setup();
67
- const [, err] = await (0, thingies_1.of)(crud.get(['', 'foo'], 'bar'));
68
- expect(err).toBeInstanceOf(TypeError);
69
- expect(err.message).toBe("Failed to execute 'get' on 'crudfs': Name is not allowed.");
70
- });
71
- test('throws if id is not valid', async () => {
72
- const { crud } = setup();
73
- const [, err] = await (0, thingies_1.of)(crud.get(['foo'], ''));
74
- expect(err).toBeInstanceOf(TypeError);
75
- expect(err.message).toBe("Failed to execute 'get' on 'crudfs': Name is not allowed.");
76
- });
77
- test('throws if collection does not exist', async () => {
78
- const { crud } = setup();
79
- const [, err] = await (0, thingies_1.of)(crud.get(['foo'], 'bar'));
80
- expect(err).toBeInstanceOf(DOMException);
81
- expect(err.name).toBe('CollectionNotFound');
82
- });
83
- test('throws if resource does not exist', async () => {
84
- const { crud } = setup();
85
- await crud.put(['foo'], 'bar', b('abc'));
86
- const [, err] = await (0, thingies_1.of)(crud.get(['foo'], 'baz'));
87
- expect(err).toBeInstanceOf(DOMException);
88
- expect(err.name).toBe('ResourceNotFound');
89
- });
90
- test('can fetch an existing resource', async () => {
91
- const { crud } = setup();
92
- await crud.put(['foo'], 'bar', b('abc'));
93
- const blob = await crud.get(['foo'], 'bar');
94
- expect(blob).toStrictEqual(b('abc'));
95
- });
96
- });
97
- describe('.del()', () => {
98
- test('throws if the type is not valid', async () => {
99
- const { crud } = setup();
100
- const [, err] = await (0, thingies_1.of)(crud.del(['sdf\\dd', 'foo'], 'bar'));
101
- expect(err).toBeInstanceOf(TypeError);
102
- expect(err.message).toBe("Failed to execute 'del' on 'crudfs': Name is not allowed.");
103
- });
104
- test('throws if id is not valid', async () => {
105
- const { crud } = setup();
106
- const [, err] = await (0, thingies_1.of)(crud.del(['foo'], 'asdf/asdf'));
107
- expect(err).toBeInstanceOf(TypeError);
108
- expect(err.message).toBe("Failed to execute 'del' on 'crudfs': Name is not allowed.");
109
- });
110
- describe('when collection does not exist', () => {
111
- test('throws by default', async () => {
112
- const { crud } = setup();
113
- const [, err] = await (0, thingies_1.of)(crud.del(['foo'], 'bar'));
114
- expect(err).toBeInstanceOf(DOMException);
115
- expect(err.name).toBe('CollectionNotFound');
116
- });
117
- test('does not throw when "silent" flag set', async () => {
118
- const { crud } = setup();
119
- await crud.del(['foo'], 'bar', true);
120
- });
121
- });
122
- describe('when collection is found but resource is not', () => {
123
- test('throws by default', async () => {
124
- const { crud } = setup();
125
- await crud.put(['foo'], 'bar', b('abc'));
126
- const [, err] = await (0, thingies_1.of)(crud.del(['foo'], 'baz'));
127
- expect(err).toBeInstanceOf(DOMException);
128
- expect(err.name).toBe('ResourceNotFound');
129
- });
130
- test('does not throw when "silent" flag set', async () => {
131
- const { crud } = setup();
132
- await crud.put(['foo'], 'bar', b('abc'));
133
- await crud.del(['foo'], 'baz', true);
134
- });
135
- });
136
- test('deletes an existing resource', async () => {
137
- const { crud } = setup();
138
- await crud.put(['foo'], 'bar', b('abc'));
139
- await crud.get(['foo'], 'bar');
140
- await crud.del(['foo'], 'bar');
141
- const [, err] = await (0, thingies_1.of)(crud.get(['foo'], 'bar'));
142
- expect(err).toBeInstanceOf(DOMException);
143
- expect(err.name).toBe('ResourceNotFound');
144
- });
145
- });
146
- describe('.info()', () => {
147
- test('throws if the type is not valid', async () => {
148
- const { crud } = setup();
149
- const [, err] = await (0, thingies_1.of)(crud.info(['', 'foo'], 'bar'));
150
- expect(err).toBeInstanceOf(TypeError);
151
- expect(err.message).toBe("Failed to execute 'info' on 'crudfs': Name is not allowed.");
152
- });
153
- test('throws if id is not valid', async () => {
154
- const { crud } = setup();
155
- const [, err] = await (0, thingies_1.of)(crud.info(['foo'], '/'));
156
- expect(err).toBeInstanceOf(TypeError);
157
- expect(err.message).toBe("Failed to execute 'info' on 'crudfs': Name is not allowed.");
158
- });
159
- test('can retrieve information about a resource', async () => {
160
- const { crud } = setup();
161
- await crud.put(['foo'], 'bar', b('abc'));
162
- const info = await crud.info(['foo'], 'bar');
163
- expect(info).toMatchObject({
164
- type: 'resource',
165
- id: 'bar',
166
- size: 3,
167
- modified: expect.any(Number),
168
- });
169
- });
170
- test('can retrieve information about a collection', async () => {
171
- const { crud } = setup();
172
- await crud.put(['foo'], 'bar', b('abc'));
173
- const info = await crud.info(['foo']);
174
- expect(info).toMatchObject({
175
- type: 'collection',
176
- });
177
- });
178
- test('throws when resource not found', async () => {
179
- const { crud } = setup();
180
- await crud.put(['foo'], 'bar', b('abc'));
181
- const [, err] = await (0, thingies_1.of)(crud.info(['foo'], 'baz'));
182
- expect(err).toBeInstanceOf(DOMException);
183
- expect(err.name).toBe('ResourceNotFound');
184
- });
185
- test('throws when collection not found', async () => {
186
- const { crud } = setup();
187
- await crud.put(['foo', 'a'], 'bar', b('abc'));
188
- const [, err] = await (0, thingies_1.of)(crud.info(['foo', 'b'], 'baz'));
189
- expect(err).toBeInstanceOf(DOMException);
190
- expect(err.name).toBe('CollectionNotFound');
191
- });
192
- });
193
- describe('.drop()', () => {
194
- test('throws if the collection is not valid', async () => {
195
- const { crud } = setup();
196
- const [, err] = await (0, thingies_1.of)(crud.drop(['', 'foo']));
197
- expect(err).toBeInstanceOf(TypeError);
198
- expect(err.message).toBe("Failed to execute 'drop' on 'crudfs': Name is not allowed.");
199
- });
200
- test('can recursively delete a collection', async () => {
201
- const { crud } = setup();
202
- await crud.put(['foo', 'a'], 'bar', b('1'));
203
- await crud.put(['foo', 'a'], 'baz', b('2'));
204
- await crud.put(['foo', 'b'], 'xyz', b('3'));
205
- const info = await crud.info(['foo', 'a']);
206
- expect(info.type).toBe('collection');
207
- await crud.drop(['foo', 'a']);
208
- const [, err] = await (0, thingies_1.of)(crud.info(['foo', 'a']));
209
- expect(err).toBeInstanceOf(DOMException);
210
- expect(err.name).toBe('CollectionNotFound');
211
- });
212
- test('throws if collection does not exist', async () => {
213
- const { crud } = setup();
214
- await crud.put(['foo', 'a'], 'bar', b('1'));
215
- await crud.put(['foo', 'a'], 'baz', b('2'));
216
- await crud.put(['foo', 'b'], 'xyz', b('3'));
217
- const [, err] = await (0, thingies_1.of)(crud.drop(['gg']));
218
- expect(err).toBeInstanceOf(DOMException);
219
- expect(err.name).toBe('CollectionNotFound');
220
- });
221
- test('when "silent" flag set, does not throw if collection does not exist', async () => {
222
- const { crud } = setup();
223
- await crud.put(['foo', 'a'], 'bar', b('1'));
224
- await crud.put(['foo', 'a'], 'baz', b('2'));
225
- await crud.put(['foo', 'b'], 'xyz', b('3'));
226
- await crud.drop(['gg'], true);
227
- });
228
- test('can recursively delete everything from root', async () => {
229
- const { crud, snapshot } = setup();
230
- await crud.put(['foo', 'a'], 'bar', b('1'));
231
- await crud.put(['baz', 'a'], 'baz', b('2'));
232
- await crud.put(['bar', 'b'], 'xyz', b('3'));
233
- const info = await crud.info(['foo', 'a']);
234
- expect(info.type).toBe('collection');
235
- await crud.drop([]);
236
- expect(snapshot()).toEqual({});
237
- });
238
- });
239
- describe('.list()', () => {
240
- test('throws if the collection is not valid', async () => {
241
- const { crud } = setup();
242
- const [, err] = await (0, thingies_1.of)(crud.list(['./..', 'foo']));
243
- expect(err).toBeInstanceOf(TypeError);
244
- expect(err.message).toBe("Failed to execute 'drop' on 'crudfs': Name is not allowed.");
245
- });
246
- test('can retrieve a list of resources and collections at root', async () => {
247
- const { crud } = setup();
248
- await crud.put(['foo'], 'bar', b('1'));
249
- await crud.put([], 'baz', b('1'));
250
- await crud.put([], 'qux', b('2'));
251
- const list = await crud.list([]);
252
- expect(list.length).toBe(3);
253
- expect(list.find(x => x.id === 'baz')).toMatchObject({
254
- type: 'resource',
255
- id: 'baz',
256
- });
257
- expect(list.find(x => x.id === 'qux')).toMatchObject({
258
- type: 'resource',
259
- id: 'qux',
260
- });
261
- expect(list.find(x => x.id === 'foo')).toMatchObject({
262
- type: 'collection',
263
- id: 'foo',
264
- });
265
- });
266
- test('throws when try to list a non-existing collection', async () => {
267
- const { crud } = setup();
268
- await crud.put(['foo'], 'bar', b('1'));
269
- await crud.put([], 'baz', b('1'));
270
- await crud.put([], 'qux', b('2'));
271
- const [, err] = await (0, thingies_1.of)(crud.list(['gg']));
272
- expect(err).toBeInstanceOf(DOMException);
273
- expect(err.name).toBe('CollectionNotFound');
274
- });
275
- });
276
- };
277
- exports.testCrudfs = testCrudfs;
278
- //# sourceMappingURL=testCrudfs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"testCrudfs.js","sourceRoot":"","sources":["../../../src/crud/__tests__/testCrudfs.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,38 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const __1 = require("../..");
4
- const util_1 = require("../../__tests__/util");
5
- const node_to_fsa_1 = require("../../node-to-fsa");
6
- const FsaCrud_1 = require("../../fsa-to-crud/FsaCrud");
7
- const CrudCas_1 = require("../CrudCas");
8
- const testCasfs_1 = require("./testCasfs");
9
- const NodeCrud_1 = require("../../node-to-crud/NodeCrud");
10
- (0, util_1.onlyOnNode20)('CrudCas on FsaCrud', () => {
11
- const setup = () => {
12
- const { fs } = (0, __1.memfs)();
13
- const fsa = new node_to_fsa_1.NodeFileSystemDirectoryHandle(fs, '/', { mode: 'readwrite' });
14
- const crud = new FsaCrud_1.FsaCrud(fsa);
15
- const cas = new CrudCas_1.CrudCas(crud, { hash: testCasfs_1.hash });
16
- return { fs, fsa, crud, cas, snapshot: () => fs.__vol.toJSON() };
17
- };
18
- (0, testCasfs_1.testCasfs)(setup);
19
- });
20
- (0, util_1.onlyOnNode20)('CrudCas on NodeCrud at root', () => {
21
- const setup = () => {
22
- const { fs } = (0, __1.memfs)();
23
- const crud = new NodeCrud_1.NodeCrud({ fs: fs.promises, dir: '/' });
24
- const cas = new CrudCas_1.CrudCas(crud, { hash: testCasfs_1.hash });
25
- return { fs, crud, cas, snapshot: () => fs.__vol.toJSON() };
26
- };
27
- (0, testCasfs_1.testCasfs)(setup);
28
- });
29
- (0, util_1.onlyOnNode20)('CrudCas on NodeCrud at in sub-folder', () => {
30
- const setup = () => {
31
- const { fs } = (0, __1.memfs)({ '/a/b/c': null });
32
- const crud = new NodeCrud_1.NodeCrud({ fs: fs.promises, dir: '/a/b/c' });
33
- const cas = new CrudCas_1.CrudCas(crud, { hash: testCasfs_1.hash });
34
- return { fs, crud, cas, snapshot: () => fs.__vol.toJSON() };
35
- };
36
- (0, testCasfs_1.testCasfs)(setup);
37
- });
38
- //# sourceMappingURL=CrudCas.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CrudCas.test.js","sourceRoot":"","sources":["../../../src/crud-to-cas/__tests__/CrudCas.test.ts"],"names":[],"mappings":";;AAAA,6BAA8B;AAC9B,+CAAoD;AACpD,mDAAkE;AAClE,uDAAoD;AACpD,wCAAqC;AACrC,2CAA8C;AAC9C,0DAAuD;AAEvD,IAAA,mBAAY,EAAC,oBAAoB,EAAE,GAAG,EAAE;IACtC,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,MAAM,EAAE,EAAE,EAAE,GAAG,IAAA,SAAK,GAAE,CAAC;QACvB,MAAM,GAAG,GAAG,IAAI,2CAA6B,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QAC9E,MAAM,IAAI,GAAG,IAAI,iBAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,iBAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAJ,gBAAI,EAAE,CAAC,CAAC;QACxC,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAO,EAAG,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;IAC1E,CAAC,CAAC;IACF,IAAA,qBAAS,EAAC,KAAK,CAAC,CAAC;AACnB,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAY,EAAC,6BAA6B,EAAE,GAAG,EAAE;IAC/C,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,MAAM,EAAE,EAAE,EAAE,GAAG,IAAA,SAAK,GAAE,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,mBAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACzD,MAAM,GAAG,GAAG,IAAI,iBAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAJ,gBAAI,EAAE,CAAC,CAAC;QACxC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAO,EAAG,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;IACrE,CAAC,CAAC;IACF,IAAA,qBAAS,EAAC,KAAK,CAAC,CAAC;AACnB,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAY,EAAC,sCAAsC,EAAE,GAAG,EAAE;IACxD,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,MAAM,EAAE,EAAE,EAAE,GAAG,IAAA,SAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,mBAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9D,MAAM,GAAG,GAAG,IAAI,iBAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAJ,gBAAI,EAAE,CAAC,CAAC;QACxC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAO,EAAG,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;IACrE,CAAC,CAAC;IACF,IAAA,qBAAS,EAAC,KAAK,CAAC,CAAC;AACnB,CAAC,CAAC,CAAC"}
@@ -1,9 +0,0 @@
1
- import type { CasApi } from '../../cas/types';
2
- import type { CrudApi } from '../../crud/types';
3
- export declare const hash: (blob: Uint8Array) => Promise<string>;
4
- export type Setup = () => {
5
- cas: CasApi;
6
- crud: CrudApi;
7
- snapshot: () => Record<string, string | null>;
8
- };
9
- export declare const testCasfs: (setup: Setup) => void;
@@ -1,108 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.testCasfs = exports.hash = void 0;
4
- const thingies_1 = require("../../thingies");
5
- const crypto_1 = require("crypto");
6
- const util_1 = require("../util");
7
- const hash = async (blob) => {
8
- const shasum = (0, crypto_1.createHash)('sha1');
9
- shasum.update(blob);
10
- return shasum.digest('hex');
11
- };
12
- exports.hash = hash;
13
- const b = (str) => {
14
- const buf = Buffer.from(str);
15
- return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
16
- };
17
- const testCasfs = (setup) => {
18
- describe('.put()', () => {
19
- test('can store a blob', async () => {
20
- const blob = b('hello world');
21
- const { cas, snapshot } = setup();
22
- const hash = await cas.put(blob);
23
- expect(hash).toBe('2aae6c35c94fcfb415dbe95f408b9ce91ee846ed');
24
- expect(snapshot()).toMatchSnapshot();
25
- });
26
- });
27
- describe('.get()', () => {
28
- test('can retrieve existing blob', async () => {
29
- const blob = b('hello world');
30
- const { cas } = setup();
31
- const hash = await cas.put(blob);
32
- const blob2 = await cas.get(hash);
33
- expect(blob2).toStrictEqual(blob);
34
- });
35
- test('throws if blob does not exist', async () => {
36
- const blob = b('hello world 2');
37
- const { cas } = setup();
38
- const hash = await cas.put(blob);
39
- const [, err] = await (0, thingies_1.of)(cas.get('2aae6c35c94fcfb415dbe95f408b9ce91ee846ed'));
40
- expect(err).toBeInstanceOf(DOMException);
41
- expect(err.name).toBe('BlobNotFound');
42
- });
43
- test('throws if blob contents does not match the hash', async () => {
44
- const blob = b('hello world');
45
- const { cas, crud } = setup();
46
- const hash = await cas.put(blob);
47
- const location = (0, util_1.hashToLocation)(hash);
48
- await crud.put(location[0], location[1], b('hello world!'));
49
- const [, err] = await (0, thingies_1.of)(cas.get(hash));
50
- expect(err).toBeInstanceOf(DOMException);
51
- expect(err.name).toBe('Integrity');
52
- });
53
- test('does not throw if integrity check is skipped', async () => {
54
- const blob = b('hello world');
55
- const { cas, crud } = setup();
56
- const hash = await cas.put(blob);
57
- const location = (0, util_1.hashToLocation)(hash);
58
- await crud.put(location[0], location[1], b('hello world!'));
59
- const blob2 = await cas.get(hash, { skipVerification: true });
60
- expect(blob2).toStrictEqual(b('hello world!'));
61
- });
62
- });
63
- describe('.info()', () => {
64
- test('can retrieve existing blob info', async () => {
65
- const blob = b('hello world');
66
- const { cas } = setup();
67
- const hash = await cas.put(blob);
68
- const info = await cas.info(hash);
69
- expect(info.size).toBe(11);
70
- });
71
- test('throws if blob does not exist', async () => {
72
- const blob = b('hello world 2');
73
- const { cas } = setup();
74
- const hash = await cas.put(blob);
75
- const [, err] = await (0, thingies_1.of)(cas.info('2aae6c35c94fcfb415dbe95f408b9ce91ee846ed'));
76
- expect(err).toBeInstanceOf(DOMException);
77
- expect(err.name).toBe('BlobNotFound');
78
- });
79
- });
80
- describe('.del()', () => {
81
- test('can delete an existing blob', async () => {
82
- const blob = b('hello world');
83
- const { cas } = setup();
84
- const hash = await cas.put(blob);
85
- const info = await cas.info(hash);
86
- await cas.del(hash);
87
- const [, err] = await (0, thingies_1.of)(cas.info(hash));
88
- expect(err).toBeInstanceOf(DOMException);
89
- expect(err.name).toBe('BlobNotFound');
90
- });
91
- test('throws if blob does not exist', async () => {
92
- const blob = b('hello world 2');
93
- const { cas } = setup();
94
- const hash = await cas.put(blob);
95
- const [, err] = await (0, thingies_1.of)(cas.del('2aae6c35c94fcfb415dbe95f408b9ce91ee846ed'));
96
- expect(err).toBeInstanceOf(DOMException);
97
- expect(err.name).toBe('BlobNotFound');
98
- });
99
- test('does not throw if "silent" flag is provided', async () => {
100
- const blob = b('hello world 2');
101
- const { cas } = setup();
102
- const hash = await cas.put(blob);
103
- await cas.del('2aae6c35c94fcfb415dbe95f408b9ce91ee846ed', true);
104
- });
105
- });
106
- };
107
- exports.testCasfs = testCasfs;
108
- //# sourceMappingURL=testCasfs.js.map