@abedmurrar/objection 4.0.0-beta.1 → 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 (134) 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/RelationDeleteOperation.js +0 -2
  127. package/lib/relations/RelationFindOperation.js +0 -1
  128. package/lib/relations/RelationUpdateOperation.js +0 -1
  129. package/lib/relations/manyToMany/delete/ManyToManyDeleteOperationBase.js +0 -1
  130. package/lib/transaction.js +44 -12
  131. package/lib/utils/objectUtils.js +6 -1
  132. package/lib/utils/parseFieldExpression.js +4 -35
  133. package/lib/utils/promiseUtils/index.js +19 -9
  134. package/package.json +1 -1
@@ -1,24 +1,59 @@
1
- 'use strict';
2
- const mysqlJsonApi = require('./mysqlJsonApi');
3
- const { getJsonDialect } = require('../../../utils/postgresJsonPath');
4
- const { getMariaDbVersion } = require('../../../utils/knexUtils');
5
- const { jsonCastsForDialect } = require('../../../utils/mysqlJsonPath');
6
- const { ObjectionToKnexConvertingOperation } = require('../ObjectionToKnexConvertingOperation');
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.WhereJsonOverlapsOperation = void 0;
37
+ const mysqlJsonApi = __importStar(require("./mysqlJsonApi"));
38
+ const postgresJsonPath_1 = require("../../../utils/postgresJsonPath");
39
+ const knexUtils_1 = require("../../../utils/knexUtils");
40
+ const mysqlJsonPath_1 = require("../../../utils/mysqlJsonPath");
41
+ const ObjectionToKnexConvertingOperation_1 = require("../ObjectionToKnexConvertingOperation");
7
42
  // `whereJsonOverlaps` and its variants. Postgres has no operator for this.
8
- class WhereJsonOverlapsOperation extends ObjectionToKnexConvertingOperation {
43
+ class WhereJsonOverlapsOperation extends ObjectionToKnexConvertingOperation_1.ObjectionToKnexConvertingOperation {
9
44
  onBuildKnex(knexBuilder, builder) {
10
45
  const knex = builder.unsafeKnex();
11
- if (knex && getJsonDialect(knex, this.name) !== 'mysql') {
46
+ if (knex && (0, postgresJsonPath_1.getJsonDialect)(knex, this.name) !== 'mysql') {
12
47
  throw new Error(`${this.name} is only supported on mysql.`);
13
48
  }
14
- const mariaDbVersion = knex && getMariaDbVersion(knex);
49
+ const mariaDbVersion = knex && (0, knexUtils_1.getMariaDbVersion)(knex);
15
50
  if (mariaDbVersion &&
16
51
  (mariaDbVersion[0] < 10 || (mariaDbVersion[0] === 10 && mariaDbVersion[1] < 9))) {
17
52
  throw new Error(`${this.name} needs MariaDB 10.9 or newer, which has JSON_OVERLAPS().`);
18
53
  }
19
54
  const args = this.getKnexArgs(builder);
20
55
  const [rawSql, bindings] = mysqlJsonApi.whereJsonOverlaps(args[0], args[1], this.opt.prefix);
21
- const sql = jsonCastsForDialect(rawSql, knex);
56
+ const sql = (0, mysqlJsonPath_1.jsonCastsForDialect)(rawSql, knex);
22
57
  if (this.opt.bool === 'or') {
23
58
  knexBuilder = knexBuilder.orWhereRaw(sql, bindings);
24
59
  }
@@ -28,6 +63,4 @@ class WhereJsonOverlapsOperation extends ObjectionToKnexConvertingOperation {
28
63
  return knexBuilder;
29
64
  }
30
65
  }
31
- module.exports = {
32
- WhereJsonOverlapsOperation,
33
- };
66
+ exports.WhereJsonOverlapsOperation = WhereJsonOverlapsOperation;
@@ -1,14 +1,13 @@
1
- 'use strict';
2
- const { parseFieldExpression } = require('../../../utils/parseFieldExpression');
3
- const { asArray, isObject, isPlainObject, isString } = require('../../../utils/objectUtils');
4
- const { toMySqlJsonPath } = require('../../../utils/mysqlJsonPath');
5
- const { isMariaDb } = require('../../../utils/knexUtils');
6
- // The MySQL versions of the `whereJson*` methods. They mirror the postgres
7
- // operators (`@>`, `<@`, `?|`, `?&`) so that the methods find the same rows on
8
- // both databases.
9
- //
10
- // The parts of the queries are `{ sql, bindings, type }` objects. `type` is
11
- // `'object'` or `'nonObject'` when the JSON type of the part is known.
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.whereJsonContains = whereJsonContains;
4
+ exports.whereJsonNotContains = whereJsonNotContains;
5
+ exports.whereJsonHas = whereJsonHas;
6
+ exports.whereJsonOverlaps = whereJsonOverlaps;
7
+ const parseFieldExpression_1 = require("../../../utils/parseFieldExpression");
8
+ const objectUtils_1 = require("../../../utils/objectUtils");
9
+ const mysqlJsonPath_1 = require("../../../utils/mysqlJsonPath");
10
+ const knexUtils_1 = require("../../../utils/knexUtils");
12
11
  // Joins sql parts: sql`JSON_CONTAINS(${target}, ${candidate})`.
13
12
  function sql(strings, ...parts) {
14
13
  let text = strings[0];
@@ -24,14 +23,14 @@ function literal(text) {
24
23
  }
25
24
  // A field expression like `Table.column:a.b[0]`.
26
25
  function field(expression) {
27
- const parsed = parseFieldExpression(expression);
26
+ const parsed = (0, parseFieldExpression_1.parseFieldExpression)(expression);
28
27
  if (parsed.access.length === 0) {
29
28
  return { sql: '??', bindings: [parsed.columnName] };
30
29
  }
31
30
  else {
32
31
  return {
33
32
  sql: 'JSON_EXTRACT(??, ?)',
34
- bindings: [parsed.columnName, toMySqlJsonPath(parsed.access)],
33
+ bindings: [parsed.columnName, (0, mysqlJsonPath_1.toMySqlJsonPath)(parsed.access)],
35
34
  };
36
35
  }
37
36
  }
@@ -39,15 +38,15 @@ function jsonValue(value) {
39
38
  return {
40
39
  sql: 'CAST(? AS JSON)',
41
40
  bindings: [JSON.stringify(value)],
42
- type: isPlainObject(value) ? 'object' : 'nonObject',
41
+ type: (0, objectUtils_1.isPlainObject)(value) ? 'object' : 'nonObject',
43
42
  };
44
43
  }
45
44
  // The right hand side of the methods: a field expression or a JSON value.
46
45
  function fieldOrValue(value) {
47
- if (isString(value)) {
46
+ if ((0, objectUtils_1.isString)(value)) {
48
47
  return field(value);
49
48
  }
50
- else if (isObject(value)) {
49
+ else if ((0, objectUtils_1.isObject)(value)) {
51
50
  return jsonValue(value);
52
51
  }
53
52
  else {
@@ -95,12 +94,14 @@ function whereJsonNotContains(fieldExpression, compareValue) {
95
94
  // `whereJsonHasAny` (`?|`) and `whereJsonHasAll` (`?&`). Like on postgres, the keys
96
95
  // are looked for in the keys of objects, in the string items of arrays and in
97
96
  // strings.
98
- function whereJsonHas(fieldExpression, operator, keys, knex = null) {
97
+ function whereJsonHas(fieldExpression, operator,
98
+ // A key or an array of keys, made an array below.
99
+ keys, knex = null) {
99
100
  const left = field(fieldExpression);
100
101
  const all = operator === '?&';
101
- keys = asArray(keys);
102
+ keys = (0, objectUtils_1.asArray)(keys);
102
103
  for (const key of keys) {
103
- if (!isString(key)) {
104
+ if (!(0, objectUtils_1.isString)(key)) {
104
105
  throw new Error('All keys to find must be strings.');
105
106
  }
106
107
  }
@@ -109,7 +110,7 @@ function whereJsonHas(fieldExpression, operator, keys, knex = null) {
109
110
  }
110
111
  const paths = {
111
112
  sql: keys.map(() => '?').join(', '),
112
- bindings: keys.map((key) => toMySqlJsonPath([{ type: 'object', ref: key }])),
113
+ bindings: keys.map((key) => (0, mysqlJsonPath_1.toMySqlJsonPath)([{ type: 'object', ref: key }])),
113
114
  };
114
115
  const keysJson = jsonValue(keys);
115
116
  const stringChecks = keys.map((key) => ({
@@ -125,7 +126,7 @@ function whereJsonHas(fieldExpression, operator, keys, knex = null) {
125
126
  if (all) {
126
127
  arrayCheck = sql `JSON_CONTAINS(${left}, ${keysJson})`;
127
128
  }
128
- else if (knex && isMariaDb(knex)) {
129
+ else if (knex && (0, knexUtils_1.isMariaDb)(knex)) {
129
130
  // MariaDB has JSON_OVERLAPS() only since 10.9.
130
131
  const containsChecks = keys.map((key) => ({
131
132
  sql: `JSON_CONTAINS(${left.sql}, ?)`,
@@ -147,9 +148,3 @@ function whereJsonOverlaps(fieldExpression, jsonObjectOrFieldExpression, prefix)
147
148
  const overlaps = sql `JSON_OVERLAPS(${field(fieldExpression)}, ${fieldOrValue(jsonObjectOrFieldExpression)})`;
148
149
  return toRawArgs(prefix === 'not' ? sql `NOT COALESCE(${overlaps}, FALSE)` : overlaps);
149
150
  }
150
- module.exports = {
151
- whereJsonContains,
152
- whereJsonNotContains,
153
- whereJsonHas,
154
- whereJsonOverlaps,
155
- };
@@ -1,7 +1,46 @@
1
- 'use strict';
2
- const parser = require('../../../utils/parseFieldExpression');
3
- const { asArray, isObject, isString } = require('../../../utils/objectUtils');
4
- const { toPgJsonPathLiteral, toPgQuotedColumn } = require('../../../utils/postgresJsonPath');
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.parseFieldExpression = parseFieldExpression;
37
+ exports.whereJsonbRefOnLeftJsonbValOrRefOnRight = whereJsonbRefOnLeftJsonbValOrRefOnRight;
38
+ exports.whereJsonbRefOnLeftJsonbValOrRefOnRightRawQueryParams = whereJsonbRefOnLeftJsonbValOrRefOnRightRawQueryParams;
39
+ exports.whereJsonFieldRightStringArrayOnLeftQuery = whereJsonFieldRightStringArrayOnLeftQuery;
40
+ exports.whereJsonFieldQuery = whereJsonFieldQuery;
41
+ const parser = __importStar(require("../../../utils/parseFieldExpression"));
42
+ const objectUtils_1 = require("../../../utils/objectUtils");
43
+ const postgresJsonPath_1 = require("../../../utils/postgresJsonPath");
5
44
  /**
6
45
  * @typedef {String} FieldExpression
7
46
  *
@@ -43,7 +82,7 @@ const { toPgJsonPathLiteral, toPgQuotedColumn } = require('../../../utils/postgr
43
82
  function parseFieldExpression(expression, extractAsText) {
44
83
  const parsed = parser.parseFieldExpression(expression);
45
84
  const extractor = extractAsText ? '#>>' : '#>';
46
- return `${toPgQuotedColumn(parsed.columnName)}${extractor}${toPgJsonPathLiteral(parsed.access)}`;
85
+ return `${(0, postgresJsonPath_1.toPgQuotedColumn)(parsed.columnName)}${extractor}${(0, postgresJsonPath_1.toPgJsonPathLiteral)(parsed.access)}`;
47
86
  }
48
87
  function whereJsonbRefOnLeftJsonbValOrRefOnRight(builder, fieldExpression, operator, jsonObjectOrFieldExpression, queryPrefix) {
49
88
  const queryParams = whereJsonbRefOnLeftJsonbValOrRefOnRightRawQueryParams(fieldExpression, operator, jsonObjectOrFieldExpression, queryPrefix);
@@ -51,7 +90,7 @@ function whereJsonbRefOnLeftJsonbValOrRefOnRight(builder, fieldExpression, opera
51
90
  }
52
91
  function whereJsonbRefOnLeftJsonbValOrRefOnRightRawQueryParams(fieldExpression, operator, jsonObjectOrFieldExpression, queryPrefix) {
53
92
  const fieldReference = parseFieldExpression(fieldExpression);
54
- if (isString(jsonObjectOrFieldExpression)) {
93
+ if ((0, objectUtils_1.isString)(jsonObjectOrFieldExpression)) {
55
94
  const rightHandReference = parseFieldExpression(jsonObjectOrFieldExpression);
56
95
  const refRefQuery = [
57
96
  '(',
@@ -67,7 +106,7 @@ function whereJsonbRefOnLeftJsonbValOrRefOnRightRawQueryParams(fieldExpression,
67
106
  }
68
107
  return [refRefQuery.join(' ')];
69
108
  }
70
- else if (isObject(jsonObjectOrFieldExpression)) {
109
+ else if ((0, objectUtils_1.isObject)(jsonObjectOrFieldExpression)) {
71
110
  const refValQuery = ['(', fieldReference, ')::jsonb', operator, '?::jsonb'];
72
111
  if (queryPrefix) {
73
112
  refValQuery.unshift(queryPrefix);
@@ -76,11 +115,13 @@ function whereJsonbRefOnLeftJsonbValOrRefOnRightRawQueryParams(fieldExpression,
76
115
  }
77
116
  throw new Error('Invalid right hand expression.');
78
117
  }
79
- function whereJsonFieldRightStringArrayOnLeftQuery(knex, fieldExpression, operator, keys) {
118
+ function whereJsonFieldRightStringArrayOnLeftQuery(knex, fieldExpression, operator,
119
+ // A key or an array of keys, made an array below.
120
+ keys) {
80
121
  const fieldReference = parseFieldExpression(fieldExpression);
81
- keys = asArray(keys);
122
+ keys = (0, objectUtils_1.asArray)(keys);
82
123
  const questionMarksArray = keys.map((key) => {
83
- if (!isString(key)) {
124
+ if (!(0, objectUtils_1.isString)(key)) {
84
125
  throw new Error('All keys to find must be strings.');
85
126
  }
86
127
  return '?';
@@ -126,10 +167,3 @@ function normalizeOperator(knex, operator) {
126
167
  throw new Error(`unsupported operator "${operator}" in a JSON field query`);
127
168
  }
128
169
  }
129
- module.exports = {
130
- parseFieldExpression: parseFieldExpression,
131
- whereJsonbRefOnLeftJsonbValOrRefOnRight: whereJsonbRefOnLeftJsonbValOrRefOnRight,
132
- whereJsonbRefOnLeftJsonbValOrRefOnRightRawQueryParams: whereJsonbRefOnLeftJsonbValOrRefOnRightRawQueryParams,
133
- whereJsonFieldRightStringArrayOnLeftQuery: whereJsonFieldRightStringArrayOnLeftQuery,
134
- whereJsonFieldQuery: whereJsonFieldQuery,
135
- };
@@ -1,15 +1,17 @@
1
- 'use strict';
2
- const { flatten } = require('../../../utils/objectUtils');
3
- const { Selection } = require('./Selection');
4
- const { ObjectionToKnexConvertingOperation } = require('../ObjectionToKnexConvertingOperation');
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SelectOperation = void 0;
4
+ const objectUtils_1 = require("../../../utils/objectUtils");
5
+ const Selection_1 = require("./Selection");
6
+ const ObjectionToKnexConvertingOperation_1 = require("../ObjectionToKnexConvertingOperation");
5
7
  const COUNT_REGEX = /count/i;
6
- class SelectOperation extends ObjectionToKnexConvertingOperation {
8
+ class SelectOperation extends ObjectionToKnexConvertingOperation_1.ObjectionToKnexConvertingOperation {
7
9
  constructor(name, opt) {
8
10
  super(name, opt);
9
11
  this.selections = [];
10
12
  }
11
13
  onAdd(builder, args) {
12
- const selections = flatten(args);
14
+ const selections = (0, objectUtils_1.flatten)(args);
13
15
  // Don't add an empty selection. Empty list is accepted for `count`, `countDistinct`
14
16
  // etc. because knex apparently supports it.
15
17
  if (selections.length === 0 && !COUNT_REGEX.test(this.name)) {
@@ -17,7 +19,7 @@ class SelectOperation extends ObjectionToKnexConvertingOperation {
17
19
  }
18
20
  const ret = super.onAdd(builder, selections);
19
21
  for (const selection of selections) {
20
- const selectionInstance = Selection.create(selection);
22
+ const selectionInstance = Selection_1.Selection.create(selection);
21
23
  if (selectionInstance) {
22
24
  this.selections.push(selectionInstance);
23
25
  }
@@ -28,12 +30,12 @@ class SelectOperation extends ObjectionToKnexConvertingOperation {
28
30
  return knexBuilder[this.name].apply(knexBuilder, this.getKnexArgs(builder));
29
31
  }
30
32
  findSelection(builder, selectionToFind) {
31
- const selectionInstanceToFind = Selection.create(selectionToFind);
33
+ const selectionInstanceToFind = Selection_1.Selection.create(selectionToFind);
32
34
  if (!selectionInstanceToFind) {
33
35
  return null;
34
36
  }
35
37
  for (const selection of this.selections) {
36
- if (Selection.doesSelect(builder, selection, selectionInstanceToFind)) {
38
+ if (Selection_1.Selection.doesSelect(builder, selection, selectionInstanceToFind)) {
37
39
  return selection;
38
40
  }
39
41
  }
@@ -45,6 +47,4 @@ class SelectOperation extends ObjectionToKnexConvertingOperation {
45
47
  return clone;
46
48
  }
47
49
  }
48
- module.exports = {
49
- SelectOperation,
50
- };
50
+ exports.SelectOperation = SelectOperation;
@@ -1,5 +1,7 @@
1
- 'use strict';
2
- const { isString, isObject } = require('../../../utils/objectUtils');
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Selection = void 0;
4
+ const objectUtils_1 = require("../../../utils/objectUtils");
3
5
  const ALIAS_REGEX = /\s+as\s+/i;
4
6
  class Selection {
5
7
  constructor(table, column, alias) {
@@ -11,21 +13,22 @@ class Selection {
11
13
  return this.alias || this.column;
12
14
  }
13
15
  static create(selection) {
14
- if (isObject(selection)) {
15
- if (selection.isObjectionSelection) {
16
+ if ((0, objectUtils_1.isObject)(selection)) {
17
+ const obj = selection;
18
+ if (obj.isObjectionSelection) {
16
19
  return selection;
17
20
  }
18
- else if (selection.isObjectionReferenceBuilder) {
21
+ else if (obj.isObjectionReferenceBuilder) {
19
22
  return createSelectionFromReference(selection);
20
23
  }
21
- else if (selection.isObjectionRawBuilder) {
24
+ else if (obj.isObjectionRawBuilder) {
22
25
  return createSelectionFromRaw(selection);
23
26
  }
24
27
  else {
25
28
  return null;
26
29
  }
27
30
  }
28
- else if (isString(selection)) {
31
+ else if ((0, objectUtils_1.isString)(selection)) {
29
32
  return createSelectionFromString(selection);
30
33
  }
31
34
  else {
@@ -45,13 +48,16 @@ class Selection {
45
48
  static doesSelect(builder, selectionInBuilder, selectionToTest) {
46
49
  selectionInBuilder = Selection.create(selectionInBuilder);
47
50
  selectionToTest = Selection.create(selectionToTest);
48
- if (selectionInBuilder.column === '*') {
49
- if (selectionInBuilder.table) {
50
- if (selectionToTest.column === '*') {
51
- return selectionToTest.table === selectionInBuilder.table;
51
+ // Both must be selections. Others throw here.
52
+ const inBuilder = selectionInBuilder;
53
+ const toTest = selectionToTest;
54
+ if (inBuilder.column === '*') {
55
+ if (inBuilder.table) {
56
+ if (toTest.column === '*') {
57
+ return toTest.table === inBuilder.table;
52
58
  }
53
59
  else {
54
- return (selectionToTest.table === null || selectionToTest.table === selectionInBuilder.table);
60
+ return toTest.table === null || toTest.table === inBuilder.table;
55
61
  }
56
62
  }
57
63
  else {
@@ -59,17 +65,18 @@ class Selection {
59
65
  }
60
66
  }
61
67
  else {
62
- const selectionInBuilderTable = selectionInBuilder.table || builder.tableRef();
63
- if (selectionToTest.column === '*') {
68
+ const selectionInBuilderTable = inBuilder.table || builder.tableRef();
69
+ if (toTest.column === '*') {
64
70
  return false;
65
71
  }
66
72
  else {
67
- return (selectionToTest.column === selectionInBuilder.column &&
68
- (selectionToTest.table === null || selectionToTest.table === selectionInBuilderTable));
73
+ return (toTest.column === inBuilder.column &&
74
+ (toTest.table === null || toTest.table === selectionInBuilderTable));
69
75
  }
70
76
  }
71
77
  }
72
78
  }
79
+ exports.Selection = Selection;
73
80
  Object.defineProperties(Selection.prototype, {
74
81
  isObjectionSelection: {
75
82
  enumerable: false,
@@ -107,6 +114,3 @@ function createSelectionFromString(selection) {
107
114
  }
108
115
  return new Selection(table, column, alias);
109
116
  }
110
- module.exports = {
111
- Selection,
112
- };
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ // Internal types for the query builder operations.
3
+ //
4
+ // The model classes are still JavaScript, so these interfaces only describe
5
+ // the parts of them that the operations use. The query builder and the
6
+ // relations are TypeScript, and their types are used here. The public types
7
+ // are the hand-written ones in `typings/`.
8
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,8 +1,10 @@
1
- 'use strict';
2
- const { ObjectionToKnexConvertingOperation } = require('../ObjectionToKnexConvertingOperation');
3
- const { flatten, zipObject, isString } = require('../../../utils/objectUtils');
4
- const { getTempColumn } = require('../../../utils/tmpColumnUtils');
5
- class WhereInCompositeMsSqlOperation extends ObjectionToKnexConvertingOperation {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WhereInCompositeMsSqlOperation = void 0;
4
+ const ObjectionToKnexConvertingOperation_1 = require("../ObjectionToKnexConvertingOperation");
5
+ const objectUtils_1 = require("../../../utils/objectUtils");
6
+ const tmpColumnUtils_1 = require("../../../utils/tmpColumnUtils");
7
+ class WhereInCompositeMsSqlOperation extends ObjectionToKnexConvertingOperation_1.ObjectionToKnexConvertingOperation {
6
8
  constructor(name, opt) {
7
9
  super(name, opt);
8
10
  this.prefix = this.opt.prefix || null;
@@ -21,21 +23,22 @@ class WhereInCompositeMsSqlOperation extends ObjectionToKnexConvertingOperation
21
23
  }
22
24
  }
23
25
  buildComposite(knex, knexBuilder, columns, values) {
24
- const helperColumns = columns.map((_, index) => getTempColumn(index));
26
+ const helperColumns = columns.map((_, index) => (0, tmpColumnUtils_1.getTempColumn)(index));
25
27
  if (Array.isArray(values)) {
26
28
  return this.buildCompositeValue(knex, knexBuilder, columns, helperColumns, values);
27
29
  }
28
30
  else {
31
+ // A subquery.
29
32
  return this.buildCompositeSubquery(knex, knexBuilder, columns, helperColumns, values.as(knex.raw(`V(${helperColumns.map((_) => '??')})`, helperColumns)));
30
33
  }
31
34
  }
32
35
  buildCompositeValue(knex, knexBuilder, columns, helperColumns, values) {
33
36
  return this.buildCompositeSubquery(knex, knexBuilder, columns, helperColumns, knex.raw(`(VALUES ${values
34
37
  .map((value) => `(${value.map((_) => '?').join(',')})`)
35
- .join(',')}) AS V(${helperColumns.map((_) => '??').join(',')})`, flatten(values).concat(helperColumns)));
38
+ .join(',')}) AS V(${helperColumns.map((_) => '??').join(',')})`, (0, objectUtils_1.flatten)(values).concat(helperColumns)));
36
39
  }
37
40
  buildCompositeSubquery(knex, knexBuilder, columns, helperColumns, subQuery) {
38
- const wrapperQuery = knex.from(subQuery).where(zipObject(helperColumns, columns.map((column) => knex.raw('??', column))));
41
+ const wrapperQuery = knex.from(subQuery).where((0, objectUtils_1.zipObject)(helperColumns, columns.map((column) => knex.raw('??', column))));
39
42
  if (this.prefix === 'not') {
40
43
  return knexBuilder.whereNotExists(wrapperQuery);
41
44
  }
@@ -44,7 +47,7 @@ class WhereInCompositeMsSqlOperation extends ObjectionToKnexConvertingOperation
44
47
  }
45
48
  }
46
49
  buildNonComposite(knexBuilder, columns, values) {
47
- const col = isString(columns) ? columns : columns[0];
50
+ const col = (0, objectUtils_1.isString)(columns) ? columns : columns[0];
48
51
  if (Array.isArray(values)) {
49
52
  values = pickNonNull(values, []);
50
53
  }
@@ -67,6 +70,7 @@ class WhereInCompositeMsSqlOperation extends ObjectionToKnexConvertingOperation
67
70
  return clone;
68
71
  }
69
72
  }
73
+ exports.WhereInCompositeMsSqlOperation = WhereInCompositeMsSqlOperation;
70
74
  function pickNonNull(values, output) {
71
75
  for (let i = 0, l = values.length; i < l; ++i) {
72
76
  const val = values[i];
@@ -79,6 +83,3 @@ function pickNonNull(values, output) {
79
83
  }
80
84
  return output;
81
85
  }
82
- module.exports = {
83
- WhereInCompositeMsSqlOperation,
84
- };
@@ -1,8 +1,10 @@
1
- 'use strict';
2
- const { ObjectionToKnexConvertingOperation } = require('../ObjectionToKnexConvertingOperation');
3
- const { isObject, asSingle } = require('../../../utils/objectUtils');
4
- const { isKnexQueryBuilder } = require('../../../utils/knexUtils');
5
- class WhereInCompositeOperation extends ObjectionToKnexConvertingOperation {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WhereInCompositeOperation = void 0;
4
+ const ObjectionToKnexConvertingOperation_1 = require("../ObjectionToKnexConvertingOperation");
5
+ const objectUtils_1 = require("../../../utils/objectUtils");
6
+ const knexUtils_1 = require("../../../utils/knexUtils");
7
+ class WhereInCompositeOperation extends ObjectionToKnexConvertingOperation_1.ObjectionToKnexConvertingOperation {
6
8
  constructor(name, opt) {
7
9
  super(name, opt);
8
10
  this.prefix = this.opt.prefix || null;
@@ -22,6 +24,7 @@ class WhereInCompositeOperation extends ObjectionToKnexConvertingOperation {
22
24
  return clone;
23
25
  }
24
26
  }
27
+ exports.WhereInCompositeOperation = WhereInCompositeOperation;
25
28
  function buildWhereInArgs(knex, columns, values) {
26
29
  if (isCompositeKey(columns)) {
27
30
  return buildCompositeArgs(knex, columns, values);
@@ -54,7 +57,7 @@ function buildCompositeSubqueryArgs(knex, columns, subquery) {
54
57
  .map((col) => {
55
58
  // On older versions of knex, raw doesn't work
56
59
  // with `??`. We use `?` for those.
57
- if (isObject(col)) {
60
+ if ((0, objectUtils_1.isObject)(col)) {
58
61
  return '?';
59
62
  }
60
63
  else {
@@ -68,10 +71,10 @@ function buildNonCompositeArgs(columns, values) {
68
71
  if (Array.isArray(values)) {
69
72
  values = pickNonNull(values, []);
70
73
  }
71
- else if (!isKnexQueryBuilder(values)) {
74
+ else if (!(0, knexUtils_1.isKnexQueryBuilder)(values)) {
72
75
  values = [values];
73
76
  }
74
- return [asSingle(columns), values];
77
+ return [(0, objectUtils_1.asSingle)(columns), values];
75
78
  }
76
79
  function pickNonNull(values, output) {
77
80
  for (let i = 0, l = values.length; i < l; ++i) {
@@ -85,6 +88,3 @@ function pickNonNull(values, output) {
85
88
  }
86
89
  return output;
87
90
  }
88
- module.exports = {
89
- WhereInCompositeOperation,
90
- };
@@ -1,8 +1,10 @@
1
- 'use strict';
2
- const { ObjectionToKnexConvertingOperation } = require('../ObjectionToKnexConvertingOperation');
3
- const { isKnexQueryBuilder } = require('../../../utils/knexUtils');
4
- const { asSingle } = require('../../../utils/objectUtils');
5
- class WhereInCompositeSqliteOperation extends ObjectionToKnexConvertingOperation {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WhereInCompositeSqliteOperation = void 0;
4
+ const ObjectionToKnexConvertingOperation_1 = require("../ObjectionToKnexConvertingOperation");
5
+ const knexUtils_1 = require("../../../utils/knexUtils");
6
+ const objectUtils_1 = require("../../../utils/objectUtils");
7
+ class WhereInCompositeSqliteOperation extends ObjectionToKnexConvertingOperation_1.ObjectionToKnexConvertingOperation {
6
8
  constructor(name, opt) {
7
9
  super(name, opt);
8
10
  this.prefix = this.opt.prefix || null;
@@ -32,6 +34,7 @@ class WhereInCompositeSqliteOperation extends ObjectionToKnexConvertingOperation
32
34
  return clone;
33
35
  }
34
36
  }
37
+ exports.WhereInCompositeSqliteOperation = WhereInCompositeSqliteOperation;
35
38
  function buildWhereArgs(columns, values) {
36
39
  if (isCompositeKey(columns)) {
37
40
  return buildCompositeArgs(columns, values);
@@ -70,12 +73,12 @@ function buildNonCompositeArgs(columns, values) {
70
73
  if (Array.isArray(values)) {
71
74
  values = pickNonNull(values, []);
72
75
  }
73
- else if (!isKnexQueryBuilder(values)) {
76
+ else if (!(0, knexUtils_1.isKnexQueryBuilder)(values)) {
74
77
  values = [values];
75
78
  }
76
79
  return {
77
80
  method: 'whereIn',
78
- args: [asSingle(columns), values],
81
+ args: [(0, objectUtils_1.asSingle)(columns), values],
79
82
  };
80
83
  }
81
84
  function pickNonNull(values, output) {
@@ -90,6 +93,3 @@ function pickNonNull(values, output) {
90
93
  }
91
94
  return output;
92
95
  }
93
- module.exports = {
94
- WhereInCompositeSqliteOperation,
95
- };
@@ -1,6 +1,8 @@
1
- 'use strict';
2
- const { QueryTransformation } = require('./QueryTransformation');
3
- class CompositeQueryTransformation extends QueryTransformation {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CompositeQueryTransformation = void 0;
4
+ const QueryTransformation_1 = require("./QueryTransformation");
5
+ class CompositeQueryTransformation extends QueryTransformation_1.QueryTransformation {
4
6
  constructor(transformations) {
5
7
  super();
6
8
  this.transformations = transformations;
@@ -12,6 +14,4 @@ class CompositeQueryTransformation extends QueryTransformation {
12
14
  return item;
13
15
  }
14
16
  }
15
- module.exports = {
16
- CompositeQueryTransformation,
17
- };
17
+ exports.CompositeQueryTransformation = CompositeQueryTransformation;
@@ -1,9 +1,9 @@
1
- 'use strict';
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QueryTransformation = void 0;
2
4
  class QueryTransformation {
3
5
  onConvertQueryBuilderBase(item, builder) {
4
6
  return item;
5
7
  }
6
8
  }
7
- module.exports = {
8
- QueryTransformation,
9
- };
9
+ exports.QueryTransformation = QueryTransformation;