@contember/engine-content-api 2.1.0-alpha.3 → 2.1.0-alpha.30

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 (107) hide show
  1. package/dist/development/index.cjs +0 -2
  2. package/dist/development/index.cjs.map +1 -1
  3. package/dist/development/index.js +0 -2
  4. package/dist/development/index.js.map +1 -1
  5. package/dist/development/src/ExecutionContainer.cjs +5 -4
  6. package/dist/development/src/ExecutionContainer.cjs.map +1 -1
  7. package/dist/development/src/ExecutionContainer.js +5 -4
  8. package/dist/development/src/ExecutionContainer.js.map +1 -1
  9. package/dist/development/src/mapper/Result.cjs +1 -1
  10. package/dist/development/src/mapper/Result.cjs.map +1 -1
  11. package/dist/development/src/mapper/Result.js +1 -1
  12. package/dist/development/src/mapper/Result.js.map +1 -1
  13. package/dist/development/src/mapper/select/ConditionBuilder.cjs +6 -2
  14. package/dist/development/src/mapper/select/ConditionBuilder.cjs.map +1 -1
  15. package/dist/development/src/mapper/select/ConditionBuilder.js +7 -3
  16. package/dist/development/src/mapper/select/ConditionBuilder.js.map +1 -1
  17. package/dist/development/src/mapper/select/optimizer/WhereOptimizer.cjs +6 -2
  18. package/dist/development/src/mapper/select/optimizer/WhereOptimizer.cjs.map +1 -1
  19. package/dist/development/src/mapper/select/optimizer/WhereOptimizer.js +6 -2
  20. package/dist/development/src/mapper/select/optimizer/WhereOptimizer.js.map +1 -1
  21. package/dist/development/src/mapper/update/Updater.cjs +15 -3
  22. package/dist/development/src/mapper/update/Updater.cjs.map +1 -1
  23. package/dist/development/src/mapper/update/Updater.js +16 -4
  24. package/dist/development/src/mapper/update/Updater.js.map +1 -1
  25. package/dist/development/src/resolvers/RefreshViewResolver.cjs +3 -2
  26. package/dist/development/src/resolvers/RefreshViewResolver.cjs.map +1 -1
  27. package/dist/development/src/resolvers/RefreshViewResolver.js +3 -2
  28. package/dist/development/src/resolvers/RefreshViewResolver.js.map +1 -1
  29. package/dist/development/src/schema/ConditionTypeProvider.cjs +2 -0
  30. package/dist/development/src/schema/ConditionTypeProvider.cjs.map +1 -1
  31. package/dist/development/src/schema/ConditionTypeProvider.js +2 -0
  32. package/dist/development/src/schema/ConditionTypeProvider.js.map +1 -1
  33. package/dist/development/src/schema/RefreshViewMutationProvider.cjs +9 -2
  34. package/dist/development/src/schema/RefreshViewMutationProvider.cjs.map +1 -1
  35. package/dist/development/src/schema/RefreshViewMutationProvider.js +10 -3
  36. package/dist/development/src/schema/RefreshViewMutationProvider.js.map +1 -1
  37. package/dist/production/index.cjs +0 -2
  38. package/dist/production/index.cjs.map +1 -1
  39. package/dist/production/index.js +0 -2
  40. package/dist/production/index.js.map +1 -1
  41. package/dist/production/src/ExecutionContainer.cjs +5 -4
  42. package/dist/production/src/ExecutionContainer.cjs.map +1 -1
  43. package/dist/production/src/ExecutionContainer.js +5 -4
  44. package/dist/production/src/ExecutionContainer.js.map +1 -1
  45. package/dist/production/src/mapper/Result.cjs +1 -1
  46. package/dist/production/src/mapper/Result.cjs.map +1 -1
  47. package/dist/production/src/mapper/Result.js +1 -1
  48. package/dist/production/src/mapper/Result.js.map +1 -1
  49. package/dist/production/src/mapper/select/ConditionBuilder.cjs +6 -2
  50. package/dist/production/src/mapper/select/ConditionBuilder.cjs.map +1 -1
  51. package/dist/production/src/mapper/select/ConditionBuilder.js +7 -3
  52. package/dist/production/src/mapper/select/ConditionBuilder.js.map +1 -1
  53. package/dist/production/src/mapper/select/optimizer/WhereOptimizer.cjs +6 -2
  54. package/dist/production/src/mapper/select/optimizer/WhereOptimizer.cjs.map +1 -1
  55. package/dist/production/src/mapper/select/optimizer/WhereOptimizer.js +6 -2
  56. package/dist/production/src/mapper/select/optimizer/WhereOptimizer.js.map +1 -1
  57. package/dist/production/src/mapper/update/Updater.cjs +15 -3
  58. package/dist/production/src/mapper/update/Updater.cjs.map +1 -1
  59. package/dist/production/src/mapper/update/Updater.js +16 -4
  60. package/dist/production/src/mapper/update/Updater.js.map +1 -1
  61. package/dist/production/src/resolvers/RefreshViewResolver.cjs +3 -2
  62. package/dist/production/src/resolvers/RefreshViewResolver.cjs.map +1 -1
  63. package/dist/production/src/resolvers/RefreshViewResolver.js +3 -2
  64. package/dist/production/src/resolvers/RefreshViewResolver.js.map +1 -1
  65. package/dist/production/src/schema/ConditionTypeProvider.cjs +2 -0
  66. package/dist/production/src/schema/ConditionTypeProvider.cjs.map +1 -1
  67. package/dist/production/src/schema/ConditionTypeProvider.js +2 -0
  68. package/dist/production/src/schema/ConditionTypeProvider.js.map +1 -1
  69. package/dist/production/src/schema/RefreshViewMutationProvider.cjs +9 -2
  70. package/dist/production/src/schema/RefreshViewMutationProvider.cjs.map +1 -1
  71. package/dist/production/src/schema/RefreshViewMutationProvider.js +10 -3
  72. package/dist/production/src/schema/RefreshViewMutationProvider.js.map +1 -1
  73. package/dist/tests/cases/integration/graphQlRequests/insert/subOperationFail.test.d.ts +2 -0
  74. package/dist/tests/cases/integration/graphQlRequests/insert/subOperationFail.test.d.ts.map +1 -0
  75. package/dist/tests/src/test.d.ts.map +1 -1
  76. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  77. package/dist/types/ExecutionContainer.d.ts +13 -3
  78. package/dist/types/ExecutionContainer.d.ts.map +1 -1
  79. package/dist/types/index.d.ts +1 -1
  80. package/dist/types/index.d.ts.map +1 -1
  81. package/dist/types/mapper/Result.d.ts +2 -2
  82. package/dist/types/mapper/Result.d.ts.map +1 -1
  83. package/dist/types/mapper/select/ConditionBuilder.d.ts.map +1 -1
  84. package/dist/types/mapper/select/optimizer/WhereOptimizer.d.ts +6 -1
  85. package/dist/types/mapper/select/optimizer/WhereOptimizer.d.ts.map +1 -1
  86. package/dist/types/mapper/update/Updater.d.ts +1 -5
  87. package/dist/types/mapper/update/Updater.d.ts.map +1 -1
  88. package/dist/types/resolvers/RefreshViewResolver.d.ts +3 -1
  89. package/dist/types/resolvers/RefreshViewResolver.d.ts.map +1 -1
  90. package/dist/types/schema/ConditionTypeProvider.d.ts.map +1 -1
  91. package/dist/types/schema/RefreshViewMutationProvider.d.ts.map +1 -1
  92. package/dist/types/tsconfig.tsbuildinfo +1 -1
  93. package/graphql.codegen.yml +1 -1
  94. package/package.json +10 -10
  95. package/src/ExecutionContainer.ts +9 -5
  96. package/src/index.ts +2 -1
  97. package/src/mapper/Result.ts +2 -2
  98. package/src/mapper/select/ConditionBuilder.ts +11 -5
  99. package/src/mapper/select/optimizer/WhereOptimizer.ts +10 -1
  100. package/src/mapper/update/Updater.ts +16 -5
  101. package/src/resolvers/RefreshViewResolver.ts +3 -3
  102. package/src/schema/ConditionTypeProvider.ts +3 -0
  103. package/src/schema/RefreshViewMutationProvider.ts +9 -2
  104. package/tests/cases/integration/graphQlRequests/insert/subOperationFail.test.ts +105 -0
  105. package/tests/cases/integration/graphQlRequests/update/additionalFilter.test.ts +51 -2
  106. package/tests/cases/integration/graphQlSchema/schema-column-types.gql +1 -0
  107. package/tests/src/test.ts +1 -0
@@ -61,7 +61,6 @@ const EventManager = require("./src/mapper/EventManager.cjs");
61
61
  require("node:crypto");
62
62
  const Path = require("./src/mapper/select/Path.cjs");
63
63
  require("@contember/logger");
64
- const WhereBuilder = require("./src/mapper/select/WhereBuilder.cjs");
65
64
  const Mapper = require("./src/mapper/Mapper.cjs");
66
65
  const MapperFactory = require("./src/mapper/MapperFactory.cjs");
67
66
  exports.Authorizator = Authorizator.Authorizator;
@@ -137,7 +136,6 @@ exports.BeforeUpdateEvent = EventManager.BeforeUpdateEvent;
137
136
  exports.EventManager = EventManager.EventManager;
138
137
  exports.Path = Path.Path;
139
138
  exports.PathFactory = Path.PathFactory;
140
- exports.WhereBuilder = WhereBuilder.WhereBuilder;
141
139
  exports.Mapper = Mapper.Mapper;
142
140
  exports.MapperFactory = MapperFactory.MapperFactory;
143
141
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -59,7 +59,6 @@ import { AfterCommitEvent, AfterInsertEvent, AfterJunctionUpdateEvent, AfterUpda
59
59
  import "node:crypto";
60
60
  import { Path, PathFactory } from "./src/mapper/select/Path.js";
61
61
  import "@contember/logger";
62
- import { WhereBuilder } from "./src/mapper/select/WhereBuilder.js";
63
62
  import { Mapper } from "./src/mapper/Mapper.js";
64
63
  import { MapperFactory } from "./src/mapper/MapperFactory.js";
65
64
  export {
@@ -128,7 +127,6 @@ export {
128
127
  ValidationQueriesProvider,
129
128
  ValidationResolver,
130
129
  VariableInjector,
131
- WhereBuilder,
132
130
  WhereTypeProvider,
133
131
  aliasAwareResolver,
134
132
  createAclVariables,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -51,16 +51,17 @@ var __defProp = Object.defineProperty;
51
51
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
52
52
  var __publicField = (obj, key, value) => __defNormalProp(obj, key + "", value);
53
53
  class ExecutionContainerFactory {
54
- constructor(providers) {
54
+ constructor(providers, whereOptimizerOptions) {
55
55
  this.providers = providers;
56
+ this.whereOptimizerOptions = whereOptimizerOptions;
56
57
  __publicField(this, "hooks", []);
57
58
  }
58
59
  createBuilder(args) {
59
60
  const builder = this.createBuilderInternal(args);
60
61
  return this.hooks.reduce((acc, cb) => cb(acc), builder);
61
62
  }
62
- createBuilderInternal({ permissions, identityVariables, identityId, db, schema, schemaMeta, systemSchema, stage, project, schemaDatabaseMetadata }) {
63
- return new dic.Builder({}).addService("systemSchema", () => systemSchema).addService("db", () => db).addService("project", () => project).addService("stage", () => stage).addService("schema", () => schema).addService("schemaMeta", () => schemaMeta).addService("schemaDatabaseMetadata", () => schemaDatabaseMetadata).addService("providers", () => this.providers).addService("variableInjector", ({ schema: schema2 }) => new VariableInjector.VariableInjector(schema2.model, identityVariables)).addService("predicateFactory", ({ variableInjector, schema: schema2 }) => new PredicateFactory.PredicateFactory(permissions, schema2.model, variableInjector)).addService("predicatesInjector", ({ predicateFactory, schema: schema2 }) => new PredicatesInjector.PredicatesInjector(schema2.model, predicateFactory)).addService("joinBuilder", ({ schema: schema2 }) => new JoinBuilder.JoinBuilder(schema2.model)).addService("conditionBuilder", () => new ConditionBuilder.ConditionBuilder()).addService("pathFactory", () => new Path.PathFactory()).addService("whereOptimized", ({ schema: schema2 }) => new WhereOptimizer.WhereOptimizer(schema2.model, new ConditionOptimizer.ConditionOptimizer())).addService("whereBuilder", ({ joinBuilder, conditionBuilder, pathFactory, whereOptimized, schema: schema2 }) => new WhereBuilder.WhereBuilder(
63
+ createBuilderInternal({ permissions, identityVariables, identityId, db, schema, schemaMeta, systemSchema, stage, project, schemaDatabaseMetadata, userInfo }) {
64
+ return new dic.Builder({}).addService("systemSchema", () => systemSchema).addService("db", () => db).addService("project", () => project).addService("stage", () => stage).addService("schema", () => schema).addService("schemaMeta", () => schemaMeta).addService("schemaDatabaseMetadata", () => schemaDatabaseMetadata).addService("userInfo", () => userInfo).addService("providers", () => this.providers).addService("variableInjector", ({ schema: schema2 }) => new VariableInjector.VariableInjector(schema2.model, identityVariables)).addService("predicateFactory", ({ variableInjector, schema: schema2 }) => new PredicateFactory.PredicateFactory(permissions, schema2.model, variableInjector)).addService("predicatesInjector", ({ predicateFactory, schema: schema2 }) => new PredicatesInjector.PredicatesInjector(schema2.model, predicateFactory)).addService("joinBuilder", ({ schema: schema2 }) => new JoinBuilder.JoinBuilder(schema2.model)).addService("conditionBuilder", () => new ConditionBuilder.ConditionBuilder()).addService("pathFactory", () => new Path.PathFactory()).addService("whereOptimized", ({ schema: schema2 }) => new WhereOptimizer.WhereOptimizer(schema2.model, new ConditionOptimizer.ConditionOptimizer(), this.whereOptimizerOptions)).addService("whereBuilder", ({ joinBuilder, conditionBuilder, pathFactory, whereOptimized, schema: schema2 }) => new WhereBuilder.WhereBuilder(
64
65
  schema2.model,
65
66
  joinBuilder,
66
67
  conditionBuilder,
@@ -86,7 +87,7 @@ class ExecutionContainerFactory {
86
87
  predicateFactory
87
88
  );
88
89
  }
89
- }()).addService("insertBuilderFactory", ({ whereBuilder, pathFactory, schema: schema2, predicateFactory }) => new InsertBuilderFactory.InsertBuilderFactory(schema2.model, whereBuilder, pathFactory, predicateFactory)).addService("updateBuilderFactory", ({ whereBuilder, pathFactory, schema: schema2, predicateFactory }) => new UpdateBuilderFactory.UpdateBuilderFactory(schema2.model, whereBuilder, pathFactory, predicateFactory)).addService("connectJunctionHandler", () => new JunctionTableManager.JunctionConnectHandler()).addService("disconnectJunctionHandler", ({}) => new JunctionTableManager.JunctionDisconnectHandler()).addService("junctionTableManager", ({ predicateFactory, whereBuilder, connectJunctionHandler, disconnectJunctionHandler, pathFactory, schema: schema2 }) => new JunctionTableManager.JunctionTableManager(schema2.model, predicateFactory, whereBuilder, connectJunctionHandler, disconnectJunctionHandler, pathFactory)).addService("deleteExecutor", ({ predicateFactory, updateBuilderFactory, whereBuilder, pathFactory, schema: schema2 }) => new DeleteExecutor.DeleteExecutor(schema2.model, predicateFactory, whereBuilder, updateBuilderFactory, pathFactory)).addService("updater", ({ predicateFactory, updateBuilderFactory, schema: schema2, schemaDatabaseMetadata: schemaDatabaseMetadata2 }) => new Updater.Updater(schema2.model, schemaDatabaseMetadata2, predicateFactory, updateBuilderFactory)).addService("inserter", ({ insertBuilderFactory, providers, schema: schema2, schemaDatabaseMetadata: schemaDatabaseMetadata2 }) => new Inserter.Inserter(schema2.model, schemaDatabaseMetadata2, insertBuilderFactory, providers, { uuidVersion: schema2.settings.content?.uuidVersion })).addService("mapperFactory", ({ predicatesInjector, selectBuilderFactory, uniqueWhereExpander, whereBuilder, junctionTableManager, deleteExecutor, updater, inserter, pathFactory, providers, schema: schema2, schemaDatabaseMetadata: schemaDatabaseMetadata2 }) => {
90
+ }()).addService("insertBuilderFactory", ({ whereBuilder, pathFactory, schema: schema2, predicateFactory }) => new InsertBuilderFactory.InsertBuilderFactory(schema2.model, whereBuilder, pathFactory, predicateFactory)).addService("updateBuilderFactory", ({ whereBuilder, pathFactory, schema: schema2, predicateFactory }) => new UpdateBuilderFactory.UpdateBuilderFactory(schema2.model, whereBuilder, pathFactory, predicateFactory)).addService("connectJunctionHandler", () => new JunctionTableManager.JunctionConnectHandler()).addService("disconnectJunctionHandler", ({}) => new JunctionTableManager.JunctionDisconnectHandler()).addService("junctionTableManager", ({ predicateFactory, whereBuilder, connectJunctionHandler, disconnectJunctionHandler, pathFactory, schema: schema2 }) => new JunctionTableManager.JunctionTableManager(schema2.model, predicateFactory, whereBuilder, connectJunctionHandler, disconnectJunctionHandler, pathFactory)).addService("deleteExecutor", ({ predicateFactory, updateBuilderFactory, whereBuilder, pathFactory, schema: schema2 }) => new DeleteExecutor.DeleteExecutor(schema2.model, predicateFactory, whereBuilder, updateBuilderFactory, pathFactory)).addService("updater", ({ updateBuilderFactory, schema: schema2 }) => new Updater.Updater(schema2.model, updateBuilderFactory)).addService("inserter", ({ insertBuilderFactory, providers, schema: schema2, schemaDatabaseMetadata: schemaDatabaseMetadata2 }) => new Inserter.Inserter(schema2.model, schemaDatabaseMetadata2, insertBuilderFactory, providers, { uuidVersion: schema2.settings.content?.uuidVersion })).addService("mapperFactory", ({ predicatesInjector, selectBuilderFactory, uniqueWhereExpander, whereBuilder, junctionTableManager, deleteExecutor, updater, inserter, pathFactory, providers, schema: schema2, schemaDatabaseMetadata: schemaDatabaseMetadata2 }) => {
90
91
  return new MapperFactory.MapperFactory(
91
92
  db,
92
93
  identityId,
@@ -1 +1 @@
1
- {"version":3,"file":"ExecutionContainer.cjs","sources":["../../../../packages/engine-content-api/src/ExecutionContainer.ts"],"sourcesContent":["import { PredicateFactory, PredicatesInjector, VariableInjector } from './acl'\nimport {\n\tConditionBuilder,\n\tFieldsVisitorFactory,\n\tJoinBuilder,\n\tMetaHandler,\n\tOrderByBuilder,\n\tRelationFetcher,\n\tWhereBuilder,\n} from './mapper/select'\nimport { UniqueWhereExpander } from './inputProcessing'\nimport { HasManyToHasOneReducer, HasManyToHasOneReducerExecutionHandler } from './extensions'\nimport {\n\tDeleteExecutor,\n\tInsertBuilderFactory,\n\tInserter,\n\tJunctionConnectHandler,\n\tJunctionDisconnectHandler,\n\tJunctionTableManager,\n\tMapperFactory,\n\tPathFactory,\n\tSelectBuilder,\n\tSelectBuilderFactory,\n\tSelectHydrator,\n\tUpdateBuilderFactory,\n\tUpdater,\n} from './mapper'\nimport { Builder } from '@contember/dic'\nimport { Acl, Model, Schema } from '@contember/schema'\nimport { Client, DatabaseMetadata, SelectBuilder as DbSelectBuilder } from '@contember/database'\nimport { ParsedMembership, Providers } from '@contember/schema-utils'\nimport { PaginatedHasManyExecutionHandler } from './extensions/paginatedHasMany/PaginatedHasManyExecutionHandler'\nimport { PaginatedHasManyFieldProvider } from './extensions/paginatedHasMany/PaginatedHasManyFieldProvider'\nimport { WhereOptimizer } from './mapper/select/optimizer/WhereOptimizer'\nimport { ConditionOptimizer } from './mapper/select/optimizer/ConditionOptimizer'\nimport { GraphQlQueryAstFactory, MutationResolver, ReadResolver, ValidationResolver } from './resolvers'\nimport {\n\tColumnValueResolver,\n\tDependencyCollector,\n\tEntityRulesResolver, InputPreValidator,\n\tQueryAstFactory,\n\tValidationDataSelector,\n} from './input-validation'\nimport { RefreshViewResolver } from './resolvers/RefreshViewResolver'\n\nexport type ExecutionContainerArgs = {\n\tschema: Schema\n\tschemaMeta: { id?: number }\n\tschemaDatabaseMetadata: DatabaseMetadata\n\tdb: Client\n\tidentityId: string\n\tidentityVariables: Acl.VariablesMap\n\tpermissions: Acl.Permissions\n\tsystemSchema: string\n\tproject: { slug: string }\n\tstage: { id: string; slug: string }\n}\n\nexport interface ExecutionContainer {\n\treadResolver: ReadResolver\n\tmutationResolver: MutationResolver\n\tvalidationResolver: ValidationResolver\n\trefreshViewResolver: RefreshViewResolver\n}\n\nexport type ExecutionContainerBuilder = ReturnType<ExecutionContainerFactory['createBuilderInternal']>\nexport type ExecutionContainerHook = (builder: ExecutionContainerBuilder) => ExecutionContainerBuilder\n\nexport class ExecutionContainerFactory {\n\tpublic readonly hooks: ExecutionContainerHook[] = []\n\n\tconstructor(\n\t\tprivate readonly providers: Providers,\n\t) {\n\t}\n\n\tcreateBuilder(args: ExecutionContainerArgs): ExecutionContainerBuilder {\n\t\tconst builder = this.createBuilderInternal(args)\n\t\treturn this.hooks.reduce((acc, cb) => cb(acc), builder)\n\t}\n\n\tcreateBuilderInternal({ permissions, identityVariables, identityId, db, schema, schemaMeta, systemSchema, stage, project, schemaDatabaseMetadata }: ExecutionContainerArgs) {\n\t\treturn new Builder({})\n\t\t\t.addService('systemSchema', () =>\n\t\t\t\tsystemSchema)\n\t\t\t.addService('db', () =>\n\t\t\t\tdb)\n\t\t\t.addService('project', () =>\n\t\t\t\tproject)\n\t\t\t.addService('stage', () =>\n\t\t\t\tstage)\n\t\t\t.addService('schema', () =>\n\t\t\t\tschema)\n\t\t\t.addService('schemaMeta', () =>\n\t\t\t\tschemaMeta)\n\t\t\t.addService('schemaDatabaseMetadata', () =>\n\t\t\t\tschemaDatabaseMetadata)\n\t\t\t.addService('providers', () =>\n\t\t\t\tthis.providers)\n\t\t\t.addService('variableInjector', ({ schema }) =>\n\t\t\t\tnew VariableInjector(schema.model, identityVariables))\n\t\t\t.addService('predicateFactory', ({ variableInjector, schema }) =>\n\t\t\t\tnew PredicateFactory(permissions, schema.model, variableInjector))\n\t\t\t.addService('predicatesInjector', ({ predicateFactory, schema }) =>\n\t\t\t\tnew PredicatesInjector(schema.model, predicateFactory))\n\t\t\t.addService('joinBuilder', ({ schema }) =>\n\t\t\t\tnew JoinBuilder(schema.model))\n\t\t\t.addService('conditionBuilder', () =>\n\t\t\t\tnew ConditionBuilder())\n\t\t\t.addService('pathFactory', () =>\n\t\t\t\tnew PathFactory())\n\t\t\t.addService('whereOptimized', ({ schema }) =>\n\t\t\t\tnew WhereOptimizer(schema.model, new ConditionOptimizer()))\n\t\t\t.addService('whereBuilder', ({ joinBuilder, conditionBuilder, pathFactory, whereOptimized, schema }) =>\n\t\t\t\tnew WhereBuilder(\n\t\t\t\t\tschema.model,\n\t\t\t\t\tjoinBuilder,\n\t\t\t\t\tconditionBuilder,\n\t\t\t\t\tpathFactory,\n\t\t\t\t\twhereOptimized,\n\t\t\t\t\t(schema.settings.content?.useExistsInHasManyFilter ?? schema.settings.useExistsInHasManyFilter) === true,\n\t\t\t\t))\n\t\t\t.addService('orderByBuilder', ({ joinBuilder, schema }) =>\n\t\t\t\tnew OrderByBuilder(schema.model, joinBuilder))\n\t\t\t.addService('relationFetcher', ({ whereBuilder, orderByBuilder, predicatesInjector, pathFactory }) =>\n\t\t\t\tnew RelationFetcher(whereBuilder, orderByBuilder, predicatesInjector, pathFactory))\n\t\t\t.addService('fieldsVisitorFactory', ({ relationFetcher, predicateFactory, schema, providers }) =>\n\t\t\t\tnew FieldsVisitorFactory(schema.model, relationFetcher, predicateFactory, schema.settings.content ?? {}, providers))\n\t\t\t.addService('metaHandler', ({ whereBuilder, predicateFactory }) =>\n\t\t\t\tnew MetaHandler(whereBuilder, predicateFactory))\n\t\t\t.addService('uniqueWhereExpander', ({ schema }) =>\n\t\t\t\tnew UniqueWhereExpander(schema.model))\n\t\t\t.addService('hasManyToHasOneReducer', ({ uniqueWhereExpander, schema }) =>\n\t\t\t\tnew HasManyToHasOneReducerExecutionHandler(schema.model, uniqueWhereExpander))\n\t\t\t.addService('paginatedHasManyExecutionHandler', ({ relationFetcher, schema }) =>\n\t\t\t\tnew PaginatedHasManyExecutionHandler(schema.model, relationFetcher))\n\t\t\t.addService('selectHandlers', ({ hasManyToHasOneReducer, paginatedHasManyExecutionHandler }) => ({\n\t\t\t\t[HasManyToHasOneReducer.extensionName]: hasManyToHasOneReducer,\n\t\t\t\t[PaginatedHasManyFieldProvider.extensionName]: paginatedHasManyExecutionHandler,\n\t\t\t}))\n\t\t\t.addService('selectBuilderFactory', ({ whereBuilder, orderByBuilder, fieldsVisitorFactory, metaHandler, selectHandlers, pathFactory, predicateFactory, schema }) =>\n\t\t\t\tnew (class implements SelectBuilderFactory {\n\t\t\t\t\tcreate(qb: DbSelectBuilder, hydrator: SelectHydrator, relationPath: Model.AnyRelationContext[]): SelectBuilder {\n\t\t\t\t\t\treturn new SelectBuilder(\n\t\t\t\t\t\t\tschema.model,\n\t\t\t\t\t\t\twhereBuilder,\n\t\t\t\t\t\t\torderByBuilder,\n\t\t\t\t\t\t\tmetaHandler,\n\t\t\t\t\t\t\tqb,\n\t\t\t\t\t\t\thydrator,\n\t\t\t\t\t\t\tfieldsVisitorFactory,\n\t\t\t\t\t\t\tselectHandlers,\n\t\t\t\t\t\t\tpathFactory,\n\t\t\t\t\t\t\trelationPath,\n\t\t\t\t\t\t\tpredicateFactory,\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t})())\n\t\t\t.addService('insertBuilderFactory', ({ whereBuilder, pathFactory, schema, predicateFactory }) =>\n\t\t\t\tnew InsertBuilderFactory(schema.model, whereBuilder, pathFactory, predicateFactory))\n\t\t\t.addService('updateBuilderFactory', ({ whereBuilder, pathFactory, schema, predicateFactory }) =>\n\t\t\t\tnew UpdateBuilderFactory(schema.model, whereBuilder, pathFactory, predicateFactory))\n\t\t\t.addService('connectJunctionHandler', () =>\n\t\t\t\tnew JunctionConnectHandler())\n\t\t\t.addService('disconnectJunctionHandler', ({}) =>\n\t\t\t\tnew JunctionDisconnectHandler())\n\t\t\t.addService('junctionTableManager', ({ predicateFactory, whereBuilder, connectJunctionHandler, disconnectJunctionHandler, pathFactory, schema }) =>\n\t\t\t\tnew JunctionTableManager(schema.model, predicateFactory, whereBuilder, connectJunctionHandler, disconnectJunctionHandler, pathFactory))\n\t\t\t.addService('deleteExecutor', ({ predicateFactory, updateBuilderFactory, whereBuilder, pathFactory, schema }) =>\n\t\t\t\tnew DeleteExecutor(schema.model, predicateFactory, whereBuilder, updateBuilderFactory, pathFactory))\n\t\t\t.addService('updater', ({ predicateFactory, updateBuilderFactory, schema, schemaDatabaseMetadata }) =>\n\t\t\t\tnew Updater(schema.model, schemaDatabaseMetadata, predicateFactory, updateBuilderFactory))\n\t\t\t.addService('inserter', ({ insertBuilderFactory, providers, schema, schemaDatabaseMetadata }) =>\n\t\t\t\tnew Inserter(schema.model, schemaDatabaseMetadata, insertBuilderFactory, providers, { uuidVersion: schema.settings.content?.uuidVersion }))\n\t\t\t.addService('mapperFactory', ({ predicatesInjector, selectBuilderFactory, uniqueWhereExpander, whereBuilder, junctionTableManager, deleteExecutor, updater, inserter, pathFactory, providers, schema, schemaDatabaseMetadata }) => {\n\t\t\t\treturn new MapperFactory(\n\t\t\t\t\tdb,\n\t\t\t\t\tidentityId,\n\t\t\t\t\tschema.model,\n\t\t\t\t\tschemaDatabaseMetadata,\n\t\t\t\t\tpredicatesInjector,\n\t\t\t\t\tselectBuilderFactory,\n\t\t\t\t\tuniqueWhereExpander,\n\t\t\t\t\twhereBuilder,\n\t\t\t\t\tjunctionTableManager,\n\t\t\t\t\tdeleteExecutor,\n\t\t\t\t\tupdater,\n\t\t\t\t\tinserter,\n\t\t\t\t\tpathFactory,\n\t\t\t\t\tproviders,\n\t\t\t\t)\n\t\t\t})\n\n\t\t\t.addService('queryAstFactory', () =>\n\t\t\t\tnew GraphQlQueryAstFactory())\n\t\t\t.addService('readResolver', ({ mapperFactory, queryAstFactory }) =>\n\t\t\t\tnew ReadResolver(mapperFactory, queryAstFactory))\n\t\t\t.addService('validationDependencyCollector', () =>\n\t\t\t\tnew DependencyCollector())\n\t\t\t.addService('validationQueryAstFactory', ({ schema }) =>\n\t\t\t\tnew QueryAstFactory(schema.model))\n\t\t\t.addService('dataSelector', ({ validationQueryAstFactory, schema }) =>\n\t\t\t\tnew ValidationDataSelector(schema.model, validationQueryAstFactory))\n\t\t\t.addService('columnValueResolver', ({ providers }) =>\n\t\t\t\tnew ColumnValueResolver(providers))\n\t\t\t.addService('entityRulesResolver', ({ schema }) =>\n\t\t\t\tnew EntityRulesResolver(schema.validation, schema.model))\n\t\t\t.addService('inputPreValidator', ({ entityRulesResolver, columnValueResolver, dataSelector, schema }) =>\n\t\t\t\tnew InputPreValidator(schema.model, entityRulesResolver, columnValueResolver, dataSelector))\n\t\t\t.addService('mutationResolver', ({ mapperFactory, inputPreValidator, queryAstFactory, schema, schemaDatabaseMetadata }) =>\n\t\t\t\tnew MutationResolver(schema.model, mapperFactory, inputPreValidator, queryAstFactory, schemaDatabaseMetadata))\n\t\t\t.addService('validationResolver', ({ inputPreValidator, mapperFactory }) =>\n\t\t\t\tnew ValidationResolver(mapperFactory, inputPreValidator))\n\t\t\t.addService('refreshViewResolver', ({ schema, mapperFactory }) =>\n\t\t\t\tnew RefreshViewResolver(schema, mapperFactory))\n\t}\n\n\tpublic create(args: ExecutionContainerArgs): ExecutionContainer {\n\t\treturn this.createBuilder(args).build().pick('validationResolver', 'readResolver', 'mutationResolver', 'refreshViewResolver')\n\t}\n}\n\n"],"names":["Builder","schema","VariableInjector","PredicateFactory","PredicatesInjector","JoinBuilder","ConditionBuilder","PathFactory","WhereOptimizer","ConditionOptimizer","WhereBuilder","OrderByBuilder","RelationFetcher","FieldsVisitorFactory","MetaHandler","UniqueWhereExpander","HasManyToHasOneReducerExecutionHandler","PaginatedHasManyExecutionHandler","HasManyToHasOneReducer","PaginatedHasManyFieldProvider","SelectBuilder","InsertBuilderFactory","UpdateBuilderFactory","JunctionConnectHandler","JunctionDisconnectHandler","JunctionTableManager","DeleteExecutor","schemaDatabaseMetadata","Updater","Inserter","MapperFactory","GraphQlQueryAstFactory","ReadResolver","DependencyCollector","QueryAstFactory","ValidationDataSelector","ColumnValueResolver","EntityRulesResolver","InputPreValidator","MutationResolver","ValidationResolver","RefreshViewResolver"],"mappings":"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"}
1
+ {"version":3,"file":"ExecutionContainer.cjs","sources":["../../../../packages/engine-content-api/src/ExecutionContainer.ts"],"sourcesContent":["import { PredicateFactory, PredicatesInjector, VariableInjector } from './acl'\nimport {\n\tConditionBuilder,\n\tFieldsVisitorFactory,\n\tJoinBuilder,\n\tMetaHandler,\n\tOrderByBuilder,\n\tRelationFetcher,\n\tWhereBuilder,\n} from './mapper/select'\nimport { UniqueWhereExpander } from './inputProcessing'\nimport { HasManyToHasOneReducer, HasManyToHasOneReducerExecutionHandler } from './extensions'\nimport {\n\tDeleteExecutor,\n\tInsertBuilderFactory,\n\tInserter,\n\tJunctionConnectHandler,\n\tJunctionDisconnectHandler,\n\tJunctionTableManager,\n\tMapperFactory,\n\tPathFactory,\n\tSelectBuilder,\n\tSelectBuilderFactory,\n\tSelectHydrator,\n\tUpdateBuilderFactory,\n\tUpdater,\n} from './mapper'\nimport { Builder } from '@contember/dic'\nimport { Acl, Model, Schema } from '@contember/schema'\nimport { Client, DatabaseMetadata, SelectBuilder as DbSelectBuilder } from '@contember/database'\nimport { ParsedMembership, Providers } from '@contember/schema-utils'\nimport { PaginatedHasManyExecutionHandler } from './extensions/paginatedHasMany/PaginatedHasManyExecutionHandler'\nimport { PaginatedHasManyFieldProvider } from './extensions/paginatedHasMany/PaginatedHasManyFieldProvider'\nimport { WhereOptimizer, WhereOptimizerOptions } from './mapper/select/optimizer/WhereOptimizer'\nimport { ConditionOptimizer } from './mapper/select/optimizer/ConditionOptimizer'\nimport { GraphQlQueryAstFactory, MutationResolver, ReadResolver, ValidationResolver } from './resolvers'\nimport {\n\tColumnValueResolver,\n\tDependencyCollector,\n\tEntityRulesResolver, InputPreValidator,\n\tQueryAstFactory,\n\tValidationDataSelector,\n} from './input-validation'\nimport { RefreshViewResolver } from './resolvers/RefreshViewResolver'\n\nexport type ExecutionContainerArgs = {\n\tschema: Schema\n\tschemaMeta: { id?: number }\n\tschemaDatabaseMetadata: DatabaseMetadata\n\tdb: Client\n\tidentityId: string\n\tidentityVariables: Acl.VariablesMap\n\tpermissions: Acl.Permissions\n\tsystemSchema: string\n\tproject: { slug: string }\n\tstage: { id: string; slug: string }\n\tuserInfo: { ipAddress: string | null; userAgent: string | null }\n}\n\nexport interface ExecutionContainer {\n\treadResolver: ReadResolver\n\tmutationResolver: MutationResolver\n\tvalidationResolver: ValidationResolver\n\trefreshViewResolver: RefreshViewResolver\n}\n\nexport type ExecutionContainerBuilder = ReturnType<ExecutionContainerFactory['createBuilderInternal']>\nexport type ExecutionContainerHook = (builder: ExecutionContainerBuilder) => ExecutionContainerBuilder\n\nexport class ExecutionContainerFactory {\n\tpublic readonly hooks: ExecutionContainerHook[] = []\n\n\tconstructor(\n\t\tprivate readonly providers: Providers,\n\t\tprivate readonly whereOptimizerOptions?: WhereOptimizerOptions,\n\t) {\n\t}\n\n\tcreateBuilder(args: ExecutionContainerArgs): ExecutionContainerBuilder {\n\t\tconst builder = this.createBuilderInternal(args)\n\t\treturn this.hooks.reduce((acc, cb) => cb(acc), builder)\n\t}\n\n\tcreateBuilderInternal({ permissions, identityVariables, identityId, db, schema, schemaMeta, systemSchema, stage, project, schemaDatabaseMetadata, userInfo }: ExecutionContainerArgs) {\n\t\treturn new Builder({})\n\t\t\t.addService('systemSchema', () =>\n\t\t\t\tsystemSchema)\n\t\t\t.addService('db', () =>\n\t\t\t\tdb)\n\t\t\t.addService('project', () =>\n\t\t\t\tproject)\n\t\t\t.addService('stage', () =>\n\t\t\t\tstage)\n\t\t\t.addService('schema', () =>\n\t\t\t\tschema)\n\t\t\t.addService('schemaMeta', () =>\n\t\t\t\tschemaMeta)\n\t\t\t.addService('schemaDatabaseMetadata', () =>\n\t\t\t\tschemaDatabaseMetadata)\n\t\t\t.addService('userInfo', () =>\n\t\t\t\tuserInfo)\n\t\t\t.addService('providers', () =>\n\t\t\t\tthis.providers)\n\t\t\t.addService('variableInjector', ({ schema }) =>\n\t\t\t\tnew VariableInjector(schema.model, identityVariables))\n\t\t\t.addService('predicateFactory', ({ variableInjector, schema }) =>\n\t\t\t\tnew PredicateFactory(permissions, schema.model, variableInjector))\n\t\t\t.addService('predicatesInjector', ({ predicateFactory, schema }) =>\n\t\t\t\tnew PredicatesInjector(schema.model, predicateFactory))\n\t\t\t.addService('joinBuilder', ({ schema }) =>\n\t\t\t\tnew JoinBuilder(schema.model))\n\t\t\t.addService('conditionBuilder', () =>\n\t\t\t\tnew ConditionBuilder())\n\t\t\t.addService('pathFactory', () =>\n\t\t\t\tnew PathFactory())\n\t\t\t.addService('whereOptimized', ({ schema }) =>\n\t\t\t\tnew WhereOptimizer(schema.model, new ConditionOptimizer(), this.whereOptimizerOptions))\n\t\t\t.addService('whereBuilder', ({ joinBuilder, conditionBuilder, pathFactory, whereOptimized, schema }) =>\n\t\t\t\tnew WhereBuilder(\n\t\t\t\t\tschema.model,\n\t\t\t\t\tjoinBuilder,\n\t\t\t\t\tconditionBuilder,\n\t\t\t\t\tpathFactory,\n\t\t\t\t\twhereOptimized,\n\t\t\t\t\t(schema.settings.content?.useExistsInHasManyFilter ?? schema.settings.useExistsInHasManyFilter) === true,\n\t\t\t\t))\n\t\t\t.addService('orderByBuilder', ({ joinBuilder, schema }) =>\n\t\t\t\tnew OrderByBuilder(schema.model, joinBuilder))\n\t\t\t.addService('relationFetcher', ({ whereBuilder, orderByBuilder, predicatesInjector, pathFactory }) =>\n\t\t\t\tnew RelationFetcher(whereBuilder, orderByBuilder, predicatesInjector, pathFactory))\n\t\t\t.addService('fieldsVisitorFactory', ({ relationFetcher, predicateFactory, schema, providers }) =>\n\t\t\t\tnew FieldsVisitorFactory(schema.model, relationFetcher, predicateFactory, schema.settings.content ?? {}, providers))\n\t\t\t.addService('metaHandler', ({ whereBuilder, predicateFactory }) =>\n\t\t\t\tnew MetaHandler(whereBuilder, predicateFactory))\n\t\t\t.addService('uniqueWhereExpander', ({ schema }) =>\n\t\t\t\tnew UniqueWhereExpander(schema.model))\n\t\t\t.addService('hasManyToHasOneReducer', ({ uniqueWhereExpander, schema }) =>\n\t\t\t\tnew HasManyToHasOneReducerExecutionHandler(schema.model, uniqueWhereExpander))\n\t\t\t.addService('paginatedHasManyExecutionHandler', ({ relationFetcher, schema }) =>\n\t\t\t\tnew PaginatedHasManyExecutionHandler(schema.model, relationFetcher))\n\t\t\t.addService('selectHandlers', ({ hasManyToHasOneReducer, paginatedHasManyExecutionHandler }) => ({\n\t\t\t\t[HasManyToHasOneReducer.extensionName]: hasManyToHasOneReducer,\n\t\t\t\t[PaginatedHasManyFieldProvider.extensionName]: paginatedHasManyExecutionHandler,\n\t\t\t}))\n\t\t\t.addService('selectBuilderFactory', ({ whereBuilder, orderByBuilder, fieldsVisitorFactory, metaHandler, selectHandlers, pathFactory, predicateFactory, schema }) =>\n\t\t\t\tnew (class implements SelectBuilderFactory {\n\t\t\t\t\tcreate(qb: DbSelectBuilder, hydrator: SelectHydrator, relationPath: Model.AnyRelationContext[]): SelectBuilder {\n\t\t\t\t\t\treturn new SelectBuilder(\n\t\t\t\t\t\t\tschema.model,\n\t\t\t\t\t\t\twhereBuilder,\n\t\t\t\t\t\t\torderByBuilder,\n\t\t\t\t\t\t\tmetaHandler,\n\t\t\t\t\t\t\tqb,\n\t\t\t\t\t\t\thydrator,\n\t\t\t\t\t\t\tfieldsVisitorFactory,\n\t\t\t\t\t\t\tselectHandlers,\n\t\t\t\t\t\t\tpathFactory,\n\t\t\t\t\t\t\trelationPath,\n\t\t\t\t\t\t\tpredicateFactory,\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t})())\n\t\t\t.addService('insertBuilderFactory', ({ whereBuilder, pathFactory, schema, predicateFactory }) =>\n\t\t\t\tnew InsertBuilderFactory(schema.model, whereBuilder, pathFactory, predicateFactory))\n\t\t\t.addService('updateBuilderFactory', ({ whereBuilder, pathFactory, schema, predicateFactory }) =>\n\t\t\t\tnew UpdateBuilderFactory(schema.model, whereBuilder, pathFactory, predicateFactory))\n\t\t\t.addService('connectJunctionHandler', () =>\n\t\t\t\tnew JunctionConnectHandler())\n\t\t\t.addService('disconnectJunctionHandler', ({}) =>\n\t\t\t\tnew JunctionDisconnectHandler())\n\t\t\t.addService('junctionTableManager', ({ predicateFactory, whereBuilder, connectJunctionHandler, disconnectJunctionHandler, pathFactory, schema }) =>\n\t\t\t\tnew JunctionTableManager(schema.model, predicateFactory, whereBuilder, connectJunctionHandler, disconnectJunctionHandler, pathFactory))\n\t\t\t.addService('deleteExecutor', ({ predicateFactory, updateBuilderFactory, whereBuilder, pathFactory, schema }) =>\n\t\t\t\tnew DeleteExecutor(schema.model, predicateFactory, whereBuilder, updateBuilderFactory, pathFactory))\n\t\t\t.addService('updater', ({ updateBuilderFactory, schema }) =>\n\t\t\t\tnew Updater(schema.model, updateBuilderFactory))\n\t\t\t.addService('inserter', ({ insertBuilderFactory, providers, schema, schemaDatabaseMetadata }) =>\n\t\t\t\tnew Inserter(schema.model, schemaDatabaseMetadata, insertBuilderFactory, providers, { uuidVersion: schema.settings.content?.uuidVersion }))\n\t\t\t.addService('mapperFactory', ({ predicatesInjector, selectBuilderFactory, uniqueWhereExpander, whereBuilder, junctionTableManager, deleteExecutor, updater, inserter, pathFactory, providers, schema, schemaDatabaseMetadata }) => {\n\t\t\t\treturn new MapperFactory(\n\t\t\t\t\tdb,\n\t\t\t\t\tidentityId,\n\t\t\t\t\tschema.model,\n\t\t\t\t\tschemaDatabaseMetadata,\n\t\t\t\t\tpredicatesInjector,\n\t\t\t\t\tselectBuilderFactory,\n\t\t\t\t\tuniqueWhereExpander,\n\t\t\t\t\twhereBuilder,\n\t\t\t\t\tjunctionTableManager,\n\t\t\t\t\tdeleteExecutor,\n\t\t\t\t\tupdater,\n\t\t\t\t\tinserter,\n\t\t\t\t\tpathFactory,\n\t\t\t\t\tproviders,\n\t\t\t\t)\n\t\t\t})\n\n\t\t\t.addService('queryAstFactory', () =>\n\t\t\t\tnew GraphQlQueryAstFactory())\n\t\t\t.addService('readResolver', ({ mapperFactory, queryAstFactory }) =>\n\t\t\t\tnew ReadResolver(mapperFactory, queryAstFactory))\n\t\t\t.addService('validationDependencyCollector', () =>\n\t\t\t\tnew DependencyCollector())\n\t\t\t.addService('validationQueryAstFactory', ({ schema }) =>\n\t\t\t\tnew QueryAstFactory(schema.model))\n\t\t\t.addService('dataSelector', ({ validationQueryAstFactory, schema }) =>\n\t\t\t\tnew ValidationDataSelector(schema.model, validationQueryAstFactory))\n\t\t\t.addService('columnValueResolver', ({ providers }) =>\n\t\t\t\tnew ColumnValueResolver(providers))\n\t\t\t.addService('entityRulesResolver', ({ schema }) =>\n\t\t\t\tnew EntityRulesResolver(schema.validation, schema.model))\n\t\t\t.addService('inputPreValidator', ({ entityRulesResolver, columnValueResolver, dataSelector, schema }) =>\n\t\t\t\tnew InputPreValidator(schema.model, entityRulesResolver, columnValueResolver, dataSelector))\n\t\t\t.addService('mutationResolver', ({ mapperFactory, inputPreValidator, queryAstFactory, schema, schemaDatabaseMetadata }) =>\n\t\t\t\tnew MutationResolver(schema.model, mapperFactory, inputPreValidator, queryAstFactory, schemaDatabaseMetadata))\n\t\t\t.addService('validationResolver', ({ inputPreValidator, mapperFactory }) =>\n\t\t\t\tnew ValidationResolver(mapperFactory, inputPreValidator))\n\t\t\t.addService('refreshViewResolver', ({ schema, mapperFactory }) =>\n\t\t\t\tnew RefreshViewResolver(schema, mapperFactory))\n\t}\n\n\tpublic create(args: ExecutionContainerArgs): ExecutionContainer {\n\t\treturn this.createBuilder(args).build().pick('validationResolver', 'readResolver', 'mutationResolver', 'refreshViewResolver')\n\t}\n}\n\n"],"names":["Builder","schema","VariableInjector","PredicateFactory","PredicatesInjector","JoinBuilder","ConditionBuilder","PathFactory","WhereOptimizer","ConditionOptimizer","WhereBuilder","OrderByBuilder","RelationFetcher","FieldsVisitorFactory","MetaHandler","UniqueWhereExpander","HasManyToHasOneReducerExecutionHandler","PaginatedHasManyExecutionHandler","HasManyToHasOneReducer","PaginatedHasManyFieldProvider","SelectBuilder","InsertBuilderFactory","UpdateBuilderFactory","JunctionConnectHandler","JunctionDisconnectHandler","JunctionTableManager","DeleteExecutor","Updater","schemaDatabaseMetadata","Inserter","MapperFactory","GraphQlQueryAstFactory","ReadResolver","DependencyCollector","QueryAstFactory","ValidationDataSelector","ColumnValueResolver","EntityRulesResolver","InputPreValidator","MutationResolver","ValidationResolver","RefreshViewResolver"],"mappings":"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"}
@@ -49,16 +49,17 @@ var __defProp = Object.defineProperty;
49
49
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
50
50
  var __publicField = (obj, key, value) => __defNormalProp(obj, key + "", value);
51
51
  class ExecutionContainerFactory {
52
- constructor(providers) {
52
+ constructor(providers, whereOptimizerOptions) {
53
53
  this.providers = providers;
54
+ this.whereOptimizerOptions = whereOptimizerOptions;
54
55
  __publicField(this, "hooks", []);
55
56
  }
56
57
  createBuilder(args) {
57
58
  const builder = this.createBuilderInternal(args);
58
59
  return this.hooks.reduce((acc, cb) => cb(acc), builder);
59
60
  }
60
- createBuilderInternal({ permissions, identityVariables, identityId, db, schema, schemaMeta, systemSchema, stage, project, schemaDatabaseMetadata }) {
61
- return new Builder({}).addService("systemSchema", () => systemSchema).addService("db", () => db).addService("project", () => project).addService("stage", () => stage).addService("schema", () => schema).addService("schemaMeta", () => schemaMeta).addService("schemaDatabaseMetadata", () => schemaDatabaseMetadata).addService("providers", () => this.providers).addService("variableInjector", ({ schema: schema2 }) => new VariableInjector(schema2.model, identityVariables)).addService("predicateFactory", ({ variableInjector, schema: schema2 }) => new PredicateFactory(permissions, schema2.model, variableInjector)).addService("predicatesInjector", ({ predicateFactory, schema: schema2 }) => new PredicatesInjector(schema2.model, predicateFactory)).addService("joinBuilder", ({ schema: schema2 }) => new JoinBuilder(schema2.model)).addService("conditionBuilder", () => new ConditionBuilder()).addService("pathFactory", () => new PathFactory()).addService("whereOptimized", ({ schema: schema2 }) => new WhereOptimizer(schema2.model, new ConditionOptimizer())).addService("whereBuilder", ({ joinBuilder, conditionBuilder, pathFactory, whereOptimized, schema: schema2 }) => new WhereBuilder(
61
+ createBuilderInternal({ permissions, identityVariables, identityId, db, schema, schemaMeta, systemSchema, stage, project, schemaDatabaseMetadata, userInfo }) {
62
+ return new Builder({}).addService("systemSchema", () => systemSchema).addService("db", () => db).addService("project", () => project).addService("stage", () => stage).addService("schema", () => schema).addService("schemaMeta", () => schemaMeta).addService("schemaDatabaseMetadata", () => schemaDatabaseMetadata).addService("userInfo", () => userInfo).addService("providers", () => this.providers).addService("variableInjector", ({ schema: schema2 }) => new VariableInjector(schema2.model, identityVariables)).addService("predicateFactory", ({ variableInjector, schema: schema2 }) => new PredicateFactory(permissions, schema2.model, variableInjector)).addService("predicatesInjector", ({ predicateFactory, schema: schema2 }) => new PredicatesInjector(schema2.model, predicateFactory)).addService("joinBuilder", ({ schema: schema2 }) => new JoinBuilder(schema2.model)).addService("conditionBuilder", () => new ConditionBuilder()).addService("pathFactory", () => new PathFactory()).addService("whereOptimized", ({ schema: schema2 }) => new WhereOptimizer(schema2.model, new ConditionOptimizer(), this.whereOptimizerOptions)).addService("whereBuilder", ({ joinBuilder, conditionBuilder, pathFactory, whereOptimized, schema: schema2 }) => new WhereBuilder(
62
63
  schema2.model,
63
64
  joinBuilder,
64
65
  conditionBuilder,
@@ -84,7 +85,7 @@ class ExecutionContainerFactory {
84
85
  predicateFactory
85
86
  );
86
87
  }
87
- }()).addService("insertBuilderFactory", ({ whereBuilder, pathFactory, schema: schema2, predicateFactory }) => new InsertBuilderFactory(schema2.model, whereBuilder, pathFactory, predicateFactory)).addService("updateBuilderFactory", ({ whereBuilder, pathFactory, schema: schema2, predicateFactory }) => new UpdateBuilderFactory(schema2.model, whereBuilder, pathFactory, predicateFactory)).addService("connectJunctionHandler", () => new JunctionConnectHandler()).addService("disconnectJunctionHandler", ({}) => new JunctionDisconnectHandler()).addService("junctionTableManager", ({ predicateFactory, whereBuilder, connectJunctionHandler, disconnectJunctionHandler, pathFactory, schema: schema2 }) => new JunctionTableManager(schema2.model, predicateFactory, whereBuilder, connectJunctionHandler, disconnectJunctionHandler, pathFactory)).addService("deleteExecutor", ({ predicateFactory, updateBuilderFactory, whereBuilder, pathFactory, schema: schema2 }) => new DeleteExecutor(schema2.model, predicateFactory, whereBuilder, updateBuilderFactory, pathFactory)).addService("updater", ({ predicateFactory, updateBuilderFactory, schema: schema2, schemaDatabaseMetadata: schemaDatabaseMetadata2 }) => new Updater(schema2.model, schemaDatabaseMetadata2, predicateFactory, updateBuilderFactory)).addService("inserter", ({ insertBuilderFactory, providers, schema: schema2, schemaDatabaseMetadata: schemaDatabaseMetadata2 }) => new Inserter(schema2.model, schemaDatabaseMetadata2, insertBuilderFactory, providers, { uuidVersion: schema2.settings.content?.uuidVersion })).addService("mapperFactory", ({ predicatesInjector, selectBuilderFactory, uniqueWhereExpander, whereBuilder, junctionTableManager, deleteExecutor, updater, inserter, pathFactory, providers, schema: schema2, schemaDatabaseMetadata: schemaDatabaseMetadata2 }) => {
88
+ }()).addService("insertBuilderFactory", ({ whereBuilder, pathFactory, schema: schema2, predicateFactory }) => new InsertBuilderFactory(schema2.model, whereBuilder, pathFactory, predicateFactory)).addService("updateBuilderFactory", ({ whereBuilder, pathFactory, schema: schema2, predicateFactory }) => new UpdateBuilderFactory(schema2.model, whereBuilder, pathFactory, predicateFactory)).addService("connectJunctionHandler", () => new JunctionConnectHandler()).addService("disconnectJunctionHandler", ({}) => new JunctionDisconnectHandler()).addService("junctionTableManager", ({ predicateFactory, whereBuilder, connectJunctionHandler, disconnectJunctionHandler, pathFactory, schema: schema2 }) => new JunctionTableManager(schema2.model, predicateFactory, whereBuilder, connectJunctionHandler, disconnectJunctionHandler, pathFactory)).addService("deleteExecutor", ({ predicateFactory, updateBuilderFactory, whereBuilder, pathFactory, schema: schema2 }) => new DeleteExecutor(schema2.model, predicateFactory, whereBuilder, updateBuilderFactory, pathFactory)).addService("updater", ({ updateBuilderFactory, schema: schema2 }) => new Updater(schema2.model, updateBuilderFactory)).addService("inserter", ({ insertBuilderFactory, providers, schema: schema2, schemaDatabaseMetadata: schemaDatabaseMetadata2 }) => new Inserter(schema2.model, schemaDatabaseMetadata2, insertBuilderFactory, providers, { uuidVersion: schema2.settings.content?.uuidVersion })).addService("mapperFactory", ({ predicatesInjector, selectBuilderFactory, uniqueWhereExpander, whereBuilder, junctionTableManager, deleteExecutor, updater, inserter, pathFactory, providers, schema: schema2, schemaDatabaseMetadata: schemaDatabaseMetadata2 }) => {
88
89
  return new MapperFactory(
89
90
  db,
90
91
  identityId,
@@ -1 +1 @@
1
- {"version":3,"file":"ExecutionContainer.js","sources":["../../../../packages/engine-content-api/src/ExecutionContainer.ts"],"sourcesContent":["import { PredicateFactory, PredicatesInjector, VariableInjector } from './acl'\nimport {\n\tConditionBuilder,\n\tFieldsVisitorFactory,\n\tJoinBuilder,\n\tMetaHandler,\n\tOrderByBuilder,\n\tRelationFetcher,\n\tWhereBuilder,\n} from './mapper/select'\nimport { UniqueWhereExpander } from './inputProcessing'\nimport { HasManyToHasOneReducer, HasManyToHasOneReducerExecutionHandler } from './extensions'\nimport {\n\tDeleteExecutor,\n\tInsertBuilderFactory,\n\tInserter,\n\tJunctionConnectHandler,\n\tJunctionDisconnectHandler,\n\tJunctionTableManager,\n\tMapperFactory,\n\tPathFactory,\n\tSelectBuilder,\n\tSelectBuilderFactory,\n\tSelectHydrator,\n\tUpdateBuilderFactory,\n\tUpdater,\n} from './mapper'\nimport { Builder } from '@contember/dic'\nimport { Acl, Model, Schema } from '@contember/schema'\nimport { Client, DatabaseMetadata, SelectBuilder as DbSelectBuilder } from '@contember/database'\nimport { ParsedMembership, Providers } from '@contember/schema-utils'\nimport { PaginatedHasManyExecutionHandler } from './extensions/paginatedHasMany/PaginatedHasManyExecutionHandler'\nimport { PaginatedHasManyFieldProvider } from './extensions/paginatedHasMany/PaginatedHasManyFieldProvider'\nimport { WhereOptimizer } from './mapper/select/optimizer/WhereOptimizer'\nimport { ConditionOptimizer } from './mapper/select/optimizer/ConditionOptimizer'\nimport { GraphQlQueryAstFactory, MutationResolver, ReadResolver, ValidationResolver } from './resolvers'\nimport {\n\tColumnValueResolver,\n\tDependencyCollector,\n\tEntityRulesResolver, InputPreValidator,\n\tQueryAstFactory,\n\tValidationDataSelector,\n} from './input-validation'\nimport { RefreshViewResolver } from './resolvers/RefreshViewResolver'\n\nexport type ExecutionContainerArgs = {\n\tschema: Schema\n\tschemaMeta: { id?: number }\n\tschemaDatabaseMetadata: DatabaseMetadata\n\tdb: Client\n\tidentityId: string\n\tidentityVariables: Acl.VariablesMap\n\tpermissions: Acl.Permissions\n\tsystemSchema: string\n\tproject: { slug: string }\n\tstage: { id: string; slug: string }\n}\n\nexport interface ExecutionContainer {\n\treadResolver: ReadResolver\n\tmutationResolver: MutationResolver\n\tvalidationResolver: ValidationResolver\n\trefreshViewResolver: RefreshViewResolver\n}\n\nexport type ExecutionContainerBuilder = ReturnType<ExecutionContainerFactory['createBuilderInternal']>\nexport type ExecutionContainerHook = (builder: ExecutionContainerBuilder) => ExecutionContainerBuilder\n\nexport class ExecutionContainerFactory {\n\tpublic readonly hooks: ExecutionContainerHook[] = []\n\n\tconstructor(\n\t\tprivate readonly providers: Providers,\n\t) {\n\t}\n\n\tcreateBuilder(args: ExecutionContainerArgs): ExecutionContainerBuilder {\n\t\tconst builder = this.createBuilderInternal(args)\n\t\treturn this.hooks.reduce((acc, cb) => cb(acc), builder)\n\t}\n\n\tcreateBuilderInternal({ permissions, identityVariables, identityId, db, schema, schemaMeta, systemSchema, stage, project, schemaDatabaseMetadata }: ExecutionContainerArgs) {\n\t\treturn new Builder({})\n\t\t\t.addService('systemSchema', () =>\n\t\t\t\tsystemSchema)\n\t\t\t.addService('db', () =>\n\t\t\t\tdb)\n\t\t\t.addService('project', () =>\n\t\t\t\tproject)\n\t\t\t.addService('stage', () =>\n\t\t\t\tstage)\n\t\t\t.addService('schema', () =>\n\t\t\t\tschema)\n\t\t\t.addService('schemaMeta', () =>\n\t\t\t\tschemaMeta)\n\t\t\t.addService('schemaDatabaseMetadata', () =>\n\t\t\t\tschemaDatabaseMetadata)\n\t\t\t.addService('providers', () =>\n\t\t\t\tthis.providers)\n\t\t\t.addService('variableInjector', ({ schema }) =>\n\t\t\t\tnew VariableInjector(schema.model, identityVariables))\n\t\t\t.addService('predicateFactory', ({ variableInjector, schema }) =>\n\t\t\t\tnew PredicateFactory(permissions, schema.model, variableInjector))\n\t\t\t.addService('predicatesInjector', ({ predicateFactory, schema }) =>\n\t\t\t\tnew PredicatesInjector(schema.model, predicateFactory))\n\t\t\t.addService('joinBuilder', ({ schema }) =>\n\t\t\t\tnew JoinBuilder(schema.model))\n\t\t\t.addService('conditionBuilder', () =>\n\t\t\t\tnew ConditionBuilder())\n\t\t\t.addService('pathFactory', () =>\n\t\t\t\tnew PathFactory())\n\t\t\t.addService('whereOptimized', ({ schema }) =>\n\t\t\t\tnew WhereOptimizer(schema.model, new ConditionOptimizer()))\n\t\t\t.addService('whereBuilder', ({ joinBuilder, conditionBuilder, pathFactory, whereOptimized, schema }) =>\n\t\t\t\tnew WhereBuilder(\n\t\t\t\t\tschema.model,\n\t\t\t\t\tjoinBuilder,\n\t\t\t\t\tconditionBuilder,\n\t\t\t\t\tpathFactory,\n\t\t\t\t\twhereOptimized,\n\t\t\t\t\t(schema.settings.content?.useExistsInHasManyFilter ?? schema.settings.useExistsInHasManyFilter) === true,\n\t\t\t\t))\n\t\t\t.addService('orderByBuilder', ({ joinBuilder, schema }) =>\n\t\t\t\tnew OrderByBuilder(schema.model, joinBuilder))\n\t\t\t.addService('relationFetcher', ({ whereBuilder, orderByBuilder, predicatesInjector, pathFactory }) =>\n\t\t\t\tnew RelationFetcher(whereBuilder, orderByBuilder, predicatesInjector, pathFactory))\n\t\t\t.addService('fieldsVisitorFactory', ({ relationFetcher, predicateFactory, schema, providers }) =>\n\t\t\t\tnew FieldsVisitorFactory(schema.model, relationFetcher, predicateFactory, schema.settings.content ?? {}, providers))\n\t\t\t.addService('metaHandler', ({ whereBuilder, predicateFactory }) =>\n\t\t\t\tnew MetaHandler(whereBuilder, predicateFactory))\n\t\t\t.addService('uniqueWhereExpander', ({ schema }) =>\n\t\t\t\tnew UniqueWhereExpander(schema.model))\n\t\t\t.addService('hasManyToHasOneReducer', ({ uniqueWhereExpander, schema }) =>\n\t\t\t\tnew HasManyToHasOneReducerExecutionHandler(schema.model, uniqueWhereExpander))\n\t\t\t.addService('paginatedHasManyExecutionHandler', ({ relationFetcher, schema }) =>\n\t\t\t\tnew PaginatedHasManyExecutionHandler(schema.model, relationFetcher))\n\t\t\t.addService('selectHandlers', ({ hasManyToHasOneReducer, paginatedHasManyExecutionHandler }) => ({\n\t\t\t\t[HasManyToHasOneReducer.extensionName]: hasManyToHasOneReducer,\n\t\t\t\t[PaginatedHasManyFieldProvider.extensionName]: paginatedHasManyExecutionHandler,\n\t\t\t}))\n\t\t\t.addService('selectBuilderFactory', ({ whereBuilder, orderByBuilder, fieldsVisitorFactory, metaHandler, selectHandlers, pathFactory, predicateFactory, schema }) =>\n\t\t\t\tnew (class implements SelectBuilderFactory {\n\t\t\t\t\tcreate(qb: DbSelectBuilder, hydrator: SelectHydrator, relationPath: Model.AnyRelationContext[]): SelectBuilder {\n\t\t\t\t\t\treturn new SelectBuilder(\n\t\t\t\t\t\t\tschema.model,\n\t\t\t\t\t\t\twhereBuilder,\n\t\t\t\t\t\t\torderByBuilder,\n\t\t\t\t\t\t\tmetaHandler,\n\t\t\t\t\t\t\tqb,\n\t\t\t\t\t\t\thydrator,\n\t\t\t\t\t\t\tfieldsVisitorFactory,\n\t\t\t\t\t\t\tselectHandlers,\n\t\t\t\t\t\t\tpathFactory,\n\t\t\t\t\t\t\trelationPath,\n\t\t\t\t\t\t\tpredicateFactory,\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t})())\n\t\t\t.addService('insertBuilderFactory', ({ whereBuilder, pathFactory, schema, predicateFactory }) =>\n\t\t\t\tnew InsertBuilderFactory(schema.model, whereBuilder, pathFactory, predicateFactory))\n\t\t\t.addService('updateBuilderFactory', ({ whereBuilder, pathFactory, schema, predicateFactory }) =>\n\t\t\t\tnew UpdateBuilderFactory(schema.model, whereBuilder, pathFactory, predicateFactory))\n\t\t\t.addService('connectJunctionHandler', () =>\n\t\t\t\tnew JunctionConnectHandler())\n\t\t\t.addService('disconnectJunctionHandler', ({}) =>\n\t\t\t\tnew JunctionDisconnectHandler())\n\t\t\t.addService('junctionTableManager', ({ predicateFactory, whereBuilder, connectJunctionHandler, disconnectJunctionHandler, pathFactory, schema }) =>\n\t\t\t\tnew JunctionTableManager(schema.model, predicateFactory, whereBuilder, connectJunctionHandler, disconnectJunctionHandler, pathFactory))\n\t\t\t.addService('deleteExecutor', ({ predicateFactory, updateBuilderFactory, whereBuilder, pathFactory, schema }) =>\n\t\t\t\tnew DeleteExecutor(schema.model, predicateFactory, whereBuilder, updateBuilderFactory, pathFactory))\n\t\t\t.addService('updater', ({ predicateFactory, updateBuilderFactory, schema, schemaDatabaseMetadata }) =>\n\t\t\t\tnew Updater(schema.model, schemaDatabaseMetadata, predicateFactory, updateBuilderFactory))\n\t\t\t.addService('inserter', ({ insertBuilderFactory, providers, schema, schemaDatabaseMetadata }) =>\n\t\t\t\tnew Inserter(schema.model, schemaDatabaseMetadata, insertBuilderFactory, providers, { uuidVersion: schema.settings.content?.uuidVersion }))\n\t\t\t.addService('mapperFactory', ({ predicatesInjector, selectBuilderFactory, uniqueWhereExpander, whereBuilder, junctionTableManager, deleteExecutor, updater, inserter, pathFactory, providers, schema, schemaDatabaseMetadata }) => {\n\t\t\t\treturn new MapperFactory(\n\t\t\t\t\tdb,\n\t\t\t\t\tidentityId,\n\t\t\t\t\tschema.model,\n\t\t\t\t\tschemaDatabaseMetadata,\n\t\t\t\t\tpredicatesInjector,\n\t\t\t\t\tselectBuilderFactory,\n\t\t\t\t\tuniqueWhereExpander,\n\t\t\t\t\twhereBuilder,\n\t\t\t\t\tjunctionTableManager,\n\t\t\t\t\tdeleteExecutor,\n\t\t\t\t\tupdater,\n\t\t\t\t\tinserter,\n\t\t\t\t\tpathFactory,\n\t\t\t\t\tproviders,\n\t\t\t\t)\n\t\t\t})\n\n\t\t\t.addService('queryAstFactory', () =>\n\t\t\t\tnew GraphQlQueryAstFactory())\n\t\t\t.addService('readResolver', ({ mapperFactory, queryAstFactory }) =>\n\t\t\t\tnew ReadResolver(mapperFactory, queryAstFactory))\n\t\t\t.addService('validationDependencyCollector', () =>\n\t\t\t\tnew DependencyCollector())\n\t\t\t.addService('validationQueryAstFactory', ({ schema }) =>\n\t\t\t\tnew QueryAstFactory(schema.model))\n\t\t\t.addService('dataSelector', ({ validationQueryAstFactory, schema }) =>\n\t\t\t\tnew ValidationDataSelector(schema.model, validationQueryAstFactory))\n\t\t\t.addService('columnValueResolver', ({ providers }) =>\n\t\t\t\tnew ColumnValueResolver(providers))\n\t\t\t.addService('entityRulesResolver', ({ schema }) =>\n\t\t\t\tnew EntityRulesResolver(schema.validation, schema.model))\n\t\t\t.addService('inputPreValidator', ({ entityRulesResolver, columnValueResolver, dataSelector, schema }) =>\n\t\t\t\tnew InputPreValidator(schema.model, entityRulesResolver, columnValueResolver, dataSelector))\n\t\t\t.addService('mutationResolver', ({ mapperFactory, inputPreValidator, queryAstFactory, schema, schemaDatabaseMetadata }) =>\n\t\t\t\tnew MutationResolver(schema.model, mapperFactory, inputPreValidator, queryAstFactory, schemaDatabaseMetadata))\n\t\t\t.addService('validationResolver', ({ inputPreValidator, mapperFactory }) =>\n\t\t\t\tnew ValidationResolver(mapperFactory, inputPreValidator))\n\t\t\t.addService('refreshViewResolver', ({ schema, mapperFactory }) =>\n\t\t\t\tnew RefreshViewResolver(schema, mapperFactory))\n\t}\n\n\tpublic create(args: ExecutionContainerArgs): ExecutionContainer {\n\t\treturn this.createBuilder(args).build().pick('validationResolver', 'readResolver', 'mutationResolver', 'refreshViewResolver')\n\t}\n}\n\n"],"names":["schema","schemaDatabaseMetadata"],"mappings":"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"}
1
+ {"version":3,"file":"ExecutionContainer.js","sources":["../../../../packages/engine-content-api/src/ExecutionContainer.ts"],"sourcesContent":["import { PredicateFactory, PredicatesInjector, VariableInjector } from './acl'\nimport {\n\tConditionBuilder,\n\tFieldsVisitorFactory,\n\tJoinBuilder,\n\tMetaHandler,\n\tOrderByBuilder,\n\tRelationFetcher,\n\tWhereBuilder,\n} from './mapper/select'\nimport { UniqueWhereExpander } from './inputProcessing'\nimport { HasManyToHasOneReducer, HasManyToHasOneReducerExecutionHandler } from './extensions'\nimport {\n\tDeleteExecutor,\n\tInsertBuilderFactory,\n\tInserter,\n\tJunctionConnectHandler,\n\tJunctionDisconnectHandler,\n\tJunctionTableManager,\n\tMapperFactory,\n\tPathFactory,\n\tSelectBuilder,\n\tSelectBuilderFactory,\n\tSelectHydrator,\n\tUpdateBuilderFactory,\n\tUpdater,\n} from './mapper'\nimport { Builder } from '@contember/dic'\nimport { Acl, Model, Schema } from '@contember/schema'\nimport { Client, DatabaseMetadata, SelectBuilder as DbSelectBuilder } from '@contember/database'\nimport { ParsedMembership, Providers } from '@contember/schema-utils'\nimport { PaginatedHasManyExecutionHandler } from './extensions/paginatedHasMany/PaginatedHasManyExecutionHandler'\nimport { PaginatedHasManyFieldProvider } from './extensions/paginatedHasMany/PaginatedHasManyFieldProvider'\nimport { WhereOptimizer, WhereOptimizerOptions } from './mapper/select/optimizer/WhereOptimizer'\nimport { ConditionOptimizer } from './mapper/select/optimizer/ConditionOptimizer'\nimport { GraphQlQueryAstFactory, MutationResolver, ReadResolver, ValidationResolver } from './resolvers'\nimport {\n\tColumnValueResolver,\n\tDependencyCollector,\n\tEntityRulesResolver, InputPreValidator,\n\tQueryAstFactory,\n\tValidationDataSelector,\n} from './input-validation'\nimport { RefreshViewResolver } from './resolvers/RefreshViewResolver'\n\nexport type ExecutionContainerArgs = {\n\tschema: Schema\n\tschemaMeta: { id?: number }\n\tschemaDatabaseMetadata: DatabaseMetadata\n\tdb: Client\n\tidentityId: string\n\tidentityVariables: Acl.VariablesMap\n\tpermissions: Acl.Permissions\n\tsystemSchema: string\n\tproject: { slug: string }\n\tstage: { id: string; slug: string }\n\tuserInfo: { ipAddress: string | null; userAgent: string | null }\n}\n\nexport interface ExecutionContainer {\n\treadResolver: ReadResolver\n\tmutationResolver: MutationResolver\n\tvalidationResolver: ValidationResolver\n\trefreshViewResolver: RefreshViewResolver\n}\n\nexport type ExecutionContainerBuilder = ReturnType<ExecutionContainerFactory['createBuilderInternal']>\nexport type ExecutionContainerHook = (builder: ExecutionContainerBuilder) => ExecutionContainerBuilder\n\nexport class ExecutionContainerFactory {\n\tpublic readonly hooks: ExecutionContainerHook[] = []\n\n\tconstructor(\n\t\tprivate readonly providers: Providers,\n\t\tprivate readonly whereOptimizerOptions?: WhereOptimizerOptions,\n\t) {\n\t}\n\n\tcreateBuilder(args: ExecutionContainerArgs): ExecutionContainerBuilder {\n\t\tconst builder = this.createBuilderInternal(args)\n\t\treturn this.hooks.reduce((acc, cb) => cb(acc), builder)\n\t}\n\n\tcreateBuilderInternal({ permissions, identityVariables, identityId, db, schema, schemaMeta, systemSchema, stage, project, schemaDatabaseMetadata, userInfo }: ExecutionContainerArgs) {\n\t\treturn new Builder({})\n\t\t\t.addService('systemSchema', () =>\n\t\t\t\tsystemSchema)\n\t\t\t.addService('db', () =>\n\t\t\t\tdb)\n\t\t\t.addService('project', () =>\n\t\t\t\tproject)\n\t\t\t.addService('stage', () =>\n\t\t\t\tstage)\n\t\t\t.addService('schema', () =>\n\t\t\t\tschema)\n\t\t\t.addService('schemaMeta', () =>\n\t\t\t\tschemaMeta)\n\t\t\t.addService('schemaDatabaseMetadata', () =>\n\t\t\t\tschemaDatabaseMetadata)\n\t\t\t.addService('userInfo', () =>\n\t\t\t\tuserInfo)\n\t\t\t.addService('providers', () =>\n\t\t\t\tthis.providers)\n\t\t\t.addService('variableInjector', ({ schema }) =>\n\t\t\t\tnew VariableInjector(schema.model, identityVariables))\n\t\t\t.addService('predicateFactory', ({ variableInjector, schema }) =>\n\t\t\t\tnew PredicateFactory(permissions, schema.model, variableInjector))\n\t\t\t.addService('predicatesInjector', ({ predicateFactory, schema }) =>\n\t\t\t\tnew PredicatesInjector(schema.model, predicateFactory))\n\t\t\t.addService('joinBuilder', ({ schema }) =>\n\t\t\t\tnew JoinBuilder(schema.model))\n\t\t\t.addService('conditionBuilder', () =>\n\t\t\t\tnew ConditionBuilder())\n\t\t\t.addService('pathFactory', () =>\n\t\t\t\tnew PathFactory())\n\t\t\t.addService('whereOptimized', ({ schema }) =>\n\t\t\t\tnew WhereOptimizer(schema.model, new ConditionOptimizer(), this.whereOptimizerOptions))\n\t\t\t.addService('whereBuilder', ({ joinBuilder, conditionBuilder, pathFactory, whereOptimized, schema }) =>\n\t\t\t\tnew WhereBuilder(\n\t\t\t\t\tschema.model,\n\t\t\t\t\tjoinBuilder,\n\t\t\t\t\tconditionBuilder,\n\t\t\t\t\tpathFactory,\n\t\t\t\t\twhereOptimized,\n\t\t\t\t\t(schema.settings.content?.useExistsInHasManyFilter ?? schema.settings.useExistsInHasManyFilter) === true,\n\t\t\t\t))\n\t\t\t.addService('orderByBuilder', ({ joinBuilder, schema }) =>\n\t\t\t\tnew OrderByBuilder(schema.model, joinBuilder))\n\t\t\t.addService('relationFetcher', ({ whereBuilder, orderByBuilder, predicatesInjector, pathFactory }) =>\n\t\t\t\tnew RelationFetcher(whereBuilder, orderByBuilder, predicatesInjector, pathFactory))\n\t\t\t.addService('fieldsVisitorFactory', ({ relationFetcher, predicateFactory, schema, providers }) =>\n\t\t\t\tnew FieldsVisitorFactory(schema.model, relationFetcher, predicateFactory, schema.settings.content ?? {}, providers))\n\t\t\t.addService('metaHandler', ({ whereBuilder, predicateFactory }) =>\n\t\t\t\tnew MetaHandler(whereBuilder, predicateFactory))\n\t\t\t.addService('uniqueWhereExpander', ({ schema }) =>\n\t\t\t\tnew UniqueWhereExpander(schema.model))\n\t\t\t.addService('hasManyToHasOneReducer', ({ uniqueWhereExpander, schema }) =>\n\t\t\t\tnew HasManyToHasOneReducerExecutionHandler(schema.model, uniqueWhereExpander))\n\t\t\t.addService('paginatedHasManyExecutionHandler', ({ relationFetcher, schema }) =>\n\t\t\t\tnew PaginatedHasManyExecutionHandler(schema.model, relationFetcher))\n\t\t\t.addService('selectHandlers', ({ hasManyToHasOneReducer, paginatedHasManyExecutionHandler }) => ({\n\t\t\t\t[HasManyToHasOneReducer.extensionName]: hasManyToHasOneReducer,\n\t\t\t\t[PaginatedHasManyFieldProvider.extensionName]: paginatedHasManyExecutionHandler,\n\t\t\t}))\n\t\t\t.addService('selectBuilderFactory', ({ whereBuilder, orderByBuilder, fieldsVisitorFactory, metaHandler, selectHandlers, pathFactory, predicateFactory, schema }) =>\n\t\t\t\tnew (class implements SelectBuilderFactory {\n\t\t\t\t\tcreate(qb: DbSelectBuilder, hydrator: SelectHydrator, relationPath: Model.AnyRelationContext[]): SelectBuilder {\n\t\t\t\t\t\treturn new SelectBuilder(\n\t\t\t\t\t\t\tschema.model,\n\t\t\t\t\t\t\twhereBuilder,\n\t\t\t\t\t\t\torderByBuilder,\n\t\t\t\t\t\t\tmetaHandler,\n\t\t\t\t\t\t\tqb,\n\t\t\t\t\t\t\thydrator,\n\t\t\t\t\t\t\tfieldsVisitorFactory,\n\t\t\t\t\t\t\tselectHandlers,\n\t\t\t\t\t\t\tpathFactory,\n\t\t\t\t\t\t\trelationPath,\n\t\t\t\t\t\t\tpredicateFactory,\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t})())\n\t\t\t.addService('insertBuilderFactory', ({ whereBuilder, pathFactory, schema, predicateFactory }) =>\n\t\t\t\tnew InsertBuilderFactory(schema.model, whereBuilder, pathFactory, predicateFactory))\n\t\t\t.addService('updateBuilderFactory', ({ whereBuilder, pathFactory, schema, predicateFactory }) =>\n\t\t\t\tnew UpdateBuilderFactory(schema.model, whereBuilder, pathFactory, predicateFactory))\n\t\t\t.addService('connectJunctionHandler', () =>\n\t\t\t\tnew JunctionConnectHandler())\n\t\t\t.addService('disconnectJunctionHandler', ({}) =>\n\t\t\t\tnew JunctionDisconnectHandler())\n\t\t\t.addService('junctionTableManager', ({ predicateFactory, whereBuilder, connectJunctionHandler, disconnectJunctionHandler, pathFactory, schema }) =>\n\t\t\t\tnew JunctionTableManager(schema.model, predicateFactory, whereBuilder, connectJunctionHandler, disconnectJunctionHandler, pathFactory))\n\t\t\t.addService('deleteExecutor', ({ predicateFactory, updateBuilderFactory, whereBuilder, pathFactory, schema }) =>\n\t\t\t\tnew DeleteExecutor(schema.model, predicateFactory, whereBuilder, updateBuilderFactory, pathFactory))\n\t\t\t.addService('updater', ({ updateBuilderFactory, schema }) =>\n\t\t\t\tnew Updater(schema.model, updateBuilderFactory))\n\t\t\t.addService('inserter', ({ insertBuilderFactory, providers, schema, schemaDatabaseMetadata }) =>\n\t\t\t\tnew Inserter(schema.model, schemaDatabaseMetadata, insertBuilderFactory, providers, { uuidVersion: schema.settings.content?.uuidVersion }))\n\t\t\t.addService('mapperFactory', ({ predicatesInjector, selectBuilderFactory, uniqueWhereExpander, whereBuilder, junctionTableManager, deleteExecutor, updater, inserter, pathFactory, providers, schema, schemaDatabaseMetadata }) => {\n\t\t\t\treturn new MapperFactory(\n\t\t\t\t\tdb,\n\t\t\t\t\tidentityId,\n\t\t\t\t\tschema.model,\n\t\t\t\t\tschemaDatabaseMetadata,\n\t\t\t\t\tpredicatesInjector,\n\t\t\t\t\tselectBuilderFactory,\n\t\t\t\t\tuniqueWhereExpander,\n\t\t\t\t\twhereBuilder,\n\t\t\t\t\tjunctionTableManager,\n\t\t\t\t\tdeleteExecutor,\n\t\t\t\t\tupdater,\n\t\t\t\t\tinserter,\n\t\t\t\t\tpathFactory,\n\t\t\t\t\tproviders,\n\t\t\t\t)\n\t\t\t})\n\n\t\t\t.addService('queryAstFactory', () =>\n\t\t\t\tnew GraphQlQueryAstFactory())\n\t\t\t.addService('readResolver', ({ mapperFactory, queryAstFactory }) =>\n\t\t\t\tnew ReadResolver(mapperFactory, queryAstFactory))\n\t\t\t.addService('validationDependencyCollector', () =>\n\t\t\t\tnew DependencyCollector())\n\t\t\t.addService('validationQueryAstFactory', ({ schema }) =>\n\t\t\t\tnew QueryAstFactory(schema.model))\n\t\t\t.addService('dataSelector', ({ validationQueryAstFactory, schema }) =>\n\t\t\t\tnew ValidationDataSelector(schema.model, validationQueryAstFactory))\n\t\t\t.addService('columnValueResolver', ({ providers }) =>\n\t\t\t\tnew ColumnValueResolver(providers))\n\t\t\t.addService('entityRulesResolver', ({ schema }) =>\n\t\t\t\tnew EntityRulesResolver(schema.validation, schema.model))\n\t\t\t.addService('inputPreValidator', ({ entityRulesResolver, columnValueResolver, dataSelector, schema }) =>\n\t\t\t\tnew InputPreValidator(schema.model, entityRulesResolver, columnValueResolver, dataSelector))\n\t\t\t.addService('mutationResolver', ({ mapperFactory, inputPreValidator, queryAstFactory, schema, schemaDatabaseMetadata }) =>\n\t\t\t\tnew MutationResolver(schema.model, mapperFactory, inputPreValidator, queryAstFactory, schemaDatabaseMetadata))\n\t\t\t.addService('validationResolver', ({ inputPreValidator, mapperFactory }) =>\n\t\t\t\tnew ValidationResolver(mapperFactory, inputPreValidator))\n\t\t\t.addService('refreshViewResolver', ({ schema, mapperFactory }) =>\n\t\t\t\tnew RefreshViewResolver(schema, mapperFactory))\n\t}\n\n\tpublic create(args: ExecutionContainerArgs): ExecutionContainer {\n\t\treturn this.createBuilder(args).build().pick('validationResolver', 'readResolver', 'mutationResolver', 'refreshViewResolver')\n\t}\n}\n\n"],"names":["schema","schemaDatabaseMetadata"],"mappings":"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"}
@@ -221,7 +221,7 @@ const prependPath = (path, results) => results.map((it) => ({
221
221
  ...it,
222
222
  paths: (it.paths.length === 0 ? [[]] : it.paths).map((it2) => [...path, ...it2])
223
223
  }));
224
- const getInsertPrimary = (result) => result[0] && result[0].result === "ok" && result[0].type === "create" ? result[0].primary : void 0;
224
+ const getInsertPrimary = (result) => !result.some((it) => it.error) && result[0] && result[0].result === "ok" && result[0].type === "create" ? result[0].primary : void 0;
225
225
  exports.ConstraintType = ConstraintType;
226
226
  exports.InputErrorKind = InputErrorKind;
227
227
  exports.MutationConstraintViolationError = MutationConstraintViolationError;
@@ -1 +1 @@
1
- {"version":3,"file":"Result.cjs","sources":["../../../../../packages/engine-content-api/src/mapper/Result.ts"],"sourcesContent":["import { Input, Model, Value } from '@contember/schema'\nimport { MapperInput } from './types'\n\nexport enum MutationResultType {\n\tok = 'ok',\n\tnothingToDo = 'nothingToDo',\n\tnotFoundError = 'notFoundError',\n\tconstraintViolationError = 'constraintViolationError',\n\tnoResultError = 'noResultError',\n\tvalidationError = 'validationError',\n\tinputError = 'inputError',\n\tsqlError = 'sqlError',\n}\n\nexport enum MutationResultHint {\n\tsqlError = 'sqlError',\n\tsubSequentSqlError = 'subsequentSqlError',\n}\n\nexport enum ModificationType {\n\tcreate = 'create',\n\tupdate = 'update',\n\tdelete = 'delete',\n\tjunctionUpdate = 'junctionUpdate',\n}\n\nexport type MutationResult =\n\t| MutationUpdateOk\n\t| MutationCreateOk\n\t| MutationDeleteOk\n\t| MutationJunctionUpdateOk\n\t| MutationEntryNotFoundError\n\t| MutationNothingToDo\n\t| MutationConstraintViolationError\n\t| MutationNoResultError\n\t| MutationInputError\n\t| MutationSqlError\n\nexport type MutationResultList = MutationResult[]\n\ntype Path = ({ field: string } | { index: number; alias?: string })[]\n\ninterface MutationResultInterface {\n\terror: boolean\n\tresult: MutationResultType\n\tpaths: Path[]\n\tmessage?: string\n\thints: MutationResultHint[]\n}\n\nexport type RowValues = { [fieldName: string]: Value.FieldValue }\n\nexport class MutationUpdateOk implements MutationResultInterface {\n\terror = false\n\tresult = MutationResultType.ok as const\n\ttype = ModificationType.update as const\n\thints: MutationResultHint[] = []\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly primary: Value.PrimaryValue,\n\t\tpublic readonly input: MapperInput.UpdateDataInput,\n\t\tpublic readonly values: RowValues,\n\t\tpublic readonly oldValues?: RowValues,\n\t) {}\n}\n\nexport class MutationCreateOk implements MutationResultInterface {\n\terror = false\n\tresult = MutationResultType.ok as const\n\ttype = ModificationType.create as const\n\thints: MutationResultHint[] = []\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly primary: Value.PrimaryValue,\n\t\tpublic readonly input: MapperInput.CreateDataInput,\n\t\tpublic readonly values: RowValues,\n\t) {}\n}\n\nexport class MutationDeleteOk implements MutationResultInterface {\n\terror = false\n\tresult = MutationResultType.ok as const\n\ttype = ModificationType.delete as const\n\thints: MutationResultHint[] = []\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly primary: Value.PrimaryValue,\n\t) {}\n}\n\nexport class MutationJunctionUpdateOk implements MutationResultInterface {\n\terror = false\n\tresult = MutationResultType.ok as const\n\ttype = ModificationType.junctionUpdate as const\n\thints: MutationResultHint[] = []\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly relation: Model.ManyHasManyOwningRelation,\n\t\tpublic readonly owningUnique: Input.PrimaryValue,\n\t\tpublic readonly inverseUnique: Input.PrimaryValue,\n\t) {}\n}\n\nexport enum NothingToDoReason {\n\tnoData = 'noData',\n\temptyRelation = 'emptyRelation',\n\talreadyExists = 'alreadyExists',\n\taborted = 'aborted',\n\talreadyDeleted = 'alreadyDeleted',\n}\n\nexport class MutationNothingToDo implements MutationResultInterface {\n\terror = false\n\tresult = MutationResultType.nothingToDo as const\n\thints: MutationResultHint[] = []\n\n\tconstructor(public readonly paths: Path[], public readonly reason: NothingToDoReason) {}\n}\n\nexport enum InputErrorKind {\n\tnonUniqueWhere = 'nonUniqueWhere',\n\tinvalidData = 'invalidData',\n}\n\nexport class MutationInputError implements MutationResultInterface {\n\terror = true\n\tresult = MutationResultType.inputError as const\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly kind: InputErrorKind,\n\t\tpublic readonly message?: string,\n\t\tpublic readonly hints: MutationResultHint[] = [],\n\t) {}\n}\n\nexport class MutationSqlError implements MutationResultInterface {\n\terror = true\n\tresult = MutationResultType.sqlError as const\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly message?: string,\n\t\tpublic readonly hints: MutationResultHint[] = [],\n\t) {}\n}\n\nexport enum ConstraintType {\n\tnotNull = 'notNull',\n\tuniqueKey = 'uniqueKey',\n\tforeignKey = 'foreignKey',\n}\n\nexport class MutationConstraintViolationError implements MutationResultInterface {\n\terror = true\n\tresult = MutationResultType.constraintViolationError as const\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly constraint: ConstraintType,\n\t\tpublic readonly message?: string,\n\t\tpublic readonly hints: MutationResultHint[] = [],\n\t) {}\n}\n\n// maybe denied by acl\nexport class MutationEntryNotFoundError implements MutationResultInterface {\n\terror = true\n\tresult = MutationResultType.notFoundError as const\n\thints: MutationResultHint[] = []\n\tmessage: string\n\n\tconstructor(public readonly paths: Path[], public readonly where: Input.UniqueWhere | Input.Where) {\n\t\tthis.message = 'for input ' + JSON.stringify(where)\n\t}\n}\n\n// possibly denied by acl\nexport class MutationNoResultError implements MutationResultInterface {\n\terror = true\n\tresult = MutationResultType.noResultError as const\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly message?: string,\n\t\tpublic readonly hints: MutationResultHint[] = [],\n\t) {}\n}\n\nexport const prependPath = (path: Path, results: MutationResultList): MutationResultList =>\n\tresults.map(it => ({\n\t\t...it,\n\t\tpaths: (it.paths.length === 0 ? [[]] : it.paths).map(it => [...path, ...it]),\n\t}))\n\nexport const getInsertPrimary = (result: MutationResultList) =>\n\tresult[0] && result[0].result === MutationResultType.ok && result[0].type === ModificationType.create\n\t\t? result[0].primary\n\t\t: undefined\n"],"names":["MutationResultType","MutationResultHint","NothingToDoReason","InputErrorKind","ConstraintType","it"],"mappings":"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"}
1
+ {"version":3,"file":"Result.cjs","sources":["../../../../../packages/engine-content-api/src/mapper/Result.ts"],"sourcesContent":["import { Input, Model, Value } from '@contember/schema'\nimport { MapperInput } from './types'\n\nexport enum MutationResultType {\n\tok = 'ok',\n\tnothingToDo = 'nothingToDo',\n\tnotFoundError = 'notFoundError',\n\tconstraintViolationError = 'constraintViolationError',\n\tnoResultError = 'noResultError',\n\tvalidationError = 'validationError',\n\tinputError = 'inputError',\n\tsqlError = 'sqlError',\n}\n\nexport enum MutationResultHint {\n\tsqlError = 'sqlError',\n\tsubSequentSqlError = 'subsequentSqlError',\n}\n\nexport enum ModificationType {\n\tcreate = 'create',\n\tupdate = 'update',\n\tdelete = 'delete',\n\tjunctionUpdate = 'junctionUpdate',\n}\n\nexport type MutationResult =\n\t| MutationUpdateOk\n\t| MutationCreateOk\n\t| MutationDeleteOk\n\t| MutationJunctionUpdateOk\n\t| MutationEntryNotFoundError\n\t| MutationNothingToDo\n\t| MutationConstraintViolationError\n\t| MutationNoResultError\n\t| MutationInputError\n\t| MutationSqlError\n\nexport type MutationResultList = MutationResult[]\n\ntype Path = ({ field: string } | { index: number; alias?: string })[]\n\ninterface MutationResultInterface {\n\terror: boolean\n\tresult: MutationResultType\n\tpaths: Path[]\n\tmessage?: string\n\thints: MutationResultHint[]\n}\n\nexport type RowValues = { [fieldName: string]: Value.FieldValue }\n\nexport class MutationUpdateOk implements MutationResultInterface {\n\terror = false\n\tresult = MutationResultType.ok as const\n\ttype = ModificationType.update as const\n\thints: MutationResultHint[] = []\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly primary: Value.PrimaryValue,\n\t\tpublic readonly input: MapperInput.UpdateDataInput,\n\t\tpublic readonly values: RowValues,\n\t\tpublic readonly oldValues?: RowValues,\n\t) {}\n}\n\nexport class MutationCreateOk implements MutationResultInterface {\n\terror = false\n\tresult = MutationResultType.ok as const\n\ttype = ModificationType.create as const\n\thints: MutationResultHint[] = []\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly primary: Value.PrimaryValue,\n\t\tpublic readonly input: MapperInput.CreateDataInput,\n\t\tpublic readonly values: RowValues,\n\t) {}\n}\n\nexport class MutationDeleteOk implements MutationResultInterface {\n\terror = false\n\tresult = MutationResultType.ok as const\n\ttype = ModificationType.delete as const\n\thints: MutationResultHint[] = []\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly primary: Value.PrimaryValue,\n\t) {}\n}\n\nexport class MutationJunctionUpdateOk implements MutationResultInterface {\n\terror = false\n\tresult = MutationResultType.ok as const\n\ttype = ModificationType.junctionUpdate as const\n\thints: MutationResultHint[] = []\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly relation: Model.ManyHasManyOwningRelation,\n\t\tpublic readonly owningUnique: Input.PrimaryValue,\n\t\tpublic readonly inverseUnique: Input.PrimaryValue,\n\t) {}\n}\n\nexport enum NothingToDoReason {\n\tnoData = 'noData',\n\temptyRelation = 'emptyRelation',\n\talreadyExists = 'alreadyExists',\n\taborted = 'aborted',\n\talreadyDeleted = 'alreadyDeleted',\n}\n\nexport class MutationNothingToDo implements MutationResultInterface {\n\terror = false\n\tresult = MutationResultType.nothingToDo as const\n\thints: MutationResultHint[] = []\n\n\tconstructor(public readonly paths: Path[], public readonly reason: NothingToDoReason) {}\n}\n\nexport enum InputErrorKind {\n\tnonUniqueWhere = 'nonUniqueWhere',\n\tinvalidData = 'invalidData',\n}\n\nexport class MutationInputError implements MutationResultInterface {\n\terror = true\n\tresult = MutationResultType.inputError as const\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly kind: InputErrorKind,\n\t\tpublic readonly message?: string,\n\t\tpublic readonly hints: MutationResultHint[] = [],\n\t) {}\n}\n\nexport class MutationSqlError implements MutationResultInterface {\n\terror = true\n\tresult = MutationResultType.sqlError as const\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly message?: string,\n\t\tpublic readonly hints: MutationResultHint[] = [],\n\t) {}\n}\n\nexport enum ConstraintType {\n\tnotNull = 'notNull',\n\tuniqueKey = 'uniqueKey',\n\tforeignKey = 'foreignKey',\n}\n\nexport class MutationConstraintViolationError implements MutationResultInterface {\n\terror = true\n\tresult = MutationResultType.constraintViolationError as const\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly constraint: ConstraintType,\n\t\tpublic readonly message?: string,\n\t\tpublic readonly hints: MutationResultHint[] = [],\n\t) {}\n}\n\n// maybe denied by acl\nexport class MutationEntryNotFoundError implements MutationResultInterface {\n\terror = true\n\tresult = MutationResultType.notFoundError as const\n\thints: MutationResultHint[] = []\n\tmessage: string\n\n\tconstructor(public readonly paths: Path[], public readonly where: Input.UniqueWhere | Input.OptionalWhere) {\n\t\tthis.message = 'for input ' + JSON.stringify(where)\n\t}\n}\n\n// possibly denied by acl\nexport class MutationNoResultError implements MutationResultInterface {\n\terror = true\n\tresult = MutationResultType.noResultError as const\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly message?: string,\n\t\tpublic readonly hints: MutationResultHint[] = [],\n\t) {}\n}\n\nexport const prependPath = (path: Path, results: MutationResultList): MutationResultList =>\n\tresults.map(it => ({\n\t\t...it,\n\t\tpaths: (it.paths.length === 0 ? [[]] : it.paths).map(it => [...path, ...it]),\n\t}))\n\nexport const getInsertPrimary = (result: MutationResultList) =>\n\t!result.some(it => it.error) && result[0] && result[0].result === MutationResultType.ok && result[0].type === ModificationType.create\n\t\t? result[0].primary\n\t\t: undefined\n"],"names":["MutationResultType","MutationResultHint","NothingToDoReason","InputErrorKind","ConstraintType","it"],"mappings":"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"}
@@ -219,7 +219,7 @@ const prependPath = (path, results) => results.map((it) => ({
219
219
  ...it,
220
220
  paths: (it.paths.length === 0 ? [[]] : it.paths).map((it2) => [...path, ...it2])
221
221
  }));
222
- const getInsertPrimary = (result) => result[0] && result[0].result === "ok" && result[0].type === "create" ? result[0].primary : void 0;
222
+ const getInsertPrimary = (result) => !result.some((it) => it.error) && result[0] && result[0].result === "ok" && result[0].type === "create" ? result[0].primary : void 0;
223
223
  export {
224
224
  ConstraintType,
225
225
  InputErrorKind,
@@ -1 +1 @@
1
- {"version":3,"file":"Result.js","sources":["../../../../../packages/engine-content-api/src/mapper/Result.ts"],"sourcesContent":["import { Input, Model, Value } from '@contember/schema'\nimport { MapperInput } from './types'\n\nexport enum MutationResultType {\n\tok = 'ok',\n\tnothingToDo = 'nothingToDo',\n\tnotFoundError = 'notFoundError',\n\tconstraintViolationError = 'constraintViolationError',\n\tnoResultError = 'noResultError',\n\tvalidationError = 'validationError',\n\tinputError = 'inputError',\n\tsqlError = 'sqlError',\n}\n\nexport enum MutationResultHint {\n\tsqlError = 'sqlError',\n\tsubSequentSqlError = 'subsequentSqlError',\n}\n\nexport enum ModificationType {\n\tcreate = 'create',\n\tupdate = 'update',\n\tdelete = 'delete',\n\tjunctionUpdate = 'junctionUpdate',\n}\n\nexport type MutationResult =\n\t| MutationUpdateOk\n\t| MutationCreateOk\n\t| MutationDeleteOk\n\t| MutationJunctionUpdateOk\n\t| MutationEntryNotFoundError\n\t| MutationNothingToDo\n\t| MutationConstraintViolationError\n\t| MutationNoResultError\n\t| MutationInputError\n\t| MutationSqlError\n\nexport type MutationResultList = MutationResult[]\n\ntype Path = ({ field: string } | { index: number; alias?: string })[]\n\ninterface MutationResultInterface {\n\terror: boolean\n\tresult: MutationResultType\n\tpaths: Path[]\n\tmessage?: string\n\thints: MutationResultHint[]\n}\n\nexport type RowValues = { [fieldName: string]: Value.FieldValue }\n\nexport class MutationUpdateOk implements MutationResultInterface {\n\terror = false\n\tresult = MutationResultType.ok as const\n\ttype = ModificationType.update as const\n\thints: MutationResultHint[] = []\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly primary: Value.PrimaryValue,\n\t\tpublic readonly input: MapperInput.UpdateDataInput,\n\t\tpublic readonly values: RowValues,\n\t\tpublic readonly oldValues?: RowValues,\n\t) {}\n}\n\nexport class MutationCreateOk implements MutationResultInterface {\n\terror = false\n\tresult = MutationResultType.ok as const\n\ttype = ModificationType.create as const\n\thints: MutationResultHint[] = []\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly primary: Value.PrimaryValue,\n\t\tpublic readonly input: MapperInput.CreateDataInput,\n\t\tpublic readonly values: RowValues,\n\t) {}\n}\n\nexport class MutationDeleteOk implements MutationResultInterface {\n\terror = false\n\tresult = MutationResultType.ok as const\n\ttype = ModificationType.delete as const\n\thints: MutationResultHint[] = []\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly primary: Value.PrimaryValue,\n\t) {}\n}\n\nexport class MutationJunctionUpdateOk implements MutationResultInterface {\n\terror = false\n\tresult = MutationResultType.ok as const\n\ttype = ModificationType.junctionUpdate as const\n\thints: MutationResultHint[] = []\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly relation: Model.ManyHasManyOwningRelation,\n\t\tpublic readonly owningUnique: Input.PrimaryValue,\n\t\tpublic readonly inverseUnique: Input.PrimaryValue,\n\t) {}\n}\n\nexport enum NothingToDoReason {\n\tnoData = 'noData',\n\temptyRelation = 'emptyRelation',\n\talreadyExists = 'alreadyExists',\n\taborted = 'aborted',\n\talreadyDeleted = 'alreadyDeleted',\n}\n\nexport class MutationNothingToDo implements MutationResultInterface {\n\terror = false\n\tresult = MutationResultType.nothingToDo as const\n\thints: MutationResultHint[] = []\n\n\tconstructor(public readonly paths: Path[], public readonly reason: NothingToDoReason) {}\n}\n\nexport enum InputErrorKind {\n\tnonUniqueWhere = 'nonUniqueWhere',\n\tinvalidData = 'invalidData',\n}\n\nexport class MutationInputError implements MutationResultInterface {\n\terror = true\n\tresult = MutationResultType.inputError as const\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly kind: InputErrorKind,\n\t\tpublic readonly message?: string,\n\t\tpublic readonly hints: MutationResultHint[] = [],\n\t) {}\n}\n\nexport class MutationSqlError implements MutationResultInterface {\n\terror = true\n\tresult = MutationResultType.sqlError as const\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly message?: string,\n\t\tpublic readonly hints: MutationResultHint[] = [],\n\t) {}\n}\n\nexport enum ConstraintType {\n\tnotNull = 'notNull',\n\tuniqueKey = 'uniqueKey',\n\tforeignKey = 'foreignKey',\n}\n\nexport class MutationConstraintViolationError implements MutationResultInterface {\n\terror = true\n\tresult = MutationResultType.constraintViolationError as const\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly constraint: ConstraintType,\n\t\tpublic readonly message?: string,\n\t\tpublic readonly hints: MutationResultHint[] = [],\n\t) {}\n}\n\n// maybe denied by acl\nexport class MutationEntryNotFoundError implements MutationResultInterface {\n\terror = true\n\tresult = MutationResultType.notFoundError as const\n\thints: MutationResultHint[] = []\n\tmessage: string\n\n\tconstructor(public readonly paths: Path[], public readonly where: Input.UniqueWhere | Input.Where) {\n\t\tthis.message = 'for input ' + JSON.stringify(where)\n\t}\n}\n\n// possibly denied by acl\nexport class MutationNoResultError implements MutationResultInterface {\n\terror = true\n\tresult = MutationResultType.noResultError as const\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly message?: string,\n\t\tpublic readonly hints: MutationResultHint[] = [],\n\t) {}\n}\n\nexport const prependPath = (path: Path, results: MutationResultList): MutationResultList =>\n\tresults.map(it => ({\n\t\t...it,\n\t\tpaths: (it.paths.length === 0 ? [[]] : it.paths).map(it => [...path, ...it]),\n\t}))\n\nexport const getInsertPrimary = (result: MutationResultList) =>\n\tresult[0] && result[0].result === MutationResultType.ok && result[0].type === ModificationType.create\n\t\t? result[0].primary\n\t\t: undefined\n"],"names":["MutationResultType","MutationResultHint","NothingToDoReason","InputErrorKind","ConstraintType","it"],"mappings":"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"}
1
+ {"version":3,"file":"Result.js","sources":["../../../../../packages/engine-content-api/src/mapper/Result.ts"],"sourcesContent":["import { Input, Model, Value } from '@contember/schema'\nimport { MapperInput } from './types'\n\nexport enum MutationResultType {\n\tok = 'ok',\n\tnothingToDo = 'nothingToDo',\n\tnotFoundError = 'notFoundError',\n\tconstraintViolationError = 'constraintViolationError',\n\tnoResultError = 'noResultError',\n\tvalidationError = 'validationError',\n\tinputError = 'inputError',\n\tsqlError = 'sqlError',\n}\n\nexport enum MutationResultHint {\n\tsqlError = 'sqlError',\n\tsubSequentSqlError = 'subsequentSqlError',\n}\n\nexport enum ModificationType {\n\tcreate = 'create',\n\tupdate = 'update',\n\tdelete = 'delete',\n\tjunctionUpdate = 'junctionUpdate',\n}\n\nexport type MutationResult =\n\t| MutationUpdateOk\n\t| MutationCreateOk\n\t| MutationDeleteOk\n\t| MutationJunctionUpdateOk\n\t| MutationEntryNotFoundError\n\t| MutationNothingToDo\n\t| MutationConstraintViolationError\n\t| MutationNoResultError\n\t| MutationInputError\n\t| MutationSqlError\n\nexport type MutationResultList = MutationResult[]\n\ntype Path = ({ field: string } | { index: number; alias?: string })[]\n\ninterface MutationResultInterface {\n\terror: boolean\n\tresult: MutationResultType\n\tpaths: Path[]\n\tmessage?: string\n\thints: MutationResultHint[]\n}\n\nexport type RowValues = { [fieldName: string]: Value.FieldValue }\n\nexport class MutationUpdateOk implements MutationResultInterface {\n\terror = false\n\tresult = MutationResultType.ok as const\n\ttype = ModificationType.update as const\n\thints: MutationResultHint[] = []\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly primary: Value.PrimaryValue,\n\t\tpublic readonly input: MapperInput.UpdateDataInput,\n\t\tpublic readonly values: RowValues,\n\t\tpublic readonly oldValues?: RowValues,\n\t) {}\n}\n\nexport class MutationCreateOk implements MutationResultInterface {\n\terror = false\n\tresult = MutationResultType.ok as const\n\ttype = ModificationType.create as const\n\thints: MutationResultHint[] = []\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly primary: Value.PrimaryValue,\n\t\tpublic readonly input: MapperInput.CreateDataInput,\n\t\tpublic readonly values: RowValues,\n\t) {}\n}\n\nexport class MutationDeleteOk implements MutationResultInterface {\n\terror = false\n\tresult = MutationResultType.ok as const\n\ttype = ModificationType.delete as const\n\thints: MutationResultHint[] = []\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly primary: Value.PrimaryValue,\n\t) {}\n}\n\nexport class MutationJunctionUpdateOk implements MutationResultInterface {\n\terror = false\n\tresult = MutationResultType.ok as const\n\ttype = ModificationType.junctionUpdate as const\n\thints: MutationResultHint[] = []\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly relation: Model.ManyHasManyOwningRelation,\n\t\tpublic readonly owningUnique: Input.PrimaryValue,\n\t\tpublic readonly inverseUnique: Input.PrimaryValue,\n\t) {}\n}\n\nexport enum NothingToDoReason {\n\tnoData = 'noData',\n\temptyRelation = 'emptyRelation',\n\talreadyExists = 'alreadyExists',\n\taborted = 'aborted',\n\talreadyDeleted = 'alreadyDeleted',\n}\n\nexport class MutationNothingToDo implements MutationResultInterface {\n\terror = false\n\tresult = MutationResultType.nothingToDo as const\n\thints: MutationResultHint[] = []\n\n\tconstructor(public readonly paths: Path[], public readonly reason: NothingToDoReason) {}\n}\n\nexport enum InputErrorKind {\n\tnonUniqueWhere = 'nonUniqueWhere',\n\tinvalidData = 'invalidData',\n}\n\nexport class MutationInputError implements MutationResultInterface {\n\terror = true\n\tresult = MutationResultType.inputError as const\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly kind: InputErrorKind,\n\t\tpublic readonly message?: string,\n\t\tpublic readonly hints: MutationResultHint[] = [],\n\t) {}\n}\n\nexport class MutationSqlError implements MutationResultInterface {\n\terror = true\n\tresult = MutationResultType.sqlError as const\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly message?: string,\n\t\tpublic readonly hints: MutationResultHint[] = [],\n\t) {}\n}\n\nexport enum ConstraintType {\n\tnotNull = 'notNull',\n\tuniqueKey = 'uniqueKey',\n\tforeignKey = 'foreignKey',\n}\n\nexport class MutationConstraintViolationError implements MutationResultInterface {\n\terror = true\n\tresult = MutationResultType.constraintViolationError as const\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly constraint: ConstraintType,\n\t\tpublic readonly message?: string,\n\t\tpublic readonly hints: MutationResultHint[] = [],\n\t) {}\n}\n\n// maybe denied by acl\nexport class MutationEntryNotFoundError implements MutationResultInterface {\n\terror = true\n\tresult = MutationResultType.notFoundError as const\n\thints: MutationResultHint[] = []\n\tmessage: string\n\n\tconstructor(public readonly paths: Path[], public readonly where: Input.UniqueWhere | Input.OptionalWhere) {\n\t\tthis.message = 'for input ' + JSON.stringify(where)\n\t}\n}\n\n// possibly denied by acl\nexport class MutationNoResultError implements MutationResultInterface {\n\terror = true\n\tresult = MutationResultType.noResultError as const\n\n\tconstructor(\n\t\tpublic readonly paths: Path[],\n\t\tpublic readonly message?: string,\n\t\tpublic readonly hints: MutationResultHint[] = [],\n\t) {}\n}\n\nexport const prependPath = (path: Path, results: MutationResultList): MutationResultList =>\n\tresults.map(it => ({\n\t\t...it,\n\t\tpaths: (it.paths.length === 0 ? [[]] : it.paths).map(it => [...path, ...it]),\n\t}))\n\nexport const getInsertPrimary = (result: MutationResultList) =>\n\t!result.some(it => it.error) && result[0] && result[0].result === MutationResultType.ok && result[0].type === ModificationType.create\n\t\t? result[0].primary\n\t\t: undefined\n"],"names":["MutationResultType","MutationResultHint","NothingToDoReason","InputErrorKind","ConstraintType","it"],"mappings":";;;AAGY,IAAA,uCAAAA,wBAAL;AACNA,sBAAA,IAAK,IAAA;AACLA,sBAAA,aAAc,IAAA;AACdA,sBAAA,eAAgB,IAAA;AAChBA,sBAAA,0BAA2B,IAAA;AAC3BA,sBAAA,eAAgB,IAAA;AAChBA,sBAAA,iBAAkB,IAAA;AAClBA,sBAAA,YAAa,IAAA;AACbA,sBAAA,UAAW,IAAA;AARAA,SAAAA;AAAA,GAAA,sBAAA,CAAA,CAAA;AAWA,IAAA,uCAAAC,wBAAL;AACNA,sBAAA,UAAW,IAAA;AACXA,sBAAA,oBAAqB,IAAA;AAFVA,SAAAA;AAAA,GAAA,sBAAA,CAAA,CAAA;AAsCL,MAAM,iBAAoD;AAAA,EAMhE,YACiB,OACA,QACA,SACA,OACA,QACA,WACf;AANe,SAAA,QAAA;AACA,SAAA,SAAA;AACA,SAAA,UAAA;AACA,SAAA,QAAA;AACA,SAAA,SAAA;AACA,SAAA,YAAA;AAXT,kBAAA,MAAA,SAAA,KAAA;AACC;AAAA,MAAA;AAAA,MAAA;AAAA,MAAA;AAAA;AAAA,IAAA;AACF;AAAA,MAAA;AAAA,MAAA;AAAA,MAAA;AAAA;AAAA,IAAA;AACP,kBAAA,MAAA,SAA8B,EAAC;AAAA,EAAA;AAUhC;AAEO,MAAM,iBAAoD;AAAA,EAMhE,YACiB,OACA,QACA,SACA,OACA,QACf;AALe,SAAA,QAAA;AACA,SAAA,SAAA;AACA,SAAA,UAAA;AACA,SAAA,QAAA;AACA,SAAA,SAAA;AAVT,kBAAA,MAAA,SAAA,KAAA;AACC;AAAA,MAAA;AAAA,MAAA;AAAA,MAAA;AAAA;AAAA,IAAA;AACF;AAAA,MAAA;AAAA,MAAA;AAAA,MAAA;AAAA;AAAA,IAAA;AACP,kBAAA,MAAA,SAA8B,EAAC;AAAA,EAAA;AAShC;AAEO,MAAM,iBAAoD;AAAA,EAMhE,YACiB,OACA,QACA,SACf;AAHe,SAAA,QAAA;AACA,SAAA,SAAA;AACA,SAAA,UAAA;AART,kBAAA,MAAA,SAAA,KAAA;AACC;AAAA,MAAA;AAAA,MAAA;AAAA,MAAA;AAAA;AAAA,IAAA;AACF;AAAA,MAAA;AAAA,MAAA;AAAA,MAAA;AAAA;AAAA,IAAA;AACP,kBAAA,MAAA,SAA8B,EAAC;AAAA,EAAA;AAOhC;AAEO,MAAM,yBAA4D;AAAA,EAMxE,YACiB,OACA,QACA,UACA,cACA,eACf;AALe,SAAA,QAAA;AACA,SAAA,SAAA;AACA,SAAA,WAAA;AACA,SAAA,eAAA;AACA,SAAA,gBAAA;AAVT,kBAAA,MAAA,SAAA,KAAA;AACC;AAAA,MAAA;AAAA,MAAA;AAAA,MAAA;AAAA;AAAA,IAAA;AACF;AAAA,MAAA;AAAA,MAAA;AAAA,MAAA;AAAA;AAAA,IAAA;AACP,kBAAA,MAAA,SAA8B,EAAC;AAAA,EAAA;AAShC;AAEY,IAAA,sCAAAC,uBAAL;AACNA,qBAAA,QAAS,IAAA;AACTA,qBAAA,eAAgB,IAAA;AAChBA,qBAAA,eAAgB,IAAA;AAChBA,qBAAA,SAAU,IAAA;AACVA,qBAAA,gBAAiB,IAAA;AALNA,SAAAA;AAAA,GAAA,qBAAA,CAAA,CAAA;AAQL,MAAM,oBAAuD;AAAA,EAKnE,YAA4B,OAA+B,QAA2B;AAA1D,SAAA,QAAA;AAA+B,SAAA,SAAA;AAJnD,kBAAA,MAAA,SAAA,KAAA;AACC;AAAA,MAAA;AAAA,MAAA;AAAA,MAAA;AAAA;AAAA,IAAA;AACT,kBAAA,MAAA,SAA8B,EAAC;AAAA,EAAA;AAGhC;AAEY,IAAA,mCAAAC,oBAAL;AACNA,kBAAA,gBAAiB,IAAA;AACjBA,kBAAA,aAAc,IAAA;AAFHA,SAAAA;AAAA,GAAA,kBAAA,CAAA,CAAA;AAKL,MAAM,mBAAsD;AAAA,EAIlE,YACiB,OACA,MACA,SACA,QAA8B,CAAA,GAC7C;AAJe,SAAA,QAAA;AACA,SAAA,OAAA;AACA,SAAA,UAAA;AACA,SAAA,QAAA;AAPT,kBAAA,MAAA,SAAA,IAAA;AACC;AAAA,MAAA;AAAA,MAAA;AAAA,MAAA;AAAA;AAAA,IAAA;AAAA,EAAA;AAQV;AAEO,MAAM,iBAAoD;AAAA,EAIhE,YACiB,OACA,SACA,QAA8B,CAAA,GAC7C;AAHe,SAAA,QAAA;AACA,SAAA,UAAA;AACA,SAAA,QAAA;AANT,kBAAA,MAAA,SAAA,IAAA;AACC;AAAA,MAAA;AAAA,MAAA;AAAA,MAAA;AAAA;AAAA,IAAA;AAAA,EAAA;AAOV;AAEY,IAAA,mCAAAC,oBAAL;AACNA,kBAAA,SAAU,IAAA;AACVA,kBAAA,WAAY,IAAA;AACZA,kBAAA,YAAa,IAAA;AAHFA,SAAAA;AAAA,GAAA,kBAAA,CAAA,CAAA;AAML,MAAM,iCAAoE;AAAA,EAIhF,YACiB,OACA,YACA,SACA,QAA8B,CAAA,GAC7C;AAJe,SAAA,QAAA;AACA,SAAA,aAAA;AACA,SAAA,UAAA;AACA,SAAA,QAAA;AAPT,kBAAA,MAAA,SAAA,IAAA;AACC;AAAA,MAAA;AAAA,MAAA;AAAA,MAAA;AAAA;AAAA,IAAA;AAAA,EAAA;AAQV;AAGO,MAAM,2BAA8D;AAAA,EAM1E,YAA4B,OAA+B,OAAgD;AAA/E,SAAA,QAAA;AAA+B,SAAA,QAAA;AALnD,kBAAA,MAAA,SAAA,IAAA;AACC;AAAA,MAAA;AAAA,MAAA;AAAA,MAAA;AAAA;AAAA,IAAA;AACT,kBAAA,MAAA,SAA8B,EAAC;AAC/B,kBAAA,MAAA,SAAA;AAGC,SAAK,UAAU,eAAe,KAAK,UAAU,KAAK;AAAA,EAAA;AAEpD;AAGO,MAAM,sBAAyD;AAAA,EAIrE,YACiB,OACA,SACA,QAA8B,CAAA,GAC7C;AAHe,SAAA,QAAA;AACA,SAAA,UAAA;AACA,SAAA,QAAA;AANT,kBAAA,MAAA,SAAA,IAAA;AACC;AAAA,MAAA;AAAA,MAAA;AAAA,MAAA;AAAA;AAAA,IAAA;AAAA,EAAA;AAOV;AAEO,MAAM,cAAc,CAAC,MAAY,YACvC,QAAQ,IAAI,CAAO,QAAA;AAAA,EAClB,GAAG;AAAA,EACH,QAAQ,GAAG,MAAM,WAAW,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO,IAAI,CAAAC,QAAM,CAAC,GAAG,MAAM,GAAGA,GAAE,CAAC;AAC5E,EAAE;AAEU,MAAA,mBAAmB,CAAC,WAChC,CAAC,OAAO,KAAK,CAAA,OAAM,GAAG,KAAK,KAAK,OAAO,CAAC,KAAK,OAAO,CAAC,EAAE,WAAW,QAAyB,OAAO,CAAC,EAAE,SAAS,WAC3G,OAAO,CAAC,EAAE,UACV;"}
@@ -34,8 +34,12 @@ class ConditionBuilder {
34
34
  gt: (builder2, value) => builder2.compare(columnIdentifier, Database.Operator.gt, value),
35
35
  gte: (builder2, value) => builder2.compare(columnIdentifier, Database.Operator.gte, value),
36
36
  includes: (builder2, value) => {
37
- const cast = columnType.type === schema.Model.ColumnType.Enum ? `${Database.Compiler.SCHEMA_PLACEHOLDER}."${columnType.columnType}"` : columnType.columnType;
38
- return builder2.raw(`${Database.formatColumnIdentifier(columnIdentifier)} @> ARRAY[?]::${cast}[]`, value);
37
+ if (columnType.type === schema.Model.ColumnType.Json) {
38
+ return builder2.raw(`${Database.formatColumnIdentifier(columnIdentifier)} @> ?::jsonb`, JSON.stringify(value));
39
+ } else {
40
+ const cast = columnType.type === schema.Model.ColumnType.Enum ? `${Database.Compiler.SCHEMA_PLACEHOLDER}."${columnType.columnType}"` : columnType.columnType;
41
+ return builder2.raw(`${Database.formatColumnIdentifier(columnIdentifier)} @> ARRAY[?]::${cast}[]`, value);
42
+ }
39
43
  },
40
44
  maxLength: (builder2, value) => builder2.raw(`array_length(${Database.formatColumnIdentifier(columnIdentifier)}, 1) <= ?`, value),
41
45
  minLength: (builder2, value) => builder2.raw(`array_length(${Database.formatColumnIdentifier(columnIdentifier)}, 1) >= ?`, value),
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionBuilder.cjs","sources":["../../../../../../packages/engine-content-api/src/mapper/select/ConditionBuilder.ts"],"sourcesContent":["import { Input, Model } from '@contember/schema'\nimport { QueryBuilder, ConditionBuilder as SqlConditionBuilder, Operator, Literal, formatColumnIdentifier, Compiler } from '@contember/database'\nimport { UserError } from '../../exception'\n\nexport class ConditionBuilder {\n\tpublic build(\n\t\tbuilder: SqlConditionBuilder,\n\t\ttableName: string,\n\t\tcolumnName: string,\n\t\tcolumnType: Pick<Model.AnyColumn, 'type' | 'list' | 'columnType'>,\n\t\tcondition: Input.Condition<any> | null,\n\t): SqlConditionBuilder {\n\t\tif (condition === null) {\n\t\t\treturn builder\n\t\t}\n\t\tconst entries = Object.entries(condition)\n\t\t\t.filter(<T extends keyof Input.Condition>(it: [string, any]): it is [T, Input.Condition[T]] =>\n\t\t\t\tit[1] !== null,\n\t\t\t)\n\t\tif (entries.length === 0) {\n\t\t\treturn builder\n\t\t}\n\t\tif (entries.length > 1) {\n\t\t\tthrow new UserError(\n\t\t\t\t'Only single field is allowed. If you want to combine multiple conditions, use \"and\" or \"or\". Got: ' +\n\t\t\t\t\tJSON.stringify(condition),\n\t\t\t)\n\t\t}\n\t\tconst columnIdentifier: QueryBuilder.ColumnIdentifier = [tableName, columnName]\n\n\t\tconst handler: {\n\t\t\t[K in keyof Required<Input.Condition<any>>]: (\n\t\t\t\tbuilder: SqlConditionBuilder,\n\t\t\t\tparam: Exclude<Input.Condition<any>[K], undefined>,\n\t\t\t) => SqlConditionBuilder\n\t\t} = {\n\t\t\tand: (builder, expressions) => builder.and(builder2 => expressions.reduce((builder3, expr) => this.build(builder3, tableName, columnName, columnType, expr), builder2)),\n\t\t\tor: (builder, expressions) => builder.or(builder2 => expressions.reduce((builder3, expr) => this.build(builder3, tableName, columnName, columnType, expr), builder2)),\n\t\t\tnot: (builder, expression) => builder.not(builder2 => this.build(builder2, tableName, columnName, columnType, expression)),\n\n\t\t\tisNull: (builder, value) => value ? builder.isNull(columnIdentifier) : builder.not(clause => clause.isNull(columnIdentifier)),\n\n\t\t\teq: (builder, value) => builder.compare(columnIdentifier, Operator.eq, value),\n\t\t\tnotEq: (builder, value) => builder.compare(columnIdentifier, Operator.notEq, value),\n\t\t\tin: (builder, values) => builder.in(columnIdentifier, values, columnType.columnType),\n\t\t\tnotIn: (builder, values) => builder.not(builder2 => builder2.in(columnIdentifier, values)),\n\t\t\tlt: (builder, value) => builder.compare(columnIdentifier, Operator.lt, value),\n\t\t\tlte: (builder, value) => builder.compare(columnIdentifier, Operator.lte, value),\n\t\t\tgt: (builder, value) => builder.compare(columnIdentifier, Operator.gt, value),\n\t\t\tgte: (builder, value) => builder.compare(columnIdentifier, Operator.gte, value),\n\n\t\t\tincludes: (builder, value) => {\n\t\t\t\tconst cast = columnType.type === Model.ColumnType.Enum\n\t\t\t\t\t? `${Compiler.SCHEMA_PLACEHOLDER}.\"${columnType.columnType}\"`\n\t\t\t\t\t: columnType.columnType\n\n\t\t\t\treturn builder.raw(`${formatColumnIdentifier(columnIdentifier)} @> ARRAY[?]::${cast}[]`, value)\n\t\t\t},\n\t\t\tmaxLength: (builder, value) => builder.raw(`array_length(${formatColumnIdentifier(columnIdentifier)}, 1) <= ?`, value),\n\t\t\tminLength: (builder, value) => builder.raw(`array_length(${formatColumnIdentifier(columnIdentifier)}, 1) >= ?`, value),\n\n\t\t\tcontains: (builder, value) => builder.compare(columnIdentifier, Operator.contains, value),\n\t\t\tstartsWith: (builder, value) => builder.compare(columnIdentifier, Operator.startsWith, value),\n\t\t\tendsWith: (builder, value) => builder.compare(columnIdentifier, Operator.endsWith, value),\n\t\t\tcontainsCI: (builder, value) => builder.compare(columnIdentifier, Operator.containsCI, value),\n\t\t\tstartsWithCI: (builder, value) => builder.compare(columnIdentifier, Operator.startsWithCI, value),\n\t\t\tendsWithCI: (builder, value) => builder.compare(columnIdentifier, Operator.endsWithCI, value),\n\n\t\t\tnever: builder => builder.raw('false'),\n\t\t\talways: builder => builder.raw('true'),\n\n\t\t\t// deprecated\n\t\t\tnull: (builder, value) => value ? builder.isNull(columnIdentifier) : builder.not(clause => clause.isNull(columnIdentifier)),\n\t\t}\n\n\t\treturn handler[entries[0][0]](builder, entries[0][1])\n\t}\n}\n"],"names":["UserError","builder","builder2","Operator","Model","Compiler","formatColumnIdentifier"],"mappings":"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"}
1
+ {"version":3,"file":"ConditionBuilder.cjs","sources":["../../../../../../packages/engine-content-api/src/mapper/select/ConditionBuilder.ts"],"sourcesContent":["import { Input, Model } from '@contember/schema'\nimport { QueryBuilder, ConditionBuilder as SqlConditionBuilder, Operator, Literal, formatColumnIdentifier, Compiler } from '@contember/database'\nimport { UserError } from '../../exception'\n\nexport class ConditionBuilder {\n\tpublic build(\n\t\tbuilder: SqlConditionBuilder,\n\t\ttableName: string,\n\t\tcolumnName: string,\n\t\tcolumnType: Pick<Model.AnyColumn, 'type' | 'list' | 'columnType'>,\n\t\tcondition: Input.Condition<any> | null,\n\t): SqlConditionBuilder {\n\t\tif (condition === null) {\n\t\t\treturn builder\n\t\t}\n\t\tconst entries = Object.entries(condition)\n\t\t\t.filter(<T extends keyof Input.Condition>(it: [string, any]): it is [T, Input.Condition[T]] =>\n\t\t\t\tit[1] !== null,\n\t\t\t)\n\t\tif (entries.length === 0) {\n\t\t\treturn builder\n\t\t}\n\t\tif (entries.length > 1) {\n\t\t\tthrow new UserError(\n\t\t\t\t'Only single field is allowed. If you want to combine multiple conditions, use \"and\" or \"or\". Got: ' +\n\t\t\t\t\tJSON.stringify(condition),\n\t\t\t)\n\t\t}\n\t\tconst columnIdentifier: QueryBuilder.ColumnIdentifier = [tableName, columnName]\n\n\t\tconst handler: {\n\t\t\t[K in keyof Required<Input.Condition<any>>]: (\n\t\t\t\tbuilder: SqlConditionBuilder,\n\t\t\t\tparam: Exclude<Input.Condition<any>[K], undefined>,\n\t\t\t) => SqlConditionBuilder\n\t\t} = {\n\t\t\tand: (builder, expressions) => builder.and(builder2 => expressions.reduce((builder3, expr) => this.build(builder3, tableName, columnName, columnType, expr), builder2)),\n\t\t\tor: (builder, expressions) => builder.or(builder2 => expressions.reduce((builder3, expr) => this.build(builder3, tableName, columnName, columnType, expr), builder2)),\n\t\t\tnot: (builder, expression) => builder.not(builder2 => this.build(builder2, tableName, columnName, columnType, expression)),\n\n\t\t\tisNull: (builder, value) => value ? builder.isNull(columnIdentifier) : builder.not(clause => clause.isNull(columnIdentifier)),\n\n\t\t\teq: (builder, value) => builder.compare(columnIdentifier, Operator.eq, value),\n\t\t\tnotEq: (builder, value) => builder.compare(columnIdentifier, Operator.notEq, value),\n\t\t\tin: (builder, values) => builder.in(columnIdentifier, values, columnType.columnType),\n\t\t\tnotIn: (builder, values) => builder.not(builder2 => builder2.in(columnIdentifier, values)),\n\t\t\tlt: (builder, value) => builder.compare(columnIdentifier, Operator.lt, value),\n\t\t\tlte: (builder, value) => builder.compare(columnIdentifier, Operator.lte, value),\n\t\t\tgt: (builder, value) => builder.compare(columnIdentifier, Operator.gt, value),\n\t\t\tgte: (builder, value) => builder.compare(columnIdentifier, Operator.gte, value),\n\n\t\t\tincludes: (builder, value: any) => {\n\t\t\t\tif (columnType.type === Model.ColumnType.Json) {\n\t\t\t\t\t// For JSON columns, use @> operator to check if JSON contains the value\n\t\t\t\t\treturn builder.raw(`${formatColumnIdentifier(columnIdentifier)} @> ?::jsonb`, JSON.stringify(value))\n\t\t\t\t} else {\n\t\t\t\t\t// For array columns, use @> operator with array casting\n\t\t\t\t\tconst cast = columnType.type === Model.ColumnType.Enum\n\t\t\t\t\t\t? `${Compiler.SCHEMA_PLACEHOLDER}.\"${columnType.columnType}\"`\n\t\t\t\t\t\t: columnType.columnType\n\n\t\t\t\t\treturn builder.raw(`${formatColumnIdentifier(columnIdentifier)} @> ARRAY[?]::${cast}[]`, value)\n\t\t\t\t}\n\t\t\t},\n\t\t\tmaxLength: (builder, value) => builder.raw(`array_length(${formatColumnIdentifier(columnIdentifier)}, 1) <= ?`, value),\n\t\t\tminLength: (builder, value) => builder.raw(`array_length(${formatColumnIdentifier(columnIdentifier)}, 1) >= ?`, value),\n\n\t\t\tcontains: (builder, value) => builder.compare(columnIdentifier, Operator.contains, value),\n\t\t\tstartsWith: (builder, value) => builder.compare(columnIdentifier, Operator.startsWith, value),\n\t\t\tendsWith: (builder, value) => builder.compare(columnIdentifier, Operator.endsWith, value),\n\t\t\tcontainsCI: (builder, value) => builder.compare(columnIdentifier, Operator.containsCI, value),\n\t\t\tstartsWithCI: (builder, value) => builder.compare(columnIdentifier, Operator.startsWithCI, value),\n\t\t\tendsWithCI: (builder, value) => builder.compare(columnIdentifier, Operator.endsWithCI, value),\n\n\t\t\tnever: builder => builder.raw('false'),\n\t\t\talways: builder => builder.raw('true'),\n\n\t\t\t// deprecated\n\t\t\tnull: (builder, value) => value ? builder.isNull(columnIdentifier) : builder.not(clause => clause.isNull(columnIdentifier)),\n\t\t}\n\n\t\treturn handler[entries[0][0]](builder, entries[0][1])\n\t}\n}\n"],"names":["UserError","builder","builder2","Operator","Model","formatColumnIdentifier","Compiler"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { Model } from "@contember/schema";
2
- import { Operator, Compiler, formatColumnIdentifier } from "@contember/database";
2
+ import { Operator, formatColumnIdentifier, Compiler } from "@contember/database";
3
3
  import { UserError } from "../../exception.js";
4
4
  class ConditionBuilder {
5
5
  build(builder, tableName, columnName, columnType, condition) {
@@ -32,8 +32,12 @@ class ConditionBuilder {
32
32
  gt: (builder2, value) => builder2.compare(columnIdentifier, Operator.gt, value),
33
33
  gte: (builder2, value) => builder2.compare(columnIdentifier, Operator.gte, value),
34
34
  includes: (builder2, value) => {
35
- const cast = columnType.type === Model.ColumnType.Enum ? `${Compiler.SCHEMA_PLACEHOLDER}."${columnType.columnType}"` : columnType.columnType;
36
- return builder2.raw(`${formatColumnIdentifier(columnIdentifier)} @> ARRAY[?]::${cast}[]`, value);
35
+ if (columnType.type === Model.ColumnType.Json) {
36
+ return builder2.raw(`${formatColumnIdentifier(columnIdentifier)} @> ?::jsonb`, JSON.stringify(value));
37
+ } else {
38
+ const cast = columnType.type === Model.ColumnType.Enum ? `${Compiler.SCHEMA_PLACEHOLDER}."${columnType.columnType}"` : columnType.columnType;
39
+ return builder2.raw(`${formatColumnIdentifier(columnIdentifier)} @> ARRAY[?]::${cast}[]`, value);
40
+ }
37
41
  },
38
42
  maxLength: (builder2, value) => builder2.raw(`array_length(${formatColumnIdentifier(columnIdentifier)}, 1) <= ?`, value),
39
43
  minLength: (builder2, value) => builder2.raw(`array_length(${formatColumnIdentifier(columnIdentifier)}, 1) >= ?`, value),
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionBuilder.js","sources":["../../../../../../packages/engine-content-api/src/mapper/select/ConditionBuilder.ts"],"sourcesContent":["import { Input, Model } from '@contember/schema'\nimport { QueryBuilder, ConditionBuilder as SqlConditionBuilder, Operator, Literal, formatColumnIdentifier, Compiler } from '@contember/database'\nimport { UserError } from '../../exception'\n\nexport class ConditionBuilder {\n\tpublic build(\n\t\tbuilder: SqlConditionBuilder,\n\t\ttableName: string,\n\t\tcolumnName: string,\n\t\tcolumnType: Pick<Model.AnyColumn, 'type' | 'list' | 'columnType'>,\n\t\tcondition: Input.Condition<any> | null,\n\t): SqlConditionBuilder {\n\t\tif (condition === null) {\n\t\t\treturn builder\n\t\t}\n\t\tconst entries = Object.entries(condition)\n\t\t\t.filter(<T extends keyof Input.Condition>(it: [string, any]): it is [T, Input.Condition[T]] =>\n\t\t\t\tit[1] !== null,\n\t\t\t)\n\t\tif (entries.length === 0) {\n\t\t\treturn builder\n\t\t}\n\t\tif (entries.length > 1) {\n\t\t\tthrow new UserError(\n\t\t\t\t'Only single field is allowed. If you want to combine multiple conditions, use \"and\" or \"or\". Got: ' +\n\t\t\t\t\tJSON.stringify(condition),\n\t\t\t)\n\t\t}\n\t\tconst columnIdentifier: QueryBuilder.ColumnIdentifier = [tableName, columnName]\n\n\t\tconst handler: {\n\t\t\t[K in keyof Required<Input.Condition<any>>]: (\n\t\t\t\tbuilder: SqlConditionBuilder,\n\t\t\t\tparam: Exclude<Input.Condition<any>[K], undefined>,\n\t\t\t) => SqlConditionBuilder\n\t\t} = {\n\t\t\tand: (builder, expressions) => builder.and(builder2 => expressions.reduce((builder3, expr) => this.build(builder3, tableName, columnName, columnType, expr), builder2)),\n\t\t\tor: (builder, expressions) => builder.or(builder2 => expressions.reduce((builder3, expr) => this.build(builder3, tableName, columnName, columnType, expr), builder2)),\n\t\t\tnot: (builder, expression) => builder.not(builder2 => this.build(builder2, tableName, columnName, columnType, expression)),\n\n\t\t\tisNull: (builder, value) => value ? builder.isNull(columnIdentifier) : builder.not(clause => clause.isNull(columnIdentifier)),\n\n\t\t\teq: (builder, value) => builder.compare(columnIdentifier, Operator.eq, value),\n\t\t\tnotEq: (builder, value) => builder.compare(columnIdentifier, Operator.notEq, value),\n\t\t\tin: (builder, values) => builder.in(columnIdentifier, values, columnType.columnType),\n\t\t\tnotIn: (builder, values) => builder.not(builder2 => builder2.in(columnIdentifier, values)),\n\t\t\tlt: (builder, value) => builder.compare(columnIdentifier, Operator.lt, value),\n\t\t\tlte: (builder, value) => builder.compare(columnIdentifier, Operator.lte, value),\n\t\t\tgt: (builder, value) => builder.compare(columnIdentifier, Operator.gt, value),\n\t\t\tgte: (builder, value) => builder.compare(columnIdentifier, Operator.gte, value),\n\n\t\t\tincludes: (builder, value) => {\n\t\t\t\tconst cast = columnType.type === Model.ColumnType.Enum\n\t\t\t\t\t? `${Compiler.SCHEMA_PLACEHOLDER}.\"${columnType.columnType}\"`\n\t\t\t\t\t: columnType.columnType\n\n\t\t\t\treturn builder.raw(`${formatColumnIdentifier(columnIdentifier)} @> ARRAY[?]::${cast}[]`, value)\n\t\t\t},\n\t\t\tmaxLength: (builder, value) => builder.raw(`array_length(${formatColumnIdentifier(columnIdentifier)}, 1) <= ?`, value),\n\t\t\tminLength: (builder, value) => builder.raw(`array_length(${formatColumnIdentifier(columnIdentifier)}, 1) >= ?`, value),\n\n\t\t\tcontains: (builder, value) => builder.compare(columnIdentifier, Operator.contains, value),\n\t\t\tstartsWith: (builder, value) => builder.compare(columnIdentifier, Operator.startsWith, value),\n\t\t\tendsWith: (builder, value) => builder.compare(columnIdentifier, Operator.endsWith, value),\n\t\t\tcontainsCI: (builder, value) => builder.compare(columnIdentifier, Operator.containsCI, value),\n\t\t\tstartsWithCI: (builder, value) => builder.compare(columnIdentifier, Operator.startsWithCI, value),\n\t\t\tendsWithCI: (builder, value) => builder.compare(columnIdentifier, Operator.endsWithCI, value),\n\n\t\t\tnever: builder => builder.raw('false'),\n\t\t\talways: builder => builder.raw('true'),\n\n\t\t\t// deprecated\n\t\t\tnull: (builder, value) => value ? builder.isNull(columnIdentifier) : builder.not(clause => clause.isNull(columnIdentifier)),\n\t\t}\n\n\t\treturn handler[entries[0][0]](builder, entries[0][1])\n\t}\n}\n"],"names":["builder","builder2"],"mappings":"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"}
1
+ {"version":3,"file":"ConditionBuilder.js","sources":["../../../../../../packages/engine-content-api/src/mapper/select/ConditionBuilder.ts"],"sourcesContent":["import { Input, Model } from '@contember/schema'\nimport { QueryBuilder, ConditionBuilder as SqlConditionBuilder, Operator, Literal, formatColumnIdentifier, Compiler } from '@contember/database'\nimport { UserError } from '../../exception'\n\nexport class ConditionBuilder {\n\tpublic build(\n\t\tbuilder: SqlConditionBuilder,\n\t\ttableName: string,\n\t\tcolumnName: string,\n\t\tcolumnType: Pick<Model.AnyColumn, 'type' | 'list' | 'columnType'>,\n\t\tcondition: Input.Condition<any> | null,\n\t): SqlConditionBuilder {\n\t\tif (condition === null) {\n\t\t\treturn builder\n\t\t}\n\t\tconst entries = Object.entries(condition)\n\t\t\t.filter(<T extends keyof Input.Condition>(it: [string, any]): it is [T, Input.Condition[T]] =>\n\t\t\t\tit[1] !== null,\n\t\t\t)\n\t\tif (entries.length === 0) {\n\t\t\treturn builder\n\t\t}\n\t\tif (entries.length > 1) {\n\t\t\tthrow new UserError(\n\t\t\t\t'Only single field is allowed. If you want to combine multiple conditions, use \"and\" or \"or\". Got: ' +\n\t\t\t\t\tJSON.stringify(condition),\n\t\t\t)\n\t\t}\n\t\tconst columnIdentifier: QueryBuilder.ColumnIdentifier = [tableName, columnName]\n\n\t\tconst handler: {\n\t\t\t[K in keyof Required<Input.Condition<any>>]: (\n\t\t\t\tbuilder: SqlConditionBuilder,\n\t\t\t\tparam: Exclude<Input.Condition<any>[K], undefined>,\n\t\t\t) => SqlConditionBuilder\n\t\t} = {\n\t\t\tand: (builder, expressions) => builder.and(builder2 => expressions.reduce((builder3, expr) => this.build(builder3, tableName, columnName, columnType, expr), builder2)),\n\t\t\tor: (builder, expressions) => builder.or(builder2 => expressions.reduce((builder3, expr) => this.build(builder3, tableName, columnName, columnType, expr), builder2)),\n\t\t\tnot: (builder, expression) => builder.not(builder2 => this.build(builder2, tableName, columnName, columnType, expression)),\n\n\t\t\tisNull: (builder, value) => value ? builder.isNull(columnIdentifier) : builder.not(clause => clause.isNull(columnIdentifier)),\n\n\t\t\teq: (builder, value) => builder.compare(columnIdentifier, Operator.eq, value),\n\t\t\tnotEq: (builder, value) => builder.compare(columnIdentifier, Operator.notEq, value),\n\t\t\tin: (builder, values) => builder.in(columnIdentifier, values, columnType.columnType),\n\t\t\tnotIn: (builder, values) => builder.not(builder2 => builder2.in(columnIdentifier, values)),\n\t\t\tlt: (builder, value) => builder.compare(columnIdentifier, Operator.lt, value),\n\t\t\tlte: (builder, value) => builder.compare(columnIdentifier, Operator.lte, value),\n\t\t\tgt: (builder, value) => builder.compare(columnIdentifier, Operator.gt, value),\n\t\t\tgte: (builder, value) => builder.compare(columnIdentifier, Operator.gte, value),\n\n\t\t\tincludes: (builder, value: any) => {\n\t\t\t\tif (columnType.type === Model.ColumnType.Json) {\n\t\t\t\t\t// For JSON columns, use @> operator to check if JSON contains the value\n\t\t\t\t\treturn builder.raw(`${formatColumnIdentifier(columnIdentifier)} @> ?::jsonb`, JSON.stringify(value))\n\t\t\t\t} else {\n\t\t\t\t\t// For array columns, use @> operator with array casting\n\t\t\t\t\tconst cast = columnType.type === Model.ColumnType.Enum\n\t\t\t\t\t\t? `${Compiler.SCHEMA_PLACEHOLDER}.\"${columnType.columnType}\"`\n\t\t\t\t\t\t: columnType.columnType\n\n\t\t\t\t\treturn builder.raw(`${formatColumnIdentifier(columnIdentifier)} @> ARRAY[?]::${cast}[]`, value)\n\t\t\t\t}\n\t\t\t},\n\t\t\tmaxLength: (builder, value) => builder.raw(`array_length(${formatColumnIdentifier(columnIdentifier)}, 1) <= ?`, value),\n\t\t\tminLength: (builder, value) => builder.raw(`array_length(${formatColumnIdentifier(columnIdentifier)}, 1) >= ?`, value),\n\n\t\t\tcontains: (builder, value) => builder.compare(columnIdentifier, Operator.contains, value),\n\t\t\tstartsWith: (builder, value) => builder.compare(columnIdentifier, Operator.startsWith, value),\n\t\t\tendsWith: (builder, value) => builder.compare(columnIdentifier, Operator.endsWith, value),\n\t\t\tcontainsCI: (builder, value) => builder.compare(columnIdentifier, Operator.containsCI, value),\n\t\t\tstartsWithCI: (builder, value) => builder.compare(columnIdentifier, Operator.startsWithCI, value),\n\t\t\tendsWithCI: (builder, value) => builder.compare(columnIdentifier, Operator.endsWithCI, value),\n\n\t\t\tnever: builder => builder.raw('false'),\n\t\t\talways: builder => builder.raw('true'),\n\n\t\t\t// deprecated\n\t\t\tnull: (builder, value) => value ? builder.isNull(columnIdentifier) : builder.not(clause => clause.isNull(columnIdentifier)),\n\t\t}\n\n\t\treturn handler[entries[0][0]](builder, entries[0][1])\n\t}\n}\n"],"names":["builder","builder2"],"mappings":"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"}
@@ -7,11 +7,15 @@ var __defProp = Object.defineProperty;
7
7
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
8
  var __publicField = (obj, key, value) => __defNormalProp(obj, key + "", value);
9
9
  const _WhereOptimizer = class _WhereOptimizer2 {
10
- constructor(model, conditionOptimizer) {
10
+ constructor(model, conditionOptimizer, options) {
11
11
  this.model = model;
12
12
  this.conditionOptimizer = conditionOptimizer;
13
+ this.options = options;
13
14
  }
14
15
  optimize(where, entity, { relationPath = [], evaluatedPredicates = [] } = {}) {
16
+ if (this.options?.disable) {
17
+ return where;
18
+ }
15
19
  let processedRelationPath = [];
16
20
  for (const i in relationPath) {
17
21
  const el = relationPath[i];
@@ -107,7 +111,7 @@ const _WhereOptimizer = class _WhereOptimizer2 {
107
111
  crossOptimize(operands, entity, replacement, relationPath) {
108
112
  let result = operands;
109
113
  let copied = false;
110
- const count = result.length;
114
+ const count = Math.min(result.length, this.options?.maxCrossOptimizationInput ?? 50);
111
115
  for (let i = 0; i < count; i++) {
112
116
  for (let j = 0; j < count; j++) {
113
117
  const a = result[j];