typeorm-extensions 2.2.0-rc.7 → 2.2.0-rc.9

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 (70) hide show
  1. package/README.md +70 -39
  2. package/dist/decorators/generated-column.decorator.d.ts +17 -0
  3. package/dist/decorators/generated-column.decorator.js +15 -0
  4. package/dist/decorators/index.d.ts +1 -0
  5. package/dist/decorators/index.js +1 -0
  6. package/dist/extensions/calculated-column.extension.d.ts +3 -3
  7. package/dist/extensions/calculated-column.extension.js +3 -16
  8. package/dist/extensions/cursor-pagination.extension.js +7 -13
  9. package/dist/extensions/get-many-with-totals.extension.js +9 -32
  10. package/dist/extensions/join-lateral.extension.js +4 -6
  11. package/dist/extensions/period-filter.extension.js +1 -11
  12. package/dist/extensions/typed/index.d.ts +1 -0
  13. package/dist/extensions/typed/index.js +1 -0
  14. package/dist/extensions/typed/typed-calculated/typed-calculated-column.extension.d.ts +25 -0
  15. package/dist/extensions/typed/typed-calculated/typed-calculated-column.extension.js +24 -0
  16. package/dist/extensions/typed/typed-having/typed-having.extension.js +1 -1
  17. package/dist/extensions/typed/typed-joins/typed-join-and-map.extension.js +11 -10
  18. package/dist/extensions/typed/typed-joins/typed-joins.extension.js +11 -22
  19. package/dist/extensions/typed/typed-order-by/typed-order-by.extension.js +11 -17
  20. package/dist/extensions/typed/typed-returning/typed-returning.extension.js +1 -9
  21. package/dist/extensions/typed/typed-select/typed-select.extension.js +2 -8
  22. package/dist/extensions/typed/typed-where/typed-period-filter.extension.js +1 -11
  23. package/dist/extensions/typed/typed-where/typed-where-array.extension.js +4 -18
  24. package/dist/extensions/typed/typed-where/typed-where-ilike.extension.js +1 -11
  25. package/dist/extensions/typed/typed-where/typed-where-is-any.extension.js +3 -22
  26. package/dist/extensions/typed/typed-where/typed-where-is-distinct-from.extension.js +3 -22
  27. package/dist/extensions/typed/typed-where/typed-where-is-in.extension.js +3 -23
  28. package/dist/extensions/typed/typed-where/typed-where-json.extension.js +4 -23
  29. package/dist/extensions/typed/typed-where/typed-where-lower.extension.js +1 -11
  30. package/dist/extensions/typed/typed-where/typed-where-similar.extension.js +1 -10
  31. package/dist/extensions/typed/typed-where/typed-where.extension.js +2 -12
  32. package/dist/extensions/union.extension.js +1 -1
  33. package/dist/extensions/where-array.extension.js +1 -11
  34. package/dist/extensions/where-exists.extension.js +4 -15
  35. package/dist/extensions/where-is-any.extension.d.ts +38 -160
  36. package/dist/extensions/where-is-any.extension.js +1 -11
  37. package/dist/extensions/where-is-distinct-from.extension.js +1 -11
  38. package/dist/extensions/where-is-in.extension.d.ts +35 -145
  39. package/dist/extensions/where-is-in.extension.js +11 -29
  40. package/dist/extensions/where-json.extension.js +1 -11
  41. package/dist/extensions/where-relation-exists.extension.js +5 -25
  42. package/dist/helpers.d.ts +1 -0
  43. package/dist/helpers.js +2 -1
  44. package/dist/index.d.ts +1 -6
  45. package/dist/index.js +1 -12
  46. package/dist/types/extensions/cursor-pagination.types.d.ts +5 -0
  47. package/dist/types/extensions/get-many-with-totals.types.d.ts +4 -0
  48. package/dist/utils/calculated-column.utils.d.ts +8 -0
  49. package/dist/utils/calculated-column.utils.js +20 -3
  50. package/dist/utils/common.utils.d.ts +2 -0
  51. package/dist/utils/common.utils.js +4 -1
  52. package/dist/utils/cursor.utils.js +4 -6
  53. package/dist/utils/json-path.utils.js +2 -2
  54. package/dist/utils/pagination.utils.d.ts +7 -0
  55. package/dist/utils/pagination.utils.js +20 -10
  56. package/dist/utils/parameter.utils.d.ts +10 -0
  57. package/dist/utils/parameter.utils.js +22 -1
  58. package/dist/utils/period.utils.js +2 -1
  59. package/dist/utils/prototype.utils.d.ts +9 -0
  60. package/dist/utils/prototype.utils.js +12 -2
  61. package/dist/utils/query-builder.utils.d.ts +30 -2
  62. package/dist/utils/query-builder.utils.js +82 -44
  63. package/dist/utils/table.utils.js +9 -11
  64. package/dist/utils/time-zone.utils.d.ts +8 -0
  65. package/dist/utils/time-zone.utils.js +15 -5
  66. package/dist/utils/typed-where.utils.d.ts +9 -0
  67. package/dist/utils/typed-where.utils.js +17 -0
  68. package/dist/utils/where.utils.d.ts +2 -0
  69. package/dist/utils/where.utils.js +12 -14
  70. package/package.json +1 -1
@@ -27,12 +27,4 @@ const extension = {
27
27
  },
28
28
  },
29
29
  };
30
- const queryBuilders = [
31
- typeorm_1.InsertQueryBuilder,
32
- typeorm_1.UpdateQueryBuilder,
33
- typeorm_1.DeleteQueryBuilder,
34
- SoftDeleteQueryBuilder_1.SoftDeleteQueryBuilder,
35
- ];
36
- queryBuilders.forEach((builder) => {
37
- (0, prototype_utils_1.patchPrototype)(builder, extension);
38
- });
30
+ (0, prototype_utils_1.patchPrototypes)([typeorm_1.InsertQueryBuilder, typeorm_1.UpdateQueryBuilder, typeorm_1.DeleteQueryBuilder, SoftDeleteQueryBuilder_1.SoftDeleteQueryBuilder], extension);
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const typeorm_1 = require("typeorm");
4
4
  const proxy_key_utils_1 = require("../../../utils/proxy-key.utils");
5
5
  const query_builder_utils_1 = require("../../../utils/query-builder.utils");
6
- const sql_utils_1 = require("../../../utils/sql.utils");
7
6
  const prototype_utils_1 = require("../../../utils/prototype.utils");
8
7
  // patching
9
8
  const extension = {
@@ -23,16 +22,11 @@ const extension = {
23
22
  (0, prototype_utils_1.patchPrototype)(typeorm_1.SelectQueryBuilder, extension);
24
23
  // implementation
25
24
  const attachSelectMethod = (query, method, selection, selectionAliasName, useQuotes) => {
26
- if (selection instanceof proxy_key_utils_1.KeyHolder) {
27
- return query[method](selection.toSql(undefined, useQuotes, (0, sql_utils_1.getDriverType)(query)), selectionAliasName);
28
- }
29
25
  if (Array.isArray(selection)) {
30
- const arrayOfKeys = selection.flatMap((select) => select instanceof proxy_key_utils_1.KeyHolder
31
- ? (0, proxy_key_utils_1.getSqlKeyFromProxyCallback)(select, () => query.alias, useQuotes, (0, sql_utils_1.getDriverType)(query))
32
- : (0, query_builder_utils_1.getTypedSelectionKey)(query, select, useQuotes, `${method}Typed`));
26
+ const arrayOfKeys = selection.flatMap((select) => (0, query_builder_utils_1.getTypedSelectionKey)(query, select, useQuotes, `${method}Typed`));
33
27
  return query[method](arrayOfKeys);
34
28
  }
35
- else if (typeof selection === 'function') {
29
+ else if (selection instanceof proxy_key_utils_1.KeyHolder || typeof selection === 'function') {
36
30
  const keyArrayOrSingleKey = (0, query_builder_utils_1.getTypedSelectionKey)(query, selection, useQuotes, `${method}Typed`);
37
31
  if (Array.isArray(keyArrayOrSingleKey)) {
38
32
  return query[method](keyArrayOrSingleKey);
@@ -1,8 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  require("../../period-filter.extension");
4
- const typeorm_1 = require("typeorm");
5
- const SoftDeleteQueryBuilder_1 = require("typeorm/query-builder/SoftDeleteQueryBuilder");
6
4
  const query_builder_utils_1 = require("../../../utils/query-builder.utils");
7
5
  const prototype_utils_1 = require("../../../utils/prototype.utils");
8
6
  const period_utils_1 = require("../../../utils/period.utils");
@@ -16,12 +14,4 @@ const extension = {
16
14
  },
17
15
  },
18
16
  };
19
- const queryBuilders = [
20
- typeorm_1.SelectQueryBuilder,
21
- typeorm_1.UpdateQueryBuilder,
22
- typeorm_1.DeleteQueryBuilder,
23
- SoftDeleteQueryBuilder_1.SoftDeleteQueryBuilder,
24
- ];
25
- queryBuilders.forEach((builder) => {
26
- (0, prototype_utils_1.patchPrototype)(builder, extension);
27
- });
17
+ (0, prototype_utils_1.patchPrototypes)(prototype_utils_1.WHERE_QUERY_BUILDERS, extension);
@@ -1,11 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  require("../../where-array.extension");
4
- const typeorm_1 = require("typeorm");
5
- const SoftDeleteQueryBuilder_1 = require("typeorm/query-builder/SoftDeleteQueryBuilder");
6
4
  const query_builder_utils_1 = require("../../../utils/query-builder.utils");
7
5
  const sql_utils_1 = require("../../../utils/sql.utils");
8
6
  const prototype_utils_1 = require("../../../utils/prototype.utils");
7
+ const typed_where_utils_1 = require("../../../utils/typed-where.utils");
9
8
  /* eslint-enable @typescript-eslint/no-empty-interface */
10
9
  // patching
11
10
  const createWhereArrayTypedMethod = (method) => function (where, values, arrayType) {
@@ -24,26 +23,13 @@ const extension = {
24
23
  orWhereArrayOverlapsTyped: createWhereArrayTypedMethod('orWhereArrayOverlaps'),
25
24
  },
26
25
  };
27
- const queryBuilders = [
28
- typeorm_1.SelectQueryBuilder,
29
- typeorm_1.UpdateQueryBuilder,
30
- typeorm_1.DeleteQueryBuilder,
31
- SoftDeleteQueryBuilder_1.SoftDeleteQueryBuilder,
32
- ];
33
- queryBuilders.forEach((builder) => {
34
- (0, prototype_utils_1.patchPrototype)(builder, extension);
35
- });
26
+ (0, prototype_utils_1.patchPrototypes)(prototype_utils_1.WHERE_QUERY_BUILDERS, extension);
36
27
  // implementation
37
28
  function attachWhereArrayTyped(builder, method, where, values, arrayType) {
38
- if (typeof where !== 'function') {
39
- return builder;
40
- }
41
- const key = (0, query_builder_utils_1.getTypedSingleColumnKey)(builder, where, `${method}Typed`);
42
- if ((0, query_builder_utils_1.isTypedJsonPath)(builder, where)) {
29
+ if (typeof where === 'function' && (0, query_builder_utils_1.isTypedJsonPath)(builder, where)) {
43
30
  return attachWhereJsonArray(builder, method, where, values, arrayType);
44
31
  }
45
- // .andWhereArrayContains(`"table"."column"`, ['value'])
46
- return builder[method](key, values, arrayType);
32
+ return (0, typed_where_utils_1.attachTypedColumnWhere)(builder, method, where, undefined, values, arrayType);
47
33
  }
48
34
  const JSON_ARRAY_METHOD = /^(where|andWhere|orWhere)Array(Contains|ContainedBy|Overlaps)$/;
49
35
  const JSON_ARRAY_OPERATORS = { Contains: '@>', ContainedBy: '<@', Overlaps: '?|' };
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const typeorm_1 = require("typeorm");
4
- const SoftDeleteQueryBuilder_1 = require("typeorm/query-builder/SoftDeleteQueryBuilder");
5
3
  const query_builder_utils_1 = require("../../../utils/query-builder.utils");
6
4
  const prototype_utils_1 = require("../../../utils/prototype.utils");
7
5
  const sql_utils_1 = require("../../../utils/sql.utils");
@@ -43,15 +41,7 @@ const extension = {
43
41
  orWhereSearchTyped: createWhereSearchTypedMethod('orWhere'),
44
42
  },
45
43
  };
46
- const queryBuilders = [
47
- typeorm_1.SelectQueryBuilder,
48
- typeorm_1.UpdateQueryBuilder,
49
- typeorm_1.DeleteQueryBuilder,
50
- SoftDeleteQueryBuilder_1.SoftDeleteQueryBuilder,
51
- ];
52
- queryBuilders.forEach((builder) => {
53
- (0, prototype_utils_1.patchPrototype)(builder, extension);
54
- });
44
+ (0, prototype_utils_1.patchPrototypes)(prototype_utils_1.WHERE_QUERY_BUILDERS, extension);
55
45
  // implementation
56
46
  /** Quoted columns and raw expressions of the search selectors, in order. */
57
47
  function getSearchColumns(builder, selectors, methodName) {
@@ -1,14 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  require("../../where-is-any.extension");
4
- const typeorm_1 = require("typeorm");
5
- const SoftDeleteQueryBuilder_1 = require("typeorm/query-builder/SoftDeleteQueryBuilder");
6
- const query_builder_utils_1 = require("../../../utils/query-builder.utils");
7
4
  const prototype_utils_1 = require("../../../utils/prototype.utils");
5
+ const typed_where_utils_1 = require("../../../utils/typed-where.utils");
8
6
  /* eslint-enable @typescript-eslint/no-empty-interface */
9
7
  // patching
10
8
  const createWhereIsAnyTypedMethod = (method) => function (where, array, arrayType) {
11
- return attachWhereIsAnyTyped(this, method, where, array, arrayType);
9
+ return (0, typed_where_utils_1.attachTypedColumnWhere)(this, method, where, { value: array }, array, arrayType);
12
10
  };
13
11
  const extension = {
14
12
  prototype: {
@@ -20,21 +18,4 @@ const extension = {
20
18
  orWhereIsNotAnyTyped: createWhereIsAnyTypedMethod('orWhereIsNotAny'),
21
19
  },
22
20
  };
23
- const queryBuilders = [
24
- typeorm_1.SelectQueryBuilder,
25
- typeorm_1.UpdateQueryBuilder,
26
- typeorm_1.DeleteQueryBuilder,
27
- SoftDeleteQueryBuilder_1.SoftDeleteQueryBuilder,
28
- ];
29
- queryBuilders.forEach((builder) => {
30
- (0, prototype_utils_1.patchPrototype)(builder, extension);
31
- });
32
- // implementation
33
- function attachWhereIsAnyTyped(builder, method, where, array, arrayType) {
34
- if (typeof where !== 'function') {
35
- return builder;
36
- }
37
- const key = (0, query_builder_utils_1.getTypedSingleColumnKey)(builder, where, `${method}Typed`, { value: array });
38
- // .andWhere(`"table"."column" = ANY(:param)`, { param: ['value'] })
39
- return builder[method](key, array, arrayType);
40
- }
21
+ (0, prototype_utils_1.patchPrototypes)(prototype_utils_1.WHERE_QUERY_BUILDERS, extension);
@@ -1,14 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  require("../../where-is-distinct-from.extension");
4
- const typeorm_1 = require("typeorm");
5
- const SoftDeleteQueryBuilder_1 = require("typeorm/query-builder/SoftDeleteQueryBuilder");
6
- const query_builder_utils_1 = require("../../../utils/query-builder.utils");
7
4
  const prototype_utils_1 = require("../../../utils/prototype.utils");
5
+ const typed_where_utils_1 = require("../../../utils/typed-where.utils");
8
6
  /* eslint-enable @typescript-eslint/no-empty-interface */
9
7
  // patching
10
8
  const createWhereDistinctTypedMethod = (method) => function (where, value) {
11
- return attachWhereDistinctTyped(this, method, where, value);
9
+ return (0, typed_where_utils_1.attachTypedColumnWhere)(this, method, where, { value }, value);
12
10
  };
13
11
  const extension = {
14
12
  prototype: {
@@ -20,21 +18,4 @@ const extension = {
20
18
  orWhereIsNotDistinctFromTyped: createWhereDistinctTypedMethod('orWhereIsNotDistinctFrom'),
21
19
  },
22
20
  };
23
- const queryBuilders = [
24
- typeorm_1.SelectQueryBuilder,
25
- typeorm_1.UpdateQueryBuilder,
26
- typeorm_1.DeleteQueryBuilder,
27
- SoftDeleteQueryBuilder_1.SoftDeleteQueryBuilder,
28
- ];
29
- queryBuilders.forEach((builder) => {
30
- (0, prototype_utils_1.patchPrototype)(builder, extension);
31
- });
32
- // implementation
33
- function attachWhereDistinctTyped(builder, method, where, value) {
34
- if (typeof where !== 'function') {
35
- return builder;
36
- }
37
- const key = (0, query_builder_utils_1.getTypedSingleColumnKey)(builder, where, `${method}Typed`, { value });
38
- // .andWhereIsDistinctFrom(`"table"."column"`, value)
39
- return builder[method](key, value);
40
- }
21
+ (0, prototype_utils_1.patchPrototypes)(prototype_utils_1.WHERE_QUERY_BUILDERS, extension);
@@ -1,14 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  require("../../where-is-in.extension");
4
- const typeorm_1 = require("typeorm");
5
- const SoftDeleteQueryBuilder_1 = require("typeorm/query-builder/SoftDeleteQueryBuilder");
6
- const query_builder_utils_1 = require("../../../utils/query-builder.utils");
7
4
  const prototype_utils_1 = require("../../../utils/prototype.utils");
5
+ const typed_where_utils_1 = require("../../../utils/typed-where.utils");
8
6
  /* eslint-enable @typescript-eslint/no-empty-interface */
9
7
  // patching
10
8
  const createWhereIsInTypedMethod = (method) => function (where, array) {
11
- return attachWhereIsIn(this, method, where, array);
9
+ return (0, typed_where_utils_1.attachTypedColumnWhere)(this, method, where, { value: array }, array);
12
10
  };
13
11
  const extension = {
14
12
  prototype: {
@@ -20,22 +18,4 @@ const extension = {
20
18
  orWhereIsNotInTyped: createWhereIsInTypedMethod('orWhereIsNotIn'),
21
19
  },
22
20
  };
23
- const queryBuilders = [
24
- typeorm_1.SelectQueryBuilder,
25
- typeorm_1.UpdateQueryBuilder,
26
- typeorm_1.DeleteQueryBuilder,
27
- SoftDeleteQueryBuilder_1.SoftDeleteQueryBuilder,
28
- ];
29
- queryBuilders.forEach((builder) => {
30
- (0, prototype_utils_1.patchPrototype)(builder, extension);
31
- });
32
- // implementation
33
- function attachWhereIsIn(builder, method, where, array) {
34
- if (typeof where === 'function') {
35
- // several columns have no single meaning (AND? OR?), and `where…` kept only the last one
36
- const key = (0, query_builder_utils_1.getTypedSingleColumnKey)(builder, where, `${method}Typed`, { value: array });
37
- // .andWhere(`"table"."column" IN (:...values)`, { values: ['value'] })
38
- return builder[method](key, array);
39
- }
40
- return builder;
41
- }
21
+ (0, prototype_utils_1.patchPrototypes)(prototype_utils_1.WHERE_QUERY_BUILDERS, extension);
@@ -1,14 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  require("../../where-json.extension");
4
- const typeorm_1 = require("typeorm");
5
- const SoftDeleteQueryBuilder_1 = require("typeorm/query-builder/SoftDeleteQueryBuilder");
6
- const query_builder_utils_1 = require("../../../utils/query-builder.utils");
7
4
  const prototype_utils_1 = require("../../../utils/prototype.utils");
5
+ const typed_where_utils_1 = require("../../../utils/typed-where.utils");
8
6
  /* eslint-enable @typescript-eslint/no-empty-interface */
9
7
  // patching
10
8
  const createWhereJsonTypedMethod = (method) => function (where, value) {
11
- return attachWhereJsonTyped(this, method, where, value);
9
+ // one signature for both: `value` is the JSON value or the key, each method checks its own
10
+ return (0, typed_where_utils_1.attachTypedColumnWhere)(this, method, where, { accessor: 'json' }, value);
12
11
  };
13
12
  const extension = {
14
13
  prototype: {
@@ -20,22 +19,4 @@ const extension = {
20
19
  orWhereJsonHasKeyTyped: createWhereJsonTypedMethod('orWhereJsonHasKey'),
21
20
  },
22
21
  };
23
- const queryBuilders = [
24
- typeorm_1.SelectQueryBuilder,
25
- typeorm_1.UpdateQueryBuilder,
26
- typeorm_1.DeleteQueryBuilder,
27
- SoftDeleteQueryBuilder_1.SoftDeleteQueryBuilder,
28
- ];
29
- queryBuilders.forEach((builder) => {
30
- (0, prototype_utils_1.patchPrototype)(builder, extension);
31
- });
32
- // implementation
33
- function attachWhereJsonTyped(builder, method, where, value) {
34
- if (typeof where !== 'function') {
35
- return builder;
36
- }
37
- const key = (0, query_builder_utils_1.getTypedSingleColumnKey)(builder, where, `${method}Typed`, { accessor: 'json' });
38
- // .andWhereJsonContains(`"table"."column"`, { role: 'admin' }) / .andWhereJsonHasKey(`"table"."column"`, 'role')
39
- // (one signature for both: `value` is the JSON value or the key, each method checks its own)
40
- return builder[method](key, value);
41
- }
22
+ (0, prototype_utils_1.patchPrototypes)(prototype_utils_1.WHERE_QUERY_BUILDERS, extension);
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const typeorm_1 = require("typeorm");
4
- const SoftDeleteQueryBuilder_1 = require("typeorm/query-builder/SoftDeleteQueryBuilder");
5
3
  const query_builder_utils_1 = require("../../../utils/query-builder.utils");
6
4
  const prototype_utils_1 = require("../../../utils/prototype.utils");
7
5
  const sql_utils_1 = require("../../../utils/sql.utils");
@@ -56,15 +54,7 @@ const extension = {
56
54
  orWhereIsInLowerTyped: createWhereIsInLowerTypedMethod('orWhere'),
57
55
  },
58
56
  };
59
- const queryBuilders = [
60
- typeorm_1.SelectQueryBuilder,
61
- typeorm_1.UpdateQueryBuilder,
62
- typeorm_1.DeleteQueryBuilder,
63
- SoftDeleteQueryBuilder_1.SoftDeleteQueryBuilder,
64
- ];
65
- queryBuilders.forEach((builder) => {
66
- (0, prototype_utils_1.patchPrototype)(builder, extension);
67
- });
57
+ (0, prototype_utils_1.patchPrototypes)(prototype_utils_1.WHERE_QUERY_BUILDERS, extension);
68
58
  // implementation
69
59
  const lower = (sql) => `LOWER(${sql})`;
70
60
  /**
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const typeorm_1 = require("typeorm");
4
- const SoftDeleteQueryBuilder_1 = require("typeorm/query-builder/SoftDeleteQueryBuilder");
5
4
  const query_builder_utils_1 = require("../../../utils/query-builder.utils");
6
5
  const prototype_utils_1 = require("../../../utils/prototype.utils");
7
6
  const sql_utils_1 = require("../../../utils/sql.utils");
@@ -63,13 +62,5 @@ const scoreExtension = {
63
62
  },
64
63
  },
65
64
  };
66
- const queryBuilders = [
67
- typeorm_1.SelectQueryBuilder,
68
- typeorm_1.UpdateQueryBuilder,
69
- typeorm_1.DeleteQueryBuilder,
70
- SoftDeleteQueryBuilder_1.SoftDeleteQueryBuilder,
71
- ];
72
- queryBuilders.forEach((builder) => {
73
- (0, prototype_utils_1.patchPrototype)(builder, extension);
74
- });
65
+ (0, prototype_utils_1.patchPrototypes)(prototype_utils_1.WHERE_QUERY_BUILDERS, extension);
75
66
  (0, prototype_utils_1.patchPrototype)(typeorm_1.SelectQueryBuilder, scoreExtension);
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const typeorm_1 = require("typeorm");
4
- const SoftDeleteQueryBuilder_1 = require("typeorm/query-builder/SoftDeleteQueryBuilder");
5
3
  const query_builder_utils_1 = require("../../../utils/query-builder.utils");
6
4
  const prototype_utils_1 = require("../../../utils/prototype.utils");
7
5
  const where_utils_1 = require("../../../utils/where.utils");
@@ -17,22 +15,14 @@ const extension = {
17
15
  orWhereTyped: createWhereTypedMethod('orWhere'),
18
16
  },
19
17
  };
20
- const queryBuilders = [
21
- typeorm_1.SelectQueryBuilder,
22
- typeorm_1.UpdateQueryBuilder,
23
- typeorm_1.DeleteQueryBuilder,
24
- SoftDeleteQueryBuilder_1.SoftDeleteQueryBuilder,
25
- ];
26
- queryBuilders.forEach((builder) => {
27
- (0, prototype_utils_1.patchPrototype)(builder, extension);
28
- });
18
+ (0, prototype_utils_1.patchPrototypes)(prototype_utils_1.WHERE_QUERY_BUILDERS, extension);
29
19
  // implementation
30
20
  function attachTypedWhere(builder, method, where, conditions, parameters, options) {
31
21
  const { addValue } = options || {};
32
22
  if (typeof where === 'function') {
33
23
  // several columns have no single meaning (AND? OR?), and `where…` kept only the last one
34
24
  // a path into a JSON column is cast to the type of the value it is compared with
35
- const value = (0, where_utils_1.isParamsObject)(parameters) ? Object.values(parameters)[0] : parameters;
25
+ const value = (0, where_utils_1.getComparedValue)(parameters);
36
26
  const key = (0, query_builder_utils_1.getTypedSingleColumnKey)(builder, where, `${method}Typed`, { value });
37
27
  return (0, where_utils_1.attachWhere)(builder, method, key, conditions, parameters, {
38
28
  addValue,
@@ -46,7 +46,7 @@ function ordersOrLimits(query, sql) {
46
46
  return Object.keys(allOrderBys !== null && allOrderBys !== void 0 ? allOrderBys : {}).length > 0 || [limit, offset, take, skip].some((value) => value !== undefined);
47
47
  }
48
48
  function bindParameters(builder, query) {
49
- const [sql, parameters] = (0, parameter_utils_1.withUniqueParameterNames)(query.getQuery(), query.getParameters());
49
+ const [sql, parameters] = (0, parameter_utils_1.toSubQuerySql)(query);
50
50
  builder.setParameters(parameters);
51
51
  return sql;
52
52
  }
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const typeorm_1 = require("typeorm");
4
- const SoftDeleteQueryBuilder_1 = require("typeorm/query-builder/SoftDeleteQueryBuilder");
5
3
  const prototype_utils_1 = require("../utils/prototype.utils");
6
4
  const query_builder_utils_1 = require("../utils/query-builder.utils");
7
5
  const sql_utils_1 = require("../utils/sql.utils");
@@ -21,15 +19,7 @@ const extension = {
21
19
  orWhereArrayOverlaps: createWhereArrayMethod('orWhere', '&&'),
22
20
  },
23
21
  };
24
- const queryBuilders = [
25
- typeorm_1.SelectQueryBuilder,
26
- typeorm_1.UpdateQueryBuilder,
27
- typeorm_1.DeleteQueryBuilder,
28
- SoftDeleteQueryBuilder_1.SoftDeleteQueryBuilder,
29
- ];
30
- queryBuilders.forEach((builder) => {
31
- (0, prototype_utils_1.patchPrototype)(builder, extension);
32
- });
22
+ (0, prototype_utils_1.patchPrototypes)(prototype_utils_1.WHERE_QUERY_BUILDERS, extension);
33
23
  // implementation
34
24
  function attachWhereArray(builder, method, field, operator, values, arrayType) {
35
25
  if (!method || typeof field !== 'string') {
@@ -1,10 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.attachExists = void 0;
4
- const typeorm_1 = require("typeorm");
5
- const SoftDeleteQueryBuilder_1 = require("typeorm/query-builder/SoftDeleteQueryBuilder");
6
4
  const prototype_utils_1 = require("../utils/prototype.utils");
7
5
  const parameter_utils_1 = require("../utils/parameter.utils");
6
+ const query_builder_utils_1 = require("../utils/query-builder.utils");
8
7
  const existsMethods = {
9
8
  prototype: {
10
9
  whereExists(subQuery) {
@@ -33,10 +32,8 @@ const notExistsMethods = {
33
32
  };
34
33
  // only where the builder lacks them: SelectQueryBuilder keeps TypeORM's own whereExists /
35
34
  // andWhereExists / orWhereExists, and a later TypeORM that adds any of these keeps its own
36
- [typeorm_1.SelectQueryBuilder, typeorm_1.UpdateQueryBuilder, typeorm_1.DeleteQueryBuilder, SoftDeleteQueryBuilder_1.SoftDeleteQueryBuilder].forEach((builder) => {
37
- (0, prototype_utils_1.patchPrototype)(builder, existsMethods, { onlyMissing: true });
38
- (0, prototype_utils_1.patchPrototype)(builder, notExistsMethods, { onlyMissing: true });
39
- });
35
+ (0, prototype_utils_1.patchPrototypes)(prototype_utils_1.WHERE_QUERY_BUILDERS, existsMethods, { onlyMissing: true });
36
+ (0, prototype_utils_1.patchPrototypes)(prototype_utils_1.WHERE_QUERY_BUILDERS, notExistsMethods, { onlyMissing: true });
40
37
  // implementation
41
38
  function attachExists(builder, method, subQuery, negate) {
42
39
  const [condition, parameters] = (0, parameter_utils_1.withUniqueParameterNames)(...getExistsCondition(subQuery));
@@ -48,15 +45,7 @@ exports.attachExists = attachExists;
48
45
  * drops GROUP BY, which leaves a HAVING to aggregate the whole subquery: the GROUP BY stays with one.
49
46
  */
50
47
  function getExistsCondition(subQuery) {
51
- const query = subQuery
52
- .clone()
53
- .orderBy()
54
- .offset(undefined)
55
- .limit(undefined)
56
- .skip(undefined)
57
- .take(undefined)
58
- .select('1')
59
- .setOption('disable-global-order');
48
+ const query = (0, query_builder_utils_1.withoutPaging)(subQuery.clone()).select('1');
60
49
  if (query.expressionMap.havings.length === 0) {
61
50
  query.groupBy();
62
51
  }