@contember/engine-content-api 1.2.0-alpha.2 → 1.2.0-alpha.5

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 (83) hide show
  1. package/dist/src/acl/VariableInjector.d.ts +0 -1
  2. package/dist/src/acl/VariableInjector.d.ts.map +1 -1
  3. package/dist/src/acl/VariableInjector.js +4 -16
  4. package/dist/src/acl/VariableInjector.js.map +1 -1
  5. package/dist/src/acl/VariableUtils.d.ts +2 -13
  6. package/dist/src/acl/VariableUtils.d.ts.map +1 -1
  7. package/dist/src/acl/VariableUtils.js +6 -23
  8. package/dist/src/acl/VariableUtils.js.map +1 -1
  9. package/dist/src/input-validation/EntityRulesResolver.js +3 -3
  10. package/dist/src/input-validation/EntityRulesResolver.js.map +1 -1
  11. package/dist/src/input-validation/ValidationContext.d.ts +2 -2
  12. package/dist/src/input-validation/ValidationContext.d.ts.map +1 -1
  13. package/dist/src/input-validation/ValidationContext.js.map +1 -1
  14. package/dist/src/introspection/content-schema.types.d.ts +19 -223
  15. package/dist/src/introspection/content-schema.types.d.ts.map +1 -1
  16. package/dist/src/introspection/content-schema.types.js +2 -2
  17. package/dist/src/introspection/content-schema.types.js.map +1 -1
  18. package/dist/src/resolvers/GraphQlQueryAstFactory.js +2 -2
  19. package/dist/src/resolvers/GraphQlQueryAstFactory.js.map +1 -1
  20. package/dist/src/resolvers/MutationResolver.js +14 -14
  21. package/dist/src/resolvers/MutationResolver.js.map +1 -1
  22. package/dist/src/resolvers/ReadHelpers.js +7 -7
  23. package/dist/src/resolvers/ReadHelpers.js.map +1 -1
  24. package/dist/src/schema/MutationProvider.js +4 -4
  25. package/dist/src/schema/MutationProvider.js.map +1 -1
  26. package/dist/src/schema/QueryProvider.js +3 -3
  27. package/dist/src/schema/QueryProvider.js.map +1 -1
  28. package/dist/src/schema/ResultSchemaTypeProvider.d.ts +2 -2
  29. package/dist/src/schema/ResultSchemaTypeProvider.d.ts.map +1 -1
  30. package/dist/src/schema/entities/FieldArgsVisitor.d.ts +4 -4
  31. package/dist/src/schema/entities/FieldArgsVisitor.d.ts.map +1 -1
  32. package/dist/src/tsconfig.tsbuildinfo +1 -1
  33. package/dist/tests/cases/integration/graphQlDb/insert/insertSequence.test.d.ts +2 -0
  34. package/dist/tests/cases/integration/graphQlDb/insert/insertSequence.test.d.ts.map +1 -0
  35. package/dist/tests/cases/integration/graphQlDb/insert/insertSequence.test.js +38 -0
  36. package/dist/tests/cases/integration/graphQlDb/insert/insertSequence.test.js.map +1 -0
  37. package/dist/tests/cases/integration/graphQlRequests/delete/aclDelete.test.js +1 -6
  38. package/dist/tests/cases/integration/graphQlRequests/delete/aclDelete.test.js.map +1 -1
  39. package/dist/tests/cases/integration/graphQlRequests/insert/acl/setField.test.js +2 -12
  40. package/dist/tests/cases/integration/graphQlRequests/insert/acl/setField.test.js.map +1 -1
  41. package/dist/tests/cases/integration/graphQlRequests/insert/aclInsert.test.js +1 -6
  42. package/dist/tests/cases/integration/graphQlRequests/insert/aclInsert.test.js.map +1 -1
  43. package/dist/tests/cases/integration/graphQlRequests/query/acl/fieldRestrictedByLocale.test.js +4 -24
  44. package/dist/tests/cases/integration/graphQlRequests/query/acl/fieldRestrictedByLocale.test.js.map +1 -1
  45. package/dist/tests/cases/integration/graphQlRequests/query/acl/nestedPredicate.test.js +1 -6
  46. package/dist/tests/cases/integration/graphQlRequests/query/acl/nestedPredicate.test.js.map +1 -1
  47. package/dist/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.js +4 -24
  48. package/dist/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.js.map +1 -1
  49. package/dist/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.js +6 -3
  50. package/dist/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.js.map +1 -1
  51. package/dist/tests/cases/unit/aclVariablesFactory.test.js +4 -32
  52. package/dist/tests/cases/unit/aclVariablesFactory.test.js.map +1 -1
  53. package/dist/tests/cases/unit/orderbyHelper.test.js +1 -0
  54. package/dist/tests/cases/unit/orderbyHelper.test.js.map +1 -1
  55. package/dist/tests/cases/unit/predicatesInjector.test.js +1 -6
  56. package/dist/tests/cases/unit/predicatesInjector.test.js.map +1 -1
  57. package/dist/tests/cases/unit/variableInjector.test.js +2 -13
  58. package/dist/tests/cases/unit/variableInjector.test.js.map +1 -1
  59. package/dist/tests/src/testGraphql.d.ts.map +1 -1
  60. package/dist/tests/src/testGraphql.js +6 -1
  61. package/dist/tests/src/testGraphql.js.map +1 -1
  62. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  63. package/graphql.codegen.yml +0 -3
  64. package/package.json +16 -16
  65. package/src/acl/VariableInjector.ts +2 -17
  66. package/src/acl/VariableUtils.ts +7 -28
  67. package/src/input-validation/EntityRulesResolver.ts +3 -3
  68. package/src/input-validation/ValidationContext.ts +2 -2
  69. package/src/introspection/content-schema.types.ts +19 -286
  70. package/src/resolvers/GraphQlQueryAstFactory.ts +3 -3
  71. package/tests/cases/integration/graphQlDb/insert/insertSequence.test.ts +34 -0
  72. package/tests/cases/integration/graphQlRequests/delete/aclDelete.test.ts +1 -6
  73. package/tests/cases/integration/graphQlRequests/insert/acl/setField.test.ts +2 -12
  74. package/tests/cases/integration/graphQlRequests/insert/aclInsert.test.ts +1 -6
  75. package/tests/cases/integration/graphQlRequests/query/acl/fieldRestrictedByLocale.test.ts +4 -24
  76. package/tests/cases/integration/graphQlRequests/query/acl/nestedPredicate.test.ts +1 -6
  77. package/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.ts +5 -25
  78. package/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.ts +5 -5
  79. package/tests/cases/unit/aclVariablesFactory.test.ts +5 -34
  80. package/tests/cases/unit/orderbyHelper.test.ts +1 -0
  81. package/tests/cases/unit/predicatesInjector.test.ts +1 -6
  82. package/tests/cases/unit/variableInjector.test.ts +2 -13
  83. package/tests/src/testGraphql.ts +6 -1
@@ -10,9 +10,6 @@ generates:
10
10
  plugins:
11
11
  - "typescript"
12
12
  - "typescript-operations"
13
- - "typescript-resolvers"
14
- require:
15
- - "ts-node/register"
16
13
  hooks:
17
14
  afterAllFileWrite:
18
15
  - eslint --fix
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contember/engine-content-api",
3
- "version": "1.2.0-alpha.2",
3
+ "version": "1.2.0-alpha.5",
4
4
  "license": "Apache-2.0",
5
5
  "main": "dist/src/index.js",
6
6
  "typings": "dist/src/index.d.ts",
@@ -10,25 +10,25 @@
10
10
  "test": "vitest --no-threads"
11
11
  },
12
12
  "dependencies": {
13
- "@contember/database": "^1.2.0-alpha.2",
14
- "@contember/dic": "^1.2.0-alpha.2",
15
- "@contember/engine-common": "^1.2.0-alpha.2",
16
- "@contember/graphql-utils": "^1.2.0-alpha.2",
17
- "@contember/schema": "^1.2.0-alpha.2",
18
- "@contember/schema-utils": "^1.2.0-alpha.2",
13
+ "@contember/database": "^1.2.0-alpha.5",
14
+ "@contember/dic": "^1.2.0-alpha.5",
15
+ "@contember/engine-common": "^1.2.0-alpha.5",
16
+ "@contember/graphql-utils": "^1.2.0-alpha.5",
17
+ "@contember/schema": "^1.2.0-alpha.5",
18
+ "@contember/schema-utils": "^1.2.0-alpha.5",
19
19
  "@graphql-tools/schema": "^8.3.5",
20
20
  "graphql-tag": "^2.12.5"
21
21
  },
22
22
  "devDependencies": {
23
- "@contember/database-tester": "^1.2.0-alpha.2",
24
- "@contember/engine-api-tester": "^1.2.0-alpha.2",
25
- "@contember/schema-definition": "^1.2.0-alpha.2",
26
- "@graphql-codegen/cli": "^1.15.2",
27
- "@graphql-codegen/typescript": "^1.15.2",
28
- "@graphql-codegen/typescript-operations": "^1.15.2",
29
- "@graphql-codegen/typescript-resolvers": "^1.15.2",
30
- "@types/node": "^17.0.5",
31
- "graphql": "^15.4.0",
23
+ "@contember/database-tester": "^1.2.0-alpha.5",
24
+ "@contember/engine-api-tester": "^1.2.0-alpha.5",
25
+ "@contember/schema-definition": "^1.2.0-alpha.5",
26
+ "@graphql-codegen/cli": "^2.6.2",
27
+ "@graphql-codegen/typescript": "^2.5.1",
28
+ "@graphql-codegen/typescript-operations": "^2.4.2",
29
+ "@graphql-codegen/typescript-resolvers": "^2.6.6",
30
+ "@types/node": "^16",
31
+ "graphql": "^16.5.0",
32
32
  "pg": "^8.5.0"
33
33
  },
34
34
  "peerDependencies": {
@@ -10,31 +10,16 @@ export class VariableInjector {
10
10
  return predicateDefinitionProcessor.process(entity, where, {
11
11
  handleColumn: ({ value }) => {
12
12
  if (typeof value === 'string') {
13
- return this.createCondition(this.variables[value] || undefined)
13
+ return this.variables[value] ?? { never: true }
14
14
  }
15
15
  return value as Input.Condition
16
16
  },
17
17
  handleRelation: ({ value, targetEntity }) => {
18
18
  if (typeof value === 'string') {
19
- return { [targetEntity.primary]: this.createCondition(this.variables[value] || undefined) }
19
+ return { [targetEntity.primary]: this.variables[value] ?? { never: true } }
20
20
  }
21
21
  return value
22
22
  },
23
23
  })
24
24
  }
25
-
26
- private createCondition(variable: Acl.VariableMapEntry | undefined): Input.Condition {
27
- if (variable === undefined || variable.value.length === 0) {
28
- return { never: true }
29
- }
30
-
31
- const { value, definition } = variable
32
- if (definition.type === Acl.VariableType.condition) {
33
- if (value.length === 1) {
34
- return value[0] as Input.Condition
35
- }
36
- return { or: value as Input.Condition[] }
37
- }
38
- return { in: value as (string | number)[] }
39
- }
40
25
  }
@@ -1,41 +1,20 @@
1
- import { Acl } from '@contember/schema'
2
- import { getRoleVariables } from '@contember/schema-utils'
1
+ import { Acl, Input } from '@contember/schema'
2
+ import { getRoleVariables, ParsedMembership } from '@contember/schema-utils'
3
3
 
4
- type Memberships = readonly { role: string; variables: readonly { name: string; values: readonly string[] }[] }[]
5
4
 
6
5
  export const createAclVariables = (
7
6
  aclSchema: Acl.Schema,
8
- identity: {
9
- identityId: string
10
- personId: string | null
11
- memberships: Memberships
12
- },
7
+ memberships: readonly ParsedMembership[],
13
8
  ): Acl.VariablesMap => {
14
9
 
15
- const variablesEntries = identity.memberships.flatMap(
10
+ const variablesEntries = memberships.flatMap(
16
11
  membership => {
17
12
  const roleVariables = getRoleVariables(membership.role, aclSchema)
18
- const membershipVariablesMap = Object.fromEntries(membership.variables.map(it => [it.name, it.values]))
13
+ const membershipVariablesMap = Object.fromEntries(membership.variables.map(it => [it.name, it.condition]))
19
14
 
20
- return Object.entries(roleVariables).map(([name, def]): [string, Acl.VariableMapEntry] => {
15
+ return Object.keys(roleVariables).map((name): [string, Input.Condition] => {
21
16
  const prefixed = prefixVariable(membership.role, name)
22
- const value = (() => {
23
- switch (def.type) {
24
- case Acl.VariableType.entity:
25
- return membershipVariablesMap[name] ?? []
26
- case Acl.VariableType.predefined:
27
- switch (def.value) {
28
- case 'identityID':
29
- return [identity.identityId]
30
- case 'personID':
31
- return identity.personId ? [identity.personId] : []
32
- }
33
- throw new Error(`Unknown predefined variable ${def.value}`)
34
- case Acl.VariableType.condition:
35
- return (membershipVariablesMap[name] ?? []).map(it => JSON.parse(it))
36
- }
37
- })()
38
- return [prefixed, { value: value, definition: def }]
17
+ return [prefixed, membershipVariablesMap[name] ?? { never: true }]
39
18
  })
40
19
  },
41
20
  )
@@ -35,7 +35,7 @@ export class EntityRulesResolver {
35
35
 
36
36
  public getEntityRules(entityName: string): Validation.EntityRules {
37
37
  const definedRules = this.validationSchema[entityName] || {}
38
- const fieldsNotNullFlag = acceptEveryFieldVisitor(this.model, entityName, new NotNullFieldsVisitor())
38
+ const fieldsNotNullFlag = acceptEveryFieldVisitor(this.model, entityName, new RequiredFieldsVisitor())
39
39
  const notNullFields = Object.keys(filterObject(fieldsNotNullFlag, (field, val) => val))
40
40
  return notNullFields.reduce(
41
41
  (entityRules, field) => ({
@@ -50,9 +50,9 @@ export class EntityRulesResolver {
50
50
  }
51
51
  }
52
52
 
53
- class NotNullFieldsVisitor implements Model.RelationByTypeVisitor<boolean>, Model.ColumnVisitor<boolean> {
53
+ class RequiredFieldsVisitor implements Model.RelationByTypeVisitor<boolean>, Model.ColumnVisitor<boolean> {
54
54
  visitColumn(entity: Model.Entity, column: Model.AnyColumn): boolean {
55
- return !column.nullable
55
+ return !column.nullable && typeof column.default === 'undefined' && !column.sequence
56
56
  }
57
57
 
58
58
  visitManyHasManyInverse(): boolean {
@@ -10,7 +10,7 @@ namespace ValidationContext {
10
10
  }
11
11
 
12
12
  export type NodeType = Value.Object
13
- export type ValueType = Value.FieldValue
13
+ export type ValueType = Value.FieldValue | undefined
14
14
 
15
15
  export enum NodeContextType {
16
16
  value = 'value',
@@ -69,7 +69,7 @@ namespace ValidationContext {
69
69
 
70
70
  export const createSingleNodeContext = (
71
71
  parent: NodeContext | ValueContext,
72
- value: object | null | string | number | boolean,
72
+ value: ValueType,
73
73
  ): NodeContext | ValueContext => {
74
74
  if (Array.isArray(value)) {
75
75
  throw new Error('Nested arrays are not allowed')
@@ -1,9 +1,8 @@
1
- import { GraphQLResolveInfo, GraphQLScalarType, GraphQLScalarTypeConfig } from 'graphql'
2
1
  export type Maybe<T> = T | null
2
+ export type InputMaybe<T> = Maybe<T>
3
3
  export type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] }
4
4
  export type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> }
5
5
  export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> }
6
- export type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>
7
6
  /** All built-in and custom scalars, mapped to their actual values */
8
7
  export type Scalars = {
9
8
  ID: string
@@ -14,30 +13,29 @@ export type Scalars = {
14
13
  Json: any
15
14
  }
16
15
 
17
-
18
16
  export type Query = {
19
17
  readonly __typename?: 'Query'
20
18
  readonly schema?: Maybe<_Schema>
21
19
  }
22
20
 
23
- export type _Argument = _ValidatorArgument | _PathArgument | _LiteralArgument
21
+ export type _Argument = _LiteralArgument | _PathArgument | _ValidatorArgument
24
22
 
25
23
  export type _Column = _Field & {
26
24
  readonly __typename?: '_Column'
27
- readonly name: Scalars['String']
28
- readonly type: Scalars['String']
29
- readonly enumName?: Maybe<Scalars['String']>
30
25
  readonly defaultValue?: Maybe<Scalars['Json']>
26
+ readonly enumName?: Maybe<Scalars['String']>
27
+ readonly name: Scalars['String']
31
28
  readonly nullable: Scalars['Boolean']
32
29
  readonly rules: ReadonlyArray<_Rule>
30
+ readonly type: Scalars['String']
33
31
  readonly validators: ReadonlyArray<_Validator>
34
32
  }
35
33
 
36
34
  export type _Entity = {
37
35
  readonly __typename?: '_Entity'
38
- readonly name: Scalars['String']
39
36
  readonly customPrimaryAllowed: Scalars['Boolean']
40
37
  readonly fields: ReadonlyArray<_Field>
38
+ readonly name: Scalars['String']
41
39
  readonly unique: ReadonlyArray<_UniqueConstraint>
42
40
  }
43
41
 
@@ -49,9 +47,9 @@ export type _Enum = {
49
47
 
50
48
  export type _Field = {
51
49
  readonly name: Scalars['String']
52
- readonly type: Scalars['String']
53
50
  readonly nullable?: Maybe<Scalars['Boolean']>
54
51
  readonly rules: ReadonlyArray<_Rule>
52
+ readonly type: Scalars['String']
55
53
  readonly validators: ReadonlyArray<_Validator>
56
54
  }
57
55
 
@@ -61,15 +59,15 @@ export type _LiteralArgument = {
61
59
  }
62
60
 
63
61
  export enum _OnDeleteBehaviour {
64
- Restrict = 'restrict',
65
62
  Cascade = 'cascade',
63
+ Restrict = 'restrict',
66
64
  SetNull = 'setNull'
67
65
  }
68
66
 
69
67
  export type _OrderBy = {
70
68
  readonly __typename?: '_OrderBy'
71
- readonly path: ReadonlyArray<Scalars['String']>
72
69
  readonly direction: _OrderByDirection
70
+ readonly path: ReadonlyArray<Scalars['String']>
73
71
  }
74
72
 
75
73
  export enum _OrderByDirection {
@@ -84,23 +82,23 @@ export type _PathArgument = {
84
82
 
85
83
  export type _Relation = _Field & {
86
84
  readonly __typename?: '_Relation'
87
- readonly name: Scalars['String']
88
- readonly type: Scalars['String']
89
- readonly side: _RelationSide
90
- readonly targetEntity: Scalars['String']
91
- readonly ownedBy?: Maybe<Scalars['String']>
92
85
  readonly inversedBy?: Maybe<Scalars['String']>
86
+ readonly name: Scalars['String']
93
87
  readonly nullable?: Maybe<Scalars['Boolean']>
94
88
  readonly onDelete?: Maybe<_OnDeleteBehaviour>
95
- readonly orphanRemoval?: Maybe<Scalars['Boolean']>
96
89
  readonly orderBy?: Maybe<ReadonlyArray<_OrderBy>>
90
+ readonly orphanRemoval?: Maybe<Scalars['Boolean']>
91
+ readonly ownedBy?: Maybe<Scalars['String']>
97
92
  readonly rules: ReadonlyArray<_Rule>
93
+ readonly side: _RelationSide
94
+ readonly targetEntity: Scalars['String']
95
+ readonly type: Scalars['String']
98
96
  readonly validators: ReadonlyArray<_Validator>
99
97
  }
100
98
 
101
99
  export enum _RelationSide {
102
- Owning = 'owning',
103
- Inverse = 'inverse'
100
+ Inverse = 'inverse',
101
+ Owning = 'owning'
104
102
  }
105
103
 
106
104
  export type _Rule = {
@@ -116,8 +114,8 @@ export type _RuleMessage = {
116
114
 
117
115
  export type _Schema = {
118
116
  readonly __typename?: '_Schema'
119
- readonly enums: ReadonlyArray<_Enum>
120
117
  readonly entities: ReadonlyArray<_Entity>
118
+ readonly enums: ReadonlyArray<_Enum>
121
119
  }
122
120
 
123
121
  export type _UniqueConstraint = {
@@ -127,276 +125,11 @@ export type _UniqueConstraint = {
127
125
 
128
126
  export type _Validator = {
129
127
  readonly __typename?: '_Validator'
130
- readonly operation: Scalars['String']
131
128
  readonly arguments: ReadonlyArray<_Argument>
129
+ readonly operation: Scalars['String']
132
130
  }
133
131
 
134
132
  export type _ValidatorArgument = {
135
133
  readonly __typename?: '_ValidatorArgument'
136
134
  readonly validator: Scalars['Int']
137
135
  }
138
-
139
-
140
-
141
- export type ResolverTypeWrapper<T> = Promise<T> | T
142
-
143
-
144
- export type LegacyStitchingResolver<TResult, TParent, TContext, TArgs> = {
145
- fragment: string
146
- resolve: ResolverFn<TResult, TParent, TContext, TArgs>
147
- }
148
-
149
- export type NewStitchingResolver<TResult, TParent, TContext, TArgs> = {
150
- selectionSet: string
151
- resolve: ResolverFn<TResult, TParent, TContext, TArgs>
152
- }
153
- export type StitchingResolver<TResult, TParent, TContext, TArgs> = LegacyStitchingResolver<TResult, TParent, TContext, TArgs> | NewStitchingResolver<TResult, TParent, TContext, TArgs>
154
- export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> =
155
- | ResolverFn<TResult, TParent, TContext, TArgs>
156
- | StitchingResolver<TResult, TParent, TContext, TArgs>
157
-
158
- export type ResolverFn<TResult, TParent, TContext, TArgs> = (
159
- parent: TParent,
160
- args: TArgs,
161
- context: TContext,
162
- info: GraphQLResolveInfo
163
- ) => Promise<TResult> | TResult
164
-
165
- export type SubscriptionSubscribeFn<TResult, TParent, TContext, TArgs> = (
166
- parent: TParent,
167
- args: TArgs,
168
- context: TContext,
169
- info: GraphQLResolveInfo
170
- ) => AsyncIterator<TResult> | Promise<AsyncIterator<TResult>>
171
-
172
- export type SubscriptionResolveFn<TResult, TParent, TContext, TArgs> = (
173
- parent: TParent,
174
- args: TArgs,
175
- context: TContext,
176
- info: GraphQLResolveInfo
177
- ) => TResult | Promise<TResult>
178
-
179
- export interface SubscriptionSubscriberObject<TResult, TKey extends string, TParent, TContext, TArgs> {
180
- subscribe: SubscriptionSubscribeFn<{ [key in TKey]: TResult }, TParent, TContext, TArgs>
181
- resolve?: SubscriptionResolveFn<TResult, { [key in TKey]: TResult }, TContext, TArgs>
182
- }
183
-
184
- export interface SubscriptionResolverObject<TResult, TParent, TContext, TArgs> {
185
- subscribe: SubscriptionSubscribeFn<any, TParent, TContext, TArgs>
186
- resolve: SubscriptionResolveFn<TResult, any, TContext, TArgs>
187
- }
188
-
189
- export type SubscriptionObject<TResult, TKey extends string, TParent, TContext, TArgs> =
190
- | SubscriptionSubscriberObject<TResult, TKey, TParent, TContext, TArgs>
191
- | SubscriptionResolverObject<TResult, TParent, TContext, TArgs>
192
-
193
- export type SubscriptionResolver<TResult, TKey extends string, TParent = {}, TContext = {}, TArgs = {}> =
194
- | ((...args: any[]) => SubscriptionObject<TResult, TKey, TParent, TContext, TArgs>)
195
- | SubscriptionObject<TResult, TKey, TParent, TContext, TArgs>
196
-
197
- export type TypeResolveFn<TTypes, TParent = {}, TContext = {}> = (
198
- parent: TParent,
199
- context: TContext,
200
- info: GraphQLResolveInfo
201
- ) => Maybe<TTypes> | Promise<Maybe<TTypes>>
202
-
203
- export type IsTypeOfResolverFn<T = {}, TContext = {}> = (obj: T, context: TContext, info: GraphQLResolveInfo) => boolean | Promise<boolean>
204
-
205
- export type NextResolverFn<T> = () => Promise<T>
206
-
207
- export type DirectiveResolverFn<TResult = {}, TParent = {}, TContext = {}, TArgs = {}> = (
208
- next: NextResolverFn<TResult>,
209
- parent: TParent,
210
- args: TArgs,
211
- context: TContext,
212
- info: GraphQLResolveInfo
213
- ) => TResult | Promise<TResult>
214
-
215
- /** Mapping between all available schema types and the resolvers types */
216
- export type ResolversTypes = {
217
- Json: ResolverTypeWrapper<Scalars['Json']>
218
- Query: ResolverTypeWrapper<{}>
219
- _Argument: ResolversTypes['_ValidatorArgument'] | ResolversTypes['_PathArgument'] | ResolversTypes['_LiteralArgument']
220
- _Column: ResolverTypeWrapper<_Column>
221
- String: ResolverTypeWrapper<Scalars['String']>
222
- Boolean: ResolverTypeWrapper<Scalars['Boolean']>
223
- _Entity: ResolverTypeWrapper<_Entity>
224
- _Enum: ResolverTypeWrapper<_Enum>
225
- _Field: ResolversTypes['_Column'] | ResolversTypes['_Relation']
226
- _LiteralArgument: ResolverTypeWrapper<_LiteralArgument>
227
- _OnDeleteBehaviour: _OnDeleteBehaviour
228
- _OrderBy: ResolverTypeWrapper<_OrderBy>
229
- _OrderByDirection: _OrderByDirection
230
- _PathArgument: ResolverTypeWrapper<_PathArgument>
231
- _Relation: ResolverTypeWrapper<_Relation>
232
- _RelationSide: _RelationSide
233
- _Rule: ResolverTypeWrapper<_Rule>
234
- Int: ResolverTypeWrapper<Scalars['Int']>
235
- _RuleMessage: ResolverTypeWrapper<_RuleMessage>
236
- _Schema: ResolverTypeWrapper<_Schema>
237
- _UniqueConstraint: ResolverTypeWrapper<_UniqueConstraint>
238
- _Validator: ResolverTypeWrapper<Omit<_Validator, 'arguments'> & { arguments: ReadonlyArray<ResolversTypes['_Argument']> }>
239
- _ValidatorArgument: ResolverTypeWrapper<_ValidatorArgument>
240
- }
241
-
242
- /** Mapping between all available schema types and the resolvers parents */
243
- export type ResolversParentTypes = {
244
- Json: Scalars['Json']
245
- Query: {}
246
- _Argument: ResolversParentTypes['_ValidatorArgument'] | ResolversParentTypes['_PathArgument'] | ResolversParentTypes['_LiteralArgument']
247
- _Column: _Column
248
- String: Scalars['String']
249
- Boolean: Scalars['Boolean']
250
- _Entity: _Entity
251
- _Enum: _Enum
252
- _Field: ResolversParentTypes['_Column'] | ResolversParentTypes['_Relation']
253
- _LiteralArgument: _LiteralArgument
254
- _OrderBy: _OrderBy
255
- _PathArgument: _PathArgument
256
- _Relation: _Relation
257
- _Rule: _Rule
258
- Int: Scalars['Int']
259
- _RuleMessage: _RuleMessage
260
- _Schema: _Schema
261
- _UniqueConstraint: _UniqueConstraint
262
- _Validator: Omit<_Validator, 'arguments'> & { arguments: ReadonlyArray<ResolversParentTypes['_Argument']> }
263
- _ValidatorArgument: _ValidatorArgument
264
- }
265
-
266
- export interface JsonScalarConfig extends GraphQLScalarTypeConfig<ResolversTypes['Json'], any> {
267
- name: 'Json'
268
- }
269
-
270
- export type QueryResolvers<ContextType = any, ParentType extends ResolversParentTypes['Query'] = ResolversParentTypes['Query']> = {
271
- schema?: Resolver<Maybe<ResolversTypes['_Schema']>, ParentType, ContextType>
272
- }
273
-
274
- export type _ArgumentResolvers<ContextType = any, ParentType extends ResolversParentTypes['_Argument'] = ResolversParentTypes['_Argument']> = {
275
- __resolveType: TypeResolveFn<'_ValidatorArgument' | '_PathArgument' | '_LiteralArgument', ParentType, ContextType>
276
- }
277
-
278
- export type _ColumnResolvers<ContextType = any, ParentType extends ResolversParentTypes['_Column'] = ResolversParentTypes['_Column']> = {
279
- name?: Resolver<ResolversTypes['String'], ParentType, ContextType>
280
- type?: Resolver<ResolversTypes['String'], ParentType, ContextType>
281
- enumName?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>
282
- defaultValue?: Resolver<Maybe<ResolversTypes['Json']>, ParentType, ContextType>
283
- nullable?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>
284
- rules?: Resolver<ReadonlyArray<ResolversTypes['_Rule']>, ParentType, ContextType>
285
- validators?: Resolver<ReadonlyArray<ResolversTypes['_Validator']>, ParentType, ContextType>
286
- __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>
287
- }
288
-
289
- export type _EntityResolvers<ContextType = any, ParentType extends ResolversParentTypes['_Entity'] = ResolversParentTypes['_Entity']> = {
290
- name?: Resolver<ResolversTypes['String'], ParentType, ContextType>
291
- customPrimaryAllowed?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>
292
- fields?: Resolver<ReadonlyArray<ResolversTypes['_Field']>, ParentType, ContextType>
293
- unique?: Resolver<ReadonlyArray<ResolversTypes['_UniqueConstraint']>, ParentType, ContextType>
294
- __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>
295
- }
296
-
297
- export type _EnumResolvers<ContextType = any, ParentType extends ResolversParentTypes['_Enum'] = ResolversParentTypes['_Enum']> = {
298
- name?: Resolver<ResolversTypes['String'], ParentType, ContextType>
299
- values?: Resolver<ReadonlyArray<ResolversTypes['String']>, ParentType, ContextType>
300
- __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>
301
- }
302
-
303
- export type _FieldResolvers<ContextType = any, ParentType extends ResolversParentTypes['_Field'] = ResolversParentTypes['_Field']> = {
304
- __resolveType: TypeResolveFn<'_Column' | '_Relation', ParentType, ContextType>
305
- name?: Resolver<ResolversTypes['String'], ParentType, ContextType>
306
- type?: Resolver<ResolversTypes['String'], ParentType, ContextType>
307
- nullable?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>
308
- rules?: Resolver<ReadonlyArray<ResolversTypes['_Rule']>, ParentType, ContextType>
309
- validators?: Resolver<ReadonlyArray<ResolversTypes['_Validator']>, ParentType, ContextType>
310
- }
311
-
312
- export type _LiteralArgumentResolvers<ContextType = any, ParentType extends ResolversParentTypes['_LiteralArgument'] = ResolversParentTypes['_LiteralArgument']> = {
313
- value?: Resolver<Maybe<ResolversTypes['Json']>, ParentType, ContextType>
314
- __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>
315
- }
316
-
317
- export type _OrderByResolvers<ContextType = any, ParentType extends ResolversParentTypes['_OrderBy'] = ResolversParentTypes['_OrderBy']> = {
318
- path?: Resolver<ReadonlyArray<ResolversTypes['String']>, ParentType, ContextType>
319
- direction?: Resolver<ResolversTypes['_OrderByDirection'], ParentType, ContextType>
320
- __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>
321
- }
322
-
323
- export type _PathArgumentResolvers<ContextType = any, ParentType extends ResolversParentTypes['_PathArgument'] = ResolversParentTypes['_PathArgument']> = {
324
- path?: Resolver<ReadonlyArray<ResolversTypes['String']>, ParentType, ContextType>
325
- __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>
326
- }
327
-
328
- export type _RelationResolvers<ContextType = any, ParentType extends ResolversParentTypes['_Relation'] = ResolversParentTypes['_Relation']> = {
329
- name?: Resolver<ResolversTypes['String'], ParentType, ContextType>
330
- type?: Resolver<ResolversTypes['String'], ParentType, ContextType>
331
- side?: Resolver<ResolversTypes['_RelationSide'], ParentType, ContextType>
332
- targetEntity?: Resolver<ResolversTypes['String'], ParentType, ContextType>
333
- ownedBy?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>
334
- inversedBy?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>
335
- nullable?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>
336
- onDelete?: Resolver<Maybe<ResolversTypes['_OnDeleteBehaviour']>, ParentType, ContextType>
337
- orphanRemoval?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>
338
- orderBy?: Resolver<Maybe<ReadonlyArray<ResolversTypes['_OrderBy']>>, ParentType, ContextType>
339
- rules?: Resolver<ReadonlyArray<ResolversTypes['_Rule']>, ParentType, ContextType>
340
- validators?: Resolver<ReadonlyArray<ResolversTypes['_Validator']>, ParentType, ContextType>
341
- __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>
342
- }
343
-
344
- export type _RuleResolvers<ContextType = any, ParentType extends ResolversParentTypes['_Rule'] = ResolversParentTypes['_Rule']> = {
345
- message?: Resolver<Maybe<ResolversTypes['_RuleMessage']>, ParentType, ContextType>
346
- validator?: Resolver<ResolversTypes['Int'], ParentType, ContextType>
347
- __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>
348
- }
349
-
350
- export type _RuleMessageResolvers<ContextType = any, ParentType extends ResolversParentTypes['_RuleMessage'] = ResolversParentTypes['_RuleMessage']> = {
351
- text?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>
352
- __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>
353
- }
354
-
355
- export type _SchemaResolvers<ContextType = any, ParentType extends ResolversParentTypes['_Schema'] = ResolversParentTypes['_Schema']> = {
356
- enums?: Resolver<ReadonlyArray<ResolversTypes['_Enum']>, ParentType, ContextType>
357
- entities?: Resolver<ReadonlyArray<ResolversTypes['_Entity']>, ParentType, ContextType>
358
- __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>
359
- }
360
-
361
- export type _UniqueConstraintResolvers<ContextType = any, ParentType extends ResolversParentTypes['_UniqueConstraint'] = ResolversParentTypes['_UniqueConstraint']> = {
362
- fields?: Resolver<ReadonlyArray<ResolversTypes['String']>, ParentType, ContextType>
363
- __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>
364
- }
365
-
366
- export type _ValidatorResolvers<ContextType = any, ParentType extends ResolversParentTypes['_Validator'] = ResolversParentTypes['_Validator']> = {
367
- operation?: Resolver<ResolversTypes['String'], ParentType, ContextType>
368
- arguments?: Resolver<ReadonlyArray<ResolversTypes['_Argument']>, ParentType, ContextType>
369
- __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>
370
- }
371
-
372
- export type _ValidatorArgumentResolvers<ContextType = any, ParentType extends ResolversParentTypes['_ValidatorArgument'] = ResolversParentTypes['_ValidatorArgument']> = {
373
- validator?: Resolver<ResolversTypes['Int'], ParentType, ContextType>
374
- __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>
375
- }
376
-
377
- export type Resolvers<ContextType = any> = {
378
- Json?: GraphQLScalarType
379
- Query?: QueryResolvers<ContextType>
380
- _Argument?: _ArgumentResolvers<ContextType>
381
- _Column?: _ColumnResolvers<ContextType>
382
- _Entity?: _EntityResolvers<ContextType>
383
- _Enum?: _EnumResolvers<ContextType>
384
- _Field?: _FieldResolvers<ContextType>
385
- _LiteralArgument?: _LiteralArgumentResolvers<ContextType>
386
- _OrderBy?: _OrderByResolvers<ContextType>
387
- _PathArgument?: _PathArgumentResolvers<ContextType>
388
- _Relation?: _RelationResolvers<ContextType>
389
- _Rule?: _RuleResolvers<ContextType>
390
- _RuleMessage?: _RuleMessageResolvers<ContextType>
391
- _Schema?: _SchemaResolvers<ContextType>
392
- _UniqueConstraint?: _UniqueConstraintResolvers<ContextType>
393
- _Validator?: _ValidatorResolvers<ContextType>
394
- _ValidatorArgument?: _ValidatorArgumentResolvers<ContextType>
395
- }
396
-
397
-
398
- /**
399
- * @deprecated
400
- * Use "Resolvers" root object instead. If you wish to get "IResolvers", add "typesPrefix: I" to your config.
401
- */
402
- export type IResolvers<ContextType = any> = Resolvers<ContextType>
@@ -7,7 +7,7 @@ import {
7
7
  GraphQLResolveInfo,
8
8
  isListType,
9
9
  isNonNullType,
10
- isObjectType,
10
+ isObjectType, Kind,
11
11
  } from 'graphql'
12
12
  import { SelectionSetNode } from 'graphql/language/ast'
13
13
  import { getArgumentValues } from 'graphql/execution/values'
@@ -67,13 +67,13 @@ export class GraphQlQueryAstFactory {
67
67
  ): AnyNode[] {
68
68
  const fields: ObjectNode | FieldNode[] = []
69
69
  for (const subNode of selectionSet.selections) {
70
- if (isIt<GraphQlFieldNode>(subNode, 'kind', 'Field')) {
70
+ if (isIt<GraphQlFieldNode>(subNode, 'kind', Kind.FIELD)) {
71
71
  const field = this.createFromNode(info, parentType, subNode, path, filter)
72
72
  if (field === null) {
73
73
  continue
74
74
  }
75
75
  fields.push(field)
76
- } else if (isIt<FragmentSpreadNode>(subNode, 'kind', 'FragmentSpread')) {
76
+ } else if (isIt<FragmentSpreadNode>(subNode, 'kind', Kind.FRAGMENT_SPREAD)) {
77
77
  const fragmentDefinition = info.fragments[subNode.name.value]
78
78
  if (!fragmentDefinition) {
79
79
  throw new Error(`GraphQlQueryAstFactory: Fragment definition ${subNode.name.value} not found`)
@@ -0,0 +1,34 @@
1
+ import { SchemaDefinition as def } from '@contember/schema-definition'
2
+ import { GQL } from '../../../../src/tags'
3
+ import { test } from 'vitest'
4
+ import { executeDbTest } from '@contember/engine-api-tester'
5
+
6
+ namespace SeqModel {
7
+ export class Order {
8
+ seqId = def.intColumn().sequence().notNull()
9
+ }
10
+ }
11
+
12
+ test('insert author with id', async () => {
13
+ const schema = def.createModel(SeqModel)
14
+ await executeDbTest({
15
+ schema: schema,
16
+ query: GQL`
17
+ mutation {
18
+ createOrder(data: {}) {
19
+ node {
20
+ seqId
21
+ }
22
+ }
23
+ }`,
24
+ seed: [],
25
+ return: {
26
+ createOrder: {
27
+ node: {
28
+ seqId: 1,
29
+ },
30
+ },
31
+ },
32
+ })
33
+ })
34
+
@@ -32,12 +32,7 @@ test('delete post with acl', async () => {
32
32
  },
33
33
  },
34
34
  variables: {
35
- locale_variable: {
36
- definition: {
37
- type: Acl.VariableType.condition,
38
- },
39
- value: [{ in: ['cs'] }],
40
- },
35
+ locale_variable: { in: ['cs'] },
41
36
  },
42
37
  executes: [
43
38
  ...sqlTransaction([