@contember/engine-content-api 1.0.0-alpha.1 → 1.0.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.
package/package.json CHANGED
@@ -1,27 +1,28 @@
1
1
  {
2
2
  "name": "@contember/engine-content-api",
3
- "version": "1.0.0-alpha.1",
3
+ "version": "1.0.0-alpha.10",
4
4
  "license": "Apache-2.0",
5
5
  "main": "dist/src/index.js",
6
6
  "typings": "dist/src/index.d.ts",
7
7
  "scripts": {
8
- "prepare": "gql-gen --config graphql.codegen.yml && mkdir -p dist && find ./tests/ -name '*.gql' -type f -exec cp --parents {} ./dist \\;",
8
+ "build-copy": "mkdir -p dist && find ./tests/ -name '*.gql' -type f -exec cp --parents {} ./dist \\;",
9
+ "generate": "gql-gen --config graphql.codegen.yml",
9
10
  "test": "uvu dist/tests/cases/ \\.js$"
10
11
  },
11
12
  "dependencies": {
12
- "@contember/database": "^1.0.0-alpha.1",
13
- "@contember/dic": "^1.0.0-alpha.1",
14
- "@contember/engine-common": "^1.0.0-alpha.1",
15
- "@contember/graphql-utils": "^1.0.0-alpha.1",
16
- "@contember/schema": "^1.0.0-alpha.1",
17
- "@contember/schema-utils": "^1.0.0-alpha.1",
13
+ "@contember/database": "^1.0.0-alpha.10",
14
+ "@contember/dic": "^1.0.0-alpha.10",
15
+ "@contember/engine-common": "^1.0.0-alpha.10",
16
+ "@contember/graphql-utils": "^1.0.0-alpha.10",
17
+ "@contember/schema": "^1.0.0-alpha.10",
18
+ "@contember/schema-utils": "^1.0.0-alpha.10",
18
19
  "@graphql-tools/schema": "^7.1.5",
19
20
  "graphql-tag": "^2.12.5"
20
21
  },
21
22
  "devDependencies": {
22
- "@contember/database-tester": "^1.0.0-alpha.1",
23
- "@contember/engine-api-tester": "^1.0.0-alpha.1",
24
- "@contember/schema-definition": "^1.0.0-alpha.1",
23
+ "@contember/database-tester": "^1.0.0-alpha.10",
24
+ "@contember/engine-api-tester": "^1.0.0-alpha.10",
25
+ "@contember/schema-definition": "^1.0.0-alpha.10",
25
26
  "@graphql-codegen/cli": "^1.15.2",
26
27
  "@graphql-codegen/typescript": "^1.15.2",
27
28
  "@graphql-codegen/typescript-operations": "^1.15.2",
@@ -1,17 +1,41 @@
1
1
  import { Acl } from '@contember/schema'
2
+ import { getRoleVariables } from '@contember/schema-utils'
2
3
 
3
4
  type Memberships = readonly { role: string; variables: readonly { name: string; values: readonly string[] }[] }[]
4
5
 
5
- export const flattenVariables = (memberships: Memberships): Acl.VariablesMap => {
6
- return memberships.reduce(
7
- (acc, membership) => ({
8
- ...acc,
9
- ...membership.variables.reduce(
10
- (acc, { name, values }) => ({ ...acc, [prefixVariable(membership.role, name)]: values }),
11
- {},
12
- ),
13
- }),
14
- {},
6
+ export const createAclVariables = (
7
+ aclSchema: Acl.Schema,
8
+ identity: {
9
+ identityId: string
10
+ personId: string | null
11
+ memberships: Memberships
12
+ },
13
+ ): Acl.VariablesMap => {
14
+
15
+ const variablesEntries = identity.memberships.flatMap(
16
+ membership => {
17
+ const roleVariables = getRoleVariables(membership.role, aclSchema)
18
+ const membershipVariablesMap = Object.fromEntries(membership.variables.map(it => [it.name, it.values]))
19
+
20
+ return Object.entries(roleVariables).map(([name, def]) => {
21
+ const prefixed = prefixVariable(membership.role, name)
22
+
23
+ switch (def.type) {
24
+ case Acl.VariableType.entity:
25
+ return [prefixed, membershipVariablesMap[name] ?? []]
26
+ case Acl.VariableType.predefined:
27
+ switch (def.value) {
28
+ case 'identityID':
29
+ return [prefixed, [identity.identityId]]
30
+ case 'personID':
31
+ return [prefixed, identity.personId ? [identity.personId] : []]
32
+ }
33
+ }
34
+ })
35
+ },
15
36
  )
37
+
38
+ return Object.fromEntries(variablesEntries)
16
39
  }
40
+
17
41
  export const prefixVariable = (role: string, variableName: string) => `${role}__${variableName}`
@@ -141,10 +141,6 @@ export type _ValidatorArgument = {
141
141
  export type ResolverTypeWrapper<T> = Promise<T> | T
142
142
 
143
143
 
144
- export type ResolverWithResolve<TResult, TParent, TContext, TArgs> = {
145
- resolve: ResolverFn<TResult, TParent, TContext, TArgs>
146
- }
147
-
148
144
  export type LegacyStitchingResolver<TResult, TParent, TContext, TArgs> = {
149
145
  fragment: string
150
146
  resolve: ResolverFn<TResult, TParent, TContext, TArgs>
@@ -157,7 +153,6 @@ export type NewStitchingResolver<TResult, TParent, TContext, TArgs> = {
157
153
  export type StitchingResolver<TResult, TParent, TContext, TArgs> = LegacyStitchingResolver<TResult, TParent, TContext, TArgs> | NewStitchingResolver<TResult, TParent, TContext, TArgs>
158
154
  export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> =
159
155
  | ResolverFn<TResult, TParent, TContext, TArgs>
160
- | ResolverWithResolve<TResult, TParent, TContext, TArgs>
161
156
  | StitchingResolver<TResult, TParent, TContext, TArgs>
162
157
 
163
158
  export type ResolverFn<TResult, TParent, TContext, TArgs> = (
@@ -0,0 +1,73 @@
1
+ import * as assert from 'uvu/assert'
2
+ import { suite } from 'uvu'
3
+ import { createAclVariables } from '../../../src'
4
+ import { Acl } from '@contember/schema'
5
+ import { testUuid } from '@contember/engine-api-tester'
6
+
7
+ const createAclVariablesTest = suite('create acl variables')
8
+
9
+ createAclVariablesTest('prefix from memberships', () => {
10
+ assert.equal(createAclVariables({
11
+ roles: {
12
+ author: {
13
+ stages: '*',
14
+ variables: {
15
+ authorID: { type: Acl.VariableType.entity, entityName: 'Author' },
16
+ },
17
+ entities: {
18
+ },
19
+ },
20
+ },
21
+ }, {
22
+ identityId: testUuid(1),
23
+ personId: null,
24
+ memberships: [{ role: 'author', variables: [{ name: 'authorID', values: [testUuid(2)] }] }],
25
+ }), {
26
+ author__authorID: [testUuid(2)],
27
+ })
28
+ })
29
+
30
+
31
+ createAclVariablesTest('undefined variable', () => {
32
+ assert.equal(createAclVariables({
33
+ roles: {
34
+ author: {
35
+ stages: '*',
36
+ variables: {
37
+ authorID: { type: Acl.VariableType.entity, entityName: 'Author' },
38
+ },
39
+ entities: {},
40
+ },
41
+ },
42
+ }, {
43
+ identityId: testUuid(1),
44
+ personId: null,
45
+ memberships: [{ role: 'author', variables: [] }],
46
+ }), {
47
+ author__authorID: [],
48
+ })
49
+ })
50
+
51
+
52
+ createAclVariablesTest('predefined', () => {
53
+ assert.equal(createAclVariables({
54
+ roles: {
55
+ author: {
56
+ stages: '*',
57
+ variables: {
58
+ authorIdentity: { type: Acl.VariableType.predefined, value: 'identityID' },
59
+ },
60
+ entities: {},
61
+ },
62
+ },
63
+ }, {
64
+ identityId: testUuid(1),
65
+ personId: null,
66
+ memberships: [{ role: 'author', variables: [] }],
67
+ }), {
68
+ author__authorIdentity: [testUuid(1)],
69
+ })
70
+ })
71
+
72
+
73
+ createAclVariablesTest.run()