@streetjs/storage 1.0.0 → 1.0.2

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/dist/tests/contract.d.ts +19 -0
  6. package/dist/tests/contract.d.ts.map +1 -1
  7. package/dist/tests/contract.js +28 -0
  8. package/dist/tests/contract.js.map +1 -1
  9. package/package.json +10 -6
  10. package/dist/tests/access.test.d.ts +0 -2
  11. package/dist/tests/access.test.d.ts.map +0 -1
  12. package/dist/tests/access.test.js +0 -270
  13. package/dist/tests/access.test.js.map +0 -1
  14. package/dist/tests/azure-driver.test.d.ts +0 -2
  15. package/dist/tests/azure-driver.test.d.ts.map +0 -1
  16. package/dist/tests/azure-driver.test.js +0 -183
  17. package/dist/tests/azure-driver.test.js.map +0 -1
  18. package/dist/tests/backblaze-driver.test.d.ts +0 -2
  19. package/dist/tests/backblaze-driver.test.d.ts.map +0 -1
  20. package/dist/tests/backblaze-driver.test.js +0 -185
  21. package/dist/tests/backblaze-driver.test.js.map +0 -1
  22. package/dist/tests/bridge-degradation.test.d.ts +0 -2
  23. package/dist/tests/bridge-degradation.test.d.ts.map +0 -1
  24. package/dist/tests/bridge-degradation.test.js +0 -138
  25. package/dist/tests/bridge-degradation.test.js.map +0 -1
  26. package/dist/tests/cli.test.d.ts +0 -2
  27. package/dist/tests/cli.test.d.ts.map +0 -1
  28. package/dist/tests/cli.test.js +0 -127
  29. package/dist/tests/cli.test.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,127 +0,0 @@
1
- // cli.test.js — unit tests for the @streetjs/storage CLI generators and the
2
- // storage:verify command (Requirements 21.2, 21.4).
3
- //
4
- // Covers three concerns:
5
- // (1) Generator name validation — isValidGeneratorName / generateStorage
6
- // reject invalid names and accept valid PascalCase identifiers.
7
- // (2) Compile-clean scaffold output — the generated `contents` imports only
8
- // public @streetjs/storage symbols (createStorage + StorageConfig) and
9
- // wires them into a typed factory.
10
- // (3) storage:verify pass/fail reporting — StorageCommands.storageVerify
11
- // reports a pass for the built-in memory provider (process.exitCode is
12
- // not set to 1) and a failure for an unknown/misconfigured provider
13
- // (process.exitCode === 1).
14
- //
15
- // Uses the Node.js built-in test runner (node:test); executed via
16
- // `node --test dist/tests/*.test.js`.
17
- import test from "node:test";
18
- import assert from "node:assert/strict";
19
- import { generateStorage, isValidGeneratorName, isValidProvider, DEFAULT_STORAGE_DIR, } from "../cli/generators.js";
20
- import { StorageCommands } from "../cli/commands.js";
21
- // ── Helpers ───────────────────────────────────────────────────────────────────
22
- /** Build a ParsedArgs object matching the shape streetjs' parseArgv produces. */
23
- function parsedArgs(options = {}) {
24
- const { command = null, positional = [], flags = {} } = options;
25
- return { command, positional, flags };
26
- }
27
- /**
28
- * Run `fn` while capturing everything written to console.log/console.error and
29
- * with process.exitCode reset, restoring both afterwards. Returns the captured
30
- * output plus the exitCode observed after `fn` completes.
31
- */
32
- async function captureRun(fn) {
33
- const originalLog = console.log;
34
- const originalError = console.error;
35
- const originalExitCode = process.exitCode;
36
- const logs = [];
37
- const errors = [];
38
- console.log = (...args) => logs.push(args.join(" "));
39
- console.error = (...args) => errors.push(args.join(" "));
40
- process.exitCode = undefined;
41
- try {
42
- await fn();
43
- return { logs, errors, exitCode: process.exitCode };
44
- }
45
- finally {
46
- console.log = originalLog;
47
- console.error = originalError;
48
- process.exitCode = originalExitCode;
49
- }
50
- }
51
- // ── (1) Generator name validation ──────────────────────────────────────────────
52
- test("isValidGeneratorName rejects invalid names and accepts PascalCase", () => {
53
- // Invalid: empty, non-identifier, leading digit, hyphen/space/dot.
54
- assert.equal(isValidGeneratorName(""), false);
55
- assert.equal(isValidGeneratorName("1Uploads"), false);
56
- assert.equal(isValidGeneratorName("my-storage"), false);
57
- assert.equal(isValidGeneratorName("my storage"), false);
58
- assert.equal(isValidGeneratorName("Up.loads"), false);
59
- assert.equal(isValidGeneratorName("$Uploads"), false);
60
- // Valid: identifier-safe tokens including PascalCase.
61
- assert.equal(isValidGeneratorName("Uploads"), true);
62
- assert.equal(isValidGeneratorName("UserAvatars"), true);
63
- assert.equal(isValidGeneratorName("A1"), true);
64
- assert.equal(isValidGeneratorName("uploads"), true);
65
- });
66
- test("generateStorage throws for invalid names before producing output", () => {
67
- assert.throws(() => generateStorage(""), /Invalid generator name/);
68
- assert.throws(() => generateStorage("bad-name"), /Invalid generator name/);
69
- assert.throws(() => generateStorage("9lives"), /Invalid generator name/);
70
- });
71
- test("generateStorage throws for a non-built-in provider", () => {
72
- assert.throws(() => generateStorage("Uploads", DEFAULT_STORAGE_DIR, "s3"), /Invalid storage provider/);
73
- assert.equal(isValidProvider("memory"), true);
74
- assert.equal(isValidProvider("local"), true);
75
- assert.equal(isValidProvider("s3"), false);
76
- });
77
- // ── (2) Compile-clean scaffold output ──────────────────────────────────────────
78
- test("generateStorage emits a scaffold importing only public @streetjs/storage symbols", () => {
79
- const result = generateStorage("Uploads");
80
- // Path is derived from the PascalCase class name under the default dir.
81
- assert.ok(result.path.endsWith("UploadsStorage.ts"), `unexpected path: ${result.path}`);
82
- const contents = result.contents;
83
- // Imports only the public package entry point (no deep/internal imports).
84
- assert.match(contents, /import \{ createStorage \} from "@streetjs\/storage";/);
85
- assert.match(contents, /import type \{ Storage, StorageConfig \} from "@streetjs\/storage";/);
86
- assert.ok(!/from "\.\//.test(contents) && !/from "\.\.\//.test(contents), "scaffold must not import from relative/internal paths");
87
- // Wires a typed StorageConfig and a factory that calls createStorage.
88
- assert.match(contents, /: StorageConfig = \{/);
89
- assert.match(contents, /provider: "memory"/);
90
- assert.match(contents, /export function createUploadsStorage\(\): Storage \{/);
91
- assert.match(contents, /return createStorage\(/);
92
- });
93
- test("generateStorage local provider scaffold supplies a root and stays on the public surface", () => {
94
- const result = generateStorage("Assets", DEFAULT_STORAGE_DIR, "local");
95
- const contents = result.contents;
96
- assert.match(contents, /provider: "local"/);
97
- assert.match(contents, /root: "\.\/var\/assets"/);
98
- assert.match(contents, /import \{ createStorage \} from "@streetjs\/storage";/);
99
- });
100
- // ── (3) storage:verify pass/fail reporting ──────────────────────────────────────
101
- test("storageVerify reports a pass for the built-in memory provider", async () => {
102
- const commands = new StorageCommands();
103
- const args = parsedArgs({ command: "storage:verify", flags: { provider: "memory" } });
104
- const { logs, exitCode } = await captureRun(() => commands.storageVerify(args));
105
- // A passing run must NOT set a failure exit code.
106
- assert.notEqual(exitCode, 1);
107
- const output = logs.join("\n");
108
- assert.match(output, /Contract conformance for driver "memory"/);
109
- assert.match(output, /— PASS\./);
110
- // No FAIL check lines expected.
111
- assert.ok(!/\[FAIL\]/.test(output), "memory provider should have no failing checks");
112
- });
113
- test("storageVerify reports failure for an unknown provider (exitCode 1)", async () => {
114
- const commands = new StorageCommands();
115
- const args = parsedArgs({ command: "storage:verify", flags: { provider: "does-not-exist" } });
116
- const { errors, exitCode } = await captureRun(() => commands.storageVerify(args));
117
- assert.equal(exitCode, 1);
118
- assert.match(errors.join("\n"), /Unknown storage provider "does-not-exist"/);
119
- });
120
- test("storageVerify reports failure for a misconfigured local provider (missing root)", async () => {
121
- const commands = new StorageCommands();
122
- const args = parsedArgs({ command: "storage:verify", flags: { provider: "local" } });
123
- const { errors, exitCode } = await captureRun(() => commands.storageVerify(args));
124
- assert.equal(exitCode, 1);
125
- assert.match(errors.join("\n"), /"local" storage provider requires a "root" directory/);
126
- });
127
- //# sourceMappingURL=cli.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../../src/tests/cli.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=contract.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"contract.test.d.ts","sourceRoot":"","sources":["../../src/tests/contract.test.ts"],"names":[],"mappings":""}
@@ -1,110 +0,0 @@
1
- // Contract-conformance suite run against the two zero-dependency drivers.
2
- //
3
- // Exercises the shared, parameterized suite from `./contract.js` (task 27.1)
4
- // against MemoryStorageDriver and LocalStorageDriver, verifying both directions
5
- // it is consumed in production:
6
- //
7
- // - as node:test cases via registerStorageDriverContractTests (what a driver's
8
- // own test file would do), and
9
- // - programmatically via runStorageDriverContract (what `storage:verify` and
10
- // Property 19 use), asserting the returned report passes for every check.
11
- //
12
- // Each check receives a freshly constructed driver from the supplied factory;
13
- // the Local driver gets a fresh temp directory per instance so checks stay
14
- // isolated. Executed via `node --test dist/tests/*.test.js`.
15
- //
16
- // Requirements: 2.1, 2.3, 2.4
17
- import test from "node:test";
18
- import assert from "node:assert/strict";
19
- import { mkdtempSync, rmSync } from "node:fs";
20
- import { tmpdir } from "node:os";
21
- import { join } from "node:path";
22
- import { runStorageDriverContract, registerStorageDriverContractTests, storageDriverContractChecks, } from "./contract.js";
23
- import { MemoryStorageDriver } from "../drivers/memory.js";
24
- import { LocalStorageDriver } from "../drivers/local.js";
25
- /** A fixed clock for deterministic timestamps. */
26
- const fixedClock = () => 1_700_000_000_000;
27
- /** Factory: a fresh in-memory driver per call. */
28
- function makeMemoryDriver() {
29
- return new MemoryStorageDriver({ clock: fixedClock });
30
- }
31
- /** Temp roots allocated for Local drivers, cleaned up after the run. */
32
- const tempRoots = [];
33
- /** Factory: a fresh filesystem driver rooted at a unique temp dir per call. */
34
- function makeLocalDriver() {
35
- const root = mkdtempSync(join(tmpdir(), "streetjs-storage-contract-"));
36
- tempRoots.push(root);
37
- return new LocalStorageDriver({ root, clock: fixedClock });
38
- }
39
- test.after(() => {
40
- for (const root of tempRoots) {
41
- rmSync(root, { recursive: true, force: true });
42
- }
43
- });
44
- // ── As node:test cases (per-driver, per-check) ────────────────────────────────
45
- registerStorageDriverContractTests("memory driver contract", makeMemoryDriver, test);
46
- registerStorageDriverContractTests("local driver contract", makeLocalDriver, test);
47
- // ── Programmatically (the storage:verify / Property 19 consumption path) ──────
48
- test("runStorageDriverContract reports a full pass for the memory driver", async () => {
49
- const report = await runStorageDriverContract(makeMemoryDriver);
50
- assert.equal(report.driver, "memory");
51
- assert.equal(report.passed, true);
52
- assert.equal(report.results.length, storageDriverContractChecks.length);
53
- assert.ok(report.results.every((result) => result.passed), `all checks must pass, got: ${JSON.stringify(report.results)}`);
54
- });
55
- test("runStorageDriverContract reports a full pass for the local driver", async () => {
56
- const report = await runStorageDriverContract(makeLocalDriver);
57
- assert.equal(report.driver, "local");
58
- assert.equal(report.passed, true);
59
- assert.equal(report.results.length, storageDriverContractChecks.length);
60
- assert.ok(report.results.every((result) => result.passed), `all checks must pass, got: ${JSON.stringify(report.results)}`);
61
- });
62
- test("a non-conforming driver is reported as failed, not thrown", async () => {
63
- // A driver that always reports a missing object exists violates the
64
- // not-found and round-trip checks; the runner must capture this as failures
65
- // rather than throwing.
66
- const brokenDriver = {
67
- name: "broken",
68
- async put(key, bytes) {
69
- return {
70
- key,
71
- size: bytes.byteLength,
72
- contentType: "application/octet-stream",
73
- etag: "x",
74
- checksum: "x",
75
- accessLevel: "private",
76
- createdAt: 0,
77
- updatedAt: 0,
78
- custom: {},
79
- };
80
- },
81
- async get() {
82
- return { found: false };
83
- },
84
- async exists() {
85
- return false;
86
- },
87
- async delete() { },
88
- async stat() {
89
- return null;
90
- },
91
- async list() {
92
- return [];
93
- },
94
- async putStream(key, _stream, _metadata) {
95
- return this.put(key, new Uint8Array(), {});
96
- },
97
- async getStream() {
98
- throw new Error("unsupported");
99
- },
100
- };
101
- const report = await runStorageDriverContract(() => brokenDriver);
102
- assert.equal(report.driver, "broken");
103
- assert.equal(report.passed, false);
104
- // existence and byte round-trip must fail (get always reports not-found);
105
- // the two not-found checks and metadata shape still pass.
106
- const failed = report.results.filter((result) => !result.passed).map((r) => r.name);
107
- assert.ok(failed.some((name) => name.startsWith("existence")), "existence check should fail for the broken driver");
108
- assert.ok(failed.some((name) => name.startsWith("byte round-trip")), "byte round-trip check should fail for the broken driver");
109
- });
110
- //# sourceMappingURL=contract.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"contract.test.js","sourceRoot":"","sources":["../../src/tests/contract.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=directory.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"directory.test.d.ts","sourceRoot":"","sources":["../../src/tests/directory.test.ts"],"names":[],"mappings":""}
@@ -1,125 +0,0 @@
1
- // Unit tests for the Directory API wired into the storage facade (task 17.1).
2
- //
3
- // Verifies the Requirement 15 semantics over the zero-dependency `memory`
4
- // provider, exercised through `storage.directory`:
5
- //
6
- // - mkdir(path) makes the path available as a directory prefix (15.1).
7
- // - listDirectory(path) returns only the IMMEDIATE children, collapsing
8
- // deeper keys into a single sub-directory entry (15.2).
9
- // - removeDirectory(path) removes every object under the prefix (15.3), and is
10
- // a success no-op returning { removed: false } for an empty/missing prefix
11
- // (15.6).
12
- // - walk(path) returns every object key beneath the prefix (15.4).
13
- //
14
- // Uses the Node.js built-in test runner (node:test); executed via
15
- // `node --test dist/tests/*.test.js`.
16
- //
17
- // Requirements: 15.1, 15.2, 15.3, 15.4, 15.5, 15.6
18
- import test from "node:test";
19
- import assert from "node:assert/strict";
20
- import { createStorage } from "../facade.js";
21
- import { MemoryStorageDriver } from "../drivers/memory.js";
22
- /** Build a facade backed by a fresh in-memory driver. */
23
- function makeStorage() {
24
- const driver = new MemoryStorageDriver({});
25
- return createStorage({ provider: "memory", driver });
26
- }
27
- /** Seed the store with a small hierarchy of objects. */
28
- async function seed(storage) {
29
- await storage.put("photos/a.jpg", "a");
30
- await storage.put("photos/b.jpg", "bb");
31
- await storage.put("photos/2024/c.jpg", "ccc");
32
- await storage.put("photos/2024/holidays/d.jpg", "dddd");
33
- await storage.put("docs/readme.txt", "hello");
34
- }
35
- test("directory getter returns a working, cached DirectoryApi", () => {
36
- const storage = makeStorage();
37
- const dir = storage.directory;
38
- assert.equal(typeof dir.mkdir, "function");
39
- assert.equal(typeof dir.listDirectory, "function");
40
- assert.equal(typeof dir.removeDirectory, "function");
41
- assert.equal(typeof dir.walk, "function");
42
- // Same instance is reused across accesses (lazily constructed once).
43
- assert.equal(storage.directory, dir);
44
- });
45
- test("mkdir makes the path available as a directory prefix (15.1)", async () => {
46
- const storage = makeStorage();
47
- await storage.directory.mkdir("uploads");
48
- // The marker key exists so the empty directory is discoverable.
49
- assert.equal(await storage.exists("uploads/"), true);
50
- // A freshly-made directory has no child entries yet.
51
- const listing = await storage.directory.listDirectory("uploads");
52
- assert.deepEqual(listing, []);
53
- });
54
- test("mkdir on the root/empty path is a no-op (15.1)", async () => {
55
- const storage = makeStorage();
56
- await storage.directory.mkdir("");
57
- await storage.directory.mkdir("/");
58
- // No marker keys were written for the root.
59
- const keys = await storage.directory.walk("");
60
- assert.deepEqual(keys, []);
61
- });
62
- test("listDirectory returns only immediate children (15.2)", async () => {
63
- const storage = makeStorage();
64
- await seed(storage);
65
- const listing = await storage.directory.listDirectory("photos");
66
- const keys = listing.map((item) => item.key).sort();
67
- // Immediate children of photos/: two files and one sub-directory entry;
68
- // deeper keys (photos/2024/holidays/...) collapse into photos/2024/.
69
- assert.deepEqual(keys, ["photos/2024/", "photos/a.jpg", "photos/b.jpg"]);
70
- // The sub-directory entry is synthesized with size 0.
71
- const subdir = listing.find((item) => item.key === "photos/2024/");
72
- assert.equal(subdir.size, 0);
73
- // File entries carry their real byte sizes.
74
- const fileA = listing.find((item) => item.key === "photos/a.jpg");
75
- assert.equal(fileA.size, 1);
76
- const fileB = listing.find((item) => item.key === "photos/b.jpg");
77
- assert.equal(fileB.size, 2);
78
- });
79
- test("listDirectory accepts leading/trailing delimiters equivalently (15.2)", async () => {
80
- const storage = makeStorage();
81
- await seed(storage);
82
- const a = (await storage.directory.listDirectory("photos")).map((i) => i.key).sort();
83
- const b = (await storage.directory.listDirectory("/photos/")).map((i) => i.key).sort();
84
- assert.deepEqual(a, b);
85
- });
86
- test("walk returns every object key beneath the prefix (15.4)", async () => {
87
- const storage = makeStorage();
88
- await seed(storage);
89
- const keys = (await storage.directory.walk("photos")).sort();
90
- assert.deepEqual(keys, [
91
- "photos/2024/c.jpg",
92
- "photos/2024/holidays/d.jpg",
93
- "photos/a.jpg",
94
- "photos/b.jpg",
95
- ]);
96
- // walk excludes the directory's own marker key.
97
- await storage.directory.mkdir("photos");
98
- const withMarker = (await storage.directory.walk("photos")).sort();
99
- assert.equal(withMarker.includes("photos/"), false);
100
- });
101
- test("removeDirectory removes every object under the prefix (15.3)", async () => {
102
- const storage = makeStorage();
103
- await seed(storage);
104
- const result = await storage.directory.removeDirectory("photos");
105
- assert.deepEqual(result, { removed: true });
106
- // Nothing remains beneath photos/.
107
- assert.deepEqual(await storage.directory.walk("photos"), []);
108
- assert.equal(await storage.exists("photos/a.jpg"), false);
109
- assert.equal(await storage.exists("photos/2024/holidays/d.jpg"), false);
110
- // Sibling directories are untouched.
111
- assert.equal(await storage.exists("docs/readme.txt"), true);
112
- });
113
- test("removeDirectory of an empty/missing prefix is a success no-op (15.6)", async () => {
114
- const storage = makeStorage();
115
- await seed(storage);
116
- // Missing prefix: no objects removed, success result, siblings intact.
117
- const missing = await storage.directory.removeDirectory("does-not-exist");
118
- assert.deepEqual(missing, { removed: false });
119
- assert.equal(await storage.exists("docs/readme.txt"), true);
120
- // Removing twice: second call finds nothing and reports removed: false.
121
- await storage.directory.removeDirectory("docs");
122
- const second = await storage.directory.removeDirectory("docs");
123
- assert.deepEqual(second, { removed: false });
124
- });
125
- //# sourceMappingURL=directory.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"directory.test.js","sourceRoot":"","sources":["../../src/tests/directory.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=errors.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.test.d.ts","sourceRoot":"","sources":["../../src/tests/errors.test.ts"],"names":[],"mappings":""}
@@ -1,93 +0,0 @@
1
- // Unit tests for the typed error hierarchy of @streetjs/storage.
2
- //
3
- // Verifies that every concrete error subclass derives from both StorageError
4
- // and the native Error (so consumers can catch the whole family or discriminate
5
- // on a subclass), that each carries its descriptive typed fields, and that each
6
- // sets `name` correctly. Uses the Node.js built-in test runner (node:test) and
7
- // is executed via `node --test dist/tests/*.test.js`.
8
- //
9
- // Requirements: 1.5, 9.4, 11.3
10
- import test from "node:test";
11
- import assert from "node:assert/strict";
12
- import { StorageError, StorageConfigError, NotFoundError, ValidationError, AuthorizationError, UnsupportedImageError, } from "../index.js";
13
- test("StorageError is a native Error and sets its name", () => {
14
- const err = new StorageError("boom");
15
- assert.ok(err instanceof Error);
16
- assert.ok(err instanceof StorageError);
17
- assert.equal(err.name, "StorageError");
18
- assert.equal(err.message, "boom");
19
- });
20
- test("StorageError carries an optional cause", () => {
21
- const underlying = new Error("root cause");
22
- const err = new StorageError("wrapped", { cause: underlying });
23
- assert.equal(err.cause, underlying);
24
- });
25
- test("StorageConfigError is instanceof StorageError and Error", () => {
26
- const err = new StorageConfigError("bad config", { provider: "s3" });
27
- assert.ok(err instanceof Error);
28
- assert.ok(err instanceof StorageError);
29
- assert.ok(err instanceof StorageConfigError);
30
- });
31
- test("StorageConfigError carries provider and name", () => {
32
- const err = new StorageConfigError("unknown provider", { provider: "nope" });
33
- assert.equal(err.name, "StorageConfigError");
34
- assert.equal(err.provider, "nope");
35
- });
36
- test("NotFoundError is instanceof StorageError and Error", () => {
37
- const err = new NotFoundError("photos/1.png");
38
- assert.ok(err instanceof Error);
39
- assert.ok(err instanceof StorageError);
40
- assert.ok(err instanceof NotFoundError);
41
- });
42
- test("NotFoundError carries key, name, and default message", () => {
43
- const err = new NotFoundError("photos/1.png");
44
- assert.equal(err.name, "NotFoundError");
45
- assert.equal(err.key, "photos/1.png");
46
- assert.equal(err.message, 'Object not found for key "photos/1.png"');
47
- });
48
- test("ValidationError is instanceof StorageError and Error", () => {
49
- const err = new ValidationError("file too large");
50
- assert.ok(err instanceof Error);
51
- assert.ok(err instanceof StorageError);
52
- assert.ok(err instanceof ValidationError);
53
- });
54
- test("ValidationError carries validationError, optional key, and name", () => {
55
- const err = new ValidationError("file too large", { key: "uploads/big.zip" });
56
- assert.equal(err.name, "ValidationError");
57
- assert.equal(err.validationError, "file too large");
58
- assert.equal(err.key, "uploads/big.zip");
59
- assert.equal(err.message, "Upload validation failed: file too large");
60
- });
61
- test("AuthorizationError is instanceof StorageError and Error", () => {
62
- const err = new AuthorizationError("denied");
63
- assert.ok(err instanceof Error);
64
- assert.ok(err instanceof StorageError);
65
- assert.ok(err instanceof AuthorizationError);
66
- });
67
- test("AuthorizationError carries key, operation, accessLevel, and name", () => {
68
- const err = new AuthorizationError("access denied", {
69
- key: "private/secret.txt",
70
- operation: "read",
71
- accessLevel: "private",
72
- });
73
- assert.equal(err.name, "AuthorizationError");
74
- assert.equal(err.key, "private/secret.txt");
75
- assert.equal(err.operation, "read");
76
- assert.equal(err.accessLevel, "private");
77
- });
78
- test("UnsupportedImageError is instanceof StorageError and Error", () => {
79
- const err = new UnsupportedImageError("cannot process");
80
- assert.ok(err instanceof Error);
81
- assert.ok(err instanceof StorageError);
82
- assert.ok(err instanceof UnsupportedImageError);
83
- });
84
- test("UnsupportedImageError carries format, key, and name", () => {
85
- const err = new UnsupportedImageError("unsupported format", {
86
- format: "image/tiff",
87
- key: "images/scan.tiff",
88
- });
89
- assert.equal(err.name, "UnsupportedImageError");
90
- assert.equal(err.format, "image/tiff");
91
- assert.equal(err.key, "images/scan.tiff");
92
- });
93
- //# sourceMappingURL=errors.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.test.js","sourceRoot":"","sources":["../../src/tests/errors.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=events-bridge.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"events-bridge.test.d.ts","sourceRoot":"","sources":["../../src/tests/events-bridge.test.ts"],"names":[],"mappings":""}