@secure-exec/core 0.2.1-rc.1 → 0.3.0-rc.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 (248) hide show
  1. package/README.md +5 -5
  2. package/dist/binary.d.ts +4 -0
  3. package/dist/binary.js +25 -0
  4. package/dist/bytes.d.ts +2 -0
  5. package/dist/bytes.js +6 -0
  6. package/dist/callbacks.d.ts +41 -0
  7. package/dist/callbacks.js +94 -0
  8. package/dist/cargo.d.ts +2 -0
  9. package/dist/cargo.js +142 -0
  10. package/dist/correlation.d.ts +10 -0
  11. package/dist/correlation.js +49 -0
  12. package/dist/descriptors.d.ts +34 -0
  13. package/dist/descriptors.js +37 -0
  14. package/dist/event-buffer.d.ts +90 -0
  15. package/dist/event-buffer.js +313 -0
  16. package/dist/ext.d.ts +7 -0
  17. package/dist/ext.js +13 -0
  18. package/dist/filesystem.d.ts +41 -0
  19. package/dist/filesystem.js +70 -0
  20. package/dist/frame-payload-codec.d.ts +8 -0
  21. package/dist/frame-payload-codec.js +14 -0
  22. package/dist/frame-rpc.d.ts +38 -0
  23. package/dist/frame-rpc.js +73 -0
  24. package/dist/frame-stream.d.ts +27 -0
  25. package/dist/frame-stream.js +99 -0
  26. package/dist/framing.d.ts +7 -0
  27. package/dist/framing.js +22 -0
  28. package/dist/generated/AcpLimitsConfig.d.ts +4 -0
  29. package/dist/generated/AcpLimitsConfig.js +2 -0
  30. package/dist/generated/CreateVmConfig.d.ts +19 -0
  31. package/dist/generated/FsPermissionRule.d.ts +6 -0
  32. package/dist/generated/FsPermissionRuleSet.d.ts +6 -0
  33. package/dist/generated/FsPermissionRuleSet.js +1 -0
  34. package/dist/generated/FsPermissionScope.d.ts +3 -0
  35. package/dist/generated/FsPermissionScope.js +1 -0
  36. package/dist/generated/HttpLimitsConfig.d.ts +3 -0
  37. package/dist/generated/HttpLimitsConfig.js +2 -0
  38. package/dist/generated/JsModuleResolution.d.ts +1 -0
  39. package/dist/generated/JsModuleResolution.js +2 -0
  40. package/dist/generated/JsRuntimeConfig.d.ts +26 -0
  41. package/dist/generated/JsRuntimeConfig.js +1 -0
  42. package/dist/generated/JsRuntimeLimitsConfig.d.ts +7 -0
  43. package/dist/generated/JsRuntimeLimitsConfig.js +2 -0
  44. package/dist/generated/JsRuntimePlatform.d.ts +1 -0
  45. package/dist/generated/JsRuntimePlatform.js +2 -0
  46. package/dist/generated/MountPluginDescriptor.d.ts +4 -0
  47. package/dist/generated/MountPluginDescriptor.js +2 -0
  48. package/dist/generated/NativeRootFilesystemConfig.d.ts +5 -0
  49. package/dist/generated/NativeRootFilesystemConfig.js +1 -0
  50. package/dist/generated/PatternPermissionRule.d.ts +6 -0
  51. package/dist/generated/PatternPermissionRule.js +1 -0
  52. package/dist/generated/PatternPermissionRuleSet.d.ts +6 -0
  53. package/dist/generated/PatternPermissionRuleSet.js +1 -0
  54. package/dist/generated/PatternPermissionScope.d.ts +3 -0
  55. package/dist/generated/PatternPermissionScope.js +1 -0
  56. package/dist/generated/PermissionMode.d.ts +1 -0
  57. package/dist/generated/PermissionMode.js +2 -0
  58. package/dist/generated/PermissionsPolicy.d.ts +10 -0
  59. package/dist/generated/PermissionsPolicy.js +1 -0
  60. package/dist/generated/PluginLimitsConfig.d.ts +4 -0
  61. package/dist/generated/PluginLimitsConfig.js +2 -0
  62. package/dist/generated/PythonLimitsConfig.d.ts +5 -0
  63. package/dist/generated/PythonLimitsConfig.js +2 -0
  64. package/dist/generated/ResourceLimitsConfig.d.ts +22 -0
  65. package/dist/generated/ResourceLimitsConfig.js +2 -0
  66. package/dist/generated/RootFilesystemConfig.d.ts +9 -0
  67. package/dist/generated/RootFilesystemConfig.js +1 -0
  68. package/dist/generated/RootFilesystemEntry.d.ts +13 -0
  69. package/dist/generated/RootFilesystemEntry.js +1 -0
  70. package/dist/generated/RootFilesystemEntryEncoding.d.ts +1 -0
  71. package/dist/generated/RootFilesystemEntryEncoding.js +2 -0
  72. package/dist/generated/RootFilesystemEntryKind.d.ts +1 -0
  73. package/dist/generated/RootFilesystemEntryKind.js +2 -0
  74. package/dist/generated/RootFilesystemLowerDescriptor.d.ts +7 -0
  75. package/dist/generated/RootFilesystemLowerDescriptor.js +1 -0
  76. package/dist/generated/RootFilesystemMode.d.ts +1 -0
  77. package/dist/generated/RootFilesystemMode.js +2 -0
  78. package/dist/generated/ToolLimitsConfig.d.ts +10 -0
  79. package/dist/generated/ToolLimitsConfig.js +2 -0
  80. package/dist/generated/VmDnsConfig.d.ts +6 -0
  81. package/dist/generated/VmDnsConfig.js +2 -0
  82. package/dist/generated/VmLimitsConfig.d.ts +18 -0
  83. package/dist/generated/VmLimitsConfig.js +1 -0
  84. package/dist/generated/VmListenPolicyConfig.d.ts +5 -0
  85. package/dist/generated/VmListenPolicyConfig.js +2 -0
  86. package/dist/generated/WasmLimitsConfig.d.ts +5 -0
  87. package/dist/generated/WasmLimitsConfig.js +2 -0
  88. package/dist/generated-protocol.d.ts +1037 -0
  89. package/dist/generated-protocol.js +2887 -0
  90. package/dist/index.d.ts +24 -62
  91. package/dist/index.js +24 -53
  92. package/dist/json.d.ts +2 -0
  93. package/dist/json.js +20 -0
  94. package/dist/kernel-proxy.d.ts +149 -0
  95. package/dist/kernel-proxy.js +1733 -0
  96. package/dist/native-client.d.ts +41 -0
  97. package/dist/native-client.js +124 -0
  98. package/dist/node-runtime.d.ts +443 -0
  99. package/dist/node-runtime.js +569 -0
  100. package/dist/numbers.d.ts +1 -0
  101. package/dist/numbers.js +8 -0
  102. package/dist/ownership.d.ts +18 -0
  103. package/dist/ownership.js +77 -0
  104. package/dist/permissions.d.ts +29 -0
  105. package/dist/permissions.js +68 -0
  106. package/dist/process.d.ts +35 -0
  107. package/dist/process.js +125 -0
  108. package/dist/protocol-client.d.ts +46 -0
  109. package/dist/protocol-client.js +180 -0
  110. package/dist/protocol-frames.d.ts +68 -0
  111. package/dist/protocol-frames.js +139 -0
  112. package/dist/protocol-maps.d.ts +28 -0
  113. package/dist/protocol-maps.js +217 -0
  114. package/dist/protocol-schema.d.ts +10 -0
  115. package/dist/protocol-schema.js +11 -0
  116. package/dist/request-payloads.d.ts +137 -0
  117. package/dist/request-payloads.js +210 -0
  118. package/dist/response-payloads.d.ts +107 -0
  119. package/dist/response-payloads.js +161 -0
  120. package/dist/sidecar-client.d.ts +242 -0
  121. package/dist/sidecar-client.js +797 -0
  122. package/dist/state.d.ts +40 -0
  123. package/dist/state.js +44 -0
  124. package/dist/test-runtime.d.ts +526 -0
  125. package/dist/test-runtime.js +2119 -0
  126. package/dist/vm-config.d.ts +31 -0
  127. package/dist/vm-config.js +1 -0
  128. package/fixtures/alpine-defaults.json +520 -0
  129. package/fixtures/base-filesystem.json +528 -0
  130. package/package.json +193 -115
  131. package/LICENSE +0 -191
  132. package/dist/bridge-setup.d.ts +0 -6
  133. package/dist/bridge-setup.js +0 -9
  134. package/dist/esm-compiler.d.ts +0 -18
  135. package/dist/esm-compiler.js +0 -72
  136. package/dist/fs-helpers.d.ts +0 -23
  137. package/dist/fs-helpers.js +0 -41
  138. package/dist/generated/isolate-runtime.d.ts +0 -19
  139. package/dist/generated/isolate-runtime.js +0 -21
  140. package/dist/generated/polyfills.d.ts +0 -82
  141. package/dist/generated/polyfills.js +0 -82
  142. package/dist/isolate-runtime/apply-custom-global-policy.js +0 -53
  143. package/dist/isolate-runtime/apply-timing-mitigation-freeze.js +0 -130
  144. package/dist/isolate-runtime/apply-timing-mitigation-off.js +0 -14
  145. package/dist/isolate-runtime/bridge-attach.js +0 -29
  146. package/dist/isolate-runtime/bridge-initial-globals.js +0 -385
  147. package/dist/isolate-runtime/eval-script-result.js +0 -8
  148. package/dist/isolate-runtime/global-exposure-helpers.js +0 -36
  149. package/dist/isolate-runtime/init-commonjs-module-globals.js +0 -28
  150. package/dist/isolate-runtime/override-process-cwd.js +0 -8
  151. package/dist/isolate-runtime/override-process-env.js +0 -8
  152. package/dist/isolate-runtime/require-setup.js +0 -4153
  153. package/dist/isolate-runtime/set-commonjs-file-globals.js +0 -36
  154. package/dist/isolate-runtime/set-stdin-data.js +0 -10
  155. package/dist/isolate-runtime/setup-dynamic-import.js +0 -123
  156. package/dist/isolate-runtime/setup-fs-facade.js +0 -87
  157. package/dist/kernel/command-registry.d.ts +0 -44
  158. package/dist/kernel/command-registry.js +0 -114
  159. package/dist/kernel/device-backend.d.ts +0 -14
  160. package/dist/kernel/device-backend.js +0 -251
  161. package/dist/kernel/device-layer.d.ts +0 -12
  162. package/dist/kernel/device-layer.js +0 -271
  163. package/dist/kernel/dns-cache.d.ts +0 -29
  164. package/dist/kernel/dns-cache.js +0 -52
  165. package/dist/kernel/fd-table.d.ts +0 -84
  166. package/dist/kernel/fd-table.js +0 -278
  167. package/dist/kernel/file-lock.d.ts +0 -34
  168. package/dist/kernel/file-lock.js +0 -122
  169. package/dist/kernel/host-adapter.d.ts +0 -50
  170. package/dist/kernel/host-adapter.js +0 -8
  171. package/dist/kernel/index.d.ts +0 -36
  172. package/dist/kernel/index.js +0 -34
  173. package/dist/kernel/kernel.d.ts +0 -9
  174. package/dist/kernel/kernel.js +0 -1415
  175. package/dist/kernel/mount-table.d.ts +0 -75
  176. package/dist/kernel/mount-table.js +0 -353
  177. package/dist/kernel/permissions.d.ts +0 -36
  178. package/dist/kernel/permissions.js +0 -150
  179. package/dist/kernel/pipe-manager.d.ts +0 -64
  180. package/dist/kernel/pipe-manager.js +0 -267
  181. package/dist/kernel/proc-backend.d.ts +0 -30
  182. package/dist/kernel/proc-backend.js +0 -428
  183. package/dist/kernel/proc-layer.d.ts +0 -11
  184. package/dist/kernel/proc-layer.js +0 -507
  185. package/dist/kernel/process-table.d.ts +0 -126
  186. package/dist/kernel/process-table.js +0 -651
  187. package/dist/kernel/pty.d.ts +0 -109
  188. package/dist/kernel/pty.js +0 -552
  189. package/dist/kernel/socket-table.d.ts +0 -312
  190. package/dist/kernel/socket-table.js +0 -1188
  191. package/dist/kernel/timer-table.d.ts +0 -54
  192. package/dist/kernel/timer-table.js +0 -108
  193. package/dist/kernel/types.d.ts +0 -541
  194. package/dist/kernel/types.js +0 -98
  195. package/dist/kernel/user.d.ts +0 -29
  196. package/dist/kernel/user.js +0 -35
  197. package/dist/kernel/vfs.d.ts +0 -82
  198. package/dist/kernel/vfs.js +0 -25
  199. package/dist/kernel/wait.d.ts +0 -45
  200. package/dist/kernel/wait.js +0 -112
  201. package/dist/kernel/wstatus.d.ts +0 -21
  202. package/dist/kernel/wstatus.js +0 -33
  203. package/dist/module-resolver.d.ts +0 -29
  204. package/dist/module-resolver.js +0 -314
  205. package/dist/package-bundler.d.ts +0 -41
  206. package/dist/package-bundler.js +0 -497
  207. package/dist/runtime-driver.d.ts +0 -66
  208. package/dist/shared/api-types.d.ts +0 -83
  209. package/dist/shared/bridge-contract.d.ts +0 -772
  210. package/dist/shared/bridge-contract.js +0 -169
  211. package/dist/shared/console-formatter.d.ts +0 -22
  212. package/dist/shared/console-formatter.js +0 -161
  213. package/dist/shared/constants.d.ts +0 -3
  214. package/dist/shared/constants.js +0 -3
  215. package/dist/shared/errors.d.ts +0 -16
  216. package/dist/shared/errors.js +0 -21
  217. package/dist/shared/esm-utils.d.ts +0 -28
  218. package/dist/shared/esm-utils.js +0 -97
  219. package/dist/shared/global-exposure.d.ts +0 -38
  220. package/dist/shared/global-exposure.js +0 -876
  221. package/dist/shared/in-memory-fs.d.ts +0 -16
  222. package/dist/shared/in-memory-fs.js +0 -115
  223. package/dist/shared/permissions.d.ts +0 -36
  224. package/dist/shared/permissions.js +0 -314
  225. package/dist/shared/require-setup.d.ts +0 -6
  226. package/dist/shared/require-setup.js +0 -9
  227. package/dist/test/block-store-conformance.d.ts +0 -34
  228. package/dist/test/block-store-conformance.js +0 -251
  229. package/dist/test/metadata-store-conformance.d.ts +0 -37
  230. package/dist/test/metadata-store-conformance.js +0 -646
  231. package/dist/test/vfs-conformance.d.ts +0 -65
  232. package/dist/test/vfs-conformance.js +0 -842
  233. package/dist/types.d.ts +0 -98
  234. package/dist/types.js +0 -6
  235. package/dist/vfs/chunked-vfs.d.ts +0 -66
  236. package/dist/vfs/chunked-vfs.js +0 -1290
  237. package/dist/vfs/host-block-store.d.ts +0 -19
  238. package/dist/vfs/host-block-store.js +0 -97
  239. package/dist/vfs/memory-block-store.d.ts +0 -16
  240. package/dist/vfs/memory-block-store.js +0 -45
  241. package/dist/vfs/memory-metadata.d.ts +0 -75
  242. package/dist/vfs/memory-metadata.js +0 -528
  243. package/dist/vfs/sqlite-metadata.d.ts +0 -91
  244. package/dist/vfs/sqlite-metadata.js +0 -582
  245. package/dist/vfs/types.d.ts +0 -210
  246. package/dist/vfs/types.js +0 -8
  247. /package/dist/{runtime-driver.js → generated/CreateVmConfig.js} +0 -0
  248. /package/dist/{shared/api-types.js → generated/FsPermissionRule.js} +0 -0
@@ -1,251 +0,0 @@
1
- /**
2
- * Shared FsBlockStore conformance test suite.
3
- *
4
- * Every FsBlockStore implementation must pass the tests in this suite.
5
- * Optional test groups are gated on capability flags declared in the config.
6
- *
7
- * Usage:
8
- *
9
- * ```typescript
10
- * import { defineBlockStoreTests } from "@secure-exec/core/test/block-store-conformance";
11
- *
12
- * defineBlockStoreTests({
13
- * name: "InMemoryBlockStore",
14
- * createStore: () => new InMemoryBlockStore(),
15
- * capabilities: { copy: true },
16
- * });
17
- * ```
18
- */
19
- import { describe, beforeEach, afterEach, expect, test } from "vitest";
20
- // ---------------------------------------------------------------------------
21
- // Error code helper
22
- // ---------------------------------------------------------------------------
23
- function hasErrorCode(err, code) {
24
- if (typeof err !== "object" || err === null)
25
- return false;
26
- const e = err;
27
- if (e.code === code)
28
- return true;
29
- if (typeof e.message === "string" && e.message.startsWith(`${code}:`))
30
- return true;
31
- return false;
32
- }
33
- function expectErrorCode(err, code) {
34
- expect(err).toBeInstanceOf(Error);
35
- expect(hasErrorCode(err, code)).toBe(true);
36
- }
37
- // ---------------------------------------------------------------------------
38
- // Helpers
39
- // ---------------------------------------------------------------------------
40
- /** Create a Uint8Array of the given size filled with a repeating byte pattern. */
41
- function makeData(size, seed = 0x42) {
42
- const buf = new Uint8Array(size);
43
- for (let i = 0; i < size; i++) {
44
- buf[i] = (seed + i) & 0xff;
45
- }
46
- return buf;
47
- }
48
- // ---------------------------------------------------------------------------
49
- // Test suite
50
- // ---------------------------------------------------------------------------
51
- export function defineBlockStoreTests(config) {
52
- const { name, capabilities } = config;
53
- describe(name, () => {
54
- let store;
55
- beforeEach(async () => {
56
- store = await config.createStore();
57
- });
58
- afterEach(async () => {
59
- if (config.cleanup)
60
- await config.cleanup();
61
- });
62
- // ---------------------------------------------------------------
63
- // write + read round-trip
64
- // ---------------------------------------------------------------
65
- describe("write + read", () => {
66
- test("round-trip small data", async () => {
67
- const data = makeData(64);
68
- await store.write("key1", data);
69
- const result = await store.read("key1");
70
- expect(result).toEqual(data);
71
- });
72
- test("round-trip large data (>4MB)", async () => {
73
- const data = makeData(4 * 1024 * 1024 + 1, 0xab);
74
- await store.write("large", data);
75
- const result = await store.read("large");
76
- expect(result).toEqual(data);
77
- });
78
- test("write overwrites existing key", async () => {
79
- const data1 = makeData(32, 0x11);
80
- const data2 = makeData(64, 0x22);
81
- await store.write("key", data1);
82
- await store.write("key", data2);
83
- const result = await store.read("key");
84
- expect(result).toEqual(data2);
85
- });
86
- });
87
- // ---------------------------------------------------------------
88
- // readRange
89
- // ---------------------------------------------------------------
90
- describe("readRange", () => {
91
- test("partial read from start", async () => {
92
- const data = makeData(100);
93
- await store.write("key", data);
94
- const result = await store.readRange("key", 0, 10);
95
- expect(result).toEqual(data.slice(0, 10));
96
- });
97
- test("partial read from middle", async () => {
98
- const data = makeData(100);
99
- await store.write("key", data);
100
- const result = await store.readRange("key", 20, 30);
101
- expect(result).toEqual(data.slice(20, 50));
102
- });
103
- test("partial read at end", async () => {
104
- const data = makeData(100);
105
- await store.write("key", data);
106
- const result = await store.readRange("key", 90, 10);
107
- expect(result).toEqual(data.slice(90, 100));
108
- });
109
- test("readRange beyond block size returns short read", async () => {
110
- const data = makeData(50);
111
- await store.write("key", data);
112
- const result = await store.readRange("key", 40, 100);
113
- expect(result).toEqual(data.slice(40, 50));
114
- expect(result.length).toBe(10);
115
- });
116
- test("readRange nonexistent key throws ENOENT", async () => {
117
- try {
118
- await store.readRange("missing", 0, 10);
119
- expect.fail("should have thrown");
120
- }
121
- catch (err) {
122
- expectErrorCode(err, "ENOENT");
123
- }
124
- });
125
- test("readRange with offset exactly at block size returns empty Uint8Array", async () => {
126
- const data = makeData(50);
127
- await store.write("key", data);
128
- const result = await store.readRange("key", 50, 10);
129
- expect(result.length).toBe(0);
130
- });
131
- test("readRange with offset=0, length=0 returns empty Uint8Array", async () => {
132
- const data = makeData(50);
133
- await store.write("key", data);
134
- const result = await store.readRange("key", 0, 0);
135
- expect(result.length).toBe(0);
136
- });
137
- });
138
- // ---------------------------------------------------------------
139
- // read errors
140
- // ---------------------------------------------------------------
141
- describe("read errors", () => {
142
- test("read nonexistent key throws ENOENT", async () => {
143
- try {
144
- await store.read("nonexistent");
145
- expect.fail("should have thrown");
146
- }
147
- catch (err) {
148
- expectErrorCode(err, "ENOENT");
149
- }
150
- });
151
- });
152
- // ---------------------------------------------------------------
153
- // delete
154
- // ---------------------------------------------------------------
155
- describe("delete", () => {
156
- test("delete then read throws ENOENT", async () => {
157
- const data = makeData(16);
158
- await store.write("key", data);
159
- await store.delete("key");
160
- try {
161
- await store.read("key");
162
- expect.fail("should have thrown");
163
- }
164
- catch (err) {
165
- expectErrorCode(err, "ENOENT");
166
- }
167
- });
168
- test("delete nonexistent key is no-op", async () => {
169
- // Should not throw.
170
- await store.delete("nonexistent");
171
- });
172
- });
173
- // ---------------------------------------------------------------
174
- // deleteMany
175
- // ---------------------------------------------------------------
176
- describe("deleteMany", () => {
177
- test("deleteMany removes multiple keys", async () => {
178
- await store.write("a", makeData(8, 0x01));
179
- await store.write("b", makeData(8, 0x02));
180
- await store.write("c", makeData(8, 0x03));
181
- await store.deleteMany(["a", "b"]);
182
- // a and b should be gone.
183
- try {
184
- await store.read("a");
185
- expect.fail("should have thrown");
186
- }
187
- catch (err) {
188
- expectErrorCode(err, "ENOENT");
189
- }
190
- try {
191
- await store.read("b");
192
- expect.fail("should have thrown");
193
- }
194
- catch (err) {
195
- expectErrorCode(err, "ENOENT");
196
- }
197
- // c should still exist.
198
- const result = await store.read("c");
199
- expect(result).toEqual(makeData(8, 0x03));
200
- });
201
- test("deleteMany with nonexistent keys is no-op", async () => {
202
- await store.write("x", makeData(4));
203
- // Should not throw even if some keys don't exist.
204
- await store.deleteMany(["x", "nonexistent1", "nonexistent2"]);
205
- try {
206
- await store.read("x");
207
- expect.fail("should have thrown");
208
- }
209
- catch (err) {
210
- expectErrorCode(err, "ENOENT");
211
- }
212
- });
213
- test("deleteMany empty array is no-op", async () => {
214
- // Should not throw.
215
- await store.deleteMany([]);
216
- });
217
- });
218
- // ---------------------------------------------------------------
219
- // copy (gated)
220
- // ---------------------------------------------------------------
221
- describe.skipIf(!capabilities.copy)("copy", () => {
222
- test("copy round-trip", async () => {
223
- const data = makeData(128, 0xcc);
224
- await store.write("src", data);
225
- await store.copy("src", "dst");
226
- const result = await store.read("dst");
227
- expect(result).toEqual(data);
228
- });
229
- test("copy creates independent data", async () => {
230
- const data = makeData(64, 0xdd);
231
- await store.write("src", data);
232
- await store.copy("src", "dst");
233
- // Overwrite source.
234
- const newData = makeData(32, 0xee);
235
- await store.write("src", newData);
236
- // Destination should still have original data.
237
- const result = await store.read("dst");
238
- expect(result).toEqual(data);
239
- });
240
- test("copy nonexistent source throws ENOENT", async () => {
241
- try {
242
- await store.copy("missing", "dst");
243
- expect.fail("should have thrown");
244
- }
245
- catch (err) {
246
- expectErrorCode(err, "ENOENT");
247
- }
248
- });
249
- });
250
- });
251
- }
@@ -1,37 +0,0 @@
1
- /**
2
- * Shared FsMetadataStore conformance test suite.
3
- *
4
- * Every FsMetadataStore implementation must pass the tests in this suite.
5
- * Optional test groups are gated on capability flags declared in the config.
6
- *
7
- * Usage:
8
- *
9
- * ```typescript
10
- * import { defineMetadataStoreTests } from "@secure-exec/core/test/metadata-store-conformance";
11
- *
12
- * defineMetadataStoreTests({
13
- * name: "InMemoryMetadataStore",
14
- * createStore: () => new InMemoryMetadataStore(),
15
- * capabilities: { versioning: false },
16
- * });
17
- * ```
18
- *
19
- * The `versioning` capability flag gates tests for the optional
20
- * FsMetadataStoreVersioning interface (deferred to US-013).
21
- */
22
- import type { FsMetadataStore } from "../vfs/types.js";
23
- export interface MetadataStoreConformanceCapabilities {
24
- /** Whether the store implements FsMetadataStoreVersioning. */
25
- versioning: boolean;
26
- }
27
- export interface MetadataStoreConformanceConfig {
28
- /** Human-readable name shown in the describe block. */
29
- name: string;
30
- /** Create a fresh metadata store instance for each test. */
31
- createStore: () => Promise<FsMetadataStore> | FsMetadataStore;
32
- /** Optional teardown called after each test. */
33
- cleanup?: () => Promise<void>;
34
- /** Which optional capabilities the store supports. */
35
- capabilities: MetadataStoreConformanceCapabilities;
36
- }
37
- export declare function defineMetadataStoreTests(config: MetadataStoreConformanceConfig): void;