@selvajs/platform 0.11.0 → 0.12.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 (70) hide show
  1. package/dist/bindings/interface.d.ts +19 -21
  2. package/dist/bindings/interface.d.ts.map +1 -1
  3. package/dist/bindings/interface.js +6 -7
  4. package/dist/bindings/interface.js.map +1 -1
  5. package/dist/definitions/index.d.ts +1 -0
  6. package/dist/definitions/index.d.ts.map +1 -1
  7. package/dist/definitions/index.js.map +1 -1
  8. package/dist/definitions/interface.d.ts +8 -0
  9. package/dist/definitions/interface.d.ts.map +1 -1
  10. package/dist/definitions/schemas.d.ts +2 -0
  11. package/dist/definitions/schemas.d.ts.map +1 -1
  12. package/dist/definitions/schemas.js +5 -1
  13. package/dist/definitions/schemas.js.map +1 -1
  14. package/dist/definitions/types.d.ts +10 -0
  15. package/dist/definitions/types.d.ts.map +1 -1
  16. package/dist/definitions/types.js.map +1 -1
  17. package/dist/index.d.ts +1 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js.map +1 -1
  20. package/dist/testing/suites/definitionStoreSuite.d.ts.map +1 -1
  21. package/dist/testing/suites/definitionStoreSuite.js +24 -0
  22. package/dist/testing/suites/definitionStoreSuite.js.map +1 -1
  23. package/package.json +3 -2
  24. package/src/bindings/interface.ts +19 -21
  25. package/src/definitions/index.ts +1 -0
  26. package/src/definitions/interface.ts +9 -0
  27. package/src/definitions/schemas.ts +5 -1
  28. package/src/definitions/types.ts +11 -0
  29. package/src/index.ts +1 -0
  30. package/src/testing/suites/definitionStoreSuite.ts +32 -0
  31. package/dist/auth.d.ts +0 -59
  32. package/dist/auth.d.ts.map +0 -1
  33. package/dist/auth.js +0 -12
  34. package/dist/auth.js.map +0 -1
  35. package/dist/compute.d.ts +0 -47
  36. package/dist/compute.d.ts.map +0 -1
  37. package/dist/compute.js +0 -11
  38. package/dist/compute.js.map +0 -1
  39. package/dist/definitions/service.d.ts +0 -63
  40. package/dist/definitions/service.d.ts.map +0 -1
  41. package/dist/definitions/service.js +0 -162
  42. package/dist/definitions/service.js.map +0 -1
  43. package/dist/definitions.d.ts +0 -135
  44. package/dist/definitions.d.ts.map +0 -1
  45. package/dist/definitions.js +0 -23
  46. package/dist/definitions.js.map +0 -1
  47. package/dist/invites/schemas.d.ts +0 -24
  48. package/dist/invites/schemas.d.ts.map +0 -1
  49. package/dist/invites/schemas.js +0 -17
  50. package/dist/invites/schemas.js.map +0 -1
  51. package/dist/organizations.d.ts +0 -93
  52. package/dist/organizations.d.ts.map +0 -1
  53. package/dist/organizations.js +0 -14
  54. package/dist/organizations.js.map +0 -1
  55. package/dist/testing/adapterSuite.d.ts +0 -33
  56. package/dist/testing/adapterSuite.d.ts.map +0 -1
  57. package/dist/testing/adapterSuite.js +0 -166
  58. package/dist/testing/adapterSuite.js.map +0 -1
  59. package/dist/testing/orgStoreSuite.d.ts +0 -32
  60. package/dist/testing/orgStoreSuite.d.ts.map +0 -1
  61. package/dist/testing/orgStoreSuite.js +0 -363
  62. package/dist/testing/orgStoreSuite.js.map +0 -1
  63. package/dist/testing/storageProviderSuite.d.ts +0 -30
  64. package/dist/testing/storageProviderSuite.d.ts.map +0 -1
  65. package/dist/testing/storageProviderSuite.js +0 -122
  66. package/dist/testing/storageProviderSuite.js.map +0 -1
  67. package/dist/testing/suites/runner.d.ts +0 -21
  68. package/dist/testing/suites/runner.d.ts.map +0 -1
  69. package/dist/testing/suites/runner.js +0 -7
  70. package/dist/testing/suites/runner.js.map +0 -1
@@ -1,363 +0,0 @@
1
- /**
2
- * Adapter conformance suite for IOrgStore.
3
- *
4
- * Tests organization and project CRUD, membership management, pagination,
5
- * and error handling to ensure all adapters behave identically.
6
- *
7
- * Runner-agnostic: callers inject a `{ describe, it, expect }` trio.
8
- */
9
- function ctx(userId, permissions = ['platform_admin']) {
10
- return { userId, permissions };
11
- }
12
- function org(overrides = {}) {
13
- const now = new Date().toISOString();
14
- return {
15
- id: overrides.id ?? uuid(),
16
- name: overrides.name ?? 'Test Org',
17
- slug: overrides.slug ?? `test-${Math.random().toString(36).slice(2, 8)}`,
18
- ownerId: overrides.ownerId ?? 'user-1',
19
- createdAt: overrides.createdAt ?? now,
20
- updatedAt: overrides.updatedAt ?? now,
21
- ...overrides
22
- };
23
- }
24
- function project(overrides = {}) {
25
- const now = new Date().toISOString();
26
- return {
27
- id: overrides.id ?? uuid(),
28
- orgId: overrides.orgId ?? 'org-1',
29
- name: overrides.name ?? 'Test Project',
30
- slug: overrides.slug ?? `test-${Math.random().toString(36).slice(2, 8)}`,
31
- visibility: overrides.visibility ?? 'private',
32
- ownerId: overrides.ownerId ?? 'user-1',
33
- createdAt: overrides.createdAt ?? now,
34
- updatedAt: overrides.updatedAt ?? now,
35
- ...overrides
36
- };
37
- }
38
- function uuid() {
39
- return `${Math.random().toString(36).slice(2, 10)}-${Math.random().toString(36).slice(2, 10)}`;
40
- }
41
- export function runOrgStoreConformance(opts) {
42
- const { name, createStore, runner, singleOrgMode = false } = opts;
43
- const { describe, it, expect } = runner;
44
- describe(`IOrgStore conformance: ${name}`, () => {
45
- // ============================================================================
46
- // Organizations
47
- // ============================================================================
48
- if (!singleOrgMode) {
49
- it('createOrg + getOrg returns the organization', async () => {
50
- const store = await createStore();
51
- const o = org({ id: 'o1', slug: 'acme' });
52
- await store.createOrg(ctx('u1'), o);
53
- const got = await store.getOrg(ctx('u1'), 'o1');
54
- expect(got?.name).toBe('Test Org');
55
- expect(got?.slug).toBe('acme');
56
- });
57
- it('getOrg returns null for missing id', async () => {
58
- const store = await createStore();
59
- const got = await store.getOrg(ctx('u1'), 'nonexistent');
60
- expect(got).toBeNull();
61
- });
62
- it('getOrgBySlug finds org by slug', async () => {
63
- const store = await createStore();
64
- await store.createOrg(ctx('u1'), org({ id: 'o1', slug: 'acme-corp' }));
65
- const got = await store.getOrgBySlug(ctx('u1'), 'acme-corp');
66
- expect(got?.id).toBe('o1');
67
- });
68
- it('getOrgBySlug returns null for missing slug', async () => {
69
- const store = await createStore();
70
- const got = await store.getOrgBySlug(ctx('u1'), 'nonexistent');
71
- expect(got).toBeNull();
72
- });
73
- it('updateOrg modifies name and slug', async () => {
74
- const store = await createStore();
75
- await store.createOrg(ctx('u1'), org({ id: 'o1', slug: 'old-slug' }));
76
- await store.updateOrg(ctx('u1'), 'o1', { name: 'New Name', slug: 'new-slug' });
77
- const got = await store.getOrg(ctx('u1'), 'o1');
78
- expect(got?.name).toBe('New Name');
79
- expect(got?.slug).toBe('new-slug');
80
- });
81
- it('deleteOrg removes the organization', async () => {
82
- const store = await createStore();
83
- await store.createOrg(ctx('u1'), org({ id: 'o1' }));
84
- await store.deleteOrg(ctx('u1'), 'o1');
85
- const got = await store.getOrg(ctx('u1'), 'o1');
86
- expect(got).toBeNull();
87
- });
88
- it('listOrgs returns all organizations with pagination', async () => {
89
- const store = await createStore();
90
- for (let i = 0; i < 3; i++) {
91
- await store.createOrg(ctx('u1'), org({ id: `o${i}` }));
92
- }
93
- const page = await store.listOrgs(ctx('u1'), { limit: 2 });
94
- expect(page.items.length).toBe(2);
95
- expect(page.nextCursor).toBeTruthy();
96
- });
97
- }
98
- else {
99
- it('getOrg returns the default organization', async () => {
100
- const store = await createStore();
101
- const orgs = await store.listOrgs(ctx('u1'));
102
- expect(orgs.items.length > 0).toBe(true);
103
- });
104
- }
105
- // ============================================================================
106
- // Org Members
107
- // ============================================================================
108
- it('addOrgMember + getOrgMember returns the member', async () => {
109
- const store = await createStore();
110
- const orgs = await store.listOrgs(ctx('u1'));
111
- const orgId = singleOrgMode ? orgs.items[0].id : 'o1';
112
- if (!singleOrgMode) {
113
- await store.createOrg(ctx('u1'), org({ id: orgId }));
114
- }
115
- const member = {
116
- orgId,
117
- userId: 'u2',
118
- role: 'member',
119
- joinedAt: new Date().toISOString()
120
- };
121
- await store.addOrgMember(ctx('u1'), member);
122
- const got = await store.getOrgMember(ctx('u1'), orgId, 'u2');
123
- expect(got?.role).toBe('member');
124
- });
125
- it('getOrgMember returns null for missing member', async () => {
126
- const store = await createStore();
127
- const orgs = await store.listOrgs(ctx('u1'));
128
- const orgId = singleOrgMode ? orgs.items[0].id : 'o1';
129
- if (!singleOrgMode) {
130
- await store.createOrg(ctx('u1'), org({ id: orgId }));
131
- }
132
- const got = await store.getOrgMember(ctx('u1'), orgId, 'nonexistent');
133
- expect(got).toBeNull();
134
- });
135
- it('updateOrgMemberRole changes role', async () => {
136
- const store = await createStore();
137
- const orgs = await store.listOrgs(ctx('u1'));
138
- const orgId = singleOrgMode ? orgs.items[0].id : 'o1';
139
- if (!singleOrgMode) {
140
- await store.createOrg(ctx('u1'), org({ id: orgId }));
141
- }
142
- const member = {
143
- orgId,
144
- userId: 'u2',
145
- role: 'member',
146
- joinedAt: new Date().toISOString()
147
- };
148
- await store.addOrgMember(ctx('u1'), member);
149
- await store.updateOrgMemberRole(ctx('u1'), orgId, 'u2', 'admin');
150
- const got = await store.getOrgMember(ctx('u1'), orgId, 'u2');
151
- expect(got?.role).toBe('admin');
152
- });
153
- it('removeOrgMember deletes the member', async () => {
154
- const store = await createStore();
155
- const orgs = await store.listOrgs(ctx('u1'));
156
- const orgId = singleOrgMode ? orgs.items[0].id : 'o1';
157
- if (!singleOrgMode) {
158
- await store.createOrg(ctx('u1'), org({ id: orgId }));
159
- }
160
- const member = {
161
- orgId,
162
- userId: 'u2',
163
- role: 'member',
164
- joinedAt: new Date().toISOString()
165
- };
166
- await store.addOrgMember(ctx('u1'), member);
167
- await store.removeOrgMember(ctx('u1'), orgId, 'u2');
168
- const got = await store.getOrgMember(ctx('u1'), orgId, 'u2');
169
- expect(got).toBeNull();
170
- });
171
- it('listOrgMembers returns members with pagination', async () => {
172
- const store = await createStore();
173
- const orgs = await store.listOrgs(ctx('u1'));
174
- const orgId = singleOrgMode ? orgs.items[0].id : 'o1';
175
- if (!singleOrgMode) {
176
- await store.createOrg(ctx('u1'), org({ id: orgId }));
177
- }
178
- for (let i = 0; i < 3; i++) {
179
- await store.addOrgMember(ctx('u1'), {
180
- orgId,
181
- userId: `u${i}`,
182
- role: 'member',
183
- joinedAt: new Date().toISOString()
184
- });
185
- }
186
- const page = await store.listOrgMembers(ctx('u1'), orgId, { limit: 2 });
187
- expect(page.items.length).toBe(2);
188
- });
189
- // ============================================================================
190
- // Projects
191
- // ============================================================================
192
- it('createProject + getProject returns the project', async () => {
193
- const store = await createStore();
194
- const orgs = await store.listOrgs(ctx('u1'));
195
- const orgId = singleOrgMode ? orgs.items[0].id : 'o1';
196
- if (!singleOrgMode) {
197
- await store.createOrg(ctx('u1'), org({ id: orgId }));
198
- }
199
- const p = project({ id: 'p1', orgId });
200
- await store.createProject(ctx('u1'), p);
201
- const got = await store.getProject(ctx('u1'), 'p1');
202
- expect(got?.name).toBe('Test Project');
203
- });
204
- it('getProject returns null for missing id', async () => {
205
- const store = await createStore();
206
- const got = await store.getProject(ctx('u1'), 'nonexistent');
207
- expect(got).toBeNull();
208
- });
209
- it('getProjectBySlug finds project by slug within org', async () => {
210
- const store = await createStore();
211
- const orgs = await store.listOrgs(ctx('u1'));
212
- const orgId = singleOrgMode ? orgs.items[0].id : 'o1';
213
- if (!singleOrgMode) {
214
- await store.createOrg(ctx('u1'), org({ id: orgId }));
215
- }
216
- await store.createProject(ctx('u1'), project({ id: 'p1', orgId, slug: 'my-proj' }));
217
- const got = await store.getProjectBySlug(ctx('u1'), orgId, 'my-proj');
218
- expect(got?.id).toBe('p1');
219
- });
220
- it('getProjectBySlug returns null for missing slug', async () => {
221
- const store = await createStore();
222
- const orgs = await store.listOrgs(ctx('u1'));
223
- const orgId = singleOrgMode ? orgs.items[0].id : 'o1';
224
- const got = await store.getProjectBySlug(ctx('u1'), orgId, 'nonexistent');
225
- expect(got).toBeNull();
226
- });
227
- it('updateProject modifies name, slug, description, visibility', async () => {
228
- const store = await createStore();
229
- const orgs = await store.listOrgs(ctx('u1'));
230
- const orgId = singleOrgMode ? orgs.items[0].id : 'o1';
231
- if (!singleOrgMode) {
232
- await store.createOrg(ctx('u1'), org({ id: orgId }));
233
- }
234
- await store.createProject(ctx('u1'), project({ id: 'p1', orgId, slug: 'old', visibility: 'private' }));
235
- await store.updateProject(ctx('u1'), 'p1', {
236
- name: 'New Name',
237
- slug: 'new-slug',
238
- description: 'New desc',
239
- visibility: 'org'
240
- });
241
- const got = await store.getProject(ctx('u1'), 'p1');
242
- expect(got?.name).toBe('New Name');
243
- expect(got?.slug).toBe('new-slug');
244
- expect(got?.description).toBe('New desc');
245
- expect(got?.visibility).toBe('org');
246
- });
247
- it('deleteProject removes the project', async () => {
248
- const store = await createStore();
249
- const orgs = await store.listOrgs(ctx('u1'));
250
- const orgId = singleOrgMode ? orgs.items[0].id : 'o1';
251
- if (!singleOrgMode) {
252
- await store.createOrg(ctx('u1'), org({ id: orgId }));
253
- }
254
- await store.createProject(ctx('u1'), project({ id: 'p1', orgId }));
255
- await store.deleteProject(ctx('u1'), 'p1');
256
- const got = await store.getProject(ctx('u1'), 'p1');
257
- expect(got).toBeNull();
258
- });
259
- it('listProjects returns projects for org with pagination', async () => {
260
- const store = await createStore();
261
- const orgs = await store.listOrgs(ctx('u1'));
262
- const orgId = singleOrgMode ? orgs.items[0].id : 'o1';
263
- if (!singleOrgMode) {
264
- await store.createOrg(ctx('u1'), org({ id: orgId }));
265
- }
266
- for (let i = 0; i < 3; i++) {
267
- await store.createProject(ctx('u1'), project({ id: `p${i}`, orgId }));
268
- }
269
- const page = await store.listProjects(ctx('u1'), orgId, { limit: 2 });
270
- expect(page.items.length).toBe(2);
271
- });
272
- // ============================================================================
273
- // Project Members
274
- // ============================================================================
275
- it('addProjectMember + getProjectMember returns the member', async () => {
276
- const store = await createStore();
277
- const orgs = await store.listOrgs(ctx('u1'));
278
- const orgId = singleOrgMode ? orgs.items[0].id : 'o1';
279
- if (!singleOrgMode) {
280
- await store.createOrg(ctx('u1'), org({ id: orgId }));
281
- }
282
- await store.createProject(ctx('u1'), project({ id: 'p1', orgId }));
283
- const member = {
284
- projectId: 'p1',
285
- userId: 'u2',
286
- role: 'editor',
287
- joinedAt: new Date().toISOString()
288
- };
289
- await store.addProjectMember(ctx('u1'), member);
290
- const got = await store.getProjectMember(ctx('u1'), 'p1', 'u2');
291
- expect(got?.role).toBe('editor');
292
- });
293
- it('getProjectMember returns null for missing member', async () => {
294
- const store = await createStore();
295
- const orgs = await store.listOrgs(ctx('u1'));
296
- const orgId = singleOrgMode ? orgs.items[0].id : 'o1';
297
- if (!singleOrgMode) {
298
- await store.createOrg(ctx('u1'), org({ id: orgId }));
299
- }
300
- await store.createProject(ctx('u1'), project({ id: 'p1', orgId }));
301
- const got = await store.getProjectMember(ctx('u1'), 'p1', 'nonexistent');
302
- expect(got).toBeNull();
303
- });
304
- it('updateProjectMemberRole changes role', async () => {
305
- const store = await createStore();
306
- const orgs = await store.listOrgs(ctx('u1'));
307
- const orgId = singleOrgMode ? orgs.items[0].id : 'o1';
308
- if (!singleOrgMode) {
309
- await store.createOrg(ctx('u1'), org({ id: orgId }));
310
- }
311
- await store.createProject(ctx('u1'), project({ id: 'p1', orgId }));
312
- const member = {
313
- projectId: 'p1',
314
- userId: 'u2',
315
- role: 'viewer',
316
- joinedAt: new Date().toISOString()
317
- };
318
- await store.addProjectMember(ctx('u1'), member);
319
- await store.updateProjectMemberRole(ctx('u1'), 'p1', 'u2', 'editor');
320
- const got = await store.getProjectMember(ctx('u1'), 'p1', 'u2');
321
- expect(got?.role).toBe('editor');
322
- });
323
- it('removeProjectMember deletes the member', async () => {
324
- const store = await createStore();
325
- const orgs = await store.listOrgs(ctx('u1'));
326
- const orgId = singleOrgMode ? orgs.items[0].id : 'o1';
327
- if (!singleOrgMode) {
328
- await store.createOrg(ctx('u1'), org({ id: orgId }));
329
- }
330
- await store.createProject(ctx('u1'), project({ id: 'p1', orgId }));
331
- const member = {
332
- projectId: 'p1',
333
- userId: 'u2',
334
- role: 'editor',
335
- joinedAt: new Date().toISOString()
336
- };
337
- await store.addProjectMember(ctx('u1'), member);
338
- await store.removeProjectMember(ctx('u1'), 'p1', 'u2');
339
- const got = await store.getProjectMember(ctx('u1'), 'p1', 'u2');
340
- expect(got).toBeNull();
341
- });
342
- it('listProjectMembers returns members with pagination', async () => {
343
- const store = await createStore();
344
- const orgs = await store.listOrgs(ctx('u1'));
345
- const orgId = singleOrgMode ? orgs.items[0].id : 'o1';
346
- if (!singleOrgMode) {
347
- await store.createOrg(ctx('u1'), org({ id: orgId }));
348
- }
349
- await store.createProject(ctx('u1'), project({ id: 'p1', orgId }));
350
- for (let i = 0; i < 3; i++) {
351
- await store.addProjectMember(ctx('u1'), {
352
- projectId: 'p1',
353
- userId: `u${i}`,
354
- role: 'viewer',
355
- joinedAt: new Date().toISOString()
356
- });
357
- }
358
- const page = await store.listProjectMembers(ctx('u1'), 'p1', { limit: 2 });
359
- expect(page.items.length).toBe(2);
360
- });
361
- });
362
- }
363
- //# sourceMappingURL=orgStoreSuite.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orgStoreSuite.js","sourceRoot":"","sources":["../../src/testing/orgStoreSuite.ts"],"names":[],"mappings":"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"}
@@ -1,30 +0,0 @@
1
- /**
2
- * Adapter conformance suite for IStorageProvider.
3
- *
4
- * Tests blob storage operations (get, put, delete, deletePrefix, getPublicUrl)
5
- * to ensure all adapters behave identically.
6
- *
7
- * Runner-agnostic: callers inject a `{ describe, it, expect }` trio.
8
- */
9
- import type { IStorageProvider } from '../storage/interface.js';
10
- export interface ConformanceRunner {
11
- describe: (name: string, fn: () => void) => void;
12
- it: (name: string, fn: () => Promise<void> | void) => void;
13
- expect: <T>(actual: T) => {
14
- toBe: (expected: T) => void;
15
- toEqual: (expected: unknown) => void;
16
- toBeNull: () => void;
17
- toBeTruthy: () => void;
18
- toContain: (expected: unknown) => void;
19
- };
20
- }
21
- export interface StorageProviderConformanceOptions {
22
- /** Name to show in test output (e.g. "local-filesystem"). */
23
- name: string;
24
- /** Factory that returns a fresh, empty storage per test. */
25
- createStorage: () => Promise<IStorageProvider> | IStorageProvider;
26
- /** Test runner globals. */
27
- runner: ConformanceRunner;
28
- }
29
- export declare function runStorageProviderConformance(opts: StorageProviderConformanceOptions): void;
30
- //# sourceMappingURL=storageProviderSuite.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storageProviderSuite.d.ts","sourceRoot":"","sources":["../../src/testing/storageProviderSuite.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,WAAW,iBAAiB;IACjC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IACjD,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3D,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK;QACzB,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC;QAC5B,OAAO,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;QACrC,QAAQ,EAAE,MAAM,IAAI,CAAC;QACrB,UAAU,EAAE,MAAM,IAAI,CAAC;QACvB,SAAS,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;KACvC,CAAC;CACF;AAED,MAAM,WAAW,iCAAiC;IACjD,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,aAAa,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAAC;IAClE,2BAA2B;IAC3B,MAAM,EAAE,iBAAiB,CAAC;CAC1B;AAUD,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,iCAAiC,GAAG,IAAI,CA2H3F"}
@@ -1,122 +0,0 @@
1
- /**
2
- * Adapter conformance suite for IStorageProvider.
3
- *
4
- * Tests blob storage operations (get, put, delete, deletePrefix, getPublicUrl)
5
- * to ensure all adapters behave identically.
6
- *
7
- * Runner-agnostic: callers inject a `{ describe, it, expect }` trio.
8
- */
9
- function utf8(text) {
10
- return new TextEncoder().encode(text);
11
- }
12
- function bytes(text) {
13
- return utf8(text);
14
- }
15
- export function runStorageProviderConformance(opts) {
16
- const { name, createStorage, runner } = opts;
17
- const { describe, it, expect } = runner;
18
- describe(`IStorageProvider conformance: ${name}`, () => {
19
- it('put + get returns the stored data', async () => {
20
- const storage = await createStorage();
21
- const data = bytes('Hello, World!');
22
- await storage.put('test/file.txt', data);
23
- const got = await storage.get('test/file.txt');
24
- expect(got).toEqual(data);
25
- });
26
- it('get returns null for missing path', async () => {
27
- const storage = await createStorage();
28
- const got = await storage.get('nonexistent/path.txt');
29
- expect(got).toBeNull();
30
- });
31
- it('put overwrites existing file', async () => {
32
- const storage = await createStorage();
33
- const data1 = bytes('First');
34
- const data2 = bytes('Second');
35
- await storage.put('test/file.txt', data1);
36
- await storage.put('test/file.txt', data2);
37
- const got = await storage.get('test/file.txt');
38
- expect(got).toEqual(data2);
39
- });
40
- it('put creates nested directories', async () => {
41
- const storage = await createStorage();
42
- const data = bytes('nested');
43
- await storage.put('a/b/c/d/file.txt', data);
44
- const got = await storage.get('a/b/c/d/file.txt');
45
- expect(got).toEqual(data);
46
- });
47
- it('delete removes a file', async () => {
48
- const storage = await createStorage();
49
- await storage.put('test/file.txt', bytes('data'));
50
- await storage.delete('test/file.txt');
51
- const got = await storage.get('test/file.txt');
52
- expect(got).toBeNull();
53
- });
54
- it('delete is a no-op for missing file', async () => {
55
- const storage = await createStorage();
56
- await storage.delete('nonexistent/file.txt');
57
- // Should not throw
58
- });
59
- it('deletePrefix removes all files matching prefix', async () => {
60
- const storage = await createStorage();
61
- await storage.put('definitions/guid-1/file.gh', bytes('def1'));
62
- await storage.put('definitions/guid-1/cover.webp', bytes('cover1'));
63
- await storage.put('definitions/guid-2/file.gh', bytes('def2'));
64
- await storage.deletePrefix('definitions/guid-1/');
65
- const file1 = await storage.get('definitions/guid-1/file.gh');
66
- const cover1 = await storage.get('definitions/guid-1/cover.webp');
67
- const file2 = await storage.get('definitions/guid-2/file.gh');
68
- expect(file1).toBeNull();
69
- expect(cover1).toBeNull();
70
- expect(file2).toBeTruthy();
71
- });
72
- it('deletePrefix with no matches is a no-op', async () => {
73
- const storage = await createStorage();
74
- await storage.put('other/file.txt', bytes('data'));
75
- await storage.deletePrefix('nonexistent/');
76
- // Should not throw
77
- });
78
- it('getPublicUrl returns a string', async () => {
79
- const storage = await createStorage();
80
- const url = storage.getPublicUrl('test/file.txt');
81
- expect(typeof url).toBe('string');
82
- expect(url.length > 0).toBe(true);
83
- });
84
- it('getPublicUrl is consistent for same path', async () => {
85
- const storage = await createStorage();
86
- const url1 = storage.getPublicUrl('test/file.txt');
87
- const url2 = storage.getPublicUrl('test/file.txt');
88
- expect(url1).toBe(url2);
89
- });
90
- it('getPublicUrl differs for different paths', async () => {
91
- const storage = await createStorage();
92
- const url1 = storage.getPublicUrl('test/file1.txt');
93
- const url2 = storage.getPublicUrl('test/file2.txt');
94
- expect(url1 === url2).toBe(false);
95
- });
96
- it('handles binary data correctly', async () => {
97
- const storage = await createStorage();
98
- const binary = new Uint8Array([0x00, 0x01, 0x02, 0xff, 0xfe, 0xfd]);
99
- await storage.put('binary/data.bin', binary);
100
- const got = await storage.get('binary/data.bin');
101
- expect(got).toEqual(binary);
102
- });
103
- it('handles large data', async () => {
104
- const storage = await createStorage();
105
- const large = new Uint8Array(1024 * 1024); // 1 MB
106
- for (let i = 0; i < large.length; i++) {
107
- large[i] = i % 256;
108
- }
109
- await storage.put('large/file.bin', large);
110
- const got = await storage.get('large/file.bin');
111
- expect(got).toEqual(large);
112
- });
113
- it('put with contentType is stored', async () => {
114
- const storage = await createStorage();
115
- const data = bytes('image data');
116
- await storage.put('images/test.webp', data, 'image/webp');
117
- const got = await storage.get('images/test.webp');
118
- expect(got).toEqual(data);
119
- });
120
- });
121
- }
122
- //# sourceMappingURL=storageProviderSuite.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storageProviderSuite.js","sourceRoot":"","sources":["../../src/testing/storageProviderSuite.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- import type { RequestContext } from '../../context.js';
2
- export interface ConformanceExpect<T> {
3
- toBe: (expected: T) => void;
4
- toEqual: (expected: unknown) => void;
5
- toBeNull: () => void;
6
- toBeTruthy: () => void;
7
- toBeFalsy: () => void;
8
- toContain: (expected: unknown) => void;
9
- toBeLessThanOrEqual: (expected: number) => void;
10
- toThrow: (expected?: any) => void;
11
- resolves: ConformanceExpect<Awaited<T>>;
12
- not: ConformanceExpect<T>;
13
- }
14
- export interface ConformanceRunner {
15
- describe: (name: string, fn: () => void) => void;
16
- it: (name: string, fn: () => Promise<void> | void) => void;
17
- expect: <T>(actual: T) => ConformanceExpect<T>;
18
- }
19
- export declare function makeCtx(userId: string, permissions?: RequestContext['permissions']): RequestContext;
20
- export declare function makeUuid(): string;
21
- //# sourceMappingURL=runner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/testing/suites/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,WAAW,iBAAiB,CAAC,CAAC;IACnC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC;IAC5B,OAAO,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,mBAAmB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAEhD,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IACjC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IACjD,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3D,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC;CAC/C;AAED,wBAAgB,OAAO,CACtB,MAAM,EAAE,MAAM,EACd,WAAW,GAAE,cAAc,CAAC,aAAa,CAAsB,GAC7D,cAAc,CAEhB;AAED,wBAAgB,QAAQ,IAAI,MAAM,CAEjC"}
@@ -1,7 +0,0 @@
1
- export function makeCtx(userId, permissions = ['platform_admin']) {
2
- return { userId, permissions };
3
- }
4
- export function makeUuid() {
5
- return crypto.randomUUID();
6
- }
7
- //# sourceMappingURL=runner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/testing/suites/runner.ts"],"names":[],"mappings":"AAsBA,MAAM,UAAU,OAAO,CACtB,MAAc,EACd,cAA6C,CAAC,gBAAgB,CAAC;IAE/D,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,QAAQ;IACvB,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;AAC5B,CAAC"}