@streetjs/storage 1.0.0 → 1.0.1

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 (225) hide show
  1. package/dist/drivers/local.d.ts +8 -0
  2. package/dist/drivers/local.d.ts.map +1 -1
  3. package/dist/drivers/local.js +18 -3
  4. package/dist/drivers/local.js.map +1 -1
  5. package/package.json +12 -6
  6. package/dist/tests/access.test.d.ts +0 -2
  7. package/dist/tests/access.test.d.ts.map +0 -1
  8. package/dist/tests/access.test.js +0 -270
  9. package/dist/tests/access.test.js.map +0 -1
  10. package/dist/tests/azure-driver.test.d.ts +0 -2
  11. package/dist/tests/azure-driver.test.d.ts.map +0 -1
  12. package/dist/tests/azure-driver.test.js +0 -183
  13. package/dist/tests/azure-driver.test.js.map +0 -1
  14. package/dist/tests/backblaze-driver.test.d.ts +0 -2
  15. package/dist/tests/backblaze-driver.test.d.ts.map +0 -1
  16. package/dist/tests/backblaze-driver.test.js +0 -185
  17. package/dist/tests/backblaze-driver.test.js.map +0 -1
  18. package/dist/tests/bridge-degradation.test.d.ts +0 -2
  19. package/dist/tests/bridge-degradation.test.d.ts.map +0 -1
  20. package/dist/tests/bridge-degradation.test.js +0 -138
  21. package/dist/tests/bridge-degradation.test.js.map +0 -1
  22. package/dist/tests/cli.test.d.ts +0 -2
  23. package/dist/tests/cli.test.d.ts.map +0 -1
  24. package/dist/tests/cli.test.js +0 -127
  25. package/dist/tests/cli.test.js.map +0 -1
  26. package/dist/tests/contract.d.ts +0 -131
  27. package/dist/tests/contract.d.ts.map +0 -1
  28. package/dist/tests/contract.js +0 -222
  29. package/dist/tests/contract.js.map +0 -1
  30. package/dist/tests/contract.test.d.ts +0 -2
  31. package/dist/tests/contract.test.d.ts.map +0 -1
  32. package/dist/tests/contract.test.js +0 -110
  33. package/dist/tests/contract.test.js.map +0 -1
  34. package/dist/tests/directory.test.d.ts +0 -2
  35. package/dist/tests/directory.test.d.ts.map +0 -1
  36. package/dist/tests/directory.test.js +0 -125
  37. package/dist/tests/directory.test.js.map +0 -1
  38. package/dist/tests/errors.test.d.ts +0 -2
  39. package/dist/tests/errors.test.d.ts.map +0 -1
  40. package/dist/tests/errors.test.js +0 -93
  41. package/dist/tests/errors.test.js.map +0 -1
  42. package/dist/tests/events-bridge.test.d.ts +0 -2
  43. package/dist/tests/events-bridge.test.d.ts.map +0 -1
  44. package/dist/tests/events-bridge.test.js +0 -228
  45. package/dist/tests/events-bridge.test.js.map +0 -1
  46. package/dist/tests/example-smoke.test.d.ts +0 -2
  47. package/dist/tests/example-smoke.test.d.ts.map +0 -1
  48. package/dist/tests/example-smoke.test.js +0 -34
  49. package/dist/tests/example-smoke.test.js.map +0 -1
  50. package/dist/tests/gcs-driver.test.d.ts +0 -2
  51. package/dist/tests/gcs-driver.test.d.ts.map +0 -1
  52. package/dist/tests/gcs-driver.test.js +0 -197
  53. package/dist/tests/gcs-driver.test.js.map +0 -1
  54. package/dist/tests/image.test.d.ts +0 -2
  55. package/dist/tests/image.test.d.ts.map +0 -1
  56. package/dist/tests/image.test.js +0 -102
  57. package/dist/tests/image.test.js.map +0 -1
  58. package/dist/tests/lifecycle.test.d.ts +0 -2
  59. package/dist/tests/lifecycle.test.d.ts.map +0 -1
  60. package/dist/tests/lifecycle.test.js +0 -171
  61. package/dist/tests/lifecycle.test.js.map +0 -1
  62. package/dist/tests/local-driver.test.d.ts +0 -2
  63. package/dist/tests/local-driver.test.d.ts.map +0 -1
  64. package/dist/tests/local-driver.test.js +0 -153
  65. package/dist/tests/local-driver.test.js.map +0 -1
  66. package/dist/tests/local-streaming.test.d.ts +0 -2
  67. package/dist/tests/local-streaming.test.d.ts.map +0 -1
  68. package/dist/tests/local-streaming.test.js +0 -121
  69. package/dist/tests/local-streaming.test.js.map +0 -1
  70. package/dist/tests/memory-driver.test.d.ts +0 -2
  71. package/dist/tests/memory-driver.test.d.ts.map +0 -1
  72. package/dist/tests/memory-driver.test.js +0 -180
  73. package/dist/tests/memory-driver.test.js.map +0 -1
  74. package/dist/tests/memory-streaming.test.d.ts +0 -2
  75. package/dist/tests/memory-streaming.test.d.ts.map +0 -1
  76. package/dist/tests/memory-streaming.test.js +0 -92
  77. package/dist/tests/memory-streaming.test.js.map +0 -1
  78. package/dist/tests/minio-driver.test.d.ts +0 -2
  79. package/dist/tests/minio-driver.test.d.ts.map +0 -1
  80. package/dist/tests/minio-driver.test.js +0 -146
  81. package/dist/tests/minio-driver.test.js.map +0 -1
  82. package/dist/tests/non-s3-integration.test.d.ts +0 -2
  83. package/dist/tests/non-s3-integration.test.d.ts.map +0 -1
  84. package/dist/tests/non-s3-integration.test.js +0 -201
  85. package/dist/tests/non-s3-integration.test.js.map +0 -1
  86. package/dist/tests/observability.registration.test.d.ts +0 -2
  87. package/dist/tests/observability.registration.test.d.ts.map +0 -1
  88. package/dist/tests/observability.registration.test.js +0 -103
  89. package/dist/tests/observability.registration.test.js.map +0 -1
  90. package/dist/tests/observability.test.d.ts +0 -2
  91. package/dist/tests/observability.test.d.ts.map +0 -1
  92. package/dist/tests/observability.test.js +0 -240
  93. package/dist/tests/observability.test.js.map +0 -1
  94. package/dist/tests/plugin.test.d.ts +0 -2
  95. package/dist/tests/plugin.test.d.ts.map +0 -1
  96. package/dist/tests/plugin.test.js +0 -112
  97. package/dist/tests/plugin.test.js.map +0 -1
  98. package/dist/tests/prop-concurrent.test.d.ts +0 -2
  99. package/dist/tests/prop-concurrent.test.d.ts.map +0 -1
  100. package/dist/tests/prop-concurrent.test.js +0 -59
  101. package/dist/tests/prop-concurrent.test.js.map +0 -1
  102. package/dist/tests/prop-copy.test.d.ts +0 -2
  103. package/dist/tests/prop-copy.test.d.ts.map +0 -1
  104. package/dist/tests/prop-copy.test.js +0 -63
  105. package/dist/tests/prop-copy.test.js.map +0 -1
  106. package/dist/tests/prop-delete.test.d.ts +0 -2
  107. package/dist/tests/prop-delete.test.d.ts.map +0 -1
  108. package/dist/tests/prop-delete.test.js +0 -35
  109. package/dist/tests/prop-delete.test.js.map +0 -1
  110. package/dist/tests/prop-directory.test.d.ts +0 -2
  111. package/dist/tests/prop-directory.test.d.ts.map +0 -1
  112. package/dist/tests/prop-directory.test.js +0 -118
  113. package/dist/tests/prop-directory.test.js.map +0 -1
  114. package/dist/tests/prop-driver-conformance.test.d.ts +0 -2
  115. package/dist/tests/prop-driver-conformance.test.d.ts.map +0 -1
  116. package/dist/tests/prop-driver-conformance.test.js +0 -110
  117. package/dist/tests/prop-driver-conformance.test.js.map +0 -1
  118. package/dist/tests/prop-driver-equivalence.test.d.ts +0 -2
  119. package/dist/tests/prop-driver-equivalence.test.d.ts.map +0 -1
  120. package/dist/tests/prop-driver-equivalence.test.js +0 -163
  121. package/dist/tests/prop-driver-equivalence.test.js.map +0 -1
  122. package/dist/tests/prop-lifecycle.test.d.ts +0 -2
  123. package/dist/tests/prop-lifecycle.test.d.ts.map +0 -1
  124. package/dist/tests/prop-lifecycle.test.js +0 -83
  125. package/dist/tests/prop-lifecycle.test.js.map +0 -1
  126. package/dist/tests/prop-list.test.d.ts +0 -2
  127. package/dist/tests/prop-list.test.d.ts.map +0 -1
  128. package/dist/tests/prop-list.test.js +0 -53
  129. package/dist/tests/prop-list.test.js.map +0 -1
  130. package/dist/tests/prop-metadata.test.d.ts +0 -2
  131. package/dist/tests/prop-metadata.test.d.ts.map +0 -1
  132. package/dist/tests/prop-metadata.test.js +0 -87
  133. package/dist/tests/prop-metadata.test.js.map +0 -1
  134. package/dist/tests/prop-move.test.d.ts +0 -2
  135. package/dist/tests/prop-move.test.d.ts.map +0 -1
  136. package/dist/tests/prop-move.test.js +0 -67
  137. package/dist/tests/prop-move.test.js.map +0 -1
  138. package/dist/tests/prop-multipart-abort.test.d.ts +0 -2
  139. package/dist/tests/prop-multipart-abort.test.d.ts.map +0 -1
  140. package/dist/tests/prop-multipart-abort.test.js +0 -48
  141. package/dist/tests/prop-multipart-abort.test.js.map +0 -1
  142. package/dist/tests/prop-multipart.test.d.ts +0 -2
  143. package/dist/tests/prop-multipart.test.d.ts.map +0 -1
  144. package/dist/tests/prop-multipart.test.js +0 -65
  145. package/dist/tests/prop-multipart.test.js.map +0 -1
  146. package/dist/tests/prop-resumable.test.d.ts +0 -2
  147. package/dist/tests/prop-resumable.test.d.ts.map +0 -1
  148. package/dist/tests/prop-resumable.test.js +0 -78
  149. package/dist/tests/prop-resumable.test.js.map +0 -1
  150. package/dist/tests/prop-search.test.d.ts +0 -2
  151. package/dist/tests/prop-search.test.d.ts.map +0 -1
  152. package/dist/tests/prop-search.test.js +0 -120
  153. package/dist/tests/prop-search.test.js.map +0 -1
  154. package/dist/tests/prop-signed-url.test.d.ts +0 -2
  155. package/dist/tests/prop-signed-url.test.d.ts.map +0 -1
  156. package/dist/tests/prop-signed-url.test.js +0 -74
  157. package/dist/tests/prop-signed-url.test.js.map +0 -1
  158. package/dist/tests/prop-streaming.test.d.ts +0 -2
  159. package/dist/tests/prop-streaming.test.d.ts.map +0 -1
  160. package/dist/tests/prop-streaming.test.js +0 -34
  161. package/dist/tests/prop-streaming.test.js.map +0 -1
  162. package/dist/tests/prop-upload-download.test.d.ts +0 -2
  163. package/dist/tests/prop-upload-download.test.d.ts.map +0 -1
  164. package/dist/tests/prop-upload-download.test.js +0 -30
  165. package/dist/tests/prop-upload-download.test.js.map +0 -1
  166. package/dist/tests/prop-validation.test.d.ts +0 -2
  167. package/dist/tests/prop-validation.test.d.ts.map +0 -1
  168. package/dist/tests/prop-validation.test.js +0 -50
  169. package/dist/tests/prop-validation.test.js.map +0 -1
  170. package/dist/tests/prop-versioning.test.d.ts +0 -2
  171. package/dist/tests/prop-versioning.test.d.ts.map +0 -1
  172. package/dist/tests/prop-versioning.test.js +0 -74
  173. package/dist/tests/prop-versioning.test.js.map +0 -1
  174. package/dist/tests/queue-bridge.test.d.ts +0 -2
  175. package/dist/tests/queue-bridge.test.d.ts.map +0 -1
  176. package/dist/tests/queue-bridge.test.js +0 -111
  177. package/dist/tests/queue-bridge.test.js.map +0 -1
  178. package/dist/tests/r2-driver.test.d.ts +0 -2
  179. package/dist/tests/r2-driver.test.d.ts.map +0 -1
  180. package/dist/tests/r2-driver.test.js +0 -143
  181. package/dist/tests/r2-driver.test.js.map +0 -1
  182. package/dist/tests/realtime-bridge.test.d.ts +0 -2
  183. package/dist/tests/realtime-bridge.test.d.ts.map +0 -1
  184. package/dist/tests/realtime-bridge.test.js +0 -106
  185. package/dist/tests/realtime-bridge.test.js.map +0 -1
  186. package/dist/tests/resumable.test.d.ts +0 -2
  187. package/dist/tests/resumable.test.d.ts.map +0 -1
  188. package/dist/tests/resumable.test.js +0 -104
  189. package/dist/tests/resumable.test.js.map +0 -1
  190. package/dist/tests/s3-base.test.d.ts +0 -2
  191. package/dist/tests/s3-base.test.d.ts.map +0 -1
  192. package/dist/tests/s3-base.test.js +0 -289
  193. package/dist/tests/s3-base.test.js.map +0 -1
  194. package/dist/tests/s3-integration.test.d.ts +0 -2
  195. package/dist/tests/s3-integration.test.d.ts.map +0 -1
  196. package/dist/tests/s3-integration.test.js +0 -270
  197. package/dist/tests/s3-integration.test.js.map +0 -1
  198. package/dist/tests/s3.test.d.ts +0 -2
  199. package/dist/tests/s3.test.d.ts.map +0 -1
  200. package/dist/tests/s3.test.js +0 -203
  201. package/dist/tests/s3.test.js.map +0 -1
  202. package/dist/tests/scaffold.test.d.ts +0 -2
  203. package/dist/tests/scaffold.test.d.ts.map +0 -1
  204. package/dist/tests/scaffold.test.js +0 -13
  205. package/dist/tests/scaffold.test.js.map +0 -1
  206. package/dist/tests/search.test.d.ts +0 -2
  207. package/dist/tests/search.test.d.ts.map +0 -1
  208. package/dist/tests/search.test.js +0 -106
  209. package/dist/tests/search.test.js.map +0 -1
  210. package/dist/tests/supabase-driver.test.d.ts +0 -2
  211. package/dist/tests/supabase-driver.test.d.ts.map +0 -1
  212. package/dist/tests/supabase-driver.test.js +0 -196
  213. package/dist/tests/supabase-driver.test.js.map +0 -1
  214. package/dist/tests/testing-utilities.test.d.ts +0 -2
  215. package/dist/tests/testing-utilities.test.d.ts.map +0 -1
  216. package/dist/tests/testing-utilities.test.js +0 -138
  217. package/dist/tests/testing-utilities.test.js.map +0 -1
  218. package/dist/tests/validation.test.d.ts +0 -2
  219. package/dist/tests/validation.test.d.ts.map +0 -1
  220. package/dist/tests/validation.test.js +0 -135
  221. package/dist/tests/validation.test.js.map +0 -1
  222. package/dist/tests/versioning.test.d.ts +0 -2
  223. package/dist/tests/versioning.test.d.ts.map +0 -1
  224. package/dist/tests/versioning.test.js +0 -128
  225. package/dist/tests/versioning.test.js.map +0 -1
@@ -1,153 +0,0 @@
1
- // Unit tests for LocalStorageDriver primitive object operations.
2
- //
3
- // Exercises the mandatory StorageDriver primitives implemented in
4
- // `src/drivers/local.ts` (task 4.1): put/get/exists/delete/stat/list against a
5
- // real filesystem root. Each test uses an isolated temporary directory created
6
- // via `fs.mkdtemp` under `os.tmpdir()` and removes it afterward so tests never
7
- // touch shared state. Uses the Node.js built-in test runner (node:test) and is
8
- // executed via `node --test dist/tests/*.test.js`.
9
- //
10
- // Verifies: put/get round-trips bytes exactly; get on a missing key reports
11
- // {found:false}; exists returns true/false correctly; delete removes
12
- // visibility; stat returns metadata or null; list returns keys matching a
13
- // prefix and never surfaces `.meta.json` sidecar files; nested keys work.
14
- //
15
- // Requirements: 4.1, 4.2, 4.3, 4.4, 2.4
16
- import test from "node:test";
17
- import assert from "node:assert/strict";
18
- import * as fs from "node:fs/promises";
19
- import * as os from "node:os";
20
- import * as path from "node:path";
21
- import { LocalStorageDriver } from "../drivers/local.js";
22
- /**
23
- * Create a fresh, isolated temporary root and a driver bound to it, run `body`,
24
- * and always clean up the directory afterward.
25
- */
26
- async function withDriver(body) {
27
- const root = await fs.mkdtemp(path.join(os.tmpdir(), "streetjs-local-driver-"));
28
- const driver = new LocalStorageDriver({ root });
29
- try {
30
- await body(driver, root);
31
- }
32
- finally {
33
- await fs.rm(root, { recursive: true, force: true });
34
- }
35
- }
36
- /** Minimal write metadata: the driver fills in defaults. */
37
- const NO_META = {};
38
- test("put/get round-trips bytes exactly", async () => {
39
- await withDriver(async (driver) => {
40
- const bytes = new Uint8Array([0, 1, 2, 3, 255, 128, 64, 0, 17]);
41
- const written = await driver.put("photos/cat.bin", bytes, NO_META);
42
- assert.equal(written.key, "photos/cat.bin");
43
- assert.equal(written.size, bytes.byteLength);
44
- const result = await driver.get("photos/cat.bin");
45
- assert.equal(result.found, true);
46
- assert.deepEqual(result.bytes, bytes);
47
- assert.equal(result.metadata.key, "photos/cat.bin");
48
- assert.equal(result.metadata.size, bytes.byteLength);
49
- });
50
- });
51
- test("put/get round-trips empty content exactly", async () => {
52
- await withDriver(async (driver) => {
53
- const empty = new Uint8Array([]);
54
- await driver.put("empty.bin", empty, NO_META);
55
- const result = await driver.get("empty.bin");
56
- assert.ok(result.found);
57
- assert.equal(result.bytes.byteLength, 0);
58
- assert.equal(result.metadata.size, 0);
59
- });
60
- });
61
- test("get on a missing key reports not-found", async () => {
62
- await withDriver(async (driver) => {
63
- const result = await driver.get("does/not/exist.txt");
64
- assert.equal(result.found, false);
65
- assert.equal(result.bytes, undefined);
66
- assert.equal(result.metadata, undefined);
67
- });
68
- });
69
- test("exists returns true for a stored key and false otherwise", async () => {
70
- await withDriver(async (driver) => {
71
- assert.equal(await driver.exists("report.pdf"), false);
72
- await driver.put("report.pdf", new Uint8Array([1, 2, 3]), NO_META);
73
- assert.equal(await driver.exists("report.pdf"), true);
74
- assert.equal(await driver.exists("other.pdf"), false);
75
- });
76
- });
77
- test("delete removes visibility of a stored object", async () => {
78
- await withDriver(async (driver) => {
79
- await driver.put("temp/file.txt", new Uint8Array([9, 9, 9]), NO_META);
80
- assert.equal(await driver.exists("temp/file.txt"), true);
81
- await driver.delete("temp/file.txt");
82
- assert.equal(await driver.exists("temp/file.txt"), false);
83
- const result = await driver.get("temp/file.txt");
84
- assert.equal(result.found, false);
85
- assert.equal(await driver.stat("temp/file.txt"), null);
86
- });
87
- });
88
- test("delete of a missing key is a no-op", async () => {
89
- await withDriver(async (driver) => {
90
- await driver.delete("never/created.txt");
91
- assert.equal(await driver.exists("never/created.txt"), false);
92
- });
93
- });
94
- test("stat returns metadata for an existing key and null for a missing one", async () => {
95
- await withDriver(async (driver) => {
96
- assert.equal(await driver.stat("missing.txt"), null);
97
- const bytes = new Uint8Array([1, 2, 3, 4, 5]);
98
- await driver.put("docs/readme.txt", bytes, { contentType: "text/plain" });
99
- const meta = await driver.stat("docs/readme.txt");
100
- assert.ok(meta);
101
- assert.equal(meta.key, "docs/readme.txt");
102
- assert.equal(meta.size, bytes.byteLength);
103
- assert.equal(meta.contentType, "text/plain");
104
- assert.ok(typeof meta.checksum === "string" && meta.checksum.length > 0);
105
- assert.ok(typeof meta.createdAt === "number");
106
- assert.ok(typeof meta.updatedAt === "number");
107
- });
108
- });
109
- test("list returns keys matching a prefix", async () => {
110
- await withDriver(async (driver) => {
111
- await driver.put("images/a.png", new Uint8Array([1]), NO_META);
112
- await driver.put("images/b.png", new Uint8Array([2]), NO_META);
113
- await driver.put("videos/c.mp4", new Uint8Array([3]), NO_META);
114
- const items = await driver.list("images/");
115
- const keys = items.map((item) => item.key).sort();
116
- assert.deepEqual(keys, ["images/a.png", "images/b.png"]);
117
- const all = await driver.list("");
118
- const allKeys = all.map((item) => item.key).sort();
119
- assert.deepEqual(allKeys, ["images/a.png", "images/b.png", "videos/c.mp4"]);
120
- });
121
- });
122
- test("list never surfaces .meta.json sidecar files", async () => {
123
- await withDriver(async (driver) => {
124
- await driver.put("data/record.json", new Uint8Array([1, 2, 3]), NO_META);
125
- const items = await driver.list("");
126
- const keys = items.map((item) => item.key);
127
- assert.deepEqual(keys, ["data/record.json"]);
128
- assert.ok(!keys.some((key) => key.endsWith(".meta.json")));
129
- });
130
- });
131
- test("list returns items carrying key, size, and updatedAt", async () => {
132
- await withDriver(async (driver) => {
133
- const bytes = new Uint8Array([1, 2, 3, 4]);
134
- await driver.put("k.bin", bytes, NO_META);
135
- const [item] = await driver.list("k");
136
- assert.equal(item.key, "k.bin");
137
- assert.equal(item.size, bytes.byteLength);
138
- assert.ok(typeof item.updatedAt === "number");
139
- });
140
- });
141
- test("nested keys round-trip through put/get/exists/list", async () => {
142
- await withDriver(async (driver) => {
143
- const bytes = new Uint8Array([10, 20, 30, 40]);
144
- await driver.put("a/b/c.txt", bytes, NO_META);
145
- assert.equal(await driver.exists("a/b/c.txt"), true);
146
- const result = await driver.get("a/b/c.txt");
147
- assert.equal(result.found, true);
148
- assert.deepEqual(result.bytes, bytes);
149
- const items = await driver.list("a/");
150
- assert.deepEqual(items.map((item) => item.key), ["a/b/c.txt"]);
151
- });
152
- });
153
- //# sourceMappingURL=local-driver.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"local-driver.test.js","sourceRoot":"","sources":["../../src/tests/local-driver.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=local-streaming.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"local-streaming.test.d.ts","sourceRoot":"","sources":["../../src/tests/local-streaming.test.ts"],"names":[],"mappings":""}
@@ -1,121 +0,0 @@
1
- // Unit tests for the streaming primitives of LocalStorageDriver (task 4.2).
2
- //
3
- // Verifies that `putStream` streams a Node Readable to disk at `root/<key>`
4
- // (creating parent dirs) while computing checksum/etag/size, that the resulting
5
- // metadata matches an equivalent buffered `put`, that an overwrite preserves the
6
- // original `createdAt` while advancing `updatedAt`, that `getStream` returns a
7
- // Node Readable of the stored bytes and a putStream -> getStream round-trip
8
- // preserves the original bytes, that `getStream` throws NotFoundError on a
9
- // missing key, and that a failing source stream rejects putStream and leaves no
10
- // visible object. Uses the Node.js built-in test runner (node:test) and is
11
- // executed via `node --test dist/tests/*.test.js`.
12
- //
13
- // Requirements: 5.1, 5.2, 5.3, 5.5
14
- import test from "node:test";
15
- import assert from "node:assert/strict";
16
- import { Readable } from "node:stream";
17
- import { buffer as streamToBuffer } from "node:stream/consumers";
18
- import * as fs from "node:fs/promises";
19
- import * as os from "node:os";
20
- import * as path from "node:path";
21
- import { LocalStorageDriver } from "../drivers/local.js";
22
- import { NotFoundError } from "../errors.js";
23
- /** Create a fresh temp directory to serve as the driver root. */
24
- async function tempRoot() {
25
- return fs.mkdtemp(path.join(os.tmpdir(), "streetjs-storage-local-stream-"));
26
- }
27
- /** A fixed clock returning a constant epoch-ms timestamp for determinism. */
28
- const fixedClock = () => 1_700_000_000_000;
29
- test("putStream streams bytes to disk and computes metadata like put", async () => {
30
- const root = await tempRoot();
31
- const driver = new LocalStorageDriver({ root, clock: fixedClock });
32
- const payload = Buffer.from("hello local streaming world");
33
- // Feed the payload across multiple chunks to exercise incremental hashing.
34
- const source = Readable.from([
35
- payload.subarray(0, 6),
36
- payload.subarray(6, 15),
37
- payload.subarray(15),
38
- ]);
39
- const metadata = await driver.putStream("docs/stream.txt", source, {
40
- contentType: "text/plain",
41
- });
42
- assert.equal(metadata.key, "docs/stream.txt");
43
- assert.equal(metadata.size, payload.byteLength);
44
- assert.equal(metadata.contentType, "text/plain");
45
- assert.equal(metadata.createdAt, fixedClock());
46
- assert.equal(metadata.updatedAt, fixedClock());
47
- // The bytes were actually written to root/<key> on disk.
48
- const onDisk = await fs.readFile(path.join(root, "docs/stream.txt"));
49
- assert.deepEqual(onDisk, payload);
50
- await fs.rm(root, { recursive: true, force: true });
51
- });
52
- test("putStream metadata matches an equivalent buffered put", async () => {
53
- const rootA = await tempRoot();
54
- const rootB = await tempRoot();
55
- const streamDriver = new LocalStorageDriver({ root: rootA, clock: fixedClock });
56
- const putDriver = new LocalStorageDriver({ root: rootB, clock: fixedClock });
57
- const payload = Buffer.from("consistency across write paths");
58
- const viaStream = await streamDriver.putStream("k", Readable.from([payload]), { contentType: "application/octet-stream" });
59
- const viaPut = await putDriver.put("k", new Uint8Array(payload), {
60
- contentType: "application/octet-stream",
61
- });
62
- assert.equal(viaStream.size, viaPut.size);
63
- assert.equal(viaStream.checksum, viaPut.checksum);
64
- assert.equal(viaStream.etag, viaPut.etag);
65
- await fs.rm(rootA, { recursive: true, force: true });
66
- await fs.rm(rootB, { recursive: true, force: true });
67
- });
68
- test("putStream overwrite preserves the original createdAt", async () => {
69
- const root = await tempRoot();
70
- let nowValue = 1_700_000_000_000;
71
- const driver = new LocalStorageDriver({ root, clock: () => nowValue });
72
- const first = await driver.putStream("over/write", Readable.from([Buffer.from("v1")]), {});
73
- nowValue = 1_700_000_005_000;
74
- const second = await driver.putStream("over/write", Readable.from([Buffer.from("v2 longer")]), {});
75
- assert.equal(second.createdAt, first.createdAt);
76
- assert.equal(second.updatedAt, nowValue);
77
- assert.ok(second.updatedAt > second.createdAt);
78
- await fs.rm(root, { recursive: true, force: true });
79
- });
80
- test("getStream returns a Readable of the stored bytes emitted intact", async () => {
81
- const root = await tempRoot();
82
- const driver = new LocalStorageDriver({ root, clock: fixedClock });
83
- const payload = Buffer.from("downloadable content");
84
- await driver.put("file.bin", new Uint8Array(payload), {});
85
- const stream = await driver.getStream("file.bin");
86
- assert.ok(stream instanceof Readable);
87
- const out = await streamToBuffer(stream);
88
- assert.deepEqual(out, payload);
89
- await fs.rm(root, { recursive: true, force: true });
90
- });
91
- test("putStream -> getStream round-trip preserves the original bytes", async () => {
92
- const root = await tempRoot();
93
- const driver = new LocalStorageDriver({ root, clock: fixedClock });
94
- const payload = Buffer.from([0, 1, 2, 3, 255, 254, 128, 42, 7]);
95
- await driver.putStream("round/trip", Readable.from([payload]), {});
96
- const out = await streamToBuffer(await driver.getStream("round/trip"));
97
- assert.deepEqual(out, payload);
98
- await fs.rm(root, { recursive: true, force: true });
99
- });
100
- test("getStream throws NotFoundError for a missing key", async () => {
101
- const root = await tempRoot();
102
- const driver = new LocalStorageDriver({ root, clock: fixedClock });
103
- await assert.rejects(() => driver.getStream("missing/key"), NotFoundError);
104
- await fs.rm(root, { recursive: true, force: true });
105
- });
106
- test("putStream rejects and leaves no visible object when the source errors", async () => {
107
- const root = await tempRoot();
108
- const driver = new LocalStorageDriver({ root, clock: fixedClock });
109
- const failing = new Readable({
110
- read() {
111
- this.destroy(new Error("source failure"));
112
- },
113
- });
114
- await assert.rejects(() => driver.putStream("partial/key", failing, {}), /source failure/);
115
- // No metadata sidecar was written, so the object is not visible.
116
- assert.equal(await driver.stat("partial/key"), null);
117
- const result = await driver.get("partial/key");
118
- assert.equal(result.found, false);
119
- await fs.rm(root, { recursive: true, force: true });
120
- });
121
- //# sourceMappingURL=local-streaming.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"local-streaming.test.js","sourceRoot":"","sources":["../../src/tests/local-streaming.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=memory-driver.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-driver.test.d.ts","sourceRoot":"","sources":["../../src/tests/memory-driver.test.ts"],"names":[],"mappings":""}
@@ -1,180 +0,0 @@
1
- // Unit tests for the MemoryStorageDriver primitive object operations.
2
- //
3
- // Verifies the mandatory StorageDriver primitives implemented in task 3.1:
4
- // put / get / exists / delete / stat / list, plus consistent not-found
5
- // reporting via the discriminated MaybeObject result. Uses the Node.js built-in
6
- // test runner (node:test) and is executed via `node --test dist/tests/*.test.js`.
7
- //
8
- // The driver is imported from the built driver module (`../drivers/memory.js`)
9
- // because MemoryStorageDriver is not re-exported from the package entry point.
10
- // A fixed Clock is injected so timestamps are deterministic and assertable.
11
- //
12
- // Requirements: 4.1, 4.2, 4.3, 4.4, 4.9, 4.10, 2.4
13
- import test from "node:test";
14
- import assert from "node:assert/strict";
15
- import { MemoryStorageDriver } from "../drivers/memory.js";
16
- /** A fixed clock returning a constant epoch-ms value for deterministic tests. */
17
- const FIXED_NOW = 1_700_000_000_000;
18
- const fixedClock = () => FIXED_NOW;
19
- /** Convenience: build a driver with the injected fixed clock. */
20
- function makeDriver() {
21
- return new MemoryStorageDriver({ clock: fixedClock });
22
- }
23
- /** Encode a UTF-8 string into a Uint8Array for storage. */
24
- function bytes(str) {
25
- return new TextEncoder().encode(str);
26
- }
27
- // ── put ──────────────────────────────────────────────────────────────────────
28
- test("put returns metadata with size, checksum, etag, and timestamps", async () => {
29
- const driver = makeDriver();
30
- const content = bytes("hello world");
31
- const meta = await driver.put("greetings/hello.txt", content, {
32
- contentType: "text/plain",
33
- });
34
- assert.equal(meta.key, "greetings/hello.txt");
35
- assert.equal(meta.size, content.byteLength);
36
- assert.equal(meta.contentType, "text/plain");
37
- // checksum/etag are the sha-256 hex digest of the bytes.
38
- assert.match(meta.checksum, /^[0-9a-f]{64}$/);
39
- assert.equal(meta.etag, meta.checksum);
40
- // Deterministic timestamps come from the injected fixed clock.
41
- assert.equal(meta.createdAt, FIXED_NOW);
42
- assert.equal(meta.updatedAt, FIXED_NOW);
43
- });
44
- test("put applies default content type and access level when unspecified", async () => {
45
- const driver = makeDriver();
46
- const meta = await driver.put("data/blob.bin", bytes("raw"), {});
47
- assert.equal(meta.contentType, "application/octet-stream");
48
- assert.equal(meta.accessLevel, "private");
49
- assert.deepEqual(meta.custom, {});
50
- });
51
- test("put carries owner, tenant, access level, and custom metadata", async () => {
52
- const driver = makeDriver();
53
- const meta = await driver.put("tenants/a/file.txt", bytes("x"), {
54
- owner: "user-1",
55
- tenant: "tenant-a",
56
- accessLevel: "public",
57
- custom: { label: "invoice" },
58
- });
59
- assert.equal(meta.owner, "user-1");
60
- assert.equal(meta.tenant, "tenant-a");
61
- assert.equal(meta.accessLevel, "public");
62
- assert.deepEqual(meta.custom, { label: "invoice" });
63
- });
64
- // ── get (round-trip + not-found) ──────────────────────────────────────────────
65
- test("get round-trips the stored bytes exactly and reports found:true", async () => {
66
- const driver = makeDriver();
67
- const content = bytes("the quick brown fox");
68
- await driver.put("docs/fox.txt", content, {});
69
- const result = await driver.get("docs/fox.txt");
70
- assert.equal(result.found, true);
71
- assert.deepEqual(result.bytes, content);
72
- assert.equal(result.metadata.key, "docs/fox.txt");
73
- assert.equal(result.metadata.size, content.byteLength);
74
- });
75
- test("get preserves arbitrary binary bytes without mutation", async () => {
76
- const driver = makeDriver();
77
- const content = new Uint8Array([0, 255, 1, 254, 127, 128]);
78
- await driver.put("bin/data", content, {});
79
- const result = await driver.get("bin/data");
80
- assert.equal(result.found, true);
81
- assert.deepEqual(result.bytes, content);
82
- });
83
- test("get on a missing key reports found:false (not an error)", async () => {
84
- const driver = makeDriver();
85
- const result = await driver.get("does/not/exist");
86
- assert.equal(result.found, false);
87
- assert.equal(result.bytes, undefined);
88
- });
89
- test("get returns a copy so mutating the result never corrupts the store", async () => {
90
- const driver = makeDriver();
91
- const content = bytes("immutable");
92
- await driver.put("safe/key", content, {});
93
- const first = await driver.get("safe/key");
94
- assert.ok(first.found);
95
- first.bytes[0] = 0; // mutate the returned buffer
96
- const second = await driver.get("safe/key");
97
- assert.ok(second.found);
98
- assert.deepEqual(second.bytes, content);
99
- });
100
- // ── exists ─────────────────────────────────────────────────────────────────
101
- test("exists returns true for a stored key and false otherwise", async () => {
102
- const driver = makeDriver();
103
- await driver.put("present.txt", bytes("here"), {});
104
- assert.equal(await driver.exists("present.txt"), true);
105
- assert.equal(await driver.exists("absent.txt"), false);
106
- });
107
- // ── delete ───────────────────────────────────────────────────────────────────
108
- test("delete removes visibility so a subsequent exists returns false", async () => {
109
- const driver = makeDriver();
110
- await driver.put("temp/file.txt", bytes("bye"), {});
111
- assert.equal(await driver.exists("temp/file.txt"), true);
112
- await driver.delete("temp/file.txt");
113
- assert.equal(await driver.exists("temp/file.txt"), false);
114
- const result = await driver.get("temp/file.txt");
115
- assert.equal(result.found, false);
116
- });
117
- test("delete on a missing key is a no-op (does not throw)", async () => {
118
- const driver = makeDriver();
119
- await assert.doesNotReject(() => driver.delete("never/existed"));
120
- });
121
- // ── stat ─────────────────────────────────────────────────────────────────────
122
- test("stat returns metadata for an existing key without content", async () => {
123
- const driver = makeDriver();
124
- const content = bytes("stat me");
125
- await driver.put("stat/key.txt", content, { contentType: "text/plain" });
126
- const meta = await driver.stat("stat/key.txt");
127
- assert.ok(meta);
128
- assert.equal(meta.key, "stat/key.txt");
129
- assert.equal(meta.size, content.byteLength);
130
- assert.equal(meta.contentType, "text/plain");
131
- assert.equal(meta.updatedAt, FIXED_NOW);
132
- // stat carries no bytes field.
133
- assert.equal(meta.bytes, undefined);
134
- });
135
- test("stat returns null for a missing key", async () => {
136
- const driver = makeDriver();
137
- const meta = await driver.stat("no/such/key");
138
- assert.equal(meta, null);
139
- });
140
- // ── list ─────────────────────────────────────────────────────────────────────
141
- test("list returns keys matching a prefix, sorted", async () => {
142
- const driver = makeDriver();
143
- await driver.put("photos/b.png", bytes("b"), {});
144
- await driver.put("photos/a.png", bytes("a"), {});
145
- await driver.put("docs/readme.md", bytes("doc"), {});
146
- const items = await driver.list("photos/");
147
- assert.deepEqual(items.map((item) => item.key), ["photos/a.png", "photos/b.png"]);
148
- });
149
- test("list with a prefix excludes non-matching keys", async () => {
150
- const driver = makeDriver();
151
- await driver.put("a/1", bytes("1"), {});
152
- await driver.put("a/2", bytes("2"), {});
153
- await driver.put("b/1", bytes("3"), {});
154
- const items = await driver.list("a/");
155
- assert.equal(items.length, 2);
156
- assert.ok(items.every((item) => item.key.startsWith("a/")));
157
- });
158
- test("list with an empty prefix returns every stored key", async () => {
159
- const driver = makeDriver();
160
- await driver.put("x", bytes("1"), {});
161
- await driver.put("y", bytes("2"), {});
162
- const items = await driver.list("");
163
- assert.deepEqual(items.map((item) => item.key).sort(), ["x", "y"]);
164
- });
165
- test("list returns an empty array when no key matches the prefix", async () => {
166
- const driver = makeDriver();
167
- await driver.put("only/one", bytes("1"), {});
168
- const items = await driver.list("missing/");
169
- assert.deepEqual(items, []);
170
- });
171
- test("list items carry size and updatedAt from stored metadata", async () => {
172
- const driver = makeDriver();
173
- const content = bytes("sized");
174
- await driver.put("items/one", content, {});
175
- const [item] = await driver.list("items/");
176
- assert.equal(item.key, "items/one");
177
- assert.equal(item.size, content.byteLength);
178
- assert.equal(item.updatedAt, FIXED_NOW);
179
- });
180
- //# sourceMappingURL=memory-driver.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-driver.test.js","sourceRoot":"","sources":["../../src/tests/memory-driver.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=memory-streaming.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-streaming.test.d.ts","sourceRoot":"","sources":["../../src/tests/memory-streaming.test.ts"],"names":[],"mappings":""}
@@ -1,92 +0,0 @@
1
- // Unit tests for the streaming primitives of MemoryStorageDriver (task 3.2).
2
- //
3
- // Verifies that `putStream` consumes a Node Readable and stores the assembled
4
- // bytes with the same computed metadata as `put`, that `getStream` returns a
5
- // Node Readable of the stored bytes (emitted intact, not byte-by-byte), that a
6
- // putStream -> getStream round-trip preserves the original bytes, that
7
- // `getStream` throws NotFoundError on a missing key, and that a failing source
8
- // stream rejects putStream and stores nothing. Uses the Node.js built-in test
9
- // runner (node:test) and is executed via `node --test dist/tests/*.test.js`.
10
- //
11
- // Requirements: 5.1, 5.2, 5.5
12
- import test from "node:test";
13
- import assert from "node:assert/strict";
14
- import { Readable } from "node:stream";
15
- import { buffer as streamToBuffer } from "node:stream/consumers";
16
- import { MemoryStorageDriver } from "../drivers/memory.js";
17
- import { NotFoundError } from "../errors.js";
18
- /** A fixed clock returning a constant epoch-ms timestamp for determinism. */
19
- const fixedClock = () => 1_700_000_000_000;
20
- test("putStream stores the streamed bytes and computes metadata like put", async () => {
21
- const driver = new MemoryStorageDriver({ clock: fixedClock });
22
- const payload = Buffer.from("hello streaming world");
23
- // Feed the payload across multiple chunks to exercise assembly.
24
- const source = Readable.from([
25
- payload.subarray(0, 5),
26
- payload.subarray(5, 11),
27
- payload.subarray(11),
28
- ]);
29
- const metadata = await driver.putStream("docs/stream.txt", source, {
30
- contentType: "text/plain",
31
- });
32
- assert.equal(metadata.key, "docs/stream.txt");
33
- assert.equal(metadata.size, payload.byteLength);
34
- assert.equal(metadata.contentType, "text/plain");
35
- assert.equal(metadata.createdAt, 1_700_000_000_000);
36
- assert.equal(metadata.updatedAt, 1_700_000_000_000);
37
- assert.ok(metadata.checksum.length > 0);
38
- assert.equal(metadata.etag, metadata.checksum);
39
- // Bytes are retrievable via the primitive get() as well.
40
- const got = await driver.get("docs/stream.txt");
41
- assert.equal(got.found, true);
42
- assert.deepEqual(Buffer.from(got.bytes), payload);
43
- });
44
- test("putStream metadata matches an equivalent buffered put", async () => {
45
- const streamDriver = new MemoryStorageDriver({ clock: fixedClock });
46
- const putDriver = new MemoryStorageDriver({ clock: fixedClock });
47
- const payload = Buffer.from("consistency across write paths");
48
- const viaStream = await streamDriver.putStream("k", Readable.from([payload]), { contentType: "application/octet-stream" });
49
- const viaPut = await putDriver.put("k", new Uint8Array(payload), {
50
- contentType: "application/octet-stream",
51
- });
52
- assert.equal(viaStream.size, viaPut.size);
53
- assert.equal(viaStream.checksum, viaPut.checksum);
54
- assert.equal(viaStream.etag, viaPut.etag);
55
- });
56
- test("getStream returns a Readable of the stored bytes emitted intact", async () => {
57
- const driver = new MemoryStorageDriver({ clock: fixedClock });
58
- const payload = Buffer.from("downloadable content");
59
- await driver.put("file.bin", new Uint8Array(payload), {});
60
- const stream = await driver.getStream("file.bin");
61
- assert.ok(stream instanceof Readable);
62
- // Collect chunks to confirm the bytes are delivered as binary (not object-mode
63
- // integers from iterating a Buffer byte-by-byte).
64
- const chunks = [];
65
- for await (const chunk of stream) {
66
- assert.ok(Buffer.isBuffer(chunk) || chunk instanceof Uint8Array);
67
- chunks.push(Buffer.from(chunk));
68
- }
69
- assert.deepEqual(Buffer.concat(chunks), payload);
70
- });
71
- test("putStream -> getStream round-trip preserves the original bytes", async () => {
72
- const driver = new MemoryStorageDriver({ clock: fixedClock });
73
- const payload = Buffer.from([0, 1, 2, 3, 255, 254, 128, 42, 7]);
74
- await driver.putStream("round/trip", Readable.from([payload]), {});
75
- const out = await streamToBuffer(await driver.getStream("round/trip"));
76
- assert.deepEqual(out, payload);
77
- });
78
- test("getStream throws NotFoundError for a missing key", async () => {
79
- const driver = new MemoryStorageDriver({ clock: fixedClock });
80
- await assert.rejects(() => driver.getStream("missing/key"), NotFoundError);
81
- });
82
- test("putStream rejects and stores nothing when the source stream errors", async () => {
83
- const driver = new MemoryStorageDriver({ clock: fixedClock });
84
- const failing = new Readable({
85
- read() {
86
- this.destroy(new Error("source failure"));
87
- },
88
- });
89
- await assert.rejects(() => driver.putStream("partial/key", failing, {}), /source failure/);
90
- assert.equal(await driver.exists("partial/key"), false);
91
- });
92
- //# sourceMappingURL=memory-streaming.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-streaming.test.js","sourceRoot":"","sources":["../../src/tests/memory-streaming.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=minio-driver.test.d.ts.map