joist-core 2.1.0 → 2.2.0-next.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 (217) hide show
  1. package/build/BaseEntity.js +1 -1
  2. package/build/BaseEntity.js.map +1 -1
  3. package/build/ConditionBuilder.d.ts +1 -22
  4. package/build/ConditionBuilder.d.ts.map +1 -1
  5. package/build/ConditionBuilder.js +6 -72
  6. package/build/ConditionBuilder.js.map +1 -1
  7. package/build/EntityFilter.d.ts +4 -2
  8. package/build/EntityFilter.d.ts.map +1 -1
  9. package/build/EntityGraphQLFilter.d.ts +2 -0
  10. package/build/EntityGraphQLFilter.d.ts.map +1 -1
  11. package/build/EntityGraphQLFilter.js.map +1 -1
  12. package/build/EntityManager.d.ts +27 -39
  13. package/build/EntityManager.d.ts.map +1 -1
  14. package/build/EntityManager.js +243 -122
  15. package/build/EntityManager.js.map +1 -1
  16. package/build/EntityMetadata.d.ts +19 -1
  17. package/build/EntityMetadata.d.ts.map +1 -1
  18. package/build/EntityMetadata.js.map +1 -1
  19. package/build/IndexManager.d.ts +2 -2
  20. package/build/IndexManager.d.ts.map +1 -1
  21. package/build/IndexManager.js +22 -16
  22. package/build/IndexManager.js.map +1 -1
  23. package/build/InstanceData.d.ts +21 -3
  24. package/build/InstanceData.d.ts.map +1 -1
  25. package/build/InstanceData.js +70 -10
  26. package/build/InstanceData.js.map +1 -1
  27. package/build/IsLoadedCache.d.ts +1 -1
  28. package/build/IsLoadedCache.d.ts.map +1 -1
  29. package/build/IsLoadedCache.js +37 -26
  30. package/build/IsLoadedCache.js.map +1 -1
  31. package/build/JoinRows.d.ts +1 -1
  32. package/build/JoinRows.js +6 -1
  33. package/build/JoinRows.js.map +1 -1
  34. package/build/PluginManager.d.ts +12 -0
  35. package/build/PluginManager.d.ts.map +1 -1
  36. package/build/PluginManager.js +18 -2
  37. package/build/PluginManager.js.map +1 -1
  38. package/build/QueryParser.collectionJoins.d.ts +27 -0
  39. package/build/QueryParser.collectionJoins.d.ts.map +1 -0
  40. package/build/QueryParser.collectionJoins.js +466 -0
  41. package/build/QueryParser.collectionJoins.js.map +1 -0
  42. package/build/QueryParser.collectionJoins.test.d.ts +2 -0
  43. package/build/QueryParser.collectionJoins.test.d.ts.map +1 -0
  44. package/build/QueryParser.collectionJoins.test.js +772 -0
  45. package/build/QueryParser.collectionJoins.test.js.map +1 -0
  46. package/build/QueryParser.d.ts +71 -11
  47. package/build/QueryParser.d.ts.map +1 -1
  48. package/build/QueryParser.js +39 -33
  49. package/build/QueryParser.js.map +1 -1
  50. package/build/QueryParser.pruning.d.ts +4 -2
  51. package/build/QueryParser.pruning.d.ts.map +1 -1
  52. package/build/QueryParser.pruning.js +87 -10
  53. package/build/QueryParser.pruning.js.map +1 -1
  54. package/build/QueryParser.pruning.test.d.ts +2 -0
  55. package/build/QueryParser.pruning.test.d.ts.map +1 -0
  56. package/build/QueryParser.pruning.test.js +106 -0
  57. package/build/QueryParser.pruning.test.js.map +1 -0
  58. package/build/QueryVisitor.d.ts.map +1 -1
  59. package/build/QueryVisitor.js +22 -0
  60. package/build/QueryVisitor.js.map +1 -1
  61. package/build/ReactionsManager.d.ts +2 -1
  62. package/build/ReactionsManager.d.ts.map +1 -1
  63. package/build/ReactionsManager.js +55 -51
  64. package/build/ReactionsManager.js.map +1 -1
  65. package/build/batchloaders/BatchLoader.d.ts.map +1 -1
  66. package/build/batchloaders/BatchLoader.js +9 -1
  67. package/build/batchloaders/BatchLoader.js.map +1 -1
  68. package/build/batchloaders/manyToManyBatchLoader.js +3 -1
  69. package/build/batchloaders/manyToManyBatchLoader.js.map +1 -1
  70. package/build/batchloaders/populateBatchLoader.d.ts.map +1 -1
  71. package/build/batchloaders/populateBatchLoader.js +2 -1
  72. package/build/batchloaders/populateBatchLoader.js.map +1 -1
  73. package/build/batchloaders/recursiveM2mBatchLoader.d.ts.map +1 -1
  74. package/build/batchloaders/recursiveM2mBatchLoader.js +3 -1
  75. package/build/batchloaders/recursiveM2mBatchLoader.js.map +1 -1
  76. package/build/changes.d.ts.map +1 -1
  77. package/build/changes.js +1 -4
  78. package/build/changes.js.map +1 -1
  79. package/build/config.d.ts.map +1 -1
  80. package/build/config.js +18 -10
  81. package/build/config.js.map +1 -1
  82. package/build/configure.d.ts +3 -3
  83. package/build/configure.d.ts.map +1 -1
  84. package/build/configure.js +66 -2
  85. package/build/configure.js.map +1 -1
  86. package/build/dataloaders/fastWhereFilterHash.d.ts +15 -0
  87. package/build/dataloaders/fastWhereFilterHash.d.ts.map +1 -0
  88. package/build/dataloaders/fastWhereFilterHash.js +164 -0
  89. package/build/dataloaders/fastWhereFilterHash.js.map +1 -0
  90. package/build/dataloaders/fastWhereFilterHash.test.d.ts +2 -0
  91. package/build/dataloaders/fastWhereFilterHash.test.d.ts.map +1 -0
  92. package/build/dataloaders/fastWhereFilterHash.test.js +59 -0
  93. package/build/dataloaders/fastWhereFilterHash.test.js.map +1 -0
  94. package/build/dataloaders/findCountDataLoader.d.ts +1 -2
  95. package/build/dataloaders/findCountDataLoader.d.ts.map +1 -1
  96. package/build/dataloaders/findCountDataLoader.js +16 -13
  97. package/build/dataloaders/findCountDataLoader.js.map +1 -1
  98. package/build/dataloaders/findDataLoader.d.ts +7 -3
  99. package/build/dataloaders/findDataLoader.d.ts.map +1 -1
  100. package/build/dataloaders/findDataLoader.js +105 -91
  101. package/build/dataloaders/findDataLoader.js.map +1 -1
  102. package/build/dataloaders/findIdsDataLoader.d.ts +1 -2
  103. package/build/dataloaders/findIdsDataLoader.d.ts.map +1 -1
  104. package/build/dataloaders/findIdsDataLoader.js +16 -15
  105. package/build/dataloaders/findIdsDataLoader.js.map +1 -1
  106. package/build/dataloaders/findOrCreateDataLoader.d.ts.map +1 -1
  107. package/build/dataloaders/findOrCreateDataLoader.js +7 -2
  108. package/build/dataloaders/findOrCreateDataLoader.js.map +1 -1
  109. package/build/dataloaders/findPaginatedDataLoader.d.ts +7 -0
  110. package/build/dataloaders/findPaginatedDataLoader.d.ts.map +1 -0
  111. package/build/dataloaders/findPaginatedDataLoader.js +79 -0
  112. package/build/dataloaders/findPaginatedDataLoader.js.map +1 -0
  113. package/build/defaults.d.ts.map +1 -1
  114. package/build/defaults.js +49 -42
  115. package/build/defaults.js.map +1 -1
  116. package/build/drivers/EntityWriter.js +13 -7
  117. package/build/drivers/EntityWriter.js.map +1 -1
  118. package/build/drivers/buildRawQuery.d.ts +6 -4
  119. package/build/drivers/buildRawQuery.d.ts.map +1 -1
  120. package/build/drivers/buildRawQuery.js +11 -6
  121. package/build/drivers/buildRawQuery.js.map +1 -1
  122. package/build/drivers/buildUtils.d.ts +7 -2
  123. package/build/drivers/buildUtils.d.ts.map +1 -1
  124. package/build/drivers/buildUtils.js +14 -5
  125. package/build/drivers/buildUtils.js.map +1 -1
  126. package/build/fields.d.ts.map +1 -1
  127. package/build/fields.js +31 -12
  128. package/build/fields.js.map +1 -1
  129. package/build/index.d.ts +2 -1
  130. package/build/index.d.ts.map +1 -1
  131. package/build/index.js +7 -5
  132. package/build/index.js.map +1 -1
  133. package/build/json.d.ts +3 -3
  134. package/build/json.d.ts.map +1 -1
  135. package/build/json.js +4 -4
  136. package/build/json.js.map +1 -1
  137. package/build/keys.d.ts.map +1 -1
  138. package/build/keys.js +8 -6
  139. package/build/keys.js.map +1 -1
  140. package/build/loadHints.d.ts +13 -4
  141. package/build/loadHints.d.ts.map +1 -1
  142. package/build/loadHints.js +63 -9
  143. package/build/loadHints.js.map +1 -1
  144. package/build/loadLens.d.ts +11 -0
  145. package/build/loadLens.d.ts.map +1 -1
  146. package/build/loadLens.js +25 -8
  147. package/build/loadLens.js.map +1 -1
  148. package/build/normalizeHints.d.ts +7 -0
  149. package/build/normalizeHints.d.ts.map +1 -1
  150. package/build/normalizeHints.js +40 -2
  151. package/build/normalizeHints.js.map +1 -1
  152. package/build/preloading/JsonAggregatePreloader.js +6 -2
  153. package/build/preloading/JsonAggregatePreloader.js.map +1 -1
  154. package/build/reactiveHints.d.ts +24 -7
  155. package/build/reactiveHints.d.ts.map +1 -1
  156. package/build/reactiveHints.js +45 -28
  157. package/build/reactiveHints.js.map +1 -1
  158. package/build/relations/AbstractRelationImpl.d.ts +7 -2
  159. package/build/relations/AbstractRelationImpl.d.ts.map +1 -1
  160. package/build/relations/AbstractRelationImpl.js.map +1 -1
  161. package/build/relations/AsyncProperty.d.ts +36 -0
  162. package/build/relations/AsyncProperty.d.ts.map +1 -0
  163. package/build/relations/AsyncProperty.js +80 -0
  164. package/build/relations/AsyncProperty.js.map +1 -0
  165. package/build/relations/{ReactiveQueryField.d.ts → AsyncReactiveField.d.ts} +10 -10
  166. package/build/relations/AsyncReactiveField.d.ts.map +1 -0
  167. package/build/relations/{ReactiveQueryField.js → AsyncReactiveField.js} +19 -19
  168. package/build/relations/{ReactiveQueryField.js.map → AsyncReactiveField.js.map} +1 -1
  169. package/build/relations/ReactiveField.d.ts +7 -9
  170. package/build/relations/ReactiveField.d.ts.map +1 -1
  171. package/build/relations/ReactiveField.js +5 -10
  172. package/build/relations/ReactiveField.js.map +1 -1
  173. package/build/relations/ReactiveGetter.d.ts +5 -5
  174. package/build/relations/ReactiveGetter.d.ts.map +1 -1
  175. package/build/relations/ReactiveGetter.js +3 -3
  176. package/build/relations/ReactiveGetter.js.map +1 -1
  177. package/build/relations/ReactiveReference.d.ts +2 -2
  178. package/build/relations/ReactiveReference.d.ts.map +1 -1
  179. package/build/relations/ReactiveReference.js +100 -36
  180. package/build/relations/ReactiveReference.js.map +1 -1
  181. package/build/relations/hasOneThrough.d.ts.map +1 -1
  182. package/build/relations/hasOneThrough.js +6 -4
  183. package/build/relations/hasOneThrough.js.map +1 -1
  184. package/build/relations/{hasAsyncProperty.d.ts → hasProperty.d.ts} +12 -12
  185. package/build/relations/hasProperty.d.ts.map +1 -0
  186. package/build/relations/{hasAsyncProperty.js → hasProperty.js} +20 -20
  187. package/build/relations/hasProperty.js.map +1 -0
  188. package/build/relations/index.d.ts +3 -2
  189. package/build/relations/index.d.ts.map +1 -1
  190. package/build/relations/index.js +16 -11
  191. package/build/relations/index.js.map +1 -1
  192. package/build/resurrection.d.ts +10 -0
  193. package/build/resurrection.d.ts.map +1 -0
  194. package/build/resurrection.js +93 -0
  195. package/build/resurrection.js.map +1 -0
  196. package/build/rules.js +3 -3
  197. package/build/trusted.d.ts +1 -1
  198. package/build/trusted.d.ts.map +1 -1
  199. package/build/trusted.js +1 -1
  200. package/build/trusted.js.map +1 -1
  201. package/build/upsert.d.ts.map +1 -1
  202. package/build/upsert.js +26 -10
  203. package/build/upsert.js.map +1 -1
  204. package/build/utils.d.ts +2 -0
  205. package/build/utils.d.ts.map +1 -1
  206. package/build/utils.js +12 -0
  207. package/build/utils.js.map +1 -1
  208. package/build/withLoaded.js +5 -5
  209. package/build/withLoaded.js.map +1 -1
  210. package/package.json +10 -12
  211. package/build/caches.d.ts +0 -6
  212. package/build/caches.d.ts.map +0 -1
  213. package/build/caches.js +0 -42
  214. package/build/caches.js.map +0 -1
  215. package/build/relations/ReactiveQueryField.d.ts.map +0 -1
  216. package/build/relations/hasAsyncProperty.d.ts.map +0 -1
  217. package/build/relations/hasAsyncProperty.js.map +0 -1
@@ -4,6 +4,8 @@ import { EntityMetadata } from "./EntityMetadata";
4
4
  /** The `#orm` metadata field we track on each instance. */
5
5
  export declare class InstanceData {
6
6
  #private;
7
+ /** The entity this instance data belongs to. */
8
+ readonly entity: Entity;
7
9
  /** All entities must be associated to an `EntityManager` to handle lazy loading/etc. */
8
10
  readonly em: EntityManager;
9
11
  /** A pointer to our entity type's metadata. */
@@ -16,14 +18,16 @@ export declare class InstanceData {
16
18
  data: Record<string, any>;
17
19
  /** A bag to keep the original values, lazily populated as fields are mutated. */
18
20
  originalData: Record<any, any>;
19
- /** A bag to keep the flushed-to-database values, only for ReactiveQueryField reactivity. */
21
+ /** Reference values that were set through during this unit of work and may need reverse-walking. */
22
+ readonly referenceHistory: Record<string, any[]>;
23
+ /** A bag to keep the flushed-to-database values, only for AsyncReactiveField reactivity. */
20
24
  flushedData: Record<any, any> | undefined;
21
25
  /** The `a#1`, `a#2` index if we're an em.create-d entity. We never unset this, to keep ids stable across flushes. */
22
26
  createId: string | undefined;
23
27
  /** Whether our entity should flush regardless of any other changes. */
24
28
  isTouched: boolean;
25
29
  /** Creates the `#orm` field. */
26
- constructor(em: EntityManager, metadata: EntityMetadata, isNew: boolean);
30
+ constructor(em: EntityManager, entity: Entity, metadata: EntityMetadata, isNew: boolean);
27
31
  /** If `em.flush` has detected a dirty RQF, reset our internal dirty state, w/o reseting our external-dirty state. */
28
32
  resetForRqfLoop(): void;
29
33
  resetAfterFlushed(): void;
@@ -39,8 +43,22 @@ export declare class InstanceData {
39
43
  /** Called when an `em.load` tries to find the entity and it's just gone from the db. */
40
44
  markDeletedBecauseNotFound(): void;
41
45
  /** Called by `em.delete`, returns true if this is new information. */
42
- markDeleted(entity: Entity): boolean;
46
+ markDeleted(): boolean;
43
47
  fixupCreatedThenDeleted(): void;
48
+ /** Marks this entity as needing a flush even if no fields changed. */
49
+ markTouched(): void;
50
+ /** Marks a field as dirty with its pre-mutation value. */
51
+ markFieldDirty(fieldName: string, value: any): void;
52
+ /** Marks a reverted field as clean again. */
53
+ markFieldClean(fieldName: string): void;
54
+ /** Marks this entity as a possible flush candidate. */
55
+ markMaybePending(): void;
56
+ /** Removes this entity from the possible flush candidate set. */
57
+ private unmarkMaybePending;
58
+ /** Remembers a reference value that may need to be reverse-walked later. */
59
+ rememberReferenceValue(fieldName: string, value: any): void;
60
+ /** Returns reference values that may need to be reverse-walked later. */
61
+ getReferenceHistory(fieldName: string): readonly any[];
44
62
  get isDeletedAndFlushed(): boolean;
45
63
  /**
46
64
  * Returns true if the entity is new or was new in this EM.
@@ -1 +1 @@
1
- {"version":3,"file":"InstanceData.d.ts","sourceRoot":"","sources":["../src/InstanceData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,aAAa,EAAoB,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,2DAA2D;AAC3D,qBAAa,YAAY;;IACvB,wFAAwF;IACxF,QAAQ,CAAC,EAAE,EAAE,aAAa,CAAC;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAM;IACjC,qEAAqE;IACrE,GAAG,EAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,kGAAkG;IAClG,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,iFAAiF;IACjF,YAAY,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAM;IACpC,4FAA4F;IAC5F,WAAW,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;IAW1C,qHAAqH;IACrH,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,uEAAuE;IACvE,SAAS,EAAE,OAAO,CAAS;IAE3B,gCAAgC;gBACpB,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO;IAevE,qHAAqH;IACrH,eAAe;IAMf,iBAAiB;IAYjB,uCAAuC;IACvC,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,2CAA2C;IAC3C,IAAI,eAAe,IAAI,OAAO,CAE7B;IAED,yCAAyC;IACzC,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED,wFAAwF;IACxF,IAAI,gBAAgB,IAAI,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,sBAAsB,CAmBvF;IAED,IAAI,aAAa,IAAI,MAAM,EAAE,CAE5B;IAED,wFAAwF;IACxF,0BAA0B,IAAI,IAAI;IAIlC,sEAAsE;IACtE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAiBpC,uBAAuB,IAAI,IAAI;IAK/B,IAAI,mBAAmB,IAAI,OAAO,CAEjC;IAED;;;;;;;;;;;OAWG;IACH,IAAI,UAAU,IAAI,OAAO,CAGxB;CACF"}
1
+ {"version":3,"file":"InstanceData.d.ts","sourceRoot":"","sources":["../src/InstanceData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,aAAa,EAAoB,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,2DAA2D;AAC3D,qBAAa,YAAY;;IACvB,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wFAAwF;IACxF,QAAQ,CAAC,EAAE,EAAE,aAAa,CAAC;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAM;IACjC,qEAAqE;IACrE,GAAG,EAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,kGAAkG;IAClG,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,iFAAiF;IACjF,YAAY,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAM;IACpC,oGAAoG;IACpG,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAM;IACtD,4FAA4F;IAC5F,WAAW,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;IAW1C,qHAAqH;IACrH,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,uEAAuE;IACvE,SAAS,EAAE,OAAO,CAAS;IAE3B,gCAAgC;gBACpB,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO;IAiBvF,qHAAqH;IACrH,eAAe;IAMf,iBAAiB;IAcjB,uCAAuC;IACvC,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,2CAA2C;IAC3C,IAAI,eAAe,IAAI,OAAO,CAE7B;IAED,yCAAyC;IACzC,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED,wFAAwF;IACxF,IAAI,gBAAgB,IAAI,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,sBAAsB,CAmBvF;IAED,IAAI,aAAa,IAAI,MAAM,EAAE,CAE5B;IAED,wFAAwF;IACxF,0BAA0B,IAAI,IAAI;IAIlC,sEAAsE;IACtE,WAAW,IAAI,OAAO;IA2BtB,uBAAuB,IAAI,IAAI;IAM/B,sEAAsE;IACtE,WAAW,IAAI,IAAI;IAKnB,0DAA0D;IAC1D,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAKnD,6CAA6C;IAC7C,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAKvC,uDAAuD;IACvD,gBAAgB,IAAI,IAAI;IAIxB,iEAAiE;IACjE,OAAO,CAAC,kBAAkB;IAI1B,4EAA4E;IAC5E,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAM3D,yEAAyE;IACzE,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,EAAE;IAItD,IAAI,mBAAmB,IAAI,OAAO,CAEjC;IAED;;;;;;;;;;;OAWG;IACH,IAAI,UAAU,IAAI,OAAO,CAGxB;CACF"}
@@ -4,6 +4,8 @@ exports.InstanceData = void 0;
4
4
  const EntityManager_1 = require("./EntityManager");
5
5
  /** The `#orm` metadata field we track on each instance. */
6
6
  class InstanceData {
7
+ /** The entity this instance data belongs to. */
8
+ entity;
7
9
  /** All entities must be associated to an `EntityManager` to handle lazy loading/etc. */
8
10
  em;
9
11
  /** A pointer to our entity type's metadata. */
@@ -16,13 +18,15 @@ class InstanceData {
16
18
  data;
17
19
  /** A bag to keep the original values, lazily populated as fields are mutated. */
18
20
  originalData = {};
19
- /** A bag to keep the flushed-to-database values, only for ReactiveQueryField reactivity. */
21
+ /** Reference values that were set through during this unit of work and may need reverse-walking. */
22
+ referenceHistory = {};
23
+ /** A bag to keep the flushed-to-database values, only for AsyncReactiveField reactivity. */
20
24
  flushedData;
21
25
  /**
22
26
  * Whether our entity has been deleted or not.
23
27
  *
24
28
  * - `pending` means we've been marked for deletion via `em.delete` but not issued a `DELETE`
25
- * - `flushed` means we've flushed a `DELETE` but `em.flush` hasn't fully completed yet, likely due to ReactiveQueryField calcs
29
+ * - `flushed` means we've flushed a `DELETE` but `em.flush` hasn't fully completed yet, likely due to AsyncReactiveField calcs
26
30
  * - `deleted` means we've been flushed and `em.flush` has completed
27
31
  */
28
32
  #deleted;
@@ -33,7 +37,8 @@ class InstanceData {
33
37
  /** Whether our entity should flush regardless of any other changes. */
34
38
  isTouched = false;
35
39
  /** Creates the `#orm` field. */
36
- constructor(em, metadata, isNew) {
40
+ constructor(em, entity, metadata, isNew) {
41
+ this.entity = entity;
37
42
  this.em = em;
38
43
  this.metadata = metadata;
39
44
  if (isNew) {
@@ -41,6 +46,8 @@ class InstanceData {
41
46
  this.data = {};
42
47
  this.row = {};
43
48
  this.flushedData = undefined;
49
+ if (em)
50
+ this.markMaybePending();
44
51
  }
45
52
  else {
46
53
  this.#new = undefined;
@@ -58,6 +65,8 @@ class InstanceData {
58
65
  }
59
66
  resetAfterFlushed() {
60
67
  this.originalData = {};
68
+ for (const fieldName of Object.keys(this.referenceHistory))
69
+ delete this.referenceHistory[fieldName];
61
70
  this.flushedData = undefined;
62
71
  this.isTouched = false;
63
72
  if (this.#new === Operation.Pending || this.#new === Operation.Flushed) {
@@ -66,6 +75,7 @@ class InstanceData {
66
75
  if (this.#deleted === Operation.Pending || this.#deleted === Operation.Flushed) {
67
76
  this.#deleted = Operation.Complete;
68
77
  }
78
+ this.unmarkMaybePending();
69
79
  }
70
80
  /** Our public-facing `isNewEntity`. */
71
81
  get isNewEntity() {
@@ -111,18 +121,32 @@ class InstanceData {
111
121
  this.#deleted = Operation.Complete;
112
122
  }
113
123
  /** Called by `em.delete`, returns true if this is new information. */
114
- markDeleted(entity) {
124
+ markDeleted() {
115
125
  if (this.#deleted === undefined) {
116
- // Let any OneToManyCollection.get caches know that they should recalc (i.e. their filterDeleted logic)
117
- // by asserting the `deleteBook.author` field is changing.
118
- //
119
- // Technically, the o2m caches use the "naive" cache, so we don't really need to pass along the field.
126
+ // Let any OneToManyCollection/ReactiveField/ReactiveReference.get caches know that they should recalc
127
+ // (i.e. their filterDeleted logic) by asserting the `deleteBook.author` field is changing.
120
128
  for (const field of Object.values(this.metadata.allFields)) {
121
- if (field.kind === "m2o") {
122
- (0, EntityManager_1.getEmInternalApi)(this.em).isLoadedCache.resetIsLoaded(entity, field.fieldName);
129
+ // We only do reference/collection fields and skip the primitives, b/c we assume something like
130
+ // `{ books: "title" }` doesn't need `resetIsLoaded(..., "title")` b/c the same hint will also
131
+ // be watching "did books change", and so get reset that way.
132
+ if (field.kind === "m2o" || field.kind === "poly" || field.kind === "m2m") {
133
+ (0, EntityManager_1.getEmInternalApi)(this.em).isLoadedCache.resetIsLoaded(this.entity, field.fieldName);
134
+ }
135
+ else if (field.kind === "primitive" || field.kind === "enum" || field.kind === "primaryKey") {
136
+ // Any reactable watching these fields will also be watching reference/collection
137
+ }
138
+ else if (field.kind === "o2m" || field.kind === "o2o") {
139
+ // Any reactable watching these actually gets triggered by the primary m2o/poly side changing
140
+ }
141
+ else if (field.kind === "lo2m") {
142
+ // Doesn't support reactivity
143
+ }
144
+ else {
145
+ throw new Error(`Unhandled field kind ${field}`);
123
146
  }
124
147
  }
125
148
  this.#deleted = Operation.Pending;
149
+ this.markMaybePending();
126
150
  return true;
127
151
  }
128
152
  return false;
@@ -130,6 +154,42 @@ class InstanceData {
130
154
  fixupCreatedThenDeleted() {
131
155
  // Ideally we could do this via `resetAfterFlushed`?
132
156
  this.#deleted = Operation.Complete;
157
+ this.unmarkMaybePending();
158
+ }
159
+ /** Marks this entity as needing a flush even if no fields changed. */
160
+ markTouched() {
161
+ this.isTouched = true;
162
+ this.markMaybePending();
163
+ }
164
+ /** Marks a field as dirty with its pre-mutation value. */
165
+ markFieldDirty(fieldName, value) {
166
+ this.originalData[fieldName] = value;
167
+ this.markMaybePending();
168
+ }
169
+ /** Marks a reverted field as clean again. */
170
+ markFieldClean(fieldName) {
171
+ delete this.originalData[fieldName];
172
+ this.markMaybePending();
173
+ }
174
+ /** Marks this entity as a possible flush candidate. */
175
+ markMaybePending() {
176
+ (0, EntityManager_1.getEmInternalApi)(this.em).markMaybePending(this.entity);
177
+ }
178
+ /** Removes this entity from the possible flush candidate set. */
179
+ unmarkMaybePending() {
180
+ (0, EntityManager_1.getEmInternalApi)(this.em).unmarkMaybePending(this.entity);
181
+ }
182
+ /** Remembers a reference value that may need to be reverse-walked later. */
183
+ rememberReferenceValue(fieldName, value) {
184
+ if (value === undefined)
185
+ return;
186
+ const values = (this.referenceHistory[fieldName] ??= []);
187
+ if (!values.includes(value))
188
+ values.push(value);
189
+ }
190
+ /** Returns reference values that may need to be reverse-walked later. */
191
+ getReferenceHistory(fieldName) {
192
+ return this.referenceHistory[fieldName] ?? [];
133
193
  }
134
194
  get isDeletedAndFlushed() {
135
195
  return this.#deleted === Operation.Complete;
@@ -1 +1 @@
1
- {"version":3,"file":"InstanceData.js","sourceRoot":"","sources":["../src/InstanceData.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"InstanceData.js","sourceRoot":"","sources":["../src/InstanceData.ts"],"names":[],"mappings":"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"}
@@ -26,7 +26,7 @@ export declare class IsLoadedCache {
26
26
  /** Adds a ReactiveField/Relation/Collection to be invalidated when its dependencies change. */
27
27
  add(target: IsLoadedCachable): void;
28
28
  addNaive(target: IsLoadedCachable): void;
29
- /** Resets any isLoaded caches that depend on `entity.fieldName`. */
29
+ /** Resets any in-memory #isLoaded/#isCached caches that depend on `entity.fieldName`. */
30
30
  resetIsLoaded(entity: Entity, fieldName: string): void;
31
31
  }
32
32
  //# sourceMappingURL=IsLoadedCache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IsLoadedCache.d.ts","sourceRoot":"","sources":["../src/IsLoadedCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIlC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,IAAI,IAAI,CAAC;CACvB;AAED,qBAAa,aAAa;;IAWxB,+FAA+F;IAC/F,GAAG,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAOnC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAKxC,oEAAoE;IACpE,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;CA+CvD"}
1
+ {"version":3,"file":"IsLoadedCache.d.ts","sourceRoot":"","sources":["../src/IsLoadedCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,IAAI,IAAI,CAAC;CACvB;AAED,qBAAa,aAAa;;IAaxB,+FAA+F;IAC/F,GAAG,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IASnC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAKxC,yFAAyF;IACzF,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;CAsDvD"}
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.IsLoadedCache = void 0;
4
4
  const EntityMetadata_1 = require("./EntityMetadata");
5
- const caches_1 = require("./caches");
6
5
  class IsLoadedCache {
7
6
  // Cache of `{ tag -> { fieldName -> Set<IsLoadedCachable> } }` to hold derived relations
8
7
  // we can selectively invalidate by walking from the mutated field to any downstream
@@ -11,27 +10,32 @@ class IsLoadedCache {
11
10
  // A dumb cache for things that are hard selectively invalidate (o2m.get, recursive collections,
12
11
  // and custom references/collections), so any mutation resets these.
13
12
  #naiveCache = new Set();
14
- // Counter to try and fast-path resetIsLoaded
15
- #dirtySets = 0;
13
+ // Counter to skip reactive hint walking when no smart cache sets are populated.
14
+ #smartDirtySets = 0;
15
+ // Counter to fast-path resetIsLoaded when the naive cache is empty.
16
+ #naiveDirtySets = 0;
16
17
  /** Adds a ReactiveField/Relation/Collection to be invalidated when its dependencies change. */
17
18
  add(target) {
18
19
  const meta = (0, EntityMetadata_1.getMetadata)(target.entity);
19
20
  const set = ((this.#smartCache[meta.tagName] ??= {})[target.fieldName] ??= new Set());
20
- if (set.size === 0)
21
- this.#dirtySets++;
21
+ if (set.size === 0) {
22
+ this.#smartDirtySets++;
23
+ }
22
24
  set.add(target);
23
25
  }
24
26
  addNaive(target) {
25
27
  if (this.#naiveCache.size === 0)
26
- this.#dirtySets++;
28
+ this.#naiveDirtySets++;
27
29
  this.#naiveCache.add(target);
28
30
  }
29
- /** Resets any isLoaded caches that depend on `entity.fieldName`. */
31
+ /** Resets any in-memory #isLoaded/#isCached caches that depend on `entity.fieldName`. */
30
32
  resetIsLoaded(entity, fieldName) {
31
- if (this.#dirtySets === 0)
33
+ if (this.#smartDirtySets === 0 && this.#naiveDirtySets === 0)
32
34
  return;
33
35
  // Reset caches that we can deterministically find by walking the reactivity hints
34
- this.#resetDownstreamReactables((0, EntityMetadata_1.getMetadata)(entity), fieldName);
36
+ if (this.#smartDirtySets > 0) {
37
+ this.#resetDownstreamReactables((0, EntityMetadata_1.getMetadata)(entity), fieldName);
38
+ }
35
39
  // We could use this to invalidate m2o.get, but it doesn't work for collections
36
40
  // with an orderBy, when the orderBy changes, so for now we use the blunt naiveCache.
37
41
  // const field = meta.allFields[fieldName];
@@ -47,31 +51,38 @@ class IsLoadedCache {
47
51
  for (const target of this.#naiveCache.values())
48
52
  target.resetIsLoaded();
49
53
  this.#naiveCache.clear();
50
- this.#dirtySets--;
54
+ this.#naiveDirtySets--;
51
55
  }
52
56
  }
57
+ /**
58
+ * Given a `meta+field`, statically find all downstream Reactables, and if any of those
59
+ * Reactables are a) in-memory already, and b) registered themselves as cached,
60
+ * tell them to reset.
61
+ */
53
62
  #resetDownstreamReactables(meta, fieldName) {
54
63
  // These are reactables in other entities that are watching/reacting to this entity/fieldName
55
- const reactables = (0, caches_1.getReactablesIncludingReadOnly)(meta);
64
+ const reactables = meta.reactablesIncludingReadOnlyByField.get(fieldName);
65
+ if (reactables === undefined)
66
+ return;
56
67
  for (const r of reactables) {
68
+ if (this.#smartDirtySets === 0)
69
+ return;
57
70
  // I.e. we've written to Author.firstName, and this reactable in Book/otherMeta depends on it
58
- if (r.fields.includes(fieldName)) {
59
- const otherMeta = (0, EntityMetadata_1.getMetadata)(r.cstr);
60
- // Find any cache entries for this cstr + name
61
- const set = this.#smartCache[otherMeta.tagName]?.[r.name];
62
- if (set?.size > 0) {
63
- for (const target of set) {
64
- target.resetIsLoaded();
65
- // Is this target itself a RF/RR? If so, transitively reset its cache as well.
66
- const otherMeta = (0, EntityMetadata_1.getMetadata)(target.entity);
67
- const otherField = otherMeta.allFields[target.fieldName];
68
- if ("derived" in otherField && otherField.derived) {
69
- this.#resetDownstreamReactables(otherMeta, otherField.fieldName);
70
- }
71
+ const otherMeta = (0, EntityMetadata_1.getMetadata)(r.cstr);
72
+ // Find any cache entries for this cstr + name
73
+ const set = this.#smartCache[otherMeta.tagName]?.[r.name];
74
+ if (set?.size > 0) {
75
+ for (const target of set) {
76
+ target.resetIsLoaded();
77
+ // Is this target itself a RF/RR? If so, transitively reset its cache as well.
78
+ const otherMeta = (0, EntityMetadata_1.getMetadata)(target.entity);
79
+ const otherField = otherMeta.allFields[target.fieldName];
80
+ if ("derived" in otherField && otherField.derived) {
81
+ this.#resetDownstreamReactables(otherMeta, otherField.fieldName);
71
82
  }
72
- set.clear();
73
- this.#dirtySets--;
74
83
  }
84
+ set.clear();
85
+ this.#smartDirtySets--;
75
86
  }
76
87
  }
77
88
  }
@@ -1 +1 @@
1
- {"version":3,"file":"IsLoadedCache.js","sourceRoot":"","sources":["../src/IsLoadedCache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IsLoadedCache.js","sourceRoot":"","sources":["../src/IsLoadedCache.ts"],"names":[],"mappings":"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"}
@@ -57,7 +57,7 @@ export interface JoinRow {
57
57
  * Whether our relation has been processed or not.
58
58
  *
59
59
  * - `pending` means we've not flushed it to the Database
60
- * - `flushed` means we've flushed but `em.flush` hasn't fully completed yet, likely due to ReactiveQueryField calcs
60
+ * - `flushed` means we've flushed but `em.flush` hasn't fully completed yet, likely due to AsyncReactiveField calcs
61
61
  * - `completed` means we've been flushed and `em.flush` has completed
62
62
  */
63
63
  op: JoinRowOperation;
package/build/JoinRows.js CHANGED
@@ -230,7 +230,12 @@ class ManyToManyIndex {
230
230
  getOthers(columnName, entity) {
231
231
  // It's empty m2m collection won't have any other entities, and so no index entries
232
232
  const map = this.indexes[columnName].get(entity);
233
- return map ? Array.from(map.values()) : [];
233
+ if (!map)
234
+ return [];
235
+ // Sort by join-row id for a stable order regardless of how many batches contributed
236
+ // rows — the underlying Map preserves insertion order, which depends on DataLoader
237
+ // timing and is non-deterministic across processes. New rows (id === undefined) sort last.
238
+ return Array.from(map.values()).sort((a, b) => (a.id ?? Infinity) - (b.id ?? Infinity));
234
239
  }
235
240
  #doAdd(index, e1, e2, value) {
236
241
  const map = index.get(e1) ?? new Map();
@@ -1 +1 @@
1
- {"version":3,"file":"JoinRows.js","sourceRoot":"","sources":["../src/JoinRows.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"JoinRows.js","sourceRoot":"","sources":["../src/JoinRows.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,10 @@ interface PluginMethods {
30
30
  beforeFind?(meta: EntityMetadata, operation: FindOperation, query: ParsedFindQuery, settings: {
31
31
  limit?: number;
32
32
  offset?: number;
33
+ allowMultipleLeftJoins?: boolean;
34
+ optimizeJoinsToExists?: boolean;
35
+ pruneJoins?: boolean;
36
+ keepAliases?: string[];
33
37
  }): void;
34
38
  /**
35
39
  * Called after a find operation has been executed with the raw database rows.
@@ -39,6 +43,8 @@ interface PluginMethods {
39
43
  * @param rows The raw database rows returned from the query
40
44
  */
41
45
  afterFind?(meta: EntityMetadata, operation: FindOperation, rows: any[]): void;
46
+ beforeValidate?(entities: readonly Entity[]): Promise<void> | void;
47
+ afterValidate?(entities: readonly Entity[]): Promise<void> | void;
42
48
  afterWrite(entityTodos: Record<string, Todo>, joinRowTodos: Record<string, JoinRowTodo>): void;
43
49
  }
44
50
  declare const emsSymbol: unique symbol;
@@ -82,8 +88,14 @@ export declare class PluginManager implements Required<PluginMethods> {
82
88
  beforeFind(meta: EntityMetadata, operation: FindOperation, query: ParsedFindQuery, settings: {
83
89
  limit?: number;
84
90
  offset?: number;
91
+ allowMultipleLeftJoins?: boolean;
92
+ optimizeJoinsToExists?: boolean;
93
+ pruneJoins?: boolean;
94
+ keepAliases?: string[];
85
95
  }): void;
86
96
  afterFind(meta: EntityMetadata, operation: FindOperation, rows: any[]): void;
97
+ beforeValidate(entities: readonly Entity[]): Promise<void> | void;
98
+ afterValidate(entities: readonly Entity[]): Promise<void> | void;
87
99
  afterWrite(entityTodos: Record<string, Todo>, joinRowTodos: Record<string, JoinRowTodo>): void;
88
100
  }
89
101
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"PluginManager.d.ts","sourceRoot":"","sources":["../src/PluginManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAa,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE3C,UAAU,aAAa;IACrB;;;;;OAKG;IACH,cAAc,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrD;;;;;;OAMG;IACH,cAAc,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,IAAI,CAAC;IACpE;;;;;;;OAOG;IACH,UAAU,CAAC,CACT,IAAI,EAAE,cAAc,EACpB,SAAS,EAAE,aAAa,EACxB,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5C,IAAI,CAAC;IACR;;;;;;OAMG;IACH,SAAS,CAAC,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAE9E,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC;CAChG;AASD,QAAA,MAAM,SAAS,eAAgB,CAAC;AAChC;;;;;GAKG;AACH,8BAAsB,MAAM;IAG1B,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,CAAM;IAE3C,kBAAkB,IAAI,IAAI,GAAG,SAAS;IAItC,IAAI,GAAG,IAAI,SAAS,aAAa,EAAE,CAMlC;CACF;AAED,MAAM,WAAW,MAAO,SAAQ,aAAa;CAAG;AAEhD;;;;;;GAMG;AACH,qBAAa,aAAc,YAAW,QAAQ,CAAC,aAAa,CAAC;;aAG/B,EAAE,EAAE,aAAa;gBAAjB,EAAE,EAAE,aAAa;IAE7C;;;;;;;OAOG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM;IAqBxB,IAAI,OAAO,IAAI,SAAS,MAAM,EAAE,CAE/B;IAED,OAAO,CAAC,KAAK,EAAE,aAAa;IAW5B,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IACnD,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,IAAI;IAClE,UAAU,CACR,IAAI,EAAE,cAAc,EACpB,SAAS,EAAE,aAAa,EACxB,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5C,IAAI;IACP,SAAS,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,EAAE;IACrE,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,IAAI;CAC/F"}
1
+ {"version":3,"file":"PluginManager.d.ts","sourceRoot":"","sources":["../src/PluginManager.ts"],"names":[],"mappings":"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"}
@@ -2,13 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PluginManager = exports.Plugin = void 0;
4
4
  const EntityManager_1 = require("./EntityManager");
5
- const pluginMethods = [
5
+ const syncPluginMethods = [
6
6
  "beforeGetField",
7
7
  "beforeSetField",
8
8
  "beforeFind",
9
9
  "afterFind",
10
10
  "afterWrite",
11
11
  ];
12
+ const asyncPluginMethods = ["beforeValidate", "afterValidate"];
12
13
  const emsSymbol = Symbol("ems");
13
14
  /**
14
15
  * Base class for plugins that hook into entity lifecycle events.
@@ -59,7 +60,7 @@ class PluginManager {
59
60
  return; // if we're already added, then we can just early exit
60
61
  this.#plugins.add(plugin);
61
62
  plugin[emsSymbol].push(new WeakRef(this.em));
62
- for (const method of pluginMethods) {
63
+ for (const method of syncPluginMethods) {
63
64
  if (method in plugin) {
64
65
  (this.#pluginsByCallback[method] ??= []).push(plugin);
65
66
  // As a performance optimization, we only create the actual implementation for each method on the plugin manager
@@ -74,6 +75,19 @@ class PluginManager {
74
75
  }
75
76
  }
76
77
  }
78
+ for (const method of asyncPluginMethods) {
79
+ if (method in plugin) {
80
+ (this.#pluginsByCallback[method] ??= []).push(plugin);
81
+ // Validate-phase plugin hooks are intentionally awaited without making hot-path hooks async.
82
+ if (!Object.hasOwn(this, method)) {
83
+ this[method] = async function (...args) {
84
+ for (const plugin of this.#pluginsByCallback[method]) {
85
+ await plugin[method](...args);
86
+ }
87
+ };
88
+ }
89
+ }
90
+ }
77
91
  }
78
92
  get plugins() {
79
93
  return [...this.#plugins];
@@ -91,6 +105,8 @@ class PluginManager {
91
105
  beforeSetField(entity, field, newValue) { }
92
106
  beforeFind(meta, operation, query, settings) { }
93
107
  afterFind(meta, operation, rows) { }
108
+ beforeValidate(entities) { }
109
+ afterValidate(entities) { }
94
110
  afterWrite(entityTodos, joinRowTodos) { }
95
111
  }
96
112
  exports.PluginManager = PluginManager;
@@ -1 +1 @@
1
- {"version":3,"file":"PluginManager.js","sourceRoot":"","sources":["../src/PluginManager.ts"],"names":[],"mappings":";;;AACA,mDAA0E;AA+C1E,MAAM,aAAa,GAAG;IACpB,gBAAgB;IAChB,gBAAgB;IAChB,YAAY;IACZ,WAAW;IACX,YAAY;CACc,CAAC;AAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAChC;;;;;GAKG;AACH,MAAsB,MAAM;IAC1B,iHAAiH;IACjH,sHAAsH;IACtH,CAAC,SAAS,CAAC,GAA6B,EAAE,CAAC;IAE3C,kBAAkB;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,SAAS,CAAC;aACnB,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;aACvB,MAAM,CAAC,yBAAS,CAAC;aACjB,OAAO,EAAE,CAAC;IACf,CAAC;CACF;AAhBD,wBAgBC;AAID;;;;;;GAMG;AACH,MAAa,aAAa;IAGI;IAF5B,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACpB,kBAAkB,GAA4C,EAAE,CAAC;IAC1E,YAA4B,EAAiB;QAAjB,OAAE,GAAF,EAAE,CAAe;IAAG,CAAC;IAEjD;;;;;;;OAOG;IACH,SAAS,CAAC,MAAc;QACtB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,OAAO,CAAC,sDAAsD;QAC7F,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7C,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;YACnC,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;gBACrB,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACtD,gHAAgH;gBAChH,0GAA0G;gBAC1G,qDAAqD;gBACrD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;oBACjC,IAAI,CAAC,MAAM,CAAC,GAAG,UAA+B,GAAG,IAAW;wBAC1D,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAE,EAAE,CAAC;4BACrD,MAAM,CAAC,MAAM,CAAiC,CAAC,GAAG,IAAI,CAAC,CAAC;wBAC3D,CAAC;oBACH,CAAC,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,OAAO;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,CAAC,KAAoB;QAC1B,IAAI,CAAC,QAAQ;aACV,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;aAC5C,MAAM,CAAC,yBAAS,CAAC;aACjB,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,wGAAwG;IACxG,6FAA6F;IAE7F,cAAc,CAAC,MAAc,EAAE,KAAa,IAAS,CAAC;IACtD,cAAc,CAAC,MAAc,EAAE,KAAa,EAAE,QAAa,IAAS,CAAC;IACrE,UAAU,CACR,IAAoB,EACpB,SAAwB,EACxB,KAAsB,EACtB,QAA6C,IACtC,CAAC;IACV,SAAS,CAAC,IAAoB,EAAE,SAAwB,EAAE,IAAW,IAAG,CAAC;IACzE,UAAU,CAAC,WAAiC,EAAE,YAAyC,IAAS,CAAC;CAClG;AA3DD,sCA2DC"}
1
+ {"version":3,"file":"PluginManager.js","sourceRoot":"","sources":["../src/PluginManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { type ParsedFindQuery } from "./QueryParser";
2
+ /**
3
+ * Rewrites eligible logical collection LEFT JOINs into EXISTS after plugins have mutated the AST.
4
+ *
5
+ * QueryParser intentionally leaves collection filters as ordinary joins so `beforeFind` plugins see
6
+ * stabler/simpler input than "sometimes JOINs / sometimes EXISTS".
7
+ *
8
+ * This pass runs after plugins and before SQL rendering:
9
+ *
10
+ * 1. `rewriteCollectionJoins` finds top-level collection joins and moves conditions that reference only
11
+ * that subtree into a correlated EXISTS subquery. I.e. `{ books: { title: "b1" } }` becomes
12
+ * `EXISTS (SELECT 1 FROM books b WHERE a.id = b.author_id AND b.title = 'b1')`.
13
+ * 2. The same helper recurses into the generated subquery, so nested collections become nested EXISTS clauses.
14
+ * I.e. `{ books: { reviews: { rating: 5 } } }` becomes EXISTS(books WHERE EXISTS(reviews)).
15
+ * 3. Conditions that cannot be safely moved stay as LEFT JOINs. I.e. `OR(b.title = 'x', a.first_name = 'x')`
16
+ * needs both aliases in one SQL scope, so `b` remains a join instead of becoming an EXISTS.
17
+ * 4. Remaining fanout LEFT JOIN roots are rejected unless `allowMultipleLeftJoins` is set,
18
+ * because they can produce cross-product row explosions.
19
+ * 5. Finally, `maybeAddIdNotNulls` and `pruneUnusedJoins` clean up the joins that remain.
20
+ */
21
+ export declare function optimizeCollectionJoins(query: ParsedFindQuery, opts?: {
22
+ allowMultipleLeftJoins?: boolean;
23
+ optimizeJoinsToExists?: boolean;
24
+ pruneJoins?: boolean;
25
+ keepAliases?: string[];
26
+ }): void;
27
+ //# sourceMappingURL=QueryParser.collectionJoins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryParser.collectionJoins.d.ts","sourceRoot":"","sources":["../src/QueryParser.collectionJoins.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,eAAe,EAGrB,MAAM,eAAe,CAAC;AAcvB;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,eAAe,EACtB,IAAI,GAAE;IACJ,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,GACL,IAAI,CAiCN"}