joist-orm 0.1.538 → 1.0.0

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 (221) hide show
  1. package/build/{BaseEntity.d.ts → src/BaseEntity.d.ts} +2 -1
  2. package/build/{BaseEntity.js → src/BaseEntity.js} +13 -9
  3. package/build/src/BaseEntity.js.map +1 -0
  4. package/build/{EntityManager.d.ts → src/EntityManager.d.ts} +139 -110
  5. package/build/{EntityManager.js → src/EntityManager.js} +281 -262
  6. package/build/src/EntityManager.js.map +1 -0
  7. package/build/{QueryBuilder.d.ts → src/QueryBuilder.d.ts} +53 -3
  8. package/build/src/QueryBuilder.js +341 -0
  9. package/build/src/QueryBuilder.js.map +1 -0
  10. package/build/src/Todo.d.ts +25 -0
  11. package/build/src/Todo.js +52 -0
  12. package/build/src/Todo.js.map +1 -0
  13. package/build/src/changes.d.ts +34 -0
  14. package/build/src/changes.js +37 -0
  15. package/build/src/changes.js.map +1 -0
  16. package/build/src/config.d.ts +43 -0
  17. package/build/src/config.js +114 -0
  18. package/build/src/config.js.map +1 -0
  19. package/build/{createOrUpdatePartial.d.ts → src/createOrUpdatePartial.d.ts} +2 -1
  20. package/build/{createOrUpdatePartial.js → src/createOrUpdatePartial.js} +42 -10
  21. package/build/src/createOrUpdatePartial.js.map +1 -0
  22. package/build/src/dataloaders/findDataLoader.d.ts +5 -0
  23. package/build/src/dataloaders/findDataLoader.js +28 -0
  24. package/build/src/dataloaders/findDataLoader.js.map +1 -0
  25. package/build/src/dataloaders/loadDataLoader.d.ts +3 -0
  26. package/build/src/dataloaders/loadDataLoader.js +37 -0
  27. package/build/src/dataloaders/loadDataLoader.js.map +1 -0
  28. package/build/src/dataloaders/manyToManyDataLoader.d.ts +5 -0
  29. package/build/src/dataloaders/manyToManyDataLoader.js +78 -0
  30. package/build/src/dataloaders/manyToManyDataLoader.js.map +1 -0
  31. package/build/src/dataloaders/manyToManyFindDataLoader.d.ts +5 -0
  32. package/build/src/dataloaders/manyToManyFindDataLoader.js +33 -0
  33. package/build/src/dataloaders/manyToManyFindDataLoader.js.map +1 -0
  34. package/build/src/dataloaders/oneToManyDataLoader.d.ts +4 -0
  35. package/build/src/dataloaders/oneToManyDataLoader.js +40 -0
  36. package/build/src/dataloaders/oneToManyDataLoader.js.map +1 -0
  37. package/build/src/dataloaders/oneToManyFindDataLoader.d.ts +5 -0
  38. package/build/src/dataloaders/oneToManyFindDataLoader.js +32 -0
  39. package/build/src/dataloaders/oneToManyFindDataLoader.js.map +1 -0
  40. package/build/src/dataloaders/oneToOneDataLoader.d.ts +4 -0
  41. package/build/src/dataloaders/oneToOneDataLoader.js +40 -0
  42. package/build/src/dataloaders/oneToOneDataLoader.js.map +1 -0
  43. package/build/src/drivers/IdAssigner.d.ts +33 -0
  44. package/build/src/drivers/IdAssigner.js +106 -0
  45. package/build/src/drivers/IdAssigner.js.map +1 -0
  46. package/build/src/drivers/InMemoryDriver.d.ts +29 -0
  47. package/build/src/drivers/InMemoryDriver.js +306 -0
  48. package/build/src/drivers/InMemoryDriver.js.map +1 -0
  49. package/build/src/drivers/PostgresDriver.d.ts +40 -0
  50. package/build/src/drivers/PostgresDriver.js +376 -0
  51. package/build/src/drivers/PostgresDriver.js.map +1 -0
  52. package/build/src/drivers/driver.d.ts +23 -0
  53. package/build/src/drivers/driver.js +3 -0
  54. package/build/src/drivers/driver.js.map +1 -0
  55. package/build/src/drivers/index.d.ts +4 -0
  56. package/build/src/drivers/index.js +17 -0
  57. package/build/src/drivers/index.js.map +1 -0
  58. package/build/{getProperties.d.ts → src/getProperties.d.ts} +0 -0
  59. package/build/{getProperties.js → src/getProperties.js} +1 -1
  60. package/build/src/getProperties.js.map +1 -0
  61. package/build/src/index.d.ts +62 -0
  62. package/build/src/index.js +263 -0
  63. package/build/src/index.js.map +1 -0
  64. package/build/src/keys.d.ts +30 -0
  65. package/build/{keys.js → src/keys.js} +48 -16
  66. package/build/src/keys.js.map +1 -0
  67. package/build/{loadLens.d.ts → src/loadLens.d.ts} +2 -2
  68. package/build/{loadLens.js → src/loadLens.js} +1 -1
  69. package/build/src/loadLens.js.map +1 -0
  70. package/build/src/loaded.d.ts +49 -0
  71. package/build/src/loaded.js +9 -0
  72. package/build/src/loaded.js.map +1 -0
  73. package/build/{newTestInstance.d.ts → src/newTestInstance.d.ts} +37 -3
  74. package/build/src/newTestInstance.js +342 -0
  75. package/build/src/newTestInstance.js.map +1 -0
  76. package/build/{collections → src/relations}/AbstractRelationImpl.d.ts +6 -5
  77. package/build/{collections → src/relations}/AbstractRelationImpl.js +0 -0
  78. package/build/src/relations/AbstractRelationImpl.js.map +1 -0
  79. package/build/src/relations/Collection.d.ts +26 -0
  80. package/build/src/relations/Collection.js +19 -0
  81. package/build/src/relations/Collection.js.map +1 -0
  82. package/build/{collections → src/relations}/CustomCollection.d.ts +6 -2
  83. package/build/{collections → src/relations}/CustomCollection.js +17 -9
  84. package/build/src/relations/CustomCollection.js.map +1 -0
  85. package/build/{collections → src/relations}/CustomReference.d.ts +7 -2
  86. package/build/{collections → src/relations}/CustomReference.js +16 -9
  87. package/build/src/relations/CustomReference.js.map +1 -0
  88. package/build/src/relations/LargeCollection.d.ts +17 -0
  89. package/build/src/relations/LargeCollection.js +3 -0
  90. package/build/src/relations/LargeCollection.js.map +1 -0
  91. package/build/{collections → src/relations}/ManyToManyCollection.d.ts +9 -2
  92. package/build/src/relations/ManyToManyCollection.js +249 -0
  93. package/build/src/relations/ManyToManyCollection.js.map +1 -0
  94. package/build/src/relations/ManyToManyLargeCollection.d.ts +25 -0
  95. package/build/src/relations/ManyToManyLargeCollection.js +97 -0
  96. package/build/src/relations/ManyToManyLargeCollection.js.map +1 -0
  97. package/build/src/relations/ManyToOneReference.d.ts +77 -0
  98. package/build/{collections → src/relations}/ManyToOneReference.js +101 -48
  99. package/build/src/relations/ManyToOneReference.js.map +1 -0
  100. package/build/{collections → src/relations}/OneToManyCollection.d.ts +10 -2
  101. package/build/{collections → src/relations}/OneToManyCollection.js +54 -59
  102. package/build/src/relations/OneToManyCollection.js.map +1 -0
  103. package/build/src/relations/OneToManyLargeCollection.d.ts +25 -0
  104. package/build/src/relations/OneToManyLargeCollection.js +83 -0
  105. package/build/src/relations/OneToManyLargeCollection.js.map +1 -0
  106. package/build/src/relations/OneToOneReference.d.ts +82 -0
  107. package/build/src/relations/OneToOneReference.js +168 -0
  108. package/build/src/relations/OneToOneReference.js.map +1 -0
  109. package/build/src/relations/PolymorphicReference.d.ts +69 -0
  110. package/build/src/relations/PolymorphicReference.js +210 -0
  111. package/build/src/relations/PolymorphicReference.js.map +1 -0
  112. package/build/src/relations/Reference.d.ts +29 -0
  113. package/build/src/relations/Reference.js +23 -0
  114. package/build/src/relations/Reference.js.map +1 -0
  115. package/build/src/relations/Relation.d.ts +10 -0
  116. package/build/src/relations/Relation.js +13 -0
  117. package/build/src/relations/Relation.js.map +1 -0
  118. package/build/src/relations/hasAsyncProperty.d.ts +36 -0
  119. package/build/src/relations/hasAsyncProperty.js +55 -0
  120. package/build/src/relations/hasAsyncProperty.js.map +1 -0
  121. package/build/{collections → src/relations}/hasManyDerived.d.ts +2 -1
  122. package/build/{collections → src/relations}/hasManyDerived.js +1 -1
  123. package/build/src/relations/hasManyDerived.js.map +1 -0
  124. package/build/{collections → src/relations}/hasManyThrough.d.ts +0 -0
  125. package/build/{collections → src/relations}/hasManyThrough.js +2 -2
  126. package/build/src/relations/hasManyThrough.js.map +1 -0
  127. package/build/{collections → src/relations}/hasOneDerived.d.ts +3 -2
  128. package/build/{collections → src/relations}/hasOneDerived.js +1 -1
  129. package/build/src/relations/hasOneDerived.js.map +1 -0
  130. package/build/{collections → src/relations}/hasOneThrough.d.ts +0 -0
  131. package/build/{collections → src/relations}/hasOneThrough.js +2 -2
  132. package/build/src/relations/hasOneThrough.js.map +1 -0
  133. package/build/src/relations/index.d.ts +18 -0
  134. package/build/src/relations/index.js +53 -0
  135. package/build/src/relations/index.js.map +1 -0
  136. package/build/{reverseHint.d.ts → src/reverseHint.d.ts} +2 -1
  137. package/build/{reverseHint.js → src/reverseHint.js} +13 -9
  138. package/build/src/reverseHint.js.map +1 -0
  139. package/build/src/rules.d.ts +23 -0
  140. package/build/src/rules.js +23 -0
  141. package/build/src/rules.js.map +1 -0
  142. package/build/src/serde.d.ts +121 -0
  143. package/build/src/serde.js +190 -0
  144. package/build/src/serde.js.map +1 -0
  145. package/build/{utils.d.ts → src/utils.d.ts} +2 -0
  146. package/build/{utils.js → src/utils.js} +10 -1
  147. package/build/src/utils.js.map +1 -0
  148. package/build/tsconfig.tsbuildinfo +1 -0
  149. package/package.json +30 -15
  150. package/build/BaseEntity.js.map +0 -1
  151. package/build/EntityManager.js.map +0 -1
  152. package/build/EntityPersister.d.ts +0 -30
  153. package/build/EntityPersister.js +0 -197
  154. package/build/EntityPersister.js.map +0 -1
  155. package/build/QueryBuilder.js +0 -195
  156. package/build/QueryBuilder.js.map +0 -1
  157. package/build/changes.d.ts +0 -23
  158. package/build/changes.js +0 -14
  159. package/build/changes.js.map +0 -1
  160. package/build/collections/AbstractRelationImpl.js.map +0 -1
  161. package/build/collections/CustomCollection.js.map +0 -1
  162. package/build/collections/CustomReference.js.map +0 -1
  163. package/build/collections/ManyToManyCollection.js +0 -288
  164. package/build/collections/ManyToManyCollection.js.map +0 -1
  165. package/build/collections/ManyToOneReference.d.ts +0 -50
  166. package/build/collections/ManyToOneReference.js.map +0 -1
  167. package/build/collections/OneToManyCollection.js.map +0 -1
  168. package/build/collections/OneToOneReference.d.ts +0 -51
  169. package/build/collections/OneToOneReference.js +0 -132
  170. package/build/collections/OneToOneReference.js.map +0 -1
  171. package/build/collections/hasManyDerived.js.map +0 -1
  172. package/build/collections/hasManyThrough.js.map +0 -1
  173. package/build/collections/hasOneDerived.js.map +0 -1
  174. package/build/collections/hasOneThrough.js.map +0 -1
  175. package/build/collections/index.d.ts +0 -19
  176. package/build/collections/index.js +0 -49
  177. package/build/collections/index.js.map +0 -1
  178. package/build/createOrUpdatePartial.js.map +0 -1
  179. package/build/getProperties.js.map +0 -1
  180. package/build/index.d.ts +0 -140
  181. package/build/index.js +0 -278
  182. package/build/index.js.map +0 -1
  183. package/build/keys.d.ts +0 -21
  184. package/build/keys.js.map +0 -1
  185. package/build/loadLens.js.map +0 -1
  186. package/build/newTestInstance.js +0 -153
  187. package/build/newTestInstance.js.map +0 -1
  188. package/build/reverseHint.js.map +0 -1
  189. package/build/serde.d.ts +0 -47
  190. package/build/serde.js +0 -93
  191. package/build/serde.js.map +0 -1
  192. package/build/utils.js.map +0 -1
  193. package/package.json.bak +0 -27
  194. package/src/BaseEntity.ts +0 -104
  195. package/src/EntityManager.ts +0 -1263
  196. package/src/EntityPersister.ts +0 -240
  197. package/src/QueryBuilder.ts +0 -289
  198. package/src/changes.ts +0 -40
  199. package/src/collections/AbstractRelationImpl.ts +0 -28
  200. package/src/collections/CustomCollection.ts +0 -152
  201. package/src/collections/CustomReference.ts +0 -138
  202. package/src/collections/ManyToManyCollection.ts +0 -346
  203. package/src/collections/ManyToOneReference.ts +0 -215
  204. package/src/collections/OneToManyCollection.ts +0 -254
  205. package/src/collections/OneToOneReference.ts +0 -153
  206. package/src/collections/hasManyDerived.ts +0 -29
  207. package/src/collections/hasManyThrough.ts +0 -20
  208. package/src/collections/hasOneDerived.ts +0 -26
  209. package/src/collections/hasOneThrough.ts +0 -20
  210. package/src/collections/index.ts +0 -74
  211. package/src/createOrUpdatePartial.ts +0 -144
  212. package/src/getProperties.ts +0 -27
  213. package/src/index.ts +0 -400
  214. package/src/keys.ts +0 -75
  215. package/src/loadLens.ts +0 -126
  216. package/src/newTestInstance.ts +0 -205
  217. package/src/reverseHint.ts +0 -43
  218. package/src/serde.ts +0 -97
  219. package/src/utils.ts +0 -63
  220. package/tsconfig.json +0 -21
  221. package/tsconfig.tsbuildinfo +0 -2646
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntityManager.js","sourceRoot":"","sources":["../../src/EntityManager.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import Knex, { QueryBuilder } from "knex";
2
- import { Entity, EntityConstructor, FilterOf, OrderOf } from "./EntityManager";
1
+ import { Knex } from "knex";
2
+ import { Entity, EntityConstructor, EntityMetadata, FilterOf, OrderOf } from "./EntityManager";
3
3
  export declare type OrderBy = "ASC" | "DESC";
4
4
  export declare type BooleanFilter<N> = true | false | N;
5
5
  export declare type ValueFilter<V, N> = V | V[] | N | {
@@ -21,9 +21,59 @@ export declare type ValueFilter<V, N> = V | V[] | N | {
21
21
  } | {
22
22
  ilike: V;
23
23
  };
24
+ /**
25
+ * An ADT version of `ValueFilter`.
26
+ *
27
+ * The ValueFilter is a
28
+ */
29
+ export declare type ParsedValueFilter<V> = {
30
+ kind: "eq";
31
+ value: V | null;
32
+ } | {
33
+ kind: "in";
34
+ value: V[];
35
+ } | {
36
+ kind: "gt";
37
+ value: V;
38
+ } | {
39
+ kind: "gte";
40
+ value: V;
41
+ } | {
42
+ kind: "ne";
43
+ value: V | null;
44
+ } | {
45
+ kind: "lt";
46
+ value: V;
47
+ } | {
48
+ kind: "lte";
49
+ value: V;
50
+ } | {
51
+ kind: "like";
52
+ value: V;
53
+ } | {
54
+ kind: "ilike";
55
+ value: V;
56
+ } | {
57
+ kind: "pass";
58
+ };
59
+ export declare function parseValueFilter<V>(filter: ValueFilter<V, any>): ParsedValueFilter<V>;
24
60
  export declare type EntityFilter<T, I, F, N> = T | I | I[] | F | N | {
25
61
  ne: T | I | N;
26
62
  };
63
+ export declare type ParsedEntityFilter = {
64
+ kind: "eq";
65
+ id: number | null;
66
+ } | {
67
+ kind: "ne";
68
+ id: number | null;
69
+ } | {
70
+ kind: "in";
71
+ ids: number[];
72
+ } | {
73
+ kind: "join";
74
+ subFilter: any;
75
+ };
76
+ export declare function parseEntityFilter(meta: EntityMetadata<any>, filter: any): ParsedEntityFilter;
27
77
  export declare type BooleanGraphQLFilter = true | false | null;
28
78
  export declare type Primitive = string | boolean | Date | number;
29
79
  /** This essentially matches the ValueFilter but with looser types to placate GraphQL. */
@@ -61,5 +111,5 @@ export declare type FilterAndSettings<T> = {
61
111
  * be a user-facing QueryBuilder, i.e. users should use Knex for that and just use SQL
62
112
  * directly (for any non-trivial queries that `EntityManager.find` does not support).
63
113
  */
64
- export declare function buildQuery<T extends Entity>(knex: Knex, type: EntityConstructor<T>, filter: FilterAndSettings<T>): QueryBuilder<{}, unknown[]>;
114
+ export declare function buildQuery<T extends Entity>(knex: Knex, type: EntityConstructor<T>, filter: FilterAndSettings<T>): Knex.QueryBuilder<{}, unknown[]>;
65
115
  export {};
@@ -0,0 +1,341 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildQuery = exports.parseEntityFilter = exports.parseValueFilter = void 0;
4
+ const joist_utils_1 = require("joist-utils");
5
+ const EntityManager_1 = require("./EntityManager");
6
+ const index_1 = require("./index");
7
+ const keys_1 = require("./keys");
8
+ const utils_1 = require("./utils");
9
+ function parseValueFilter(filter) {
10
+ if (filter === null) {
11
+ return { kind: "eq", value: filter };
12
+ }
13
+ else if (filter === undefined) {
14
+ return { kind: "pass" };
15
+ }
16
+ else if (Array.isArray(filter)) {
17
+ return { kind: "in", value: filter };
18
+ }
19
+ else if (typeof filter === "object") {
20
+ const keys = Object.keys(filter);
21
+ if (keys.length === 2) {
22
+ // Probe for `findGql` op & value
23
+ const op = filter["op"];
24
+ const value = filter["value"];
25
+ if (op === undefined && value === undefined) {
26
+ throw new Error(`ValueFilter only supports a single field being set ${filter}`);
27
+ }
28
+ return { kind: op, value: value ?? null };
29
+ }
30
+ if (keys.length !== 1) {
31
+ throw new Error(`ValueFilter only supports a single field being set ${filter}`);
32
+ }
33
+ const key = keys[0];
34
+ switch (key) {
35
+ case "eq":
36
+ return { kind: "eq", value: filter[key] ?? null };
37
+ case "ne":
38
+ return { kind: "ne", value: filter[key] ?? null };
39
+ case "in":
40
+ return { kind: "in", value: filter[key] };
41
+ case "gt":
42
+ case "gte":
43
+ case "lt":
44
+ case "lte":
45
+ case "like":
46
+ case "ilike":
47
+ return { kind: key, value: filter[key] };
48
+ }
49
+ throw new Error("unsupported");
50
+ }
51
+ else {
52
+ // This is a primitive like a string, number
53
+ return { kind: "eq", value: filter ?? null };
54
+ }
55
+ }
56
+ exports.parseValueFilter = parseValueFilter;
57
+ function parseEntityFilter(meta, filter) {
58
+ if (filter === null || filter === undefined) {
59
+ return { kind: "eq", id: null };
60
+ }
61
+ else if (typeof filter === "string" || typeof filter === "number") {
62
+ return { kind: "eq", id: (0, keys_1.keyToNumber)(meta, filter) };
63
+ }
64
+ else if (Array.isArray(filter)) {
65
+ return { kind: "in", ids: filter.map((id) => (0, keys_1.keyToNumber)(meta, id)) };
66
+ }
67
+ else if ((0, EntityManager_1.isEntity)(filter)) {
68
+ return { kind: "eq", id: (0, keys_1.keyToNumber)(meta, filter.id || -1) };
69
+ }
70
+ else if (typeof filter === "object") {
71
+ const keys = Object.keys(filter);
72
+ if (keys.length === 1 && keys[0] === "ne") {
73
+ const value = filter["ne"];
74
+ if (value === null || value === undefined) {
75
+ return { kind: "ne", id: null };
76
+ }
77
+ else if (typeof value === "string" || typeof value === "number") {
78
+ return { kind: "ne", id: (0, keys_1.keyToNumber)(meta, value) };
79
+ }
80
+ else if ((0, EntityManager_1.isEntity)(value)) {
81
+ return { kind: "ne", id: (0, keys_1.keyToNumber)(meta, value.id || -1) };
82
+ }
83
+ else {
84
+ throw new Error(`Unsupported "ne" value ${value}`);
85
+ }
86
+ }
87
+ return { kind: "join", subFilter: filter };
88
+ }
89
+ else {
90
+ throw new Error(`Unrecognized filter ${filter}`);
91
+ }
92
+ }
93
+ exports.parseEntityFilter = parseEntityFilter;
94
+ const operators = ["eq", "gt", "gte", "ne", "lt", "lte", "like", "ilike", "in"];
95
+ const opToFn = {
96
+ eq: "=",
97
+ gt: ">",
98
+ gte: ">=",
99
+ ne: "!=",
100
+ lt: "<",
101
+ lte: "<=",
102
+ like: "LIKE",
103
+ ilike: "ILIKE",
104
+ in: "...",
105
+ };
106
+ /**
107
+ * Builds the SQL/knex queries for `EntityManager.find` calls.
108
+ *
109
+ * Note this is generally for our own internal implementation details and not meant to
110
+ * be a user-facing QueryBuilder, i.e. users should use Knex for that and just use SQL
111
+ * directly (for any non-trivial queries that `EntityManager.find` does not support).
112
+ */
113
+ function buildQuery(knex, type, filter) {
114
+ const meta = (0, EntityManager_1.getMetadata)(type);
115
+ const { where, orderBy, limit, offset } = filter;
116
+ const aliases = {};
117
+ function getAlias(tableName) {
118
+ const abbrev = abbreviation(tableName);
119
+ const i = aliases[abbrev] || 0;
120
+ aliases[abbrev] = i + 1;
121
+ return `${abbrev}${i}`;
122
+ }
123
+ const alias = getAlias(meta.tableName);
124
+ let query = knex.select(`${alias}.*`).from(`${meta.tableName} AS ${alias}`);
125
+ // Define a function for recursively adding joins & filters
126
+ function addClauses(meta, alias, where, orderBy) {
127
+ // Combine the where and orderBy keys so that we can add them to aliases as that same time
128
+ // Filter out undefined values as they should be ignored (for now?)
129
+ const keys = [
130
+ ...(where ? Object.keys(where).filter((key) => where[key] !== undefined) : []),
131
+ ...(orderBy ? Object.keys(orderBy).filter((key) => orderBy[key] !== undefined) : []),
132
+ ];
133
+ keys.forEach((key) => {
134
+ const field = meta.fields[key] ?? (0, utils_1.fail)(`${key} not found`);
135
+ // We may/may not have a where clause or orderBy for this key, but we should have at least one of them.
136
+ const clause = where && where[key];
137
+ const hasClause = where && key in where;
138
+ const order = orderBy && orderBy[key];
139
+ const hasOrder = !!order;
140
+ if (field.kind === "poly") {
141
+ if (Array.isArray(clause)) {
142
+ const ids = clause.map((e) => (0, index_1.maybeResolveReferenceToId)(e));
143
+ const idsByConstructor = (0, joist_utils_1.groupBy)(ids, (id) => (0, index_1.getConstructorFromTaggedId)(id).name);
144
+ query = query.where((query) => field.serde.columns.reduce((query, { columnName, otherMetadata, mapToDb }) => {
145
+ const ids = idsByConstructor[otherMetadata().cstr.name];
146
+ return ids && ids.length > 0 ? query.orWhereIn(`${alias}.${columnName}`, ids.map(mapToDb)) : query;
147
+ }, query));
148
+ }
149
+ else if ((0, EntityManager_1.isEntity)(clause) || typeof clause === "string") {
150
+ query = addPolyClause(query, alias, field, meta, clause);
151
+ }
152
+ else if (clause === null) {
153
+ query = field.components.reduce((query, component) => addPolyClause(query, alias, field, meta, component.otherMetadata().cstr, clause), query);
154
+ }
155
+ else if (typeof clause === "object" && Object.keys(clause).length === 1 && "ne" in clause) {
156
+ const { ne: value } = clause;
157
+ if ((0, EntityManager_1.isEntity)(value) || typeof value === "string") {
158
+ const column = polyColumnFor(meta, field, value);
159
+ query = query.where((query) => query
160
+ .whereNot(`${alias}.${column.columnName}`, column.mapToDb(value))
161
+ // for some reason whereNot excludes null values, so explicitly include them here
162
+ .orWhereNull(`${alias}.${column.columnName}`));
163
+ }
164
+ else if (value === null) {
165
+ query = query.where((b) => field.components.reduce((b, { columnName }) => b.orWhereNotNull(`${alias}.${columnName}`), b));
166
+ }
167
+ }
168
+ }
169
+ else if (field.kind === "o2o") {
170
+ // Add `otherTable.column = ...` clause, unless `key` is not in `where`, i.e. there is only an orderBy for this fk
171
+ const otherMeta = field.otherMetadata();
172
+ const otherAlias = getAlias(otherMeta.tableName);
173
+ const otherColumn = otherMeta.fields[field.otherFieldName];
174
+ query = query.leftJoin(`${otherMeta.tableName} AS ${otherAlias}`, `${otherAlias}.${otherColumn.serde.columns[0].columnName}`, `${alias}.id`);
175
+ const [shouldAddClauses, _query] = hasClause
176
+ ? addForeignKeyClause(query, otherAlias, otherMeta.fields["id"].serde.columns[0], clause)
177
+ : [false, query];
178
+ query = _query;
179
+ if (shouldAddClauses || hasOrder) {
180
+ addClauses(otherMeta, otherAlias, shouldAddClauses ? clause : undefined, hasOrder ? order : undefined);
181
+ }
182
+ }
183
+ else if (field.kind === "m2o") {
184
+ const serde = (meta.fields[key] ?? (0, utils_1.fail)(`${key} not found`)).serde;
185
+ // TODO Currently hardcoded to single-column support; poly is handled above this
186
+ const column = serde.columns[0];
187
+ // Add `otherTable.column = ...` clause, unless `key` is not in `where`, i.e. there is only an orderBy for this fk
188
+ const [whereNeedsJoin, _query] = hasClause ? addForeignKeyClause(query, alias, column, clause) : [false, query];
189
+ query = _query;
190
+ if (whereNeedsJoin || hasOrder) {
191
+ // Add a join for this column
192
+ const otherMeta = field.otherMetadata();
193
+ const otherAlias = getAlias(otherMeta.tableName);
194
+ query = query.innerJoin(`${otherMeta.tableName} AS ${otherAlias}`, `${alias}.${column.columnName}`, `${otherAlias}.id`);
195
+ // Then recurse to add its conditions to the query
196
+ addClauses(otherMeta, otherAlias, whereNeedsJoin ? clause : undefined, hasOrder ? order : undefined);
197
+ }
198
+ }
199
+ else {
200
+ const serde = (meta.fields[key] ?? (0, utils_1.fail)(`${key} not found`)).serde;
201
+ // TODO Currently hardcoded to single-column support; poly is handled above this
202
+ const column = serde.columns[0];
203
+ query = hasClause ? addPrimitiveClause(query, alias, column, clause) : query;
204
+ // This is not a foreign key column, so it'll have the primitive filters/order bys
205
+ if (order) {
206
+ query = query.orderBy(`${alias}.${column.columnName}`, order);
207
+ }
208
+ }
209
+ });
210
+ }
211
+ addClauses(meta, alias, where, orderBy);
212
+ // Even if they already added orders, add id as the last one to get deterministic output
213
+ query = query.orderBy(`${alias}.id`);
214
+ query = query.limit(limit || EntityManager_1.entityLimit);
215
+ if (offset) {
216
+ query = query.offset(offset);
217
+ }
218
+ return query;
219
+ }
220
+ exports.buildQuery = buildQuery;
221
+ function abbreviation(tableName) {
222
+ return tableName
223
+ .split("_")
224
+ .map((w) => w[0])
225
+ .join("");
226
+ }
227
+ function polyColumnFor(meta, field, value) {
228
+ const cstr = typeof value === "function" ? value : (0, index_1.maybeGetConstructorFromReference)(value);
229
+ return (field.serde.columns.find((c) => c.otherMetadata().cstr === cstr) ??
230
+ (0, utils_1.fail)(`${cstr.name} cannot be used as a filter on ${field.fieldName}`));
231
+ }
232
+ function addPolyClause(query, alias, field, meta, value, clause) {
233
+ clause = clause === undefined ? value : clause;
234
+ const column = polyColumnFor(meta, field, value);
235
+ const [, result] = addForeignKeyClause(query, alias, column, clause);
236
+ return result;
237
+ }
238
+ function addForeignKeyClause(query, alias, column, clause) {
239
+ // I.e. this could be { authorFk: authorEntity | null | id | { ...recurse... } }
240
+ const clauseKeys = typeof clause === "object" && clause !== null
241
+ ? Object.keys(clause).filter((key) => clause[key] !== undefined)
242
+ : [];
243
+ if ((0, EntityManager_1.isEntity)(clause) || typeof clause === "string" || Array.isArray(clause)) {
244
+ // I.e. { authorFk: authorEntity | id | id[] }
245
+ if ((0, EntityManager_1.isEntity)(clause) && clause.id === undefined) {
246
+ // The user is filtering on an unsaved entity, which will just never have any rows, so throw in -1
247
+ return [false, query.where(`${alias}.${column.columnName}`, -1)];
248
+ }
249
+ else if (Array.isArray(clause)) {
250
+ return [
251
+ false,
252
+ query.whereIn(`${alias}.${column.columnName}`, clause.map((id) => column.mapToDb(id))),
253
+ ];
254
+ }
255
+ else {
256
+ return [false, query.where(`${alias}.${column.columnName}`, column.mapToDb(clause))];
257
+ }
258
+ }
259
+ else if (clause === null) {
260
+ // I.e. { authorFk: null | undefined }
261
+ return [false, query.whereNull(`${alias}.${column.columnName}`)];
262
+ }
263
+ else if (clauseKeys.length === 1 && clauseKeys[0] === "id") {
264
+ // I.e. { authorFk: { id: string } } || { authorFk: { id: string[] } }
265
+ // If only querying on the id, we can skip the join
266
+ return [false, addPrimitiveClause(query, alias, column, clause["id"])];
267
+ }
268
+ else if (clauseKeys.length === 1 && clauseKeys[0] === "ne") {
269
+ // I.e. { authorFk: { ne: string | null | undefined } }
270
+ const value = clause["ne"];
271
+ if (value === null || value === undefined) {
272
+ return [false, query.whereNotNull(`${alias}.${column.columnName}`)];
273
+ }
274
+ else if (typeof value === "string") {
275
+ return [false, query.whereNot(`${alias}.${column.columnName}`, column.mapToDb(value))];
276
+ }
277
+ else {
278
+ throw new Error("Not implemented");
279
+ }
280
+ }
281
+ else {
282
+ // I.e. { authorFk: { ...authorFilter... } }
283
+ return [clause !== undefined, query];
284
+ }
285
+ }
286
+ function addPrimitiveClause(query, alias, column, clause) {
287
+ if (clause && typeof clause === "object" && operators.find((op) => Object.keys(clause).includes(op))) {
288
+ // I.e. `{ primitiveField: { gt: value } }`
289
+ const op = Object.keys(clause)[0];
290
+ return addPrimitiveOperator(query, alias, column, op, clause[op]);
291
+ }
292
+ else if (clause && typeof clause === "object" && "op" in clause) {
293
+ // I.e. { primitiveField: { op: "gt", value: 1 } }`
294
+ return addPrimitiveOperator(query, alias, column, clause.op, clause.value);
295
+ }
296
+ else if (Array.isArray(clause)) {
297
+ // I.e. `{ primitiveField: value[] }`
298
+ if (column.isArray) {
299
+ return query.where(`${alias}.${column.columnName}`, "@>", column.mapToDb(clause));
300
+ }
301
+ else {
302
+ return query.whereIn(`${alias}.${column.columnName}`, clause.map((v) => column.mapToDb(v)));
303
+ }
304
+ }
305
+ else if (clause === null) {
306
+ // I.e. `{ primitiveField: null }`
307
+ return query.whereNull(`${alias}.${column.columnName}`);
308
+ }
309
+ else if (clause === undefined) {
310
+ // I.e. `{ primitiveField: undefined }`
311
+ // Currently we treat this like a partial filter, i.e. don't include it. Seems odd
312
+ // unless this is opt-in, i.e. maybe only do this for `findGql`?
313
+ return query;
314
+ }
315
+ else {
316
+ // I.e. `{ primitiveField: value }`
317
+ // TODO In theory could add a addToQuery method to Serde to generalize this to multi-columns fields.
318
+ return query.where(`${alias}.${column.columnName}`, column.mapToDb(clause));
319
+ }
320
+ }
321
+ function addPrimitiveOperator(query, alias, column, op, value) {
322
+ if (value === null || value === undefined) {
323
+ if (op === "ne") {
324
+ return query.whereNotNull(`${alias}.${column.columnName}`);
325
+ }
326
+ else if (op === "eq") {
327
+ return query.whereNull(`${alias}.${column.columnName}`);
328
+ }
329
+ else {
330
+ throw new Error("Only ne is supported when the value is undefined or null");
331
+ }
332
+ }
333
+ else if (op === "in") {
334
+ return query.whereIn(`${alias}.${column.columnName}`, value.map((v) => column.mapToDb(v)));
335
+ }
336
+ else {
337
+ const fn = opToFn[op] || (0, utils_1.fail)(`Invalid operator ${op}`);
338
+ return query.where(`${alias}.${column.columnName}`, fn, column.mapToDb(value));
339
+ }
340
+ }
341
+ //# sourceMappingURL=QueryBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryBuilder.js","sourceRoot":"","sources":["../../src/QueryBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /** The operations for a given entity type, so they can be executed in bulk. */
2
+ import { Entity, EntityMetadata } from "./EntityManager";
3
+ import { ManyToManyCollection } from "./relations";
4
+ import { JoinRow } from "./relations/ManyToManyCollection";
5
+ /** A group of insert/update/delete operations for a given entity. */
6
+ export interface Todo {
7
+ metadata: EntityMetadata<any>;
8
+ inserts: Entity[];
9
+ updates: Entity[];
10
+ deletes: Entity[];
11
+ validates: Entity[];
12
+ }
13
+ /**
14
+ * Scans `entities` for new/updated entities and arranges them per-type in entity order.
15
+ */
16
+ export declare function createTodos(entities: Entity[]): Record<string, Todo>;
17
+ /** getOrSets a `Todo` for `entity` in `todos`. */
18
+ export declare function getTodo(todos: Record<string, Todo>, entity: Entity): Todo;
19
+ export interface JoinRowTodo {
20
+ m2m: ManyToManyCollection<any, any>;
21
+ newRows: JoinRow[];
22
+ deletedRows: JoinRow[];
23
+ }
24
+ /** Given a list of `JoinRow`s for a given table, combine them into a single logical `JoinRowTodo`. */
25
+ export declare function combineJoinRows(joinRows: Record<string, JoinRow[]>): Record<string, JoinRowTodo>;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.combineJoinRows = exports.getTodo = exports.createTodos = void 0;
4
+ /** The operations for a given entity type, so they can be executed in bulk. */
5
+ const EntityManager_1 = require("./EntityManager");
6
+ /**
7
+ * Scans `entities` for new/updated entities and arranges them per-type in entity order.
8
+ */
9
+ function createTodos(entities) {
10
+ const todos = {};
11
+ for (const entity of entities) {
12
+ if (entity.isPendingFlush) {
13
+ const todo = getTodo(todos, entity);
14
+ if (entity.isPendingDelete) {
15
+ todo.deletes.push(entity);
16
+ }
17
+ else if (entity.isNewEntity) {
18
+ todo.inserts.push(entity);
19
+ }
20
+ else {
21
+ todo.updates.push(entity);
22
+ }
23
+ }
24
+ }
25
+ return todos;
26
+ }
27
+ exports.createTodos = createTodos;
28
+ /** getOrSets a `Todo` for `entity` in `todos`. */
29
+ function getTodo(todos, entity) {
30
+ const meta = (0, EntityManager_1.getMetadata)(entity);
31
+ let todo = todos[meta.type];
32
+ if (!todo) {
33
+ todo = { metadata: entity.__orm.metadata, inserts: [], updates: [], deletes: [], validates: [] };
34
+ todos[meta.type] = todo;
35
+ }
36
+ return todo;
37
+ }
38
+ exports.getTodo = getTodo;
39
+ /** Given a list of `JoinRow`s for a given table, combine them into a single logical `JoinRowTodo`. */
40
+ function combineJoinRows(joinRows) {
41
+ const todos = {};
42
+ for (const [joinTableName, rows] of Object.entries(joinRows)) {
43
+ const newRows = rows.filter((r) => r.id === undefined && r.deleted !== true);
44
+ const deletedRows = rows.filter((r) => r.id !== undefined && r.deleted === true);
45
+ if (newRows.length > 0 || deletedRows.length > 0) {
46
+ todos[joinTableName] = { newRows, deletedRows, m2m: rows[0].m2m };
47
+ }
48
+ }
49
+ return todos;
50
+ }
51
+ exports.combineJoinRows = combineJoinRows;
52
+ //# sourceMappingURL=Todo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Todo.js","sourceRoot":"","sources":["../../src/Todo.ts"],"names":[],"mappings":";;;AAAA,+EAA+E;AAC/E,mDAAsE;AAatE;;GAEG;AACH,SAAgB,WAAW,CAAC,QAAkB;IAC5C,MAAM,KAAK,GAAyB,EAAE,CAAC;IACvC,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE;QAC7B,IAAI,MAAM,CAAC,cAAc,EAAE;YACzB,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACpC,IAAI,MAAM,CAAC,eAAe,EAAE;gBAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC3B;iBAAM,IAAI,MAAM,CAAC,WAAW,EAAE;gBAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC3B;iBAAM;gBACL,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC3B;SACF;KACF;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAfD,kCAeC;AAED,kDAAkD;AAClD,SAAgB,OAAO,CAAC,KAA2B,EAAE,MAAc;IACjE,MAAM,IAAI,GAAG,IAAA,2BAAW,EAAC,MAAM,CAAC,CAAC;IACjC,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,IAAI,EAAE;QACT,IAAI,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;QACjG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KACzB;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AARD,0BAQC;AASD,sGAAsG;AACtG,SAAgB,eAAe,CAAC,QAAmC;IACjE,MAAM,KAAK,GAAgC,EAAE,CAAC;IAC9C,KAAK,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;QAC7E,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;QACjF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAChD,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;SACnE;KACF;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAVD,0CAUC"}
@@ -0,0 +1,34 @@
1
+ import { Entity, IdOf, OptsOf } from "./EntityManager";
2
+ /** Exposes a field's changed/original value in each entity's `this.changes` property. */
3
+ export interface FieldStatus<T> {
4
+ /** True if the field has been changed on either create or update. */
5
+ hasChanged: boolean;
6
+ /** True only if the field has been updated i.e. not on the initial create. */
7
+ hasUpdated: boolean;
8
+ /** The original value, will be `undefined` if the entity new. */
9
+ originalValue?: T;
10
+ }
11
+ /** Exposes a field's changed/original value in each entity's `this.changes` property. */
12
+ export interface ManyToOneFieldStatus<T extends Entity> extends FieldStatus<IdOf<T>> {
13
+ /** The original entity, will be `undefined` if the entity new or the m2o was `null`. */
14
+ originalEntity: Promise<T | undefined>;
15
+ }
16
+ declare type NullOrDefinedOr<T> = T | null | undefined;
17
+ declare type ExcludeNever<T> = Pick<T, {
18
+ [P in keyof T]: T[P] extends never ? never : P;
19
+ }[keyof T]>;
20
+ /**
21
+ * Creates the `this.changes.firstName` changes API for a given entity `T`.
22
+ *
23
+ * Specifically we use the fields from OptsOf but:
24
+ *
25
+ * - Exclude collections
26
+ * - Convert entity types to id types to match what is stored in originalData
27
+ */
28
+ export declare type Changes<T extends Entity> = {
29
+ fields: (keyof OptsOf<T>)[];
30
+ } & ExcludeNever<{
31
+ [P in keyof OptsOf<T>]-?: OptsOf<T>[P] extends NullOrDefinedOr<infer U> ? U extends Array<infer E> ? E extends string ? FieldStatus<U> : never : U extends Entity ? ManyToOneFieldStatus<U> : FieldStatus<U> : never;
32
+ }>;
33
+ export declare function newChangesProxy<T extends Entity>(entity: T): Changes<T>;
34
+ export {};