@abedmurrar/objection 4.0.0-alpha.0 → 4.0.0-beta.1

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 (192) hide show
  1. package/README.md +103 -67
  2. package/lib/index.mjs +6 -0
  3. package/lib/initialize.js +6 -9
  4. package/lib/model/AjvValidator.js +235 -282
  5. package/lib/model/Model.js +653 -823
  6. package/lib/model/ModifierNotFoundError.js +5 -7
  7. package/lib/model/NotFoundError.js +14 -18
  8. package/lib/model/RelationDoesNotExistError.js +6 -9
  9. package/lib/model/ValidationError.js +33 -41
  10. package/lib/model/Validator.js +15 -21
  11. package/lib/model/getModel.js +1 -3
  12. package/lib/model/graph/ModelGraph.js +44 -64
  13. package/lib/model/graph/ModelGraphBuilder.js +164 -217
  14. package/lib/model/graph/ModelGraphEdge.js +31 -43
  15. package/lib/model/graph/ModelGraphNode.js +192 -231
  16. package/lib/model/inheritModel.js +9 -18
  17. package/lib/model/modelBindKnex.js +48 -62
  18. package/lib/model/modelClone.js +79 -98
  19. package/lib/model/modelColPropMap.js +16 -26
  20. package/lib/model/modelConcurrency.js +24 -0
  21. package/lib/model/modelId.js +44 -49
  22. package/lib/model/modelJsonAttributes.js +56 -76
  23. package/lib/model/modelParseRelations.js +68 -67
  24. package/lib/model/modelQueryProps.js +76 -107
  25. package/lib/model/modelSet.js +92 -112
  26. package/lib/model/modelTableMetadata.js +60 -72
  27. package/lib/model/modelToJson.js +120 -150
  28. package/lib/model/modelUtils.js +30 -37
  29. package/lib/model/modelValidate.js +34 -42
  30. package/lib/model/modelValues.js +78 -91
  31. package/lib/model/modelVisitor.js +22 -29
  32. package/lib/objection.js +42 -67
  33. package/lib/queryBuilder/FunctionBuilder.js +231 -279
  34. package/lib/queryBuilder/InternalOptions.js +19 -24
  35. package/lib/queryBuilder/JoinBuilder.js +116 -149
  36. package/lib/queryBuilder/QueryBuilder.js +1009 -1271
  37. package/lib/queryBuilder/QueryBuilderBase.js +647 -865
  38. package/lib/queryBuilder/QueryBuilderContext.js +14 -21
  39. package/lib/queryBuilder/QueryBuilderContextBase.js +20 -29
  40. package/lib/queryBuilder/QueryBuilderOperationSupport.js +462 -536
  41. package/lib/queryBuilder/QueryBuilderUserContext.js +19 -25
  42. package/lib/queryBuilder/RawBuilder.js +58 -73
  43. package/lib/queryBuilder/ReferenceBuilder.js +232 -270
  44. package/lib/queryBuilder/RelationExpression.js +322 -380
  45. package/lib/queryBuilder/StaticHookArguments.js +94 -106
  46. package/lib/queryBuilder/ValueBuilder.js +100 -112
  47. package/lib/queryBuilder/expressions.js +86 -116
  48. package/lib/queryBuilder/functions/mysql.js +642 -697
  49. package/lib/queryBuilder/graph/GraphAction.js +44 -59
  50. package/lib/queryBuilder/graph/GraphData.js +7 -9
  51. package/lib/queryBuilder/graph/GraphFetcher.js +115 -151
  52. package/lib/queryBuilder/graph/GraphNodeDbExistence.js +114 -152
  53. package/lib/queryBuilder/graph/GraphOperation.js +16 -22
  54. package/lib/queryBuilder/graph/GraphOptions.js +143 -185
  55. package/lib/queryBuilder/graph/GraphUpsert.js +167 -241
  56. package/lib/queryBuilder/graph/delete/GraphDelete.js +8 -13
  57. package/lib/queryBuilder/graph/delete/GraphDeleteAction.js +44 -62
  58. package/lib/queryBuilder/graph/insert/GraphInsert.js +99 -128
  59. package/lib/queryBuilder/graph/insert/GraphInsertAction.js +151 -193
  60. package/lib/queryBuilder/graph/insert/JoinRowGraphInsertAction.js +57 -79
  61. package/lib/queryBuilder/graph/patch/GraphPatch.js +8 -13
  62. package/lib/queryBuilder/graph/patch/GraphPatchAction.js +181 -234
  63. package/lib/queryBuilder/graph/recursiveUpsert/GraphRecursiveUpsert.js +16 -21
  64. package/lib/queryBuilder/graph/recursiveUpsert/GraphRecursiveUpsertAction.js +80 -110
  65. package/lib/queryBuilder/join/JoinResultColumn.js +14 -18
  66. package/lib/queryBuilder/join/JoinResultParser.js +88 -101
  67. package/lib/queryBuilder/join/RelationJoiner.js +205 -288
  68. package/lib/queryBuilder/join/TableNode.js +117 -144
  69. package/lib/queryBuilder/join/TableTree.js +60 -76
  70. package/lib/queryBuilder/join/utils.js +10 -16
  71. package/lib/queryBuilder/operations/DelegateOperation.js +93 -133
  72. package/lib/queryBuilder/operations/DeleteOperation.js +33 -37
  73. package/lib/queryBuilder/operations/FindByIdOperation.js +20 -28
  74. package/lib/queryBuilder/operations/FindByIdsOperation.js +17 -23
  75. package/lib/queryBuilder/operations/FindOperation.js +114 -131
  76. package/lib/queryBuilder/operations/FirstOperation.js +14 -19
  77. package/lib/queryBuilder/operations/FromOperation.js +69 -88
  78. package/lib/queryBuilder/operations/InsertAndFetchOperation.js +28 -39
  79. package/lib/queryBuilder/operations/InsertGraphAndFetchOperation.js +25 -35
  80. package/lib/queryBuilder/operations/InsertGraphOperation.js +77 -98
  81. package/lib/queryBuilder/operations/InsertOperation.js +132 -165
  82. package/lib/queryBuilder/operations/InstanceDeleteOperation.js +27 -36
  83. package/lib/queryBuilder/operations/InstanceFindOperation.js +9 -13
  84. package/lib/queryBuilder/operations/InstanceInsertOperation.js +13 -17
  85. package/lib/queryBuilder/operations/InstanceUpdateOperation.js +32 -46
  86. package/lib/queryBuilder/operations/JoinRelatedOperation.js +66 -86
  87. package/lib/queryBuilder/operations/KnexOperation.js +4 -7
  88. package/lib/queryBuilder/operations/MergeOperation.js +32 -45
  89. package/lib/queryBuilder/operations/ObjectionToKnexConvertingOperation.js +131 -150
  90. package/lib/queryBuilder/operations/OnBuildKnexOperation.js +17 -23
  91. package/lib/queryBuilder/operations/OnBuildOperation.js +17 -23
  92. package/lib/queryBuilder/operations/OnErrorOperation.js +17 -23
  93. package/lib/queryBuilder/operations/QueryBuilderOperation.js +231 -270
  94. package/lib/queryBuilder/operations/RangeOperation.js +30 -40
  95. package/lib/queryBuilder/operations/RelateOperation.js +14 -21
  96. package/lib/queryBuilder/operations/ReturningOperation.js +12 -18
  97. package/lib/queryBuilder/operations/RunAfterOperation.js +17 -23
  98. package/lib/queryBuilder/operations/RunBeforeOperation.js +17 -23
  99. package/lib/queryBuilder/operations/UnrelateOperation.js +12 -17
  100. package/lib/queryBuilder/operations/UpdateAndFetchOperation.js +48 -65
  101. package/lib/queryBuilder/operations/UpdateOperation.js +104 -129
  102. package/lib/queryBuilder/operations/UpsertGraphAndFetchOperation.js +25 -35
  103. package/lib/queryBuilder/operations/UpsertGraphOperation.js +36 -55
  104. package/lib/queryBuilder/operations/WhereCompositeOperation.js +30 -39
  105. package/lib/queryBuilder/operations/WhereInOperation.js +34 -36
  106. package/lib/queryBuilder/operations/eager/EagerOperation.js +37 -52
  107. package/lib/queryBuilder/operations/eager/JoinEagerOperation.js +34 -44
  108. package/lib/queryBuilder/operations/eager/NaiveEagerOperation.js +4 -7
  109. package/lib/queryBuilder/operations/eager/WhereInEagerOperation.js +193 -251
  110. package/lib/queryBuilder/operations/jsonApi/WhereJsonHasOperation.js +18 -25
  111. package/lib/queryBuilder/operations/jsonApi/WhereJsonNotObjectOperation.js +25 -41
  112. package/lib/queryBuilder/operations/jsonApi/WhereJsonOperation.js +19 -20
  113. package/lib/queryBuilder/operations/jsonApi/WhereJsonOverlapsOperation.js +23 -21
  114. package/lib/queryBuilder/operations/jsonApi/mysqlJsonApi.js +106 -118
  115. package/lib/queryBuilder/operations/jsonApi/postgresJsonApi.js +79 -108
  116. package/lib/queryBuilder/operations/select/SelectOperation.js +37 -53
  117. package/lib/queryBuilder/operations/select/Selection.js +94 -105
  118. package/lib/queryBuilder/operations/whereInComposite/WhereInCompositeMsSqlOperation.js +68 -101
  119. package/lib/queryBuilder/operations/whereInComposite/WhereInCompositeOperation.js +65 -75
  120. package/lib/queryBuilder/operations/whereInComposite/WhereInCompositeSqliteOperation.js +75 -84
  121. package/lib/queryBuilder/parsers/jsonFieldExpressionParser.js +760 -859
  122. package/lib/queryBuilder/parsers/relationExpressionParser.js +840 -952
  123. package/lib/queryBuilder/transformations/CompositeQueryTransformation.js +10 -15
  124. package/lib/queryBuilder/transformations/QueryTransformation.js +4 -6
  125. package/lib/queryBuilder/transformations/WrapMysqlModifySubqueryTransformation.js +35 -49
  126. package/lib/queryBuilder/transformations/index.js +3 -9
  127. package/lib/queryBuilder/whereScopes.js +158 -186
  128. package/lib/relations/Relation.js +293 -375
  129. package/lib/relations/RelationDeleteOperation.js +24 -28
  130. package/lib/relations/RelationFindOperation.js +108 -138
  131. package/lib/relations/RelationInsertOperation.js +24 -32
  132. package/lib/relations/RelationOwner.js +175 -209
  133. package/lib/relations/RelationProperty.js +186 -223
  134. package/lib/relations/RelationUpdateOperation.js +23 -29
  135. package/lib/relations/belongsToOne/BelongsToOneDeleteOperation.js +16 -21
  136. package/lib/relations/belongsToOne/BelongsToOneInsertOperation.js +30 -41
  137. package/lib/relations/belongsToOne/BelongsToOneRelateOperation.js +36 -47
  138. package/lib/relations/belongsToOne/BelongsToOneRelation.js +42 -50
  139. package/lib/relations/belongsToOne/BelongsToOneUnrelateOperation.js +43 -58
  140. package/lib/relations/hasMany/HasManyInsertOperation.js +40 -56
  141. package/lib/relations/hasMany/HasManyRelateOperation.js +45 -61
  142. package/lib/relations/hasMany/HasManyRelation.js +38 -46
  143. package/lib/relations/hasMany/HasManyUnrelateOperation.js +25 -32
  144. package/lib/relations/hasOne/HasOneRelation.js +9 -12
  145. package/lib/relations/hasOneThrough/HasOneThroughRelation.js +9 -12
  146. package/lib/relations/manyToMany/ManyToManyModifyMixin.js +73 -95
  147. package/lib/relations/manyToMany/ManyToManyRelation.js +374 -473
  148. package/lib/relations/manyToMany/ManyToManySqliteModifyMixin.js +23 -30
  149. package/lib/relations/manyToMany/delete/ManyToManyDeleteOperation.js +8 -10
  150. package/lib/relations/manyToMany/delete/ManyToManyDeleteOperationBase.js +20 -25
  151. package/lib/relations/manyToMany/delete/ManyToManyDeleteSqliteOperation.js +8 -12
  152. package/lib/relations/manyToMany/find/ManyToManyFindOperation.js +77 -100
  153. package/lib/relations/manyToMany/insert/ManyToManyInsertOperation.js +37 -49
  154. package/lib/relations/manyToMany/relate/ManyToManyRelateOperation.js +58 -74
  155. package/lib/relations/manyToMany/unrelate/ManyToManyUnrelateOperation.js +10 -13
  156. package/lib/relations/manyToMany/unrelate/ManyToManyUnrelateOperationBase.js +26 -33
  157. package/lib/relations/manyToMany/unrelate/ManyToManyUnrelateSqliteOperation.js +10 -15
  158. package/lib/relations/manyToMany/update/ManyToManyUpdateOperation.js +8 -10
  159. package/lib/relations/manyToMany/update/ManyToManyUpdateOperationBase.js +61 -78
  160. package/lib/relations/manyToMany/update/ManyToManyUpdateSqliteOperation.js +8 -12
  161. package/lib/transaction.js +53 -83
  162. package/lib/utils/assert.js +15 -21
  163. package/lib/utils/buildUtils.js +17 -19
  164. package/lib/utils/classUtils.js +7 -11
  165. package/lib/utils/cloneDeep.js +365 -0
  166. package/lib/utils/createModifier.js +36 -41
  167. package/lib/utils/deprecate.js +8 -12
  168. package/lib/utils/identifierMapping.js +153 -192
  169. package/lib/utils/internalPropUtils.js +4 -8
  170. package/lib/utils/knexUtils.js +61 -56
  171. package/lib/utils/mixin.js +16 -23
  172. package/lib/utils/mysqlJsonPath.js +55 -40
  173. package/lib/utils/normalizeIds.js +110 -127
  174. package/lib/utils/objectUtils.js +236 -338
  175. package/lib/utils/parseFieldExpression.js +66 -44
  176. package/lib/utils/postgresJsonPath.js +48 -62
  177. package/lib/utils/promiseUtils/after.js +10 -13
  178. package/lib/utils/promiseUtils/afterReturn.js +10 -13
  179. package/lib/utils/promiseUtils/index.js +15 -17
  180. package/lib/utils/promiseUtils/isPromise.js +6 -9
  181. package/lib/utils/promiseUtils/map.js +75 -89
  182. package/lib/utils/promiseUtils/mapAfterAllReturn.js +17 -23
  183. package/lib/utils/promiseUtils/try.js +15 -18
  184. package/lib/utils/resolveModel.js +91 -94
  185. package/lib/utils/tmpColumnUtils.js +4 -13
  186. package/package.json +50 -23
  187. package/typings/objection/index.d.mts +362 -0
  188. package/typings/objection/index.d.ts +36 -9
  189. package/lib/.eslintrc.json +0 -8
  190. package/lib/queryBuilder/parsers/jsonFieldExpressionParser.pegjs +0 -97
  191. package/lib/queryBuilder/parsers/relationExpressionParser.pegjs +0 -141
  192. package/lib/utils/clone.js +0 -2329
@@ -1,59 +1,45 @@
1
1
  'use strict';
2
-
3
2
  const { withWhereScope } = require('../whereScopes');
4
3
  const { UpdateOperation } = require('./UpdateOperation');
5
4
  const { InstanceFindOperation } = require('./InstanceFindOperation');
6
5
  const { assertHasId } = require('../../utils/assert');
7
6
  const { isObject } = require('../../utils/objectUtils');
8
-
9
7
  class InstanceUpdateOperation extends UpdateOperation {
10
- constructor(name, opt) {
11
- super(name, opt);
12
-
13
- this.instance = opt.instance;
14
- this.modelOptions.old = opt.instance;
15
- }
16
-
17
- onAdd(builder, args) {
18
- const retVal = super.onAdd(builder, args);
19
-
20
- if (!this.model) {
21
- this.model = this.instance;
8
+ constructor(name, opt) {
9
+ super(name, opt);
10
+ this.instance = opt.instance;
11
+ this.modelOptions.old = opt.instance;
22
12
  }
23
-
24
- return retVal;
25
- }
26
-
27
- onBuild(builder) {
28
- super.onBuild(builder);
29
-
30
- assertHasId(this.instance);
31
- withWhereScope(builder, () => builder.findById(this.instance.$id()));
32
- }
33
-
34
- async onAfter2(builder, result) {
35
- // The result may be an object if `returning` was used.
36
- if (Array.isArray(result)) {
37
- result = result[0];
13
+ onAdd(builder, args) {
14
+ const retVal = super.onAdd(builder, args);
15
+ if (!this.model) {
16
+ this.model = this.instance;
17
+ }
18
+ return retVal;
38
19
  }
39
-
40
- result = await super.onAfter2(builder, result);
41
- this.instance.$set(this.model);
42
-
43
- if (isObject(result)) {
44
- this.instance.$set(result);
20
+ onBuild(builder) {
21
+ super.onBuild(builder);
22
+ assertHasId(this.instance);
23
+ withWhereScope(builder, () => builder.findById(this.instance.$id()));
24
+ }
25
+ async onAfter2(builder, result) {
26
+ // The result may be an object if `returning` was used.
27
+ if (Array.isArray(result)) {
28
+ result = result[0];
29
+ }
30
+ result = await super.onAfter2(builder, result);
31
+ this.instance.$set(this.model);
32
+ if (isObject(result)) {
33
+ this.instance.$set(result);
34
+ }
35
+ return result;
36
+ }
37
+ toFindOperation() {
38
+ return new InstanceFindOperation('find', {
39
+ instance: this.instance,
40
+ });
45
41
  }
46
-
47
- return result;
48
- }
49
-
50
- toFindOperation() {
51
- return new InstanceFindOperation('find', {
52
- instance: this.instance,
53
- });
54
- }
55
42
  }
56
-
57
43
  module.exports = {
58
- InstanceUpdateOperation,
44
+ InstanceUpdateOperation,
59
45
  };
@@ -1,103 +1,83 @@
1
1
  'use strict';
2
-
3
2
  const { QueryBuilderOperation } = require('./QueryBuilderOperation');
4
3
  const { RelationExpression } = require('../RelationExpression');
5
4
  const { RelationJoiner } = require('../join/RelationJoiner');
6
5
  const { isString } = require('../../utils/objectUtils');
7
-
8
6
  class JoinRelatedOperation extends QueryBuilderOperation {
9
- constructor(name, opt) {
10
- super(name, opt);
11
- this.calls = [];
12
- }
13
-
14
- get joinOperation() {
15
- return this.opt.joinOperation;
16
- }
17
-
18
- addCall(call) {
19
- this.calls.push(call);
20
- }
21
-
22
- onBuild(builder) {
23
- const modelClass = builder.modelClass();
24
- const joinOperation = this.joinOperation;
25
- let mergedExpr = RelationExpression.create();
26
-
27
- for (const call of this.calls) {
28
- const expr = RelationExpression.create(call.expression).toPojo();
29
- const childNames = expr.$childNames;
30
- const options = call.options || {};
31
-
32
- if (childNames.length === 1) {
33
- applyAlias(expr, modelClass, builder, options);
34
- }
35
-
36
- if (options.aliases) {
37
- applyAliases(expr, modelClass, options);
38
- }
39
-
40
- mergedExpr = mergedExpr.merge(expr);
7
+ constructor(name, opt) {
8
+ super(name, opt);
9
+ this.calls = [];
10
+ }
11
+ get joinOperation() {
12
+ return this.opt.joinOperation;
13
+ }
14
+ addCall(call) {
15
+ this.calls.push(call);
16
+ }
17
+ onBuild(builder) {
18
+ const modelClass = builder.modelClass();
19
+ const joinOperation = this.joinOperation;
20
+ let mergedExpr = RelationExpression.create();
21
+ for (const call of this.calls) {
22
+ const expr = RelationExpression.create(call.expression).toPojo();
23
+ const childNames = expr.$childNames;
24
+ const options = call.options || {};
25
+ if (childNames.length === 1) {
26
+ applyAlias(expr, modelClass, builder, options);
27
+ }
28
+ if (options.aliases) {
29
+ applyAliases(expr, modelClass, options);
30
+ }
31
+ mergedExpr = mergedExpr.merge(expr);
32
+ }
33
+ const joiner = new RelationJoiner({
34
+ modelClass,
35
+ });
36
+ joiner.setOptions({ joinOperation });
37
+ joiner.setExpression(mergedExpr);
38
+ joiner.setModifiers(builder.modifiers());
39
+ joiner.build(builder, false);
40
+ }
41
+ clone() {
42
+ const clone = super.clone();
43
+ clone.calls = this.calls.slice();
44
+ return clone;
41
45
  }
42
-
43
- const joiner = new RelationJoiner({
44
- modelClass,
45
- });
46
-
47
- joiner.setOptions({ joinOperation });
48
- joiner.setExpression(mergedExpr);
49
- joiner.setModifiers(builder.modifiers());
50
- joiner.build(builder, false);
51
- }
52
-
53
- clone() {
54
- const clone = super.clone();
55
- clone.calls = this.calls.slice();
56
- return clone;
57
- }
58
46
  }
59
-
60
47
  function applyAlias(expr, modelClass, builder, options) {
61
- const childNames = expr.$childNames;
62
- const childName = childNames[0];
63
- const childExpr = expr[childName];
64
- const relation = modelClass.getRelation(childExpr.$relation);
65
-
66
- let alias = childName;
67
-
68
- if (options.alias === false) {
69
- alias = builder.tableRefFor(relation.relatedModelClass);
70
- } else if (isString(options.alias)) {
71
- alias = options.alias;
72
- }
73
-
74
- if (childName !== alias) {
75
- renameRelationExpressionNode(expr, childName, alias);
76
- }
77
- }
78
-
79
- function applyAliases(expr, modelClass, options) {
80
- for (const childName of expr.$childNames) {
48
+ const childNames = expr.$childNames;
49
+ const childName = childNames[0];
81
50
  const childExpr = expr[childName];
82
51
  const relation = modelClass.getRelation(childExpr.$relation);
83
- const alias = options.aliases[childExpr.$relation];
84
-
85
- if (alias && alias !== childName) {
86
- renameRelationExpressionNode(expr, childName, alias);
52
+ let alias = childName;
53
+ if (options.alias === false) {
54
+ alias = builder.tableRefFor(relation.relatedModelClass);
55
+ }
56
+ else if (isString(options.alias)) {
57
+ alias = options.alias;
58
+ }
59
+ if (childName !== alias) {
60
+ renameRelationExpressionNode(expr, childName, alias);
61
+ }
62
+ }
63
+ function applyAliases(expr, modelClass, options) {
64
+ for (const childName of expr.$childNames) {
65
+ const childExpr = expr[childName];
66
+ const relation = modelClass.getRelation(childExpr.$relation);
67
+ const alias = options.aliases[childExpr.$relation];
68
+ if (alias && alias !== childName) {
69
+ renameRelationExpressionNode(expr, childName, alias);
70
+ }
71
+ applyAliases(childExpr, relation.relatedModelClass, options);
87
72
  }
88
-
89
- applyAliases(childExpr, relation.relatedModelClass, options);
90
- }
91
73
  }
92
-
93
74
  function renameRelationExpressionNode(expr, oldName, newName) {
94
- const childExpr = expr[oldName];
95
- delete expr[oldName];
96
- expr[newName] = childExpr;
97
- childExpr.$name = newName;
98
- expr.$childNames = expr.$childNames.map((it) => (it === oldName ? newName : it));
75
+ const childExpr = expr[oldName];
76
+ delete expr[oldName];
77
+ expr[newName] = childExpr;
78
+ childExpr.$name = newName;
79
+ expr.$childNames = expr.$childNames.map((it) => (it === oldName ? newName : it));
99
80
  }
100
-
101
81
  module.exports = {
102
- JoinRelatedOperation,
82
+ JoinRelatedOperation,
103
83
  };
@@ -1,14 +1,11 @@
1
1
  'use strict';
2
-
3
2
  const { ObjectionToKnexConvertingOperation } = require('./ObjectionToKnexConvertingOperation');
4
-
5
3
  // An operation that simply calls the equivalent knex method.
6
4
  class KnexOperation extends ObjectionToKnexConvertingOperation {
7
- onBuildKnex(knexBuilder, builder) {
8
- return knexBuilder[this.name].apply(knexBuilder, this.getKnexArgs(builder));
9
- }
5
+ onBuildKnex(knexBuilder, builder) {
6
+ return knexBuilder[this.name].apply(knexBuilder, this.getKnexArgs(builder));
7
+ }
10
8
  }
11
-
12
9
  module.exports = {
13
- KnexOperation,
10
+ KnexOperation,
14
11
  };
@@ -1,56 +1,43 @@
1
1
  'use strict';
2
-
3
2
  const { isFunction, isEmpty, isObject } = require('../../utils/objectUtils');
4
3
  const { QueryBuilderOperation } = require('./QueryBuilderOperation');
5
4
  const { convertFieldExpressionsToRaw } = require('./UpdateOperation');
6
-
7
5
  class MergeOperation extends QueryBuilderOperation {
8
- constructor(name, opt) {
9
- super(name, opt);
10
- this.model = null;
11
- this.args = null;
12
- }
13
-
14
- onAdd(builder, args) {
15
- this.args = args;
16
-
17
- if (!isEmpty(args) && isObject(args[0]) && !Array.isArray(args[0])) {
18
- const json = args[0];
19
- const modelClass = builder.modelClass();
20
-
21
- this.model = modelClass.ensureModel(json, { patch: true });
6
+ constructor(name, opt) {
7
+ super(name, opt);
8
+ this.model = null;
9
+ this.args = null;
22
10
  }
23
-
24
- return true;
25
- }
26
-
27
- onBuildKnex(knexBuilder, builder) {
28
- if (!isFunction(knexBuilder.merge)) {
29
- throw new Error('merge method can only be chained right after onConflict method');
11
+ onAdd(builder, args) {
12
+ this.args = args;
13
+ if (!isEmpty(args) && isObject(args[0]) && !Array.isArray(args[0])) {
14
+ const json = args[0];
15
+ const modelClass = builder.modelClass();
16
+ this.model = modelClass.ensureModel(json, { patch: true });
17
+ }
18
+ return true;
30
19
  }
31
-
32
- if (this.model) {
33
- const json = this.model.$toDatabaseJson(builder);
34
- const convertedJson = convertFieldExpressionsToRaw(builder, this.model, json);
35
-
36
- return knexBuilder.merge(convertedJson);
20
+ onBuildKnex(knexBuilder, builder) {
21
+ if (!isFunction(knexBuilder.merge)) {
22
+ throw new Error('merge method can only be chained right after onConflict method');
23
+ }
24
+ if (this.model) {
25
+ const json = this.model.$toDatabaseJson(builder);
26
+ const convertedJson = convertFieldExpressionsToRaw(builder, this.model, json);
27
+ return knexBuilder.merge(convertedJson);
28
+ }
29
+ return knexBuilder.merge(...this.args);
30
+ }
31
+ toFindOperation() {
32
+ return null;
33
+ }
34
+ clone() {
35
+ const clone = super.clone();
36
+ clone.model = this.model;
37
+ clone.args = this.args;
38
+ return clone;
37
39
  }
38
-
39
- return knexBuilder.merge(...this.args);
40
- }
41
-
42
- toFindOperation() {
43
- return null;
44
- }
45
-
46
- clone() {
47
- const clone = super.clone();
48
- clone.model = this.model;
49
- clone.args = this.args;
50
- return clone;
51
- }
52
40
  }
53
-
54
41
  module.exports = {
55
- MergeOperation,
42
+ MergeOperation,
56
43
  };