@selvajs/platform 0.16.0 → 0.16.1-beta.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 (48) hide show
  1. package/README.md +2 -2
  2. package/dist/definitions/index.d.ts +2 -1
  3. package/dist/definitions/index.d.ts.map +1 -1
  4. package/dist/definitions/index.js +1 -0
  5. package/dist/definitions/index.js.map +1 -1
  6. package/dist/definitions/types.d.ts +36 -4
  7. package/dist/definitions/types.d.ts.map +1 -1
  8. package/dist/definitions/types.js +16 -0
  9. package/dist/definitions/types.js.map +1 -1
  10. package/dist/index.d.ts +2 -2
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +1 -1
  13. package/dist/index.js.map +1 -1
  14. package/dist/invites/types.d.ts +1 -1
  15. package/dist/metrics/interface.d.ts +2 -2
  16. package/dist/organizations/interface.d.ts +8 -0
  17. package/dist/organizations/interface.d.ts.map +1 -1
  18. package/dist/pagination.d.ts +11 -0
  19. package/dist/pagination.d.ts.map +1 -1
  20. package/dist/pagination.js.map +1 -1
  21. package/dist/platformProjects/interface.d.ts +5 -0
  22. package/dist/platformProjects/interface.d.ts.map +1 -1
  23. package/dist/projects/interface.d.ts +10 -0
  24. package/dist/projects/interface.d.ts.map +1 -1
  25. package/dist/solveCache/interface.d.ts +24 -12
  26. package/dist/solveCache/interface.d.ts.map +1 -1
  27. package/dist/solveCache/interface.js +3 -3
  28. package/dist/solveCache/interface.js.map +1 -1
  29. package/dist/testing/suites/definitionStoreSuite.d.ts.map +1 -1
  30. package/dist/testing/suites/definitionStoreSuite.js +23 -0
  31. package/dist/testing/suites/definitionStoreSuite.js.map +1 -1
  32. package/dist/testing/suites/orgStoreSuite.d.ts.map +1 -1
  33. package/dist/testing/suites/orgStoreSuite.js +28 -0
  34. package/dist/testing/suites/orgStoreSuite.js.map +1 -1
  35. package/dist/testing/suites/platformProjectGrantStoreSuite.d.ts.map +1 -1
  36. package/dist/testing/suites/platformProjectGrantStoreSuite.js +18 -0
  37. package/dist/testing/suites/platformProjectGrantStoreSuite.js.map +1 -1
  38. package/dist/testing/suites/projectStoreSuite.d.ts.map +1 -1
  39. package/dist/testing/suites/projectStoreSuite.js +29 -0
  40. package/dist/testing/suites/projectStoreSuite.js.map +1 -1
  41. package/dist/testing/suites/shareLinkStoreSuite.d.ts.map +1 -1
  42. package/dist/testing/suites/shareLinkStoreSuite.js +33 -0
  43. package/dist/testing/suites/shareLinkStoreSuite.js.map +1 -1
  44. package/package.json +25 -5
  45. package/dist/organizations/__tests__/slug-schema.test.d.ts +0 -2
  46. package/dist/organizations/__tests__/slug-schema.test.d.ts.map +0 -1
  47. package/dist/organizations/__tests__/slug-schema.test.js +0 -59
  48. package/dist/organizations/__tests__/slug-schema.test.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@selvajs/platform",
3
- "version": "0.16.0",
3
+ "version": "0.16.1-beta.1",
4
4
  "description": "Pure TypeScript interfaces for Selva platform providers (auth, definitions, compute)",
5
5
  "license": "MIT",
6
6
  "author": "VektorNode",
@@ -29,80 +29,100 @@
29
29
  "types": "./dist/index.d.ts",
30
30
  "exports": {
31
31
  ".": {
32
+ "selva-source": "./src/index.ts",
32
33
  "types": "./dist/index.d.ts",
33
34
  "import": "./dist/index.js"
34
35
  },
35
36
  "./auth": {
37
+ "selva-source": "./src/auth/index.ts",
36
38
  "types": "./dist/auth/index.d.ts",
37
39
  "import": "./dist/auth/index.js"
38
40
  },
39
41
  "./data": {
42
+ "selva-source": "./src/data/index.ts",
40
43
  "types": "./dist/data/index.d.ts",
41
44
  "import": "./dist/data/index.js"
42
45
  },
43
46
  "./storage": {
47
+ "selva-source": "./src/storage/index.ts",
44
48
  "types": "./dist/storage/index.d.ts",
45
49
  "import": "./dist/storage/index.js"
46
50
  },
47
51
  "./permissions": {
52
+ "selva-source": "./src/permissions/index.ts",
48
53
  "types": "./dist/permissions/index.d.ts",
49
54
  "import": "./dist/permissions/index.js"
50
55
  },
51
56
  "./userProfile": {
57
+ "selva-source": "./src/userProfile/index.ts",
52
58
  "types": "./dist/userProfile/index.d.ts",
53
59
  "import": "./dist/userProfile/index.js"
54
60
  },
55
61
  "./projects": {
62
+ "selva-source": "./src/projects/index.ts",
56
63
  "types": "./dist/projects/index.d.ts",
57
64
  "import": "./dist/projects/index.js"
58
65
  },
59
66
  "./platformProjects": {
67
+ "selva-source": "./src/platformProjects/index.ts",
60
68
  "types": "./dist/platformProjects/index.d.ts",
61
69
  "import": "./dist/platformProjects/index.js"
62
70
  },
63
71
  "./organizations": {
72
+ "selva-source": "./src/organizations/index.ts",
64
73
  "types": "./dist/organizations/index.d.ts",
65
74
  "import": "./dist/organizations/index.js"
66
75
  },
67
76
  "./invites": {
77
+ "selva-source": "./src/invites/index.ts",
68
78
  "types": "./dist/invites/index.d.ts",
69
79
  "import": "./dist/invites/index.js"
70
80
  },
71
81
  "./shareLinks": {
82
+ "selva-source": "./src/shareLinks/index.ts",
72
83
  "types": "./dist/shareLinks/index.d.ts",
73
84
  "import": "./dist/shareLinks/index.js"
74
85
  },
75
86
  "./definitions": {
87
+ "selva-source": "./src/definitions/index.ts",
76
88
  "types": "./dist/definitions/index.d.ts",
77
89
  "import": "./dist/definitions/index.js"
78
90
  },
79
91
  "./computeServer": {
92
+ "selva-source": "./src/computeServer/index.ts",
80
93
  "types": "./dist/computeServer/index.d.ts",
81
94
  "import": "./dist/computeServer/index.js"
82
95
  },
83
96
  "./access": {
97
+ "selva-source": "./src/access/index.ts",
84
98
  "types": "./dist/access/index.d.ts",
85
99
  "import": "./dist/access/index.js"
86
100
  },
87
101
  "./events": {
102
+ "selva-source": "./src/events/index.ts",
88
103
  "types": "./dist/events/index.d.ts",
89
104
  "import": "./dist/events/index.js"
90
105
  },
91
106
  "./utils": {
107
+ "selva-source": "./src/utils/index.ts",
92
108
  "types": "./dist/utils/index.d.ts",
93
109
  "import": "./dist/utils/index.js"
94
110
  },
95
111
  "./testing": {
112
+ "selva-source": "./src/testing/index.ts",
96
113
  "types": "./dist/testing/index.d.ts",
97
114
  "import": "./dist/testing/index.js"
98
115
  }
99
116
  },
100
117
  "files": [
101
- "dist"
118
+ "dist",
119
+ "!**/__tests__/**",
120
+ "!**/*.test.*",
121
+ "!**/*.spec.*"
102
122
  ],
103
123
  "dependencies": {
104
124
  "zod": "^4.3.6",
105
- "@selvajs/schemas": "^4.7.0"
125
+ "@selvajs/schemas": "^5.0.0-beta.1"
106
126
  },
107
127
  "peerDependencies": {
108
128
  "sharp": "^0.34.0 || ^0.35.0",
@@ -118,8 +138,8 @@
118
138
  },
119
139
  "devDependencies": {
120
140
  "sharp": "^0.35.3",
121
- "typescript": "^6.0.3",
122
- "vitest": "^3.2.7"
141
+ "typescript": "~6.0.3",
142
+ "vitest": "^4.1.10"
123
143
  },
124
144
  "scripts": {
125
145
  "build": "tsc",
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=slug-schema.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"slug-schema.test.d.ts","sourceRoot":"","sources":["../../../src/organizations/__tests__/slug-schema.test.ts"],"names":[],"mappings":""}
@@ -1,59 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { SlugSchema, RESERVED_SLUGS, slugify } from '../schemas.js';
3
- /**
4
- * Reserved-slug guard (audit D4). A tenant slug must never equal a top-level
5
- * route segment, or it could shadow (or be shadowed by) a route once flat
6
- * tenant URLs — `/o/{slug}/…` per ADR 0006 — exist. These tests pin that the
7
- * guard rejects every reserved word and still accepts ordinary slugs, so the
8
- * reservation can't silently regress before the multi-org routing is built.
9
- */
10
- describe('SlugSchema', () => {
11
- it('accepts a normal lowercase-hyphenated slug', () => {
12
- expect(SlugSchema.safeParse('acme-studio').success).toBe(true);
13
- });
14
- it('rejects every reserved slug', () => {
15
- for (const reserved of RESERVED_SLUGS) {
16
- const result = SlugSchema.safeParse(reserved);
17
- expect(result.success, `"${reserved}" must be rejected`).toBe(false);
18
- }
19
- });
20
- it('reserves the multi-org namespace prefix `o` even though the length gate already blocks it', () => {
21
- // `o` is 1 char, so `min(3)` rejects it regardless — but it stays in the
22
- // reserved set so intent survives any future relaxation of the length rule.
23
- expect(RESERVED_SLUGS).toContain('o');
24
- expect(SlugSchema.safeParse('o').success).toBe(false);
25
- });
26
- it('still enforces the format rules (length, charset)', () => {
27
- expect(SlugSchema.safeParse('ab').success).toBe(false); // too short
28
- expect(SlugSchema.safeParse('-lead').success).toBe(false); // leading hyphen
29
- expect(SlugSchema.safeParse('UPPER').success).toBe(false); // uppercase
30
- expect(SlugSchema.safeParse('a'.repeat(64)).success).toBe(false); // too long
31
- });
32
- it('does not over-reject: a slug that merely contains a reserved word is fine', () => {
33
- // The guard is exact-match, not substring — `team-alpha` is not `team`.
34
- expect(SlugSchema.safeParse('team-alpha').success).toBe(true);
35
- expect(SlugSchema.safeParse('my-api').success).toBe(true);
36
- });
37
- });
38
- describe('slugify', () => {
39
- it('lowercases, trims, and hyphenates non-alphanumeric runs', () => {
40
- expect(slugify(' Acme Studio!! ')).toBe('acme-studio');
41
- expect(slugify('Foo___Bar / Baz')).toBe('foo-bar-baz');
42
- });
43
- it('strips leading and trailing hyphens', () => {
44
- expect(slugify('---hello---')).toBe('hello');
45
- expect(slugify('!leading and trailing.')).toBe('leading-and-trailing');
46
- });
47
- it('caps output at 63 characters', () => {
48
- expect(slugify('a'.repeat(100))).toHaveLength(63);
49
- });
50
- it('yields an empty string when nothing survives (caller must still validate)', () => {
51
- expect(slugify('!!!')).toBe('');
52
- // It does not itself guarantee validity — the output must pass SlugSchema.
53
- expect(SlugSchema.safeParse(slugify('!!!')).success).toBe(false);
54
- });
55
- it('produces slugs that SlugSchema accepts for ordinary names', () => {
56
- expect(SlugSchema.safeParse(slugify('Acme Studio')).success).toBe(true);
57
- });
58
- });
59
- //# sourceMappingURL=slug-schema.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"slug-schema.test.js","sourceRoot":"","sources":["../../../src/organizations/__tests__/slug-schema.test.ts"],"names":[],"mappings":"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"}