@contember/schema-utils 1.2.0-alpha.1 → 1.2.0-alpha.10

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/src/acl/PredicateDefinitionProcessor.d.ts.map +1 -1
  2. package/dist/src/acl/PredicateDefinitionProcessor.js +1 -0
  3. package/dist/src/acl/PredicateDefinitionProcessor.js.map +1 -1
  4. package/dist/src/dataUtils.d.ts +1 -1
  5. package/dist/src/dataUtils.d.ts.map +1 -1
  6. package/dist/src/dataUtils.js +3 -0
  7. package/dist/src/dataUtils.js.map +1 -1
  8. package/dist/src/model/NamingHelper.d.ts +2 -0
  9. package/dist/src/model/NamingHelper.d.ts.map +1 -1
  10. package/dist/src/model/NamingHelper.js +20 -7
  11. package/dist/src/model/NamingHelper.js.map +1 -1
  12. package/dist/src/schemaNormalizer.d.ts.map +1 -1
  13. package/dist/src/schemaNormalizer.js +15 -4
  14. package/dist/src/schemaNormalizer.js.map +1 -1
  15. package/dist/src/tsconfig.tsbuildinfo +1 -1
  16. package/dist/src/type-schema/acl.d.ts.map +1 -1
  17. package/dist/src/type-schema/acl.js +6 -0
  18. package/dist/src/type-schema/acl.js.map +1 -1
  19. package/dist/src/type-schema/condition.d.ts +5 -0
  20. package/dist/src/type-schema/condition.d.ts.map +1 -0
  21. package/dist/src/type-schema/condition.js +95 -0
  22. package/dist/src/type-schema/condition.js.map +1 -0
  23. package/dist/src/type-schema/index.d.ts +1 -0
  24. package/dist/src/type-schema/index.d.ts.map +1 -1
  25. package/dist/src/type-schema/index.js +1 -0
  26. package/dist/src/type-schema/index.js.map +1 -1
  27. package/dist/src/type-schema/model.d.ts +1 -0
  28. package/dist/src/type-schema/model.d.ts.map +1 -1
  29. package/dist/src/type-schema/model.js +5 -0
  30. package/dist/src/type-schema/model.js.map +1 -1
  31. package/dist/src/validation/AclValidator.d.ts.map +1 -1
  32. package/dist/src/validation/AclValidator.js +13 -2
  33. package/dist/src/validation/AclValidator.js.map +1 -1
  34. package/dist/src/validation/MembershipResolver.d.ts +37 -0
  35. package/dist/src/validation/MembershipResolver.d.ts.map +1 -0
  36. package/dist/src/validation/MembershipResolver.js +104 -0
  37. package/dist/src/validation/MembershipResolver.js.map +1 -0
  38. package/dist/src/validation/ModelValidator.d.ts.map +1 -1
  39. package/dist/src/validation/ModelValidator.js +11 -4
  40. package/dist/src/validation/ModelValidator.js.map +1 -1
  41. package/dist/src/validation/index.d.ts +1 -0
  42. package/dist/src/validation/index.d.ts.map +1 -1
  43. package/dist/src/validation/index.js +1 -0
  44. package/dist/src/validation/index.js.map +1 -1
  45. package/dist/tests/cases/unit/conditionSchema.test.d.ts +2 -0
  46. package/dist/tests/cases/unit/conditionSchema.test.d.ts.map +1 -0
  47. package/dist/tests/cases/unit/conditionSchema.test.js +50 -0
  48. package/dist/tests/cases/unit/conditionSchema.test.js.map +1 -0
  49. package/dist/tests/cases/unit/membershipResolver.test.d.ts +2 -0
  50. package/dist/tests/cases/unit/membershipResolver.test.d.ts.map +1 -0
  51. package/dist/tests/cases/unit/membershipResolver.test.js +149 -0
  52. package/dist/tests/cases/unit/membershipResolver.test.js.map +1 -0
  53. package/dist/tests/tsconfig.tsbuildinfo +1 -0
  54. package/package.json +5 -5
  55. package/src/acl/PredicateDefinitionProcessor.ts +1 -0
  56. package/src/dataUtils.ts +5 -0
  57. package/src/model/NamingHelper.ts +19 -8
  58. package/src/schemaNormalizer.ts +15 -4
  59. package/src/type-schema/acl.ts +7 -0
  60. package/src/type-schema/condition.ts +81 -0
  61. package/src/type-schema/index.ts +1 -0
  62. package/src/type-schema/model.ts +7 -0
  63. package/src/validation/AclValidator.ts +12 -2
  64. package/src/validation/MembershipResolver.ts +133 -0
  65. package/src/validation/ModelValidator.ts +13 -4
  66. package/src/validation/index.ts +1 -0
  67. package/tests/cases/unit/conditionSchema.test.ts +55 -0
  68. package/tests/cases/unit/membershipResolver.test.ts +161 -0
  69. package/tests/tsconfig.json +12 -0
  70. package/tsconfig.json +8 -1
@@ -0,0 +1,161 @@
1
+ import { assert, test } from 'vitest'
2
+ import { MembershipResolver, MembershipValidationErrorType } from '../../../src'
3
+ import { Acl } from '@contember/schema'
4
+
5
+ const id1 = 'bff057b3-11f7-4bc7-abe3-1f2ef266824d'
6
+ test('read membership with entity variable', () => {
7
+ const reader = new MembershipResolver()
8
+ const result = reader.resolve({
9
+ roles: {
10
+ editor: {
11
+ variables: {
12
+ localeID: { type: Acl.VariableType.entity, entityName: 'Locale' },
13
+ },
14
+ entities: {},
15
+ },
16
+ },
17
+ }, [
18
+ { role: 'editor', variables: [{ name: 'localeID', values: [id1] }] },
19
+ ], MembershipResolver.UnknownIdentity)
20
+ assert.lengthOf(result.errors, 0)
21
+ assert.deepStrictEqual(result.memberships, [
22
+ { role: 'editor', variables: [{ name: 'localeID', condition: { in: [id1] } }] },
23
+ ])
24
+ })
25
+
26
+ test('read fails when variable is not provided', () => {
27
+ const reader = new MembershipResolver()
28
+ const result = reader.resolve({
29
+ roles: {
30
+ editor: {
31
+ variables: {
32
+ localeID: { type: Acl.VariableType.entity, entityName: 'Locale' },
33
+ },
34
+ entities: {},
35
+ },
36
+ },
37
+ }, [
38
+ { role: 'editor', variables: [] },
39
+ ], MembershipResolver.UnknownIdentity)
40
+ assert.deepStrictEqual(result.errors, [{
41
+ error: MembershipValidationErrorType.VARIABLE_EMPTY,
42
+ role: 'editor',
43
+ variable: 'localeID',
44
+ }])
45
+
46
+ assert.deepStrictEqual(result.memberships, [
47
+ { role: 'editor', variables: [{ name: 'localeID', condition: { never: true } }] },
48
+ ])
49
+ })
50
+
51
+ test('read membership with predefined variable', () => {
52
+ const reader = new MembershipResolver()
53
+ const result = reader.resolve({
54
+ roles: {
55
+ editor: {
56
+ variables: {
57
+ self: { type: Acl.VariableType.predefined, value: 'identityID' },
58
+ },
59
+ entities: {},
60
+ },
61
+ },
62
+ }, [
63
+ { role: 'editor', variables: [] },
64
+ ], {
65
+ identityId: id1,
66
+ })
67
+ assert.lengthOf(result.errors, 0)
68
+ assert.deepStrictEqual(result.memberships, [
69
+ { role: 'editor', variables: [{ name: 'self', condition: { in: [id1] } }] },
70
+ ])
71
+ })
72
+
73
+ test('read membership with condition variable', () => {
74
+ const reader = new MembershipResolver()
75
+ const result = reader.resolve({
76
+ roles: {
77
+ editor: {
78
+ variables: {
79
+ cond: { type: Acl.VariableType.condition },
80
+ },
81
+ entities: {},
82
+ },
83
+ },
84
+ }, [
85
+ { role: 'editor', variables: [{ name: 'cond', values: [JSON.stringify({ eq: 'foo' })] }] },
86
+ ], MembershipResolver.UnknownIdentity)
87
+ assert.lengthOf(result.errors, 0)
88
+ assert.deepStrictEqual(result.memberships, [
89
+ { role: 'editor', variables: [{ name: 'cond', condition: { eq: 'foo' } }] },
90
+ ])
91
+ })
92
+
93
+ test('fails on invalid condition', () => {
94
+ const reader = new MembershipResolver()
95
+ const result = reader.resolve({
96
+ roles: {
97
+ editor: {
98
+ variables: {
99
+ cond: { type: Acl.VariableType.condition },
100
+ },
101
+ entities: {},
102
+ },
103
+ },
104
+ }, [
105
+ { role: 'editor', variables: [{ name: 'cond', values: [JSON.stringify('abcd')] }] },
106
+ ], MembershipResolver.UnknownIdentity)
107
+
108
+ assert.deepStrictEqual(result.errors, [{
109
+ error: MembershipValidationErrorType.VARIABLE_INVALID,
110
+ role: 'editor',
111
+ variable: 'cond',
112
+ }])
113
+
114
+ assert.deepStrictEqual(result.memberships, [
115
+ { role: 'editor', variables: [{ name: 'cond', condition: { never: true } }] },
116
+ ])
117
+ })
118
+
119
+ test('fails on undefined role', () => {
120
+ const reader = new MembershipResolver()
121
+ const result = reader.resolve({
122
+ roles: {
123
+ },
124
+ }, [
125
+ { role: 'editor', variables: [{ name: 'cond', values: [JSON.stringify('abcd')] }] },
126
+ ], {
127
+ identityId: id1,
128
+ })
129
+
130
+ assert.deepStrictEqual(result.errors, [{
131
+ error: MembershipValidationErrorType.ROLE_NOT_FOUND,
132
+ role: 'editor',
133
+ variable: undefined,
134
+ }])
135
+
136
+ assert.deepStrictEqual(result.memberships, [])
137
+ })
138
+
139
+ test('fails on undefined variable', () => {
140
+ const reader = new MembershipResolver()
141
+ const result = reader.resolve({
142
+ roles: {
143
+ editor: {
144
+ variables: {},
145
+ entities: {},
146
+ },
147
+ },
148
+ }, [
149
+ { role: 'editor', variables: [{ name: 'cond', values: [JSON.stringify('abcd')] }] },
150
+ ], MembershipResolver.UnknownIdentity)
151
+
152
+ assert.deepStrictEqual(result.errors, [{
153
+ error: MembershipValidationErrorType.VARIABLE_NOT_FOUND,
154
+ role: 'editor',
155
+ variable: 'cond',
156
+ }])
157
+
158
+ assert.deepStrictEqual(result.memberships, [
159
+ { role: 'editor', variables: [] },
160
+ ])
161
+ })
@@ -0,0 +1,12 @@
1
+ {
2
+ "extends": "../tsconfig.settings.json",
3
+ "compilerOptions": {
4
+ "outDir": "../dist/tests",
5
+ "esModuleInterop": true
6
+ },
7
+ "references": [
8
+ {
9
+ "path": "../src"
10
+ }
11
+ ]
12
+ }
package/tsconfig.json CHANGED
@@ -1,5 +1,12 @@
1
1
  {
2
2
  "files": [],
3
3
  "include": [],
4
- "references": [{ "path": "./src" }]
4
+ "references": [
5
+ {
6
+ "path": "./src"
7
+ },
8
+ {
9
+ "path": "./tests"
10
+ }
11
+ ]
5
12
  }