@contember/engine-content-api 2.0.1 → 2.1.0-alpha.2
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/dist/development/index.cjs +1 -0
- package/dist/development/index.cjs.map +1 -1
- package/dist/development/index.js +1 -0
- package/dist/development/index.js.map +1 -1
- package/dist/development/src/ExecutionContainer.cjs +6 -4
- package/dist/development/src/ExecutionContainer.cjs.map +1 -1
- package/dist/development/src/ExecutionContainer.js +6 -4
- package/dist/development/src/ExecutionContainer.js.map +1 -1
- package/dist/development/src/acl/Authorizator.cjs +5 -1
- package/dist/development/src/acl/Authorizator.cjs.map +1 -1
- package/dist/development/src/acl/Authorizator.js +5 -1
- package/dist/development/src/acl/Authorizator.js.map +1 -1
- package/dist/development/src/input-validation/ColumnValueResolver.cjs +1 -1
- package/dist/development/src/input-validation/ColumnValueResolver.cjs.map +1 -1
- package/dist/development/src/input-validation/ColumnValueResolver.js +1 -1
- package/dist/development/src/input-validation/ColumnValueResolver.js.map +1 -1
- package/dist/development/src/input-validation/dependencies/DependencyCollector.cjs +3 -0
- package/dist/development/src/input-validation/dependencies/DependencyCollector.cjs.map +1 -1
- package/dist/development/src/input-validation/dependencies/DependencyCollector.js +3 -0
- package/dist/development/src/input-validation/dependencies/DependencyCollector.js.map +1 -1
- package/dist/development/src/mapper/Mapper.cjs +1 -0
- package/dist/development/src/mapper/Mapper.cjs.map +1 -1
- package/dist/development/src/mapper/Mapper.js +1 -0
- package/dist/development/src/mapper/Mapper.js.map +1 -1
- package/dist/development/src/mapper/insert/Inserter.cjs +3 -2
- package/dist/development/src/mapper/insert/Inserter.cjs.map +1 -1
- package/dist/development/src/mapper/insert/Inserter.js +3 -2
- package/dist/development/src/mapper/insert/Inserter.js.map +1 -1
- package/dist/development/src/mapper/insert/SqlCreateInputProcessor.cjs +3 -2
- package/dist/development/src/mapper/insert/SqlCreateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/insert/SqlCreateInputProcessor.js +3 -2
- package/dist/development/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/select/ConditionBuilder.cjs +9 -2
- package/dist/development/src/mapper/select/ConditionBuilder.cjs.map +1 -1
- package/dist/development/src/mapper/select/ConditionBuilder.js +10 -3
- package/dist/development/src/mapper/select/ConditionBuilder.js.map +1 -1
- package/dist/development/src/mapper/select/WhereBuilder.cjs +3 -3
- package/dist/development/src/mapper/select/WhereBuilder.cjs.map +1 -1
- package/dist/development/src/mapper/select/WhereBuilder.js +3 -3
- package/dist/development/src/mapper/select/WhereBuilder.js.map +1 -1
- package/dist/development/src/mapper/select/handlers/FieldsVisitor.cjs +33 -3
- package/dist/development/src/mapper/select/handlers/FieldsVisitor.cjs.map +1 -1
- package/dist/development/src/mapper/select/handlers/FieldsVisitor.js +33 -3
- package/dist/development/src/mapper/select/handlers/FieldsVisitor.js.map +1 -1
- package/dist/development/src/mapper/select/handlers/FieldsVisitorFactory.cjs +6 -2
- package/dist/development/src/mapper/select/handlers/FieldsVisitorFactory.cjs.map +1 -1
- package/dist/development/src/mapper/select/handlers/FieldsVisitorFactory.js +6 -2
- package/dist/development/src/mapper/select/handlers/FieldsVisitorFactory.js.map +1 -1
- package/dist/development/src/resolvers/MutationResolver.cjs +1 -0
- package/dist/development/src/resolvers/MutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/MutationResolver.js +1 -0
- package/dist/development/src/resolvers/MutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/RefreshViewResolver.cjs +20 -0
- package/dist/development/src/resolvers/RefreshViewResolver.cjs.map +1 -0
- package/dist/development/src/resolvers/RefreshViewResolver.js +20 -0
- package/dist/development/src/resolvers/RefreshViewResolver.js.map +1 -0
- package/dist/development/src/schema/ColumnTypeResolver.cjs +9 -0
- package/dist/development/src/schema/ColumnTypeResolver.cjs.map +1 -1
- package/dist/development/src/schema/ColumnTypeResolver.js +10 -1
- package/dist/development/src/schema/ColumnTypeResolver.js.map +1 -1
- package/dist/development/src/schema/ConditionTypeProvider.cjs +35 -23
- package/dist/development/src/schema/ConditionTypeProvider.cjs.map +1 -1
- package/dist/development/src/schema/ConditionTypeProvider.js +36 -24
- package/dist/development/src/schema/ConditionTypeProvider.js.map +1 -1
- package/dist/development/src/schema/CustomTypesProvider.cjs +30 -0
- package/dist/development/src/schema/CustomTypesProvider.cjs.map +1 -1
- package/dist/development/src/schema/CustomTypesProvider.js +30 -0
- package/dist/development/src/schema/CustomTypesProvider.js.map +1 -1
- package/dist/development/src/schema/GraphQlSchemaBuilder.cjs +6 -1
- package/dist/development/src/schema/GraphQlSchemaBuilder.cjs.map +1 -1
- package/dist/development/src/schema/GraphQlSchemaBuilder.js +6 -1
- package/dist/development/src/schema/GraphQlSchemaBuilder.js.map +1 -1
- package/dist/development/src/schema/GraphQlSchemaBuilderFactory.cjs +2 -1
- package/dist/development/src/schema/GraphQlSchemaBuilderFactory.cjs.map +1 -1
- package/dist/development/src/schema/GraphQlSchemaBuilderFactory.js +2 -1
- package/dist/development/src/schema/GraphQlSchemaBuilderFactory.js.map +1 -1
- package/dist/development/src/schema/OrderByTypeProvider.cjs +6 -1
- package/dist/development/src/schema/OrderByTypeProvider.cjs.map +1 -1
- package/dist/development/src/schema/OrderByTypeProvider.js +6 -1
- package/dist/development/src/schema/OrderByTypeProvider.js.map +1 -1
- package/dist/development/src/schema/RefreshViewMutationProvider.cjs +35 -0
- package/dist/development/src/schema/RefreshViewMutationProvider.cjs.map +1 -0
- package/dist/development/src/schema/RefreshViewMutationProvider.js +35 -0
- package/dist/development/src/schema/RefreshViewMutationProvider.js.map +1 -0
- package/dist/development/src/schema/WhereTypeProvider.cjs +1 -1
- package/dist/development/src/schema/WhereTypeProvider.cjs.map +1 -1
- package/dist/development/src/schema/WhereTypeProvider.js +1 -1
- package/dist/development/src/schema/WhereTypeProvider.js.map +1 -1
- package/dist/development/src/schema/entities/FieldTypeVisitor.cjs +3 -3
- package/dist/development/src/schema/entities/FieldTypeVisitor.cjs.map +1 -1
- package/dist/development/src/schema/entities/FieldTypeVisitor.js +3 -3
- package/dist/development/src/schema/entities/FieldTypeVisitor.js.map +1 -1
- package/dist/development/src/schema/mutations/CreateEntityInputFieldVisitor.cjs +1 -1
- package/dist/development/src/schema/mutations/CreateEntityInputFieldVisitor.cjs.map +1 -1
- package/dist/development/src/schema/mutations/CreateEntityInputFieldVisitor.js +1 -1
- package/dist/development/src/schema/mutations/CreateEntityInputFieldVisitor.js.map +1 -1
- package/dist/development/src/schema/mutations/UpdateEntityInputFieldVisitor.cjs +1 -1
- package/dist/development/src/schema/mutations/UpdateEntityInputFieldVisitor.cjs.map +1 -1
- package/dist/development/src/schema/mutations/UpdateEntityInputFieldVisitor.js +1 -1
- package/dist/development/src/schema/mutations/UpdateEntityInputFieldVisitor.js.map +1 -1
- package/dist/development/src/utils/viewComputedId.cjs +16 -0
- package/dist/development/src/utils/viewComputedId.cjs.map +1 -0
- package/dist/development/src/utils/viewComputedId.js +16 -0
- package/dist/development/src/utils/viewComputedId.js.map +1 -0
- package/dist/production/index.cjs +1 -0
- package/dist/production/index.cjs.map +1 -1
- package/dist/production/index.js +1 -0
- package/dist/production/index.js.map +1 -1
- package/dist/production/src/ExecutionContainer.cjs +6 -4
- package/dist/production/src/ExecutionContainer.cjs.map +1 -1
- package/dist/production/src/ExecutionContainer.js +6 -4
- package/dist/production/src/ExecutionContainer.js.map +1 -1
- package/dist/production/src/acl/Authorizator.cjs +5 -1
- package/dist/production/src/acl/Authorizator.cjs.map +1 -1
- package/dist/production/src/acl/Authorizator.js +5 -1
- package/dist/production/src/acl/Authorizator.js.map +1 -1
- package/dist/production/src/input-validation/ColumnValueResolver.cjs +1 -1
- package/dist/production/src/input-validation/ColumnValueResolver.cjs.map +1 -1
- package/dist/production/src/input-validation/ColumnValueResolver.js +1 -1
- package/dist/production/src/input-validation/ColumnValueResolver.js.map +1 -1
- package/dist/production/src/input-validation/dependencies/DependencyCollector.cjs +3 -0
- package/dist/production/src/input-validation/dependencies/DependencyCollector.cjs.map +1 -1
- package/dist/production/src/input-validation/dependencies/DependencyCollector.js +3 -0
- package/dist/production/src/input-validation/dependencies/DependencyCollector.js.map +1 -1
- package/dist/production/src/mapper/Mapper.cjs +1 -0
- package/dist/production/src/mapper/Mapper.cjs.map +1 -1
- package/dist/production/src/mapper/Mapper.js +1 -0
- package/dist/production/src/mapper/Mapper.js.map +1 -1
- package/dist/production/src/mapper/insert/Inserter.cjs +3 -2
- package/dist/production/src/mapper/insert/Inserter.cjs.map +1 -1
- package/dist/production/src/mapper/insert/Inserter.js +3 -2
- package/dist/production/src/mapper/insert/Inserter.js.map +1 -1
- package/dist/production/src/mapper/insert/SqlCreateInputProcessor.cjs +3 -2
- package/dist/production/src/mapper/insert/SqlCreateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/insert/SqlCreateInputProcessor.js +3 -2
- package/dist/production/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/select/ConditionBuilder.cjs +9 -2
- package/dist/production/src/mapper/select/ConditionBuilder.cjs.map +1 -1
- package/dist/production/src/mapper/select/ConditionBuilder.js +10 -3
- package/dist/production/src/mapper/select/ConditionBuilder.js.map +1 -1
- package/dist/production/src/mapper/select/WhereBuilder.cjs +3 -3
- package/dist/production/src/mapper/select/WhereBuilder.cjs.map +1 -1
- package/dist/production/src/mapper/select/WhereBuilder.js +3 -3
- package/dist/production/src/mapper/select/WhereBuilder.js.map +1 -1
- package/dist/production/src/mapper/select/handlers/FieldsVisitor.cjs +33 -3
- package/dist/production/src/mapper/select/handlers/FieldsVisitor.cjs.map +1 -1
- package/dist/production/src/mapper/select/handlers/FieldsVisitor.js +33 -3
- package/dist/production/src/mapper/select/handlers/FieldsVisitor.js.map +1 -1
- package/dist/production/src/mapper/select/handlers/FieldsVisitorFactory.cjs +6 -2
- package/dist/production/src/mapper/select/handlers/FieldsVisitorFactory.cjs.map +1 -1
- package/dist/production/src/mapper/select/handlers/FieldsVisitorFactory.js +6 -2
- package/dist/production/src/mapper/select/handlers/FieldsVisitorFactory.js.map +1 -1
- package/dist/production/src/resolvers/MutationResolver.cjs +1 -0
- package/dist/production/src/resolvers/MutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/MutationResolver.js +1 -0
- package/dist/production/src/resolvers/MutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/RefreshViewResolver.cjs +20 -0
- package/dist/production/src/resolvers/RefreshViewResolver.cjs.map +1 -0
- package/dist/production/src/resolvers/RefreshViewResolver.js +20 -0
- package/dist/production/src/resolvers/RefreshViewResolver.js.map +1 -0
- package/dist/production/src/schema/ColumnTypeResolver.cjs +9 -0
- package/dist/production/src/schema/ColumnTypeResolver.cjs.map +1 -1
- package/dist/production/src/schema/ColumnTypeResolver.js +10 -1
- package/dist/production/src/schema/ColumnTypeResolver.js.map +1 -1
- package/dist/production/src/schema/ConditionTypeProvider.cjs +35 -23
- package/dist/production/src/schema/ConditionTypeProvider.cjs.map +1 -1
- package/dist/production/src/schema/ConditionTypeProvider.js +36 -24
- package/dist/production/src/schema/ConditionTypeProvider.js.map +1 -1
- package/dist/production/src/schema/CustomTypesProvider.cjs +30 -0
- package/dist/production/src/schema/CustomTypesProvider.cjs.map +1 -1
- package/dist/production/src/schema/CustomTypesProvider.js +30 -0
- package/dist/production/src/schema/CustomTypesProvider.js.map +1 -1
- package/dist/production/src/schema/GraphQlSchemaBuilder.cjs +6 -1
- package/dist/production/src/schema/GraphQlSchemaBuilder.cjs.map +1 -1
- package/dist/production/src/schema/GraphQlSchemaBuilder.js +6 -1
- package/dist/production/src/schema/GraphQlSchemaBuilder.js.map +1 -1
- package/dist/production/src/schema/GraphQlSchemaBuilderFactory.cjs +2 -1
- package/dist/production/src/schema/GraphQlSchemaBuilderFactory.cjs.map +1 -1
- package/dist/production/src/schema/GraphQlSchemaBuilderFactory.js +2 -1
- package/dist/production/src/schema/GraphQlSchemaBuilderFactory.js.map +1 -1
- package/dist/production/src/schema/OrderByTypeProvider.cjs +6 -1
- package/dist/production/src/schema/OrderByTypeProvider.cjs.map +1 -1
- package/dist/production/src/schema/OrderByTypeProvider.js +6 -1
- package/dist/production/src/schema/OrderByTypeProvider.js.map +1 -1
- package/dist/production/src/schema/RefreshViewMutationProvider.cjs +35 -0
- package/dist/production/src/schema/RefreshViewMutationProvider.cjs.map +1 -0
- package/dist/production/src/schema/RefreshViewMutationProvider.js +35 -0
- package/dist/production/src/schema/RefreshViewMutationProvider.js.map +1 -0
- package/dist/production/src/schema/WhereTypeProvider.cjs +1 -1
- package/dist/production/src/schema/WhereTypeProvider.cjs.map +1 -1
- package/dist/production/src/schema/WhereTypeProvider.js +1 -1
- package/dist/production/src/schema/WhereTypeProvider.js.map +1 -1
- package/dist/production/src/schema/entities/FieldTypeVisitor.cjs +3 -3
- package/dist/production/src/schema/entities/FieldTypeVisitor.cjs.map +1 -1
- package/dist/production/src/schema/entities/FieldTypeVisitor.js +3 -3
- package/dist/production/src/schema/entities/FieldTypeVisitor.js.map +1 -1
- package/dist/production/src/schema/mutations/CreateEntityInputFieldVisitor.cjs +1 -1
- package/dist/production/src/schema/mutations/CreateEntityInputFieldVisitor.cjs.map +1 -1
- package/dist/production/src/schema/mutations/CreateEntityInputFieldVisitor.js +1 -1
- package/dist/production/src/schema/mutations/CreateEntityInputFieldVisitor.js.map +1 -1
- package/dist/production/src/schema/mutations/UpdateEntityInputFieldVisitor.cjs +1 -1
- package/dist/production/src/schema/mutations/UpdateEntityInputFieldVisitor.cjs.map +1 -1
- package/dist/production/src/schema/mutations/UpdateEntityInputFieldVisitor.js +1 -1
- package/dist/production/src/schema/mutations/UpdateEntityInputFieldVisitor.js.map +1 -1
- package/dist/production/src/utils/viewComputedId.cjs +16 -0
- package/dist/production/src/utils/viewComputedId.cjs.map +1 -0
- package/dist/production/src/utils/viewComputedId.js +16 -0
- package/dist/production/src/utils/viewComputedId.js.map +1 -0
- package/dist/tests/cases/integration/graphQlRequests/validation/utils.d.ts.map +1 -1
- package/dist/tests/src/tags.d.ts.map +1 -1
- package/dist/tests/src/test.d.ts.map +1 -1
- package/dist/tests/src/testGraphql.d.ts.map +1 -1
- package/dist/tests/src/testUuid.d.ts.map +1 -1
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/dist/types/ExecutionContainer.d.ts +8 -2
- package/dist/types/ExecutionContainer.d.ts.map +1 -1
- package/dist/types/acl/Authorizator.d.ts +3 -1
- package/dist/types/acl/Authorizator.d.ts.map +1 -1
- package/dist/types/acl/VariableUtils.d.ts.map +1 -1
- package/dist/types/input-validation/ValidationContext.d.ts.map +1 -1
- package/dist/types/input-validation/ValidationEvaluation.d.ts.map +1 -1
- package/dist/types/input-validation/ValidationPath.d.ts.map +1 -1
- package/dist/types/introspection/introspection.schema.d.ts.map +1 -1
- package/dist/types/mapper/ColumnValue.d.ts.map +1 -1
- package/dist/types/mapper/ErrorUtils.d.ts.map +1 -1
- package/dist/types/mapper/EventManager.d.ts.map +1 -1
- package/dist/types/mapper/MutationProcessorHelper.d.ts.map +1 -1
- package/dist/types/mapper/Result.d.ts.map +1 -1
- package/dist/types/mapper/delete/helpers.d.ts.map +1 -1
- package/dist/types/mapper/insert/Inserter.d.ts +4 -1
- package/dist/types/mapper/insert/Inserter.d.ts.map +1 -1
- package/dist/types/mapper/insert/SqlCreateInputProcessor.d.ts +4 -1
- package/dist/types/mapper/insert/SqlCreateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/select/ConditionBuilder.d.ts +2 -2
- package/dist/types/mapper/select/ConditionBuilder.d.ts.map +1 -1
- package/dist/types/mapper/select/handlers/FieldsVisitor.d.ts +4 -1
- package/dist/types/mapper/select/handlers/FieldsVisitor.d.ts.map +1 -1
- package/dist/types/mapper/select/handlers/FieldsVisitorFactory.d.ts +5 -2
- package/dist/types/mapper/select/handlers/FieldsVisitorFactory.d.ts.map +1 -1
- package/dist/types/mapper/select/optimizer/WhereReplacer.d.ts.map +1 -1
- package/dist/types/mapper/select/optimizer/helpers.d.ts.map +1 -1
- package/dist/types/resolvers/ReadHelpers.d.ts.map +1 -1
- package/dist/types/resolvers/RefreshViewResolver.d.ts +11 -0
- package/dist/types/resolvers/RefreshViewResolver.d.ts.map +1 -0
- package/dist/types/schema/ColumnTypeResolver.d.ts +5 -5
- package/dist/types/schema/ColumnTypeResolver.d.ts.map +1 -1
- package/dist/types/schema/ConditionTypeProvider.d.ts +1 -0
- package/dist/types/schema/ConditionTypeProvider.d.ts.map +1 -1
- package/dist/types/schema/CustomTypesProvider.d.ts +1 -0
- package/dist/types/schema/CustomTypesProvider.d.ts.map +1 -1
- package/dist/types/schema/GraphQlSchemaBuilder.d.ts +3 -1
- package/dist/types/schema/GraphQlSchemaBuilder.d.ts.map +1 -1
- package/dist/types/schema/GraphQlSchemaBuilderFactory.d.ts +3 -0
- package/dist/types/schema/GraphQlSchemaBuilderFactory.d.ts.map +1 -1
- package/dist/types/schema/OperationExtension.d.ts.map +1 -1
- package/dist/types/schema/OrderByTypeProvider.d.ts.map +1 -1
- package/dist/types/schema/RefreshViewMutationProvider.d.ts +11 -0
- package/dist/types/schema/RefreshViewMutationProvider.d.ts.map +1 -0
- package/dist/types/schema/mutations/UpdateEntityInputFieldVisitor.d.ts +1 -1
- package/dist/types/schema/utils.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/types/utils/isIt.d.ts.map +1 -1
- package/dist/types/utils/paginationUtils.d.ts.map +1 -1
- package/dist/types/utils/promises.d.ts.map +1 -1
- package/dist/types/utils/singletonFactory.d.ts.map +1 -1
- package/dist/types/utils/strings.d.ts.map +1 -1
- package/dist/types/utils/tuple.d.ts.map +1 -1
- package/dist/types/utils/uniqueWhereFields.d.ts.map +1 -1
- package/dist/types/utils/viewComputedId.d.ts +2 -0
- package/dist/types/utils/viewComputedId.d.ts.map +1 -0
- package/package.json +11 -11
- package/src/ExecutionContainer.ts +9 -5
- package/src/acl/Authorizator.ts +5 -0
- package/src/input-validation/ColumnValueResolver.ts +1 -1
- package/src/mapper/insert/Inserter.ts +2 -1
- package/src/mapper/insert/SqlCreateInputProcessor.ts +2 -1
- package/src/mapper/select/ConditionBuilder.ts +19 -5
- package/src/mapper/select/WhereBuilder.ts +3 -3
- package/src/mapper/select/handlers/FieldsVisitor.ts +36 -1
- package/src/mapper/select/handlers/FieldsVisitorFactory.ts +6 -1
- package/src/resolvers/RefreshViewResolver.ts +23 -0
- package/src/schema/ColumnTypeResolver.ts +15 -3
- package/src/schema/ConditionTypeProvider.ts +40 -25
- package/src/schema/CustomTypesProvider.ts +37 -0
- package/src/schema/GraphQlSchemaBuilder.ts +8 -0
- package/src/schema/GraphQlSchemaBuilderFactory.ts +5 -2
- package/src/schema/OrderByTypeProvider.ts +6 -1
- package/src/schema/RefreshViewMutationProvider.ts +40 -0
- package/src/schema/WhereTypeProvider.ts +1 -1
- package/src/schema/entities/FieldTypeVisitor.ts +3 -3
- package/src/schema/mutations/CreateEntityInputFieldVisitor.ts +1 -1
- package/src/schema/mutations/UpdateEntityInputFieldVisitor.ts +1 -1
- package/src/utils/viewComputedId.ts +23 -0
- package/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.ts +38 -2
- package/tests/cases/integration/graphQlSchema/schema-aliased-type.gql +6 -0
- package/tests/cases/integration/graphQlSchema/schema-array.gql +257 -0
- package/tests/cases/integration/graphQlSchema/schema-column-types.gql +420 -0
- package/tests/src/test.ts +1 -1
|
@@ -29,6 +29,7 @@ import { PaginatedHasManyFieldProvider } from '../extensions/paginatedHasMany/Pa
|
|
|
29
29
|
import { PaginatedHasManyFieldProviderVisitor } from '../extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor'
|
|
30
30
|
import { Builder } from '@contember/dic'
|
|
31
31
|
import { ConnectOrCreateRelationInputProvider } from './mutations/ConnectOrCreateRelationInputProvider'
|
|
32
|
+
import { RefreshViewMutationProvider } from './RefreshViewMutationProvider'
|
|
32
33
|
|
|
33
34
|
export class GraphQlSchemaBuilderFactory {
|
|
34
35
|
constructor() {}
|
|
@@ -101,8 +102,10 @@ export class GraphQlSchemaBuilderFactory {
|
|
|
101
102
|
new MutationProvider(authorizator, whereTypeProvider, entityTypeProvider, createEntityInputProvider, updateEntityInputProvider, resultSchemaTypeProvider))
|
|
102
103
|
.addService('validationQueriesProvider', ({ whereTypeProvider, createEntityInputProvider, updateEntityInputProvider, resultSchemaTypeProvider }) =>
|
|
103
104
|
new ValidationQueriesProvider(whereTypeProvider, createEntityInputProvider, updateEntityInputProvider, resultSchemaTypeProvider))
|
|
104
|
-
.addService('
|
|
105
|
-
new
|
|
105
|
+
.addService('refreshViewMutationProvider', ({ schema, authorizator }) =>
|
|
106
|
+
new RefreshViewMutationProvider(schema, authorizator))
|
|
107
|
+
.addService('graphQlSchemaBuilder', ({ schema, queryProvider, validationQueriesProvider, mutationProvider, resultSchemaTypeProvider, refreshViewMutationProvider }) =>
|
|
108
|
+
new GraphQlSchemaBuilder(schema, queryProvider, validationQueriesProvider, mutationProvider, resultSchemaTypeProvider, refreshViewMutationProvider))
|
|
106
109
|
.setupService('createEntityInputProvider', (it, { createEntityInputProviderAccessor }) => {
|
|
107
110
|
createEntityInputProviderAccessor.set(it)
|
|
108
111
|
})
|
|
@@ -57,7 +57,12 @@ export class OrderByTypeProvider {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
const field = acceptFieldVisitor(this.schema, name, fieldName, {
|
|
60
|
-
visitColumn: () =>
|
|
60
|
+
visitColumn: ({ column }) => {
|
|
61
|
+
if (column.list) {
|
|
62
|
+
return undefined
|
|
63
|
+
}
|
|
64
|
+
return ({ type: this.orderDirectionEnum })
|
|
65
|
+
},
|
|
61
66
|
visitHasOne: ({ relation }) => ({ type: this.getEntityOrderByType(relation.target) }),
|
|
62
67
|
visitHasMany: () => undefined,
|
|
63
68
|
} as Model.FieldVisitor<GraphQLInputFieldConfig | undefined>)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Model } from '@contember/schema'
|
|
2
|
+
import { GraphQLBoolean, GraphQLEnumType, GraphQLFieldConfig, GraphQLObjectType } from 'graphql'
|
|
3
|
+
import { Context } from '../types'
|
|
4
|
+
import { Authorizator } from '../acl'
|
|
5
|
+
|
|
6
|
+
export class RefreshViewMutationProvider {
|
|
7
|
+
constructor(
|
|
8
|
+
private readonly schema: Model.Schema,
|
|
9
|
+
private readonly authorizator: Authorizator,
|
|
10
|
+
) {
|
|
11
|
+
}
|
|
12
|
+
getMutation(): GraphQLFieldConfig<any, Context, any> | undefined {
|
|
13
|
+
const materializedViews = Object.values(this.schema.entities)
|
|
14
|
+
.filter(it => it.view?.materialized)
|
|
15
|
+
.filter(it => this.authorizator.isRefreshMaterializedViewAllowed(it.name))
|
|
16
|
+
if (materializedViews.length === 0) {
|
|
17
|
+
return undefined
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const materializedViewsEnum = new GraphQLEnumType({
|
|
21
|
+
name: '_MaterializedView',
|
|
22
|
+
values: Object.fromEntries(materializedViews.map(it => [it.name, { value: it.name }])),
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
return {
|
|
26
|
+
type: new GraphQLObjectType({
|
|
27
|
+
name: 'RefreshMaterializedViewResponse',
|
|
28
|
+
fields: {
|
|
29
|
+
ok: { type: GraphQLBoolean },
|
|
30
|
+
},
|
|
31
|
+
}),
|
|
32
|
+
args: {
|
|
33
|
+
name: { type: materializedViewsEnum },
|
|
34
|
+
},
|
|
35
|
+
resolve: async (parent, args, context) => {
|
|
36
|
+
return await context.executionContainer.refreshViewResolver.resolve(args.name)
|
|
37
|
+
},
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -83,7 +83,7 @@ export class WhereTypeProvider {
|
|
|
83
83
|
}
|
|
84
84
|
return { type: uniqueWhere }
|
|
85
85
|
},
|
|
86
|
-
visitColumn: ({ column }) => ({ type: this.columnTypeResolver.getType(column) }),
|
|
86
|
+
visitColumn: ({ column }) => ({ type: this.columnTypeResolver.getType(column)[0] }),
|
|
87
87
|
})
|
|
88
88
|
}
|
|
89
89
|
}
|
|
@@ -14,16 +14,16 @@ export class FieldTypeVisitor implements Model.ColumnVisitor<GraphQLOutputType>,
|
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
public visitColumn({ column, entity }: Model.ColumnContext): GraphQLOutputType {
|
|
17
|
-
const
|
|
17
|
+
const [type] = this.columnTypeResolver.getType(column)
|
|
18
18
|
const fieldPredicate = this.authorizator.getFieldPredicate(Acl.Operation.read, entity.name, column.name)
|
|
19
19
|
const idPredicate = this.authorizator.getFieldPredicate(Acl.Operation.read, entity.name, entity.primary)
|
|
20
20
|
if (!fieldPredicate || !idPredicate) {
|
|
21
21
|
throw new ImplementationException()
|
|
22
22
|
}
|
|
23
23
|
if (!column.nullable && (fieldPredicate === true || fieldPredicate === idPredicate)) {
|
|
24
|
-
return new GraphQLNonNull(
|
|
24
|
+
return new GraphQLNonNull(type)
|
|
25
25
|
}
|
|
26
|
-
return
|
|
26
|
+
return type
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
public visitHasMany({ relation }: Model.AnyHasManyRelationContext): GraphQLOutputType {
|
|
@@ -22,7 +22,7 @@ export class CreateEntityInputFieldVisitor implements
|
|
|
22
22
|
if (this.authorizator.getFieldPermissions(Acl.Operation.create, entity.name, column.name) === 'no') {
|
|
23
23
|
return undefined
|
|
24
24
|
}
|
|
25
|
-
const type = this.columnTypeResolver.getType(column)
|
|
25
|
+
const [type] = this.columnTypeResolver.getType(column)
|
|
26
26
|
return { type }
|
|
27
27
|
}
|
|
28
28
|
|
|
@@ -21,7 +21,7 @@ export class UpdateEntityInputFieldVisitor implements
|
|
|
21
21
|
if (this.authorizator.getFieldPermissions(Acl.Operation.update, entity.name, column.name) === 'no') {
|
|
22
22
|
return undefined
|
|
23
23
|
}
|
|
24
|
-
const type = this.columnTypeResolver.getType(column)
|
|
24
|
+
const [type] = this.columnTypeResolver.getType(column)
|
|
25
25
|
return { type }
|
|
26
26
|
}
|
|
27
27
|
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import crypto from 'node:crypto'
|
|
2
|
+
|
|
3
|
+
export const viewComputedId = (inputs: (string)[]): string => {
|
|
4
|
+
let uuidBytes: Buffer
|
|
5
|
+
uuidBytes = crypto.createHash('md5').update(inputs.join('\x00')).digest()
|
|
6
|
+
|
|
7
|
+
// Set the version (v8) in the high nibble of byte 6.
|
|
8
|
+
uuidBytes[6] = (uuidBytes[6] & 0x0f) | 0x80 // 0x80 = 1000 0000 (version 8)
|
|
9
|
+
|
|
10
|
+
// Set the variant (RFC 4122) in byte 8.
|
|
11
|
+
uuidBytes[8] = (uuidBytes[8] & 0x3f) | 0x80
|
|
12
|
+
|
|
13
|
+
return formatUUID(uuidBytes)
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const formatUUID = (buf: Buffer): string => {
|
|
17
|
+
const hex = buf.toString('hex')
|
|
18
|
+
return hex.substring(0, 8)
|
|
19
|
+
+ '-' + hex.substring(8, 12)
|
|
20
|
+
+ '-' + hex.substring(12, 16)
|
|
21
|
+
+ '-' + hex.substring(16, 20)
|
|
22
|
+
+ '-' + hex.substring(20)
|
|
23
|
+
}
|
|
@@ -29,7 +29,7 @@ const testSchema = async (test: Test) => {
|
|
|
29
29
|
const schema = schemaResult instanceof SchemaBuilder ? schemaResult.buildSchema() : schemaResult
|
|
30
30
|
const schemaWithAcl = { ...schema, acl: { roles: {}, variables: {} } }
|
|
31
31
|
const permissions = test.permissions(schemaWithAcl)
|
|
32
|
-
const authorizator = new Authorizator(permissions, false)
|
|
32
|
+
const authorizator = new Authorizator(permissions, false, false)
|
|
33
33
|
const graphQlSchemaBuilder = schemaFactory.create(schemaWithAcl, authorizator)
|
|
34
34
|
const graphQlSchema = graphQlSchemaBuilder.build()
|
|
35
35
|
|
|
@@ -61,7 +61,26 @@ const testSchema = async (test: Test) => {
|
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
describe('GraphQL schema builder', () => {
|
|
64
|
-
|
|
64
|
+
it('column types', async () => {
|
|
65
|
+
await testSchema({
|
|
66
|
+
schema: () => createSchema({
|
|
67
|
+
Columns: class Columns {
|
|
68
|
+
string = c.stringColumn()
|
|
69
|
+
int = c.intColumn()
|
|
70
|
+
float = c.doubleColumn()
|
|
71
|
+
boolean = c.boolColumn()
|
|
72
|
+
date = c.dateColumn()
|
|
73
|
+
dateTime = c.dateTimeColumn()
|
|
74
|
+
json = c.jsonColumn()
|
|
75
|
+
uuid = c.uuidColumn()
|
|
76
|
+
time = c.timeColumn()
|
|
77
|
+
enum = c.enumColumn(c.createEnum('a', 'b', 'c'))
|
|
78
|
+
},
|
|
79
|
+
}).model,
|
|
80
|
+
permissions: schema => new AllowAllPermissionFactory().create(schema),
|
|
81
|
+
graphQlSchemaFile: 'schema-column-types.gql',
|
|
82
|
+
})
|
|
83
|
+
})
|
|
65
84
|
|
|
66
85
|
it('basic schema', async () => {
|
|
67
86
|
await testSchema({
|
|
@@ -402,6 +421,23 @@ describe('GraphQL schema builder', () => {
|
|
|
402
421
|
graphQlSchemaFile: 'schema-no-root-ops.gql',
|
|
403
422
|
})
|
|
404
423
|
})
|
|
424
|
+
|
|
425
|
+
|
|
426
|
+
it('array', async () => {
|
|
427
|
+
const schema = createSchema({
|
|
428
|
+
Foo: class Foo {
|
|
429
|
+
stringArrayValue = c.stringColumn().list()
|
|
430
|
+
enumArrayValue = c.enumColumn(c.createEnum('a', 'b', 'c')).list()
|
|
431
|
+
intArrayValue = c.intColumn().list()
|
|
432
|
+
},
|
|
433
|
+
})
|
|
434
|
+
|
|
435
|
+
await testSchema({
|
|
436
|
+
schema: () => schema.model,
|
|
437
|
+
permissions: schema => new AllowAllPermissionFactory().create(schema),
|
|
438
|
+
graphQlSchemaFile: 'schema-array.gql',
|
|
439
|
+
})
|
|
440
|
+
})
|
|
405
441
|
})
|
|
406
442
|
|
|
407
443
|
namespace ViewEntity {
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
type Query {
|
|
2
|
+
getFoo(by: FooUniqueWhere!, filter: FooWhere): Foo
|
|
3
|
+
listFoo(filter: FooWhere, orderBy: [FooOrderBy!], offset: Int, limit: Int): [Foo!]!
|
|
4
|
+
paginateFoo(filter: FooWhere, orderBy: [FooOrderBy!], skip: Int, first: Int): FooConnection!
|
|
5
|
+
validateCreateFoo(data: FooCreateInput!): _ValidationResult!
|
|
6
|
+
validateUpdateFoo(by: FooUniqueWhere!, data: FooUpdateInput!): _ValidationResult!
|
|
7
|
+
transaction: QueryTransaction
|
|
8
|
+
_info: Info
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
type Foo {
|
|
12
|
+
_meta: FooMeta
|
|
13
|
+
id: UUID!
|
|
14
|
+
stringArrayValue: [String!]
|
|
15
|
+
enumArrayValue: [FooEnumArrayValue!]
|
|
16
|
+
intArrayValue: [Int!]
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
type FooMeta {
|
|
20
|
+
id: FieldMeta
|
|
21
|
+
stringArrayValue: FieldMeta
|
|
22
|
+
enumArrayValue: FieldMeta
|
|
23
|
+
intArrayValue: FieldMeta
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
type FieldMeta {
|
|
27
|
+
readable: Boolean
|
|
28
|
+
updatable: Boolean
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
scalar UUID
|
|
32
|
+
|
|
33
|
+
enum FooEnumArrayValue {
|
|
34
|
+
a
|
|
35
|
+
b
|
|
36
|
+
c
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
input FooUniqueWhere {
|
|
40
|
+
id: UUID
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
input FooWhere {
|
|
44
|
+
id: UUIDCondition
|
|
45
|
+
stringArrayValue: StringListCondition
|
|
46
|
+
enumArrayValue: FooEnumArrayValueEnumListCondition
|
|
47
|
+
intArrayValue: IntListCondition
|
|
48
|
+
and: [FooWhere]
|
|
49
|
+
or: [FooWhere]
|
|
50
|
+
not: FooWhere
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
input UUIDCondition {
|
|
54
|
+
and: [UUIDCondition!]
|
|
55
|
+
or: [UUIDCondition!]
|
|
56
|
+
not: UUIDCondition
|
|
57
|
+
null: Boolean
|
|
58
|
+
isNull: Boolean
|
|
59
|
+
eq: UUID
|
|
60
|
+
notEq: UUID
|
|
61
|
+
in: [UUID!]
|
|
62
|
+
notIn: [UUID!]
|
|
63
|
+
lt: UUID
|
|
64
|
+
lte: UUID
|
|
65
|
+
gt: UUID
|
|
66
|
+
gte: UUID
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
input StringListCondition {
|
|
70
|
+
and: [StringListCondition!]
|
|
71
|
+
or: [StringListCondition!]
|
|
72
|
+
not: StringListCondition
|
|
73
|
+
null: Boolean
|
|
74
|
+
isNull: Boolean
|
|
75
|
+
minLength: Int
|
|
76
|
+
maxLength: Int
|
|
77
|
+
includes: String
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
input FooEnumArrayValueEnumListCondition {
|
|
81
|
+
and: [FooEnumArrayValueEnumListCondition!]
|
|
82
|
+
or: [FooEnumArrayValueEnumListCondition!]
|
|
83
|
+
not: FooEnumArrayValueEnumListCondition
|
|
84
|
+
null: Boolean
|
|
85
|
+
isNull: Boolean
|
|
86
|
+
minLength: Int
|
|
87
|
+
maxLength: Int
|
|
88
|
+
includes: FooEnumArrayValue
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
input IntListCondition {
|
|
92
|
+
and: [IntListCondition!]
|
|
93
|
+
or: [IntListCondition!]
|
|
94
|
+
not: IntListCondition
|
|
95
|
+
null: Boolean
|
|
96
|
+
isNull: Boolean
|
|
97
|
+
minLength: Int
|
|
98
|
+
maxLength: Int
|
|
99
|
+
includes: Int
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
input FooOrderBy {
|
|
103
|
+
_random: Boolean
|
|
104
|
+
_randomSeeded: Int
|
|
105
|
+
id: OrderDirection
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
enum OrderDirection {
|
|
109
|
+
asc
|
|
110
|
+
desc
|
|
111
|
+
ascNullsFirst
|
|
112
|
+
descNullsLast
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
type FooConnection {
|
|
116
|
+
pageInfo: PageInfo!
|
|
117
|
+
edges: [FooEdge!]!
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
type PageInfo {
|
|
121
|
+
totalCount: Int!
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
type FooEdge {
|
|
125
|
+
node: Foo!
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
type _ValidationResult {
|
|
129
|
+
valid: Boolean!
|
|
130
|
+
errors: [_ValidationError!]!
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
type _ValidationError {
|
|
134
|
+
path: [_PathFragment!]!
|
|
135
|
+
message: _ValidationMessage!
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
union _PathFragment = _FieldPathFragment | _IndexPathFragment
|
|
139
|
+
|
|
140
|
+
type _FieldPathFragment {
|
|
141
|
+
field: String!
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
type _IndexPathFragment {
|
|
145
|
+
index: Int!
|
|
146
|
+
alias: String
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
type _ValidationMessage {
|
|
150
|
+
text: String!
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
input FooCreateInput {
|
|
154
|
+
stringArrayValue: [String!]
|
|
155
|
+
enumArrayValue: [FooEnumArrayValue!]
|
|
156
|
+
intArrayValue: [Int!]
|
|
157
|
+
_dummy_field_: Boolean
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
input FooUpdateInput {
|
|
161
|
+
stringArrayValue: [String!]
|
|
162
|
+
enumArrayValue: [FooEnumArrayValue!]
|
|
163
|
+
intArrayValue: [Int!]
|
|
164
|
+
_dummy_field_: Boolean
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
type QueryTransaction {
|
|
168
|
+
getFoo(by: FooUniqueWhere!, filter: FooWhere): Foo
|
|
169
|
+
listFoo(filter: FooWhere, orderBy: [FooOrderBy!], offset: Int, limit: Int): [Foo!]!
|
|
170
|
+
paginateFoo(filter: FooWhere, orderBy: [FooOrderBy!], skip: Int, first: Int): FooConnection!
|
|
171
|
+
validateCreateFoo(data: FooCreateInput!): _ValidationResult!
|
|
172
|
+
validateUpdateFoo(by: FooUniqueWhere!, data: FooUpdateInput!): _ValidationResult!
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
type Info {
|
|
176
|
+
description: String
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
type Mutation {
|
|
180
|
+
createFoo(data: FooCreateInput!): FooCreateResult!
|
|
181
|
+
deleteFoo(by: FooUniqueWhere!, filter: FooWhere): FooDeleteResult!
|
|
182
|
+
updateFoo(by: FooUniqueWhere!, filter: FooWhere, data: FooUpdateInput!): FooUpdateResult!
|
|
183
|
+
upsertFoo(by: FooUniqueWhere!, filter: FooWhere, update: FooUpdateInput!, create: FooCreateInput!): FooUpsertResult!
|
|
184
|
+
transaction(options: MutationTransactionOptions): MutationTransaction!
|
|
185
|
+
query: Query!
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
type FooCreateResult implements MutationResult {
|
|
189
|
+
ok: Boolean!
|
|
190
|
+
errorMessage: String
|
|
191
|
+
errors: [_MutationError!]!
|
|
192
|
+
node: Foo
|
|
193
|
+
validation: _ValidationResult!
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
interface MutationResult {
|
|
197
|
+
ok: Boolean!
|
|
198
|
+
errorMessage: String
|
|
199
|
+
errors: [_MutationError!]!
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
type _MutationError {
|
|
203
|
+
path: [_PathFragment!]! @deprecated(reason: "Use `paths`.")
|
|
204
|
+
paths: [[_PathFragment!]!]!
|
|
205
|
+
type: _MutationErrorType!
|
|
206
|
+
message: String
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
enum _MutationErrorType {
|
|
210
|
+
NotNullConstraintViolation
|
|
211
|
+
UniqueConstraintViolation
|
|
212
|
+
ForeignKeyConstraintViolation
|
|
213
|
+
NotFoundOrDenied
|
|
214
|
+
NonUniqueWhereInput
|
|
215
|
+
InvalidDataInput
|
|
216
|
+
SqlError
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
type FooDeleteResult implements MutationResult {
|
|
220
|
+
ok: Boolean!
|
|
221
|
+
errorMessage: String
|
|
222
|
+
errors: [_MutationError!]!
|
|
223
|
+
node: Foo
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
type FooUpdateResult implements MutationResult {
|
|
227
|
+
ok: Boolean!
|
|
228
|
+
errorMessage: String
|
|
229
|
+
errors: [_MutationError!]!
|
|
230
|
+
node: Foo
|
|
231
|
+
validation: _ValidationResult!
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
type FooUpsertResult implements MutationResult {
|
|
235
|
+
ok: Boolean!
|
|
236
|
+
errorMessage: String
|
|
237
|
+
errors: [_MutationError!]!
|
|
238
|
+
node: Foo
|
|
239
|
+
validation: _ValidationResult!
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
type MutationTransaction {
|
|
243
|
+
ok: Boolean!
|
|
244
|
+
errorMessage: String
|
|
245
|
+
errors: [_MutationError!]!
|
|
246
|
+
validation: _ValidationResult!
|
|
247
|
+
createFoo(data: FooCreateInput!): FooCreateResult!
|
|
248
|
+
deleteFoo(by: FooUniqueWhere!, filter: FooWhere): FooDeleteResult!
|
|
249
|
+
updateFoo(by: FooUniqueWhere!, filter: FooWhere, data: FooUpdateInput!): FooUpdateResult!
|
|
250
|
+
upsertFoo(by: FooUniqueWhere!, filter: FooWhere, update: FooUpdateInput!, create: FooCreateInput!): FooUpsertResult!
|
|
251
|
+
query: Query
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
input MutationTransactionOptions {
|
|
255
|
+
deferForeignKeyConstraints: Boolean
|
|
256
|
+
deferUniqueConstraints: Boolean
|
|
257
|
+
}
|