@abedmurrar/objection 4.0.0-beta.0 → 4.0.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/README.md +1 -1
  2. package/lib/initialize.js +4 -5
  3. package/lib/model/AjvValidator.js +24 -21
  4. package/lib/model/Model.js +116 -114
  5. package/lib/model/ModifierNotFoundError.js +4 -4
  6. package/lib/model/NotFoundError.js +4 -4
  7. package/lib/model/RelationDoesNotExistError.js +4 -4
  8. package/lib/model/ValidationError.js +8 -8
  9. package/lib/model/Validator.js +7 -6
  10. package/lib/model/getModel.js +4 -4
  11. package/lib/model/graph/ModelGraph.js +9 -7
  12. package/lib/model/graph/ModelGraphBuilder.js +24 -24
  13. package/lib/model/graph/ModelGraphEdge.js +4 -4
  14. package/lib/model/graph/ModelGraphNode.js +17 -11
  15. package/lib/model/inheritModel.js +3 -4
  16. package/lib/model/modelBindKnex.js +12 -13
  17. package/lib/model/modelClone.js +15 -16
  18. package/lib/model/modelColPropMap.js +7 -8
  19. package/lib/model/modelConcurrency.js +6 -7
  20. package/lib/model/modelId.js +4 -5
  21. package/lib/model/modelJsonAttributes.js +10 -11
  22. package/lib/model/modelParseRelations.js +5 -6
  23. package/lib/model/modelQueryProps.js +12 -13
  24. package/lib/model/modelSet.js +17 -18
  25. package/lib/model/modelTableMetadata.js +9 -10
  26. package/lib/model/modelToJson.js +13 -14
  27. package/lib/model/modelUtils.js +7 -7
  28. package/lib/model/modelValidate.js +5 -6
  29. package/lib/model/modelValues.js +10 -10
  30. package/lib/model/modelVisitor.js +3 -4
  31. package/lib/objection.js +4 -26
  32. package/lib/queryBuilder/FunctionBuilder.js +35 -31
  33. package/lib/queryBuilder/InternalOptions.js +4 -4
  34. package/lib/queryBuilder/JoinBuilder.js +46 -45
  35. package/lib/queryBuilder/QueryBuilder.js +161 -135
  36. package/lib/queryBuilder/QueryBuilderBase.js +203 -203
  37. package/lib/queryBuilder/QueryBuilderContext.js +6 -6
  38. package/lib/queryBuilder/QueryBuilderContextBase.js +12 -8
  39. package/lib/queryBuilder/QueryBuilderOperationSupport.js +30 -25
  40. package/lib/queryBuilder/QueryBuilderUserContext.js +4 -4
  41. package/lib/queryBuilder/RawBuilder.js +15 -13
  42. package/lib/queryBuilder/ReferenceBuilder.js +25 -23
  43. package/lib/queryBuilder/RelationExpression.js +29 -20
  44. package/lib/queryBuilder/StaticHookArguments.js +11 -11
  45. package/lib/queryBuilder/ValueBuilder.js +20 -19
  46. package/lib/queryBuilder/expressions.js +8 -18
  47. package/lib/queryBuilder/functions/mysql.js +18 -42
  48. package/lib/queryBuilder/graph/GraphAction.js +7 -7
  49. package/lib/queryBuilder/graph/GraphData.js +4 -4
  50. package/lib/queryBuilder/graph/GraphFetcher.js +18 -17
  51. package/lib/queryBuilder/graph/GraphNodeDbExistence.js +45 -12
  52. package/lib/queryBuilder/graph/GraphOperation.js +4 -4
  53. package/lib/queryBuilder/graph/GraphOptions.js +5 -5
  54. package/lib/queryBuilder/graph/GraphUpsert.js +36 -36
  55. package/lib/queryBuilder/graph/delete/GraphDelete.js +8 -8
  56. package/lib/queryBuilder/graph/delete/GraphDeleteAction.js +46 -11
  57. package/lib/queryBuilder/graph/insert/GraphInsert.js +12 -12
  58. package/lib/queryBuilder/graph/insert/GraphInsertAction.js +59 -21
  59. package/lib/queryBuilder/graph/insert/JoinRowGraphInsertAction.js +49 -11
  60. package/lib/queryBuilder/graph/patch/GraphPatch.js +8 -8
  61. package/lib/queryBuilder/graph/patch/GraphPatchAction.js +52 -19
  62. package/lib/queryBuilder/graph/recursiveUpsert/GraphRecursiveUpsert.js +8 -8
  63. package/lib/queryBuilder/graph/recursiveUpsert/GraphRecursiveUpsertAction.js +54 -18
  64. package/lib/queryBuilder/join/JoinResultColumn.js +6 -4
  65. package/lib/queryBuilder/join/JoinResultParser.js +10 -8
  66. package/lib/queryBuilder/join/RelationJoiner.js +40 -35
  67. package/lib/queryBuilder/join/TableNode.js +7 -5
  68. package/lib/queryBuilder/join/TableTree.js +13 -9
  69. package/lib/queryBuilder/join/utils.js +8 -8
  70. package/lib/queryBuilder/operations/DelegateOperation.js +6 -6
  71. package/lib/queryBuilder/operations/DeleteOperation.js +11 -11
  72. package/lib/queryBuilder/operations/FindByIdOperation.js +8 -8
  73. package/lib/queryBuilder/operations/FindByIdsOperation.js +6 -6
  74. package/lib/queryBuilder/operations/FindOperation.js +23 -23
  75. package/lib/queryBuilder/operations/FirstOperation.js +6 -6
  76. package/lib/queryBuilder/operations/FromOperation.js +13 -13
  77. package/lib/queryBuilder/operations/InsertAndFetchOperation.js +12 -12
  78. package/lib/queryBuilder/operations/InsertGraphAndFetchOperation.js +10 -10
  79. package/lib/queryBuilder/operations/InsertGraphOperation.js +11 -11
  80. package/lib/queryBuilder/operations/InsertOperation.js +23 -22
  81. package/lib/queryBuilder/operations/InstanceDeleteOperation.js +12 -12
  82. package/lib/queryBuilder/operations/InstanceFindOperation.js +10 -10
  83. package/lib/queryBuilder/operations/InstanceInsertOperation.js +6 -6
  84. package/lib/queryBuilder/operations/InstanceUpdateOperation.js +14 -14
  85. package/lib/queryBuilder/operations/JoinRelatedOperation.js +13 -13
  86. package/lib/queryBuilder/operations/KnexOperation.js +6 -6
  87. package/lib/queryBuilder/operations/MergeOperation.js +11 -11
  88. package/lib/queryBuilder/operations/ObjectionToKnexConvertingOperation.js +26 -22
  89. package/lib/queryBuilder/operations/OnBuildKnexOperation.js +6 -6
  90. package/lib/queryBuilder/operations/OnBuildOperation.js +6 -6
  91. package/lib/queryBuilder/operations/OnErrorOperation.js +6 -6
  92. package/lib/queryBuilder/operations/QueryBuilderOperation.js +6 -4
  93. package/lib/queryBuilder/operations/RangeOperation.js +7 -6
  94. package/lib/queryBuilder/operations/RelateOperation.js +6 -6
  95. package/lib/queryBuilder/operations/ReturningOperation.js +8 -8
  96. package/lib/queryBuilder/operations/RunAfterOperation.js +6 -6
  97. package/lib/queryBuilder/operations/RunBeforeOperation.js +6 -6
  98. package/lib/queryBuilder/operations/UnrelateOperation.js +6 -6
  99. package/lib/queryBuilder/operations/UpdateAndFetchOperation.js +12 -12
  100. package/lib/queryBuilder/operations/UpdateOperation.js +24 -24
  101. package/lib/queryBuilder/operations/UpsertGraphAndFetchOperation.js +10 -10
  102. package/lib/queryBuilder/operations/UpsertGraphOperation.js +10 -10
  103. package/lib/queryBuilder/operations/WhereCompositeOperation.js +8 -8
  104. package/lib/queryBuilder/operations/WhereInOperation.js +11 -9
  105. package/lib/queryBuilder/operations/eager/EagerOperation.js +11 -9
  106. package/lib/queryBuilder/operations/eager/JoinEagerOperation.js +10 -12
  107. package/lib/queryBuilder/operations/eager/NaiveEagerOperation.js +6 -6
  108. package/lib/queryBuilder/operations/eager/WhereInEagerOperation.js +64 -28
  109. package/lib/queryBuilder/operations/jsonApi/WhereJsonHasOperation.js +45 -12
  110. package/lib/queryBuilder/operations/jsonApi/WhereJsonNotObjectOperation.js +45 -12
  111. package/lib/queryBuilder/operations/jsonApi/WhereJsonOperation.js +45 -12
  112. package/lib/queryBuilder/operations/jsonApi/WhereJsonOverlapsOperation.js +46 -13
  113. package/lib/queryBuilder/operations/jsonApi/mysqlJsonApi.js +22 -27
  114. package/lib/queryBuilder/operations/jsonApi/postgresJsonApi.js +51 -17
  115. package/lib/queryBuilder/operations/select/SelectOperation.js +12 -12
  116. package/lib/queryBuilder/operations/select/Selection.js +23 -19
  117. package/lib/queryBuilder/operations/types.js +8 -0
  118. package/lib/queryBuilder/operations/whereInComposite/WhereInCompositeMsSqlOperation.js +13 -12
  119. package/lib/queryBuilder/operations/whereInComposite/WhereInCompositeOperation.js +11 -11
  120. package/lib/queryBuilder/operations/whereInComposite/WhereInCompositeSqliteOperation.js +10 -10
  121. package/lib/queryBuilder/transformations/CompositeQueryTransformation.js +6 -6
  122. package/lib/queryBuilder/transformations/QueryTransformation.js +4 -4
  123. package/lib/queryBuilder/transformations/WrapMysqlModifySubqueryTransformation.js +11 -8
  124. package/lib/queryBuilder/transformations/index.js +8 -8
  125. package/lib/queryBuilder/whereScopes.js +15 -21
  126. package/lib/relations/Relation.js +31 -29
  127. package/lib/relations/RelationDeleteOperation.js +8 -8
  128. package/lib/relations/RelationFindOperation.js +8 -6
  129. package/lib/relations/RelationInsertOperation.js +6 -6
  130. package/lib/relations/RelationOwner.js +16 -13
  131. package/lib/relations/RelationProperty.js +18 -15
  132. package/lib/relations/RelationUpdateOperation.js +8 -8
  133. package/lib/relations/belongsToOne/BelongsToOneDeleteOperation.js +6 -6
  134. package/lib/relations/belongsToOne/BelongsToOneInsertOperation.js +8 -8
  135. package/lib/relations/belongsToOne/BelongsToOneRelateOperation.js +8 -8
  136. package/lib/relations/belongsToOne/BelongsToOneRelation.js +14 -14
  137. package/lib/relations/belongsToOne/BelongsToOneUnrelateOperation.js +6 -6
  138. package/lib/relations/hasMany/HasManyInsertOperation.js +6 -6
  139. package/lib/relations/hasMany/HasManyRelateOperation.js +11 -11
  140. package/lib/relations/hasMany/HasManyRelation.js +12 -12
  141. package/lib/relations/hasMany/HasManyUnrelateOperation.js +9 -9
  142. package/lib/relations/hasOne/HasOneRelation.js +6 -6
  143. package/lib/relations/hasOneThrough/HasOneThroughRelation.js +6 -6
  144. package/lib/relations/manyToMany/ManyToManyModifyMixin.js +9 -8
  145. package/lib/relations/manyToMany/ManyToManyRelation.js +52 -49
  146. package/lib/relations/manyToMany/ManyToManySqliteModifyMixin.js +6 -6
  147. package/lib/relations/manyToMany/delete/ManyToManyDeleteOperation.js +7 -7
  148. package/lib/relations/manyToMany/delete/ManyToManyDeleteOperationBase.js +6 -6
  149. package/lib/relations/manyToMany/delete/ManyToManyDeleteSqliteOperation.js +7 -7
  150. package/lib/relations/manyToMany/find/ManyToManyFindOperation.js +8 -8
  151. package/lib/relations/manyToMany/insert/ManyToManyInsertOperation.js +8 -8
  152. package/lib/relations/manyToMany/relate/ManyToManyRelateOperation.js +11 -10
  153. package/lib/relations/manyToMany/unrelate/ManyToManyUnrelateOperation.js +7 -7
  154. package/lib/relations/manyToMany/unrelate/ManyToManyUnrelateOperationBase.js +8 -8
  155. package/lib/relations/manyToMany/unrelate/ManyToManyUnrelateSqliteOperation.js +7 -7
  156. package/lib/relations/manyToMany/update/ManyToManyUpdateOperation.js +7 -7
  157. package/lib/relations/manyToMany/update/ManyToManyUpdateOperationBase.js +8 -8
  158. package/lib/relations/manyToMany/update/ManyToManyUpdateSqliteOperation.js +7 -7
  159. package/lib/transaction.js +44 -12
  160. package/lib/utils/objectUtils.js +6 -1
  161. package/lib/utils/parseFieldExpression.js +4 -35
  162. package/lib/utils/promiseUtils/index.js +19 -9
  163. package/package.json +1 -1
@@ -1,9 +1,44 @@
1
- 'use strict';
2
- const { GraphAction } = require('../GraphAction');
3
- const { groupBy, get, set } = require('../../../utils/objectUtils');
4
- const { forEachPropertyReference } = require('../../../model/graph/ModelGraphBuilder');
5
- const promiseUtils = require('../../../utils/promiseUtils');
6
- class GraphRecursiveUpsertAction extends GraphAction {
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.GraphRecursiveUpsertAction = void 0;
37
+ const GraphAction_1 = require("../GraphAction");
38
+ const objectUtils_1 = require("../../../utils/objectUtils");
39
+ const ModelGraphBuilder_1 = require("../../../model/graph/ModelGraphBuilder");
40
+ const promiseUtils = __importStar(require("../../../utils/promiseUtils"));
41
+ class GraphRecursiveUpsertAction extends GraphAction_1.GraphAction {
7
42
  constructor(graphData, { nodes }) {
8
43
  super(graphData);
9
44
  // Nodes to upsert.
@@ -16,10 +51,10 @@ class GraphRecursiveUpsertAction extends GraphAction {
16
51
  });
17
52
  }
18
53
  _createUpsertBuilders(parentBuilder, nodesToUpsert) {
19
- const nodesByRelation = groupBy(nodesToUpsert, getRelation);
54
+ const nodesByRelation = (0, objectUtils_1.groupBy)(nodesToUpsert, getRelation);
20
55
  const builders = [];
21
56
  nodesByRelation.forEach((nodes) => {
22
- const nodesByParent = groupBy(nodes, getParent);
57
+ const nodesByParent = (0, objectUtils_1.groupBy)(nodes, getParent);
23
58
  nodesByParent.forEach((nodes) => {
24
59
  for (const node of nodes) {
25
60
  this._resolveReferences(node);
@@ -28,8 +63,10 @@ class GraphRecursiveUpsertAction extends GraphAction {
28
63
  builders.push(nodes[0].modelClass
29
64
  .query()
30
65
  .childQueryOf(parentBuilder)
31
- .copyFrom(parentBuilder, GraphAction.ReturningAllSelector)
32
- .upsertGraph(nodes.map((node) => node.obj), this.graphOptions.rebasedOptions(nodes[0])));
66
+ .copyFrom(parentBuilder, GraphAction_1.GraphAction.ReturningAllSelector)
67
+ .upsertGraph(nodes.map((node) => node.obj),
68
+ // `GraphOptions` also takes a `GraphOptions` as its options.
69
+ this.graphOptions.rebasedOptions(nodes[0])));
33
70
  });
34
71
  });
35
72
  return builders;
@@ -69,28 +106,27 @@ class GraphRecursiveUpsertAction extends GraphAction {
69
106
  delete obj[modelClass.uidRefProp];
70
107
  }
71
108
  _resolvePropertyReferences(obj) {
72
- forEachPropertyReference(obj, ({ path, refMatch, ref, refPath }) => {
109
+ (0, ModelGraphBuilder_1.forEachPropertyReference)(obj, ({ path, refMatch, ref, refPath, }) => {
73
110
  const referencedNode = this.graph.nodes.find((it) => it.uid === ref);
74
111
  if (!referencedNode) {
75
112
  return;
76
113
  }
77
- const referencedValue = get(referencedNode.obj, refPath);
78
- const value = get(obj, path);
114
+ const referencedValue = (0, objectUtils_1.get)(referencedNode.obj, refPath);
115
+ const value = (0, objectUtils_1.get)(obj, path);
79
116
  if (value === refMatch) {
80
- set(obj, path, referencedValue);
117
+ (0, objectUtils_1.set)(obj, path, referencedValue);
81
118
  }
82
119
  else {
83
- set(obj, path, value.replace(refMatch, referencedValue));
120
+ // The reference is a part of a string: `replace()` converts the value to a string.
121
+ (0, objectUtils_1.set)(obj, path, value.replace(refMatch, referencedValue));
84
122
  }
85
123
  });
86
124
  }
87
125
  }
126
+ exports.GraphRecursiveUpsertAction = GraphRecursiveUpsertAction;
88
127
  function getRelation(node) {
89
128
  return node.parentEdge.relation;
90
129
  }
91
130
  function getParent(node) {
92
131
  return node.parentNode;
93
132
  }
94
- module.exports = {
95
- GraphRecursiveUpsertAction,
96
- };
@@ -1,11 +1,15 @@
1
- 'use strict';
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JoinResultColumn = void 0;
2
4
  class JoinResultColumn {
5
+ // The arguments are the properties of the column.
3
6
  constructor({ columnAlias, tableNode, name }) {
4
7
  this.columnAlias = columnAlias;
5
8
  this.tableNode = tableNode;
6
9
  this.name = name;
7
10
  }
8
11
  static create({ tableTree, columnAlias }) {
12
+ // The column aliases of the joined query are those of the table tree.
9
13
  const tableNode = tableTree.getNodeForColumnAlias(columnAlias);
10
14
  return new JoinResultColumn({
11
15
  columnAlias,
@@ -14,6 +18,4 @@ class JoinResultColumn {
14
18
  });
15
19
  }
16
20
  }
17
- module.exports = {
18
- JoinResultColumn,
19
- };
21
+ exports.JoinResultColumn = JoinResultColumn;
@@ -1,6 +1,8 @@
1
- 'use strict';
2
- const { JoinResultColumn } = require('./JoinResultColumn');
3
- const { groupBy } = require('../../utils/objectUtils');
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JoinResultParser = void 0;
4
+ const JoinResultColumn_1 = require("./JoinResultColumn");
5
+ const objectUtils_1 = require("../../utils/objectUtils");
4
6
  class JoinResultParser {
5
7
  constructor({ tableTree, omitColumnAliases = [] }) {
6
8
  this.tableTree = tableTree;
@@ -54,6 +56,8 @@ class JoinResultParser {
54
56
  }
55
57
  }
56
58
  const model = tableNode.modelClass.fromDatabaseJson(row);
59
+ // The child nodes and the node of a parent model always have a relation
60
+ // and a relation property.
57
61
  for (const childNode of tableNode.childNodes) {
58
62
  if (childNode.relation.isOneToOne()) {
59
63
  model[childNode.relationProperty] = null;
@@ -80,12 +84,13 @@ class JoinResultParser {
80
84
  }
81
85
  _createColumns(row) {
82
86
  const columns = Object.keys(row)
83
- .map((columnAlias) => JoinResultColumn.create({ tableTree: this.tableTree, columnAlias }))
87
+ .map((columnAlias) => JoinResultColumn_1.JoinResultColumn.create({ tableTree: this.tableTree, columnAlias }))
84
88
  // The omitted columns are filtered here once instead of for every model.
85
89
  .filter((column) => !this.omitColumnAliases.has(column.columnAlias));
86
- return groupBy(columns, getTableNode);
90
+ return (0, objectUtils_1.groupBy)(columns, getTableNode);
87
91
  }
88
92
  }
93
+ exports.JoinResultParser = JoinResultParser;
89
94
  function getTableNode(column) {
90
95
  return column.tableNode;
91
96
  }
@@ -101,6 +106,3 @@ function createChildMaps(tableNode) {
101
106
  }
102
107
  return maps;
103
108
  }
104
- module.exports = {
105
- JoinResultParser,
106
- };
@@ -1,13 +1,15 @@
1
- 'use strict';
2
- const { uniqBy } = require('../../utils/objectUtils');
3
- const { Selection } = require('../operations/select/Selection');
4
- const { createModifier } = require('../../utils/createModifier');
5
- const { map: mapPromise } = require('../../utils/promiseUtils');
6
- const { getReadConcurrency } = require('../../model/modelConcurrency');
7
- const { ValidationErrorType } = require('../../model/ValidationError');
8
- const { TableTree } = require('./TableTree');
9
- const { JoinResultParser } = require('./JoinResultParser');
10
- const { ID_LENGTH_LIMIT } = require('./utils');
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RelationJoiner = void 0;
4
+ const objectUtils_1 = require("../../utils/objectUtils");
5
+ const Selection_1 = require("../operations/select/Selection");
6
+ const createModifier_1 = require("../../utils/createModifier");
7
+ const promiseUtils_1 = require("../../utils/promiseUtils");
8
+ const modelConcurrency_1 = require("../../model/modelConcurrency");
9
+ const ValidationError_1 = require("../../model/ValidationError");
10
+ const TableTree_1 = require("./TableTree");
11
+ const JoinResultParser_1 = require("./JoinResultParser");
12
+ const utils_1 = require("./utils");
11
13
  /**
12
14
  * Given a relation expression, builds a query using joins to fetch it.
13
15
  */
@@ -47,8 +49,8 @@ class RelationJoiner {
47
49
  fetchColumnInfo(builder) {
48
50
  const tableTree = this._getTableTree(builder);
49
51
  const allModelClasses = new Set(tableTree.nodes.map((node) => node.modelClass));
50
- return mapPromise(Array.from(allModelClasses), (modelClass) => modelClass.fetchTableMetadata({ parentBuilder: builder }), {
51
- concurrency: getReadConcurrency(this.rootModelClass, builder.unsafeKnex()),
52
+ return (0, promiseUtils_1.map)(Array.from(allModelClasses), (modelClass) => modelClass.fetchTableMetadata({ parentBuilder: builder }), {
53
+ concurrency: (0, modelConcurrency_1.getReadConcurrency)(this.rootModelClass, builder.unsafeKnex()),
52
54
  });
53
55
  }
54
56
  build(builder, buildSelects = true) {
@@ -62,7 +64,7 @@ class RelationJoiner {
62
64
  }
63
65
  }
64
66
  parseResult(builder, flatRows) {
65
- const parser = JoinResultParser.create({
67
+ const parser = JoinResultParser_1.JoinResultParser.create({
66
68
  tableTree: this._getTableTree(builder),
67
69
  omitColumnAliases: this.internalSelections.map((it) => it.alias),
68
70
  });
@@ -71,7 +73,7 @@ class RelationJoiner {
71
73
  _getTableTree(builder) {
72
74
  if (!this.tableTree) {
73
75
  // Create the table tree lazily.
74
- this.tableTree = TableTree.create({
76
+ this.tableTree = TableTree_1.TableTree.create({
75
77
  rootModelClass: this.rootModelClass,
76
78
  rootTableAlias: builder.tableRef(),
77
79
  expression: this.expression,
@@ -80,7 +82,7 @@ class RelationJoiner {
80
82
  }
81
83
  return this.tableTree;
82
84
  }
83
- _buildJoinsForNode({ builder, tableNode, userSelectQueries }) {
85
+ _buildJoinsForNode({ builder, tableNode, userSelectQueries, }) {
84
86
  const subqueryToJoin = createSubqueryToJoin({
85
87
  builder,
86
88
  tableNode,
@@ -107,13 +109,14 @@ class RelationJoiner {
107
109
  this._buildJoinsForNode({ builder, tableNode: childNode, userSelectQueries });
108
110
  }
109
111
  }
110
- _buildSelects({ builder, tableNode, userSelectQueries }) {
112
+ _buildSelects({ builder, tableNode, userSelectQueries, }) {
111
113
  const { selections, internalSelections } = getSelectionsForNode({
112
114
  builder,
113
115
  tableNode,
114
116
  userSelectQueries,
115
117
  });
116
118
  for (const selection of selections) {
119
+ // The selections that are added here all have an alias.
117
120
  checkAliasLength(tableNode.modelClass, selection.name);
118
121
  }
119
122
  // Save the selections that were added internally (not by the user)
@@ -123,6 +126,7 @@ class RelationJoiner {
123
126
  builder.select(selectionsToStrings(selections));
124
127
  }
125
128
  }
129
+ exports.RelationJoiner = RelationJoiner;
126
130
  function defaultOptions() {
127
131
  return {
128
132
  joinOperation: 'leftJoin',
@@ -131,11 +135,11 @@ function defaultOptions() {
131
135
  aliases: {},
132
136
  };
133
137
  }
134
- function createSubqueryToJoin({ builder, tableNode, modifiers }) {
138
+ function createSubqueryToJoin({ builder, tableNode, modifiers, }) {
135
139
  const { relation, expression, modelClass } = tableNode;
136
140
  const modifierQuery = modelClass.query().childQueryOf(builder);
137
141
  for (const modifierName of expression.node.$modify) {
138
- const modifier = createModifier({
142
+ const modifier = (0, createModifier_1.createModifier)({
139
143
  modifier: modifierName,
140
144
  modelClass,
141
145
  modifiers,
@@ -146,7 +150,7 @@ function createSubqueryToJoin({ builder, tableNode, modifiers }) {
146
150
  catch (err) {
147
151
  if (err instanceof modelClass.ModifierNotFoundError) {
148
152
  throw modelClass.createValidationError({
149
- type: ValidationErrorType.RelationExpression,
153
+ type: ValidationError_1.ValidationErrorType.RelationExpression,
150
154
  message: `could not find modifier "${modifierName}" for relation "${relation.name}"`,
151
155
  });
152
156
  }
@@ -157,19 +161,20 @@ function createSubqueryToJoin({ builder, tableNode, modifiers }) {
157
161
  }
158
162
  return modifierQuery;
159
163
  }
160
- function ensureIdAndRelationPropsAreSelected({ builder, tableNode }) {
164
+ function ensureIdAndRelationPropsAreSelected({ builder, tableNode, }) {
161
165
  const tableRef = builder.tableRef();
162
166
  const cols = [
163
167
  ...builder.modelClass().getIdColumnArray(),
164
168
  ...tableNode.relation.relatedProp.cols,
165
169
  ...tableNode.childNodes.reduce((cols, childNode) => [...cols, ...childNode.relation.ownerProp.cols], []),
166
170
  ];
167
- const selectStrings = uniqBy(cols)
171
+ const selectStrings = (0, objectUtils_1.uniqBy)(cols)
168
172
  .filter((col) => !builder.hasSelectionAs(col, col))
169
173
  .map((col) => `${tableRef}.${col}`);
170
174
  return builder.select(selectStrings);
171
175
  }
172
- function getSelectionsForNode({ builder, tableNode, userSelectQueries }) {
176
+ function getSelectionsForNode({ builder, tableNode, userSelectQueries, }) {
177
+ // Every node has a query: `build()` and `_buildJoinsForNode()` add them.
173
178
  const userSelectQuery = userSelectQueries.get(tableNode);
174
179
  const userSelections = userSelectQuery.findAllSelections();
175
180
  const userSelectedAllColumns = isSelectAllSelectionSet(userSelections);
@@ -189,6 +194,7 @@ function getSelectionsForNode({ builder, tableNode, userSelectQueries }) {
189
194
  else {
190
195
  const idSelections = getIdSelectionsForNode({ tableNode });
191
196
  for (const idSelection of idSelections) {
197
+ // The id selections have a column.
192
198
  if (!userSelectQuery.hasSelectionAs(idSelection.column, idSelection.column)) {
193
199
  selections.push(idSelection);
194
200
  internalSelections.push(idSelection);
@@ -205,29 +211,31 @@ function getSelectionsForNode({ builder, tableNode, userSelectQueries }) {
205
211
  internalSelections,
206
212
  };
207
213
  }
208
- function mapUserSelectionsFromSubqueryToMainQuery({ userSelections, tableNode }) {
214
+ function mapUserSelectionsFromSubqueryToMainQuery({ userSelections, tableNode, }) {
209
215
  return userSelections.filter(isNotSelectAll).map((selection) => {
210
- return new Selection(tableNode.alias, selection.name, tableNode.getColumnAliasForColumn(selection.name));
216
+ // A user selection that isn't `*` has a name.
217
+ return new Selection_1.Selection(tableNode.alias, selection.name, tableNode.getColumnAliasForColumn(selection.name));
211
218
  });
212
219
  }
213
- function getJoinTableExtraSelectionsForNode({ builder, tableNode }) {
220
+ function getJoinTableExtraSelectionsForNode({ builder, tableNode, }) {
214
221
  return tableNode.relation.joinTableExtras.map((extra) => {
215
- return new Selection(tableNode.getJoinTableAlias(builder), extra.joinTableCol, tableNode.getColumnAliasForColumn(extra.aliasCol));
222
+ // A many to many relation, which has a join table.
223
+ return new Selection_1.Selection(tableNode.getJoinTableAlias(builder), extra.joinTableCol, tableNode.getColumnAliasForColumn(extra.aliasCol));
216
224
  });
217
225
  }
218
- function getAllColumnSelectionsForNode({ builder, tableNode }) {
226
+ function getAllColumnSelectionsForNode({ builder, tableNode, }) {
219
227
  const table = builder.tableNameFor(tableNode.modelClass);
220
228
  const tableMeta = tableNode.modelClass.tableMetadata({ table });
221
229
  if (!tableMeta) {
222
230
  throw new Error(`table metadata has not been fetched for table '${table}'. Are you trying to call toKnexQuery() for a withGraphJoined query? To make sure the table metadata is fetched see the objection.initialize function.`);
223
231
  }
224
232
  return tableMeta.columns.map((columnName) => {
225
- return new Selection(tableNode.alias, columnName, tableNode.getColumnAliasForColumn(columnName));
233
+ return new Selection_1.Selection(tableNode.alias, columnName, tableNode.getColumnAliasForColumn(columnName));
226
234
  });
227
235
  }
228
236
  function getIdSelectionsForNode({ tableNode }) {
229
237
  return tableNode.modelClass.getIdColumnArray().map((columnName) => {
230
- return new Selection(tableNode.alias, columnName, tableNode.getColumnAliasForColumn(columnName));
238
+ return new Selection_1.Selection(tableNode.alias, columnName, tableNode.getColumnAliasForColumn(columnName));
231
239
  });
232
240
  }
233
241
  function selectionsToStrings(selections) {
@@ -246,13 +254,10 @@ function isSelectAllSelectionSet(selections) {
246
254
  return selections.length === 0 || selections.some(isSelectAll);
247
255
  }
248
256
  function checkAliasLength(modelClass, alias) {
249
- if (alias.length > ID_LENGTH_LIMIT) {
257
+ if (alias.length > utils_1.ID_LENGTH_LIMIT) {
250
258
  throw modelClass.createValidationError({
251
- type: ValidationErrorType.RelationExpression,
252
- message: `identifier ${alias} is over ${ID_LENGTH_LIMIT} characters long and would be truncated by the database engine.`,
259
+ type: ValidationError_1.ValidationErrorType.RelationExpression,
260
+ message: `identifier ${alias} is over ${utils_1.ID_LENGTH_LIMIT} characters long and would be truncated by the database engine.`,
253
261
  });
254
262
  }
255
263
  }
256
- module.exports = {
257
- RelationJoiner,
258
- };
@@ -1,6 +1,8 @@
1
- 'use strict';
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TableNode = void 0;
2
4
  class TableNode {
3
- constructor({ tableTree, modelClass, expression, parentNode = null, relation = null }) {
5
+ constructor({ tableTree, modelClass, expression, parentNode = null, relation = null, }) {
4
6
  this.tableTree = tableTree;
5
7
  this.modelClass = modelClass;
6
8
  this.parentNode = parentNode;
@@ -20,6 +22,7 @@ class TableNode {
20
22
  get options() {
21
23
  return this.tableTree.options;
22
24
  }
25
+ // Null for the root node only.
23
26
  get relationProperty() {
24
27
  return this.expression.node.$name;
25
28
  }
@@ -57,6 +60,7 @@ class TableNode {
57
60
  }
58
61
  _calculateAlias() {
59
62
  if (this.parentNode) {
63
+ // A child node always has a name.
60
64
  const relationName = this.expression.node.$name;
61
65
  const alias = this.options.aliases[relationName] || relationName;
62
66
  if (this.options.minimize) {
@@ -84,6 +88,7 @@ class TableNode {
84
88
  }
85
89
  }
86
90
  }
91
+ exports.TableNode = TableNode;
87
92
  function createIdGetter(columnAliases) {
88
93
  const columnAlias = columnAliases[0];
89
94
  return (flatRow) => {
@@ -131,6 +136,3 @@ function createMultiIdGetter(columnAliases) {
131
136
  return idStr;
132
137
  };
133
138
  }
134
- module.exports = {
135
- TableNode,
136
- };
@@ -1,6 +1,8 @@
1
- 'use strict';
2
- const { forEachChildExpression } = require('./utils');
3
- const { TableNode } = require('./TableNode');
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TableTree = void 0;
4
+ const utils_1 = require("./utils");
5
+ const TableNode_1 = require("./TableNode");
4
6
  class TableTree {
5
7
  constructor({ expression, rootModelClass, rootTableAlias, options }) {
6
8
  this.options = options;
@@ -38,7 +40,7 @@ class TableTree {
38
40
  }
39
41
  }
40
42
  _createRootNode({ expression, modelClass }) {
41
- const node = TableNode.create({
43
+ const node = TableNode_1.TableNode.create({
42
44
  tableTree: this,
43
45
  modelClass,
44
46
  expression,
@@ -47,8 +49,12 @@ class TableTree {
47
49
  return node;
48
50
  }
49
51
  _createChildNodes({ expression, modelClass, parentNode }) {
50
- forEachChildExpression(expression, modelClass, (childExpr, relation) => {
51
- const node = TableNode.create({
52
+ (0, utils_1.forEachChildExpression)(expression, modelClass, (childExpr, relation) => {
53
+ // `relation` is only null for a recursive relation that doesn't exist.
54
+ // Reading its `relatedModelClass` then throws a TypeError.
55
+ // `Relation` types its model classes as `RelationModelClass`. They are
56
+ // full model classes.
57
+ const node = TableNode_1.TableNode.create({
52
58
  tableTree: this,
53
59
  modelClass: relation.relatedModelClass,
54
60
  expression: childExpr,
@@ -64,6 +70,4 @@ class TableTree {
64
70
  });
65
71
  }
66
72
  }
67
- module.exports = {
68
- TableTree,
69
- };
73
+ exports.TableTree = TableTree;
@@ -1,19 +1,19 @@
1
- 'use strict';
2
- const { ValidationErrorType } = require('../../model/ValidationError');
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RELATION_RECURSION_LIMIT = exports.ID_LENGTH_LIMIT = void 0;
4
+ exports.forEachChildExpression = forEachChildExpression;
5
+ const ValidationError_1 = require("../../model/ValidationError");
3
6
  const ID_LENGTH_LIMIT = 63;
7
+ exports.ID_LENGTH_LIMIT = ID_LENGTH_LIMIT;
4
8
  const RELATION_RECURSION_LIMIT = 64;
9
+ exports.RELATION_RECURSION_LIMIT = RELATION_RECURSION_LIMIT;
5
10
  // Given a relation expression, goes through all first level children.
6
11
  function forEachChildExpression(expr, modelClass, callback) {
7
12
  if (expr.node.$allRecursive || expr.maxRecursionDepth > RELATION_RECURSION_LIMIT) {
8
13
  throw modelClass.createValidationError({
9
- type: ValidationErrorType.RelationExpression,
14
+ type: ValidationError_1.ValidationErrorType.RelationExpression,
10
15
  message: `recursion depth of eager expression ${expr.toString()} too big for JoinEagerAlgorithm`,
11
16
  });
12
17
  }
13
18
  expr.forEachChildExpression(modelClass, callback);
14
19
  }
15
- module.exports = {
16
- ID_LENGTH_LIMIT,
17
- RELATION_RECURSION_LIMIT,
18
- forEachChildExpression,
19
- };
@@ -1,8 +1,10 @@
1
- 'use strict';
2
- const { QueryBuilderOperation } = require('./QueryBuilderOperation');
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DelegateOperation = void 0;
4
+ const QueryBuilderOperation_1 = require("./QueryBuilderOperation");
3
5
  // Operation that simply delegates all calls to the operation passed
4
6
  // to to the constructor in `opt.delegate`.
5
- class DelegateOperation extends QueryBuilderOperation {
7
+ class DelegateOperation extends QueryBuilderOperation_1.QueryBuilderOperation {
6
8
  constructor(name, opt) {
7
9
  super(name, opt);
8
10
  this.delegate = opt.delegate;
@@ -96,6 +98,4 @@ class DelegateOperation extends QueryBuilderOperation {
96
98
  return clone;
97
99
  }
98
100
  }
99
- module.exports = {
100
- DelegateOperation,
101
- };
101
+ exports.DelegateOperation = DelegateOperation;
@@ -1,7 +1,9 @@
1
- 'use strict';
2
- const { QueryBuilderOperation } = require('./QueryBuilderOperation');
3
- const { StaticHookArguments, hasStaticHook } = require('../StaticHookArguments');
4
- class DeleteOperation extends QueryBuilderOperation {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeleteOperation = void 0;
4
+ const QueryBuilderOperation_1 = require("./QueryBuilderOperation");
5
+ const StaticHookArguments_1 = require("../StaticHookArguments");
6
+ class DeleteOperation extends QueryBuilderOperation_1.QueryBuilderOperation {
5
7
  async onBefore2(builder, result) {
6
8
  await callBeforeDelete(builder);
7
9
  return result;
@@ -16,24 +18,25 @@ class DeleteOperation extends QueryBuilderOperation {
16
18
  return null;
17
19
  }
18
20
  }
21
+ exports.DeleteOperation = DeleteOperation;
19
22
  function callBeforeDelete(builder) {
20
23
  return callStaticBeforeDelete(builder);
21
24
  }
22
25
  function callStaticBeforeDelete(builder) {
23
- if (!hasStaticHook(builder.modelClass(), 'beforeDelete')) {
26
+ if (!(0, StaticHookArguments_1.hasStaticHook)(builder.modelClass(), 'beforeDelete')) {
24
27
  return undefined;
25
28
  }
26
- const args = StaticHookArguments.create({ builder });
29
+ const args = StaticHookArguments_1.StaticHookArguments.create({ builder });
27
30
  return builder.modelClass().beforeDelete(args);
28
31
  }
29
32
  function callAfterDelete(builder, result) {
30
33
  return callStaticAfterDelete(builder, result);
31
34
  }
32
35
  async function callStaticAfterDelete(builder, result) {
33
- if (!hasStaticHook(builder.modelClass(), 'afterDelete')) {
36
+ if (!(0, StaticHookArguments_1.hasStaticHook)(builder.modelClass(), 'afterDelete')) {
34
37
  return result;
35
38
  }
36
- const args = StaticHookArguments.create({ builder, result });
39
+ const args = StaticHookArguments_1.StaticHookArguments.create({ builder, result });
37
40
  const maybeResult = await builder.modelClass().afterDelete(args);
38
41
  if (maybeResult === undefined) {
39
42
  return result;
@@ -42,6 +45,3 @@ async function callStaticAfterDelete(builder, result) {
42
45
  return maybeResult;
43
46
  }
44
47
  }
45
- module.exports = {
46
- DeleteOperation,
47
- };
@@ -1,7 +1,9 @@
1
- 'use strict';
2
- const { QueryBuilderOperation } = require('./QueryBuilderOperation');
3
- const { assertIdNotUndefined } = require('../../utils/assert');
4
- class FindByIdOperation extends QueryBuilderOperation {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FindByIdOperation = void 0;
4
+ const QueryBuilderOperation_1 = require("./QueryBuilderOperation");
5
+ const assert_1 = require("../../utils/assert");
6
+ class FindByIdOperation extends QueryBuilderOperation_1.QueryBuilderOperation {
5
7
  constructor(name, opt) {
6
8
  super(name, opt);
7
9
  this.id = this.opt.id;
@@ -14,7 +16,7 @@ class FindByIdOperation extends QueryBuilderOperation {
14
16
  }
15
17
  onBuild(builder) {
16
18
  if (!builder.internalOptions().skipUndefined) {
17
- assertIdNotUndefined(this.id, `undefined was passed to ${this.name}`);
19
+ (0, assert_1.assertIdNotUndefined)(this.id, `undefined was passed to ${this.name}`);
18
20
  }
19
21
  builder.whereComposite(builder.fullIdColumn(), this.id);
20
22
  }
@@ -24,6 +26,4 @@ class FindByIdOperation extends QueryBuilderOperation {
24
26
  return clone;
25
27
  }
26
28
  }
27
- module.exports = {
28
- FindByIdOperation,
29
- };
29
+ exports.FindByIdOperation = FindByIdOperation;
@@ -1,6 +1,8 @@
1
- 'use strict';
2
- const { QueryBuilderOperation } = require('./QueryBuilderOperation');
3
- class FindByIdsOperation extends QueryBuilderOperation {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FindByIdsOperation = void 0;
4
+ const QueryBuilderOperation_1 = require("./QueryBuilderOperation");
5
+ class FindByIdsOperation extends QueryBuilderOperation_1.QueryBuilderOperation {
4
6
  constructor(name, opt) {
5
7
  super(name, opt);
6
8
  this.ids = null;
@@ -18,6 +20,4 @@ class FindByIdsOperation extends QueryBuilderOperation {
18
20
  return clone;
19
21
  }
20
22
  }
21
- module.exports = {
22
- FindByIdsOperation,
23
- };
23
+ exports.FindByIdsOperation = FindByIdsOperation;