@spinajs/orm 2.0.481 → 2.0.484

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 (228) hide show
  1. package/README.md +72 -3
  2. package/lib/cjs/bootstrap.js +10 -0
  3. package/lib/cjs/bootstrap.js.map +1 -1
  4. package/lib/cjs/builders.d.ts +127 -11
  5. package/lib/cjs/builders.d.ts.map +1 -1
  6. package/lib/cjs/builders.js +368 -283
  7. package/lib/cjs/builders.js.map +1 -1
  8. package/lib/cjs/converters.d.ts +9 -2
  9. package/lib/cjs/converters.d.ts.map +1 -1
  10. package/lib/cjs/converters.js +48 -8
  11. package/lib/cjs/converters.js.map +1 -1
  12. package/lib/cjs/decorators.d.ts +26 -3
  13. package/lib/cjs/decorators.d.ts.map +1 -1
  14. package/lib/cjs/decorators.js +95 -42
  15. package/lib/cjs/decorators.js.map +1 -1
  16. package/lib/cjs/dehydrators.js +1 -1
  17. package/lib/cjs/dehydrators.js.map +1 -1
  18. package/lib/cjs/descriptor.d.ts +1 -0
  19. package/lib/cjs/descriptor.d.ts.map +1 -1
  20. package/lib/cjs/descriptor.js +16 -40
  21. package/lib/cjs/descriptor.js.map +1 -1
  22. package/lib/cjs/driver.d.ts +136 -7
  23. package/lib/cjs/driver.d.ts.map +1 -1
  24. package/lib/cjs/driver.js +279 -0
  25. package/lib/cjs/driver.js.map +1 -1
  26. package/lib/cjs/existsRelationHandlers.d.ts +29 -0
  27. package/lib/cjs/existsRelationHandlers.d.ts.map +1 -0
  28. package/lib/cjs/existsRelationHandlers.js +138 -0
  29. package/lib/cjs/existsRelationHandlers.js.map +1 -0
  30. package/lib/cjs/fp.d.ts.map +1 -1
  31. package/lib/cjs/fp.js +10 -15
  32. package/lib/cjs/fp.js.map +1 -1
  33. package/lib/cjs/hydrators.d.ts.map +1 -1
  34. package/lib/cjs/hydrators.js +29 -2
  35. package/lib/cjs/hydrators.js.map +1 -1
  36. package/lib/cjs/identity-map.d.ts +60 -0
  37. package/lib/cjs/identity-map.d.ts.map +1 -0
  38. package/lib/cjs/identity-map.js +135 -0
  39. package/lib/cjs/identity-map.js.map +1 -0
  40. package/lib/cjs/index.d.ts +12 -0
  41. package/lib/cjs/index.d.ts.map +1 -1
  42. package/lib/cjs/index.js +12 -0
  43. package/lib/cjs/index.js.map +1 -1
  44. package/lib/cjs/interfaces.d.ts +300 -10
  45. package/lib/cjs/interfaces.d.ts.map +1 -1
  46. package/lib/cjs/interfaces.js +54 -1
  47. package/lib/cjs/interfaces.js.map +1 -1
  48. package/lib/cjs/metadata.d.ts.map +1 -1
  49. package/lib/cjs/metadata.js +4 -1
  50. package/lib/cjs/metadata.js.map +1 -1
  51. package/lib/cjs/metrics.d.ts +53 -0
  52. package/lib/cjs/metrics.d.ts.map +1 -0
  53. package/lib/cjs/metrics.js +82 -0
  54. package/lib/cjs/metrics.js.map +1 -0
  55. package/lib/cjs/middlewares.d.ts +13 -1
  56. package/lib/cjs/middlewares.d.ts.map +1 -1
  57. package/lib/cjs/middlewares.js +55 -15
  58. package/lib/cjs/middlewares.js.map +1 -1
  59. package/lib/cjs/model.d.ts +129 -13
  60. package/lib/cjs/model.d.ts.map +1 -1
  61. package/lib/cjs/model.js +449 -93
  62. package/lib/cjs/model.js.map +1 -1
  63. package/lib/cjs/orm.d.ts.map +1 -1
  64. package/lib/cjs/orm.js +12 -3
  65. package/lib/cjs/orm.js.map +1 -1
  66. package/lib/cjs/orphan.d.ts +27 -0
  67. package/lib/cjs/orphan.d.ts.map +1 -0
  68. package/lib/cjs/orphan.js +55 -0
  69. package/lib/cjs/orphan.js.map +1 -0
  70. package/lib/cjs/primary-keys.d.ts +60 -0
  71. package/lib/cjs/primary-keys.d.ts.map +1 -0
  72. package/lib/cjs/primary-keys.js +243 -0
  73. package/lib/cjs/primary-keys.js.map +1 -0
  74. package/lib/cjs/relation-objects.d.ts +101 -9
  75. package/lib/cjs/relation-objects.d.ts.map +1 -1
  76. package/lib/cjs/relation-objects.js +194 -43
  77. package/lib/cjs/relation-objects.js.map +1 -1
  78. package/lib/cjs/relations.d.ts +7 -1
  79. package/lib/cjs/relations.d.ts.map +1 -1
  80. package/lib/cjs/relations.js +16 -1
  81. package/lib/cjs/relations.js.map +1 -1
  82. package/lib/cjs/resilience.d.ts +50 -0
  83. package/lib/cjs/resilience.d.ts.map +1 -0
  84. package/lib/cjs/resilience.js +70 -0
  85. package/lib/cjs/resilience.js.map +1 -0
  86. package/lib/cjs/snapshot.d.ts +58 -0
  87. package/lib/cjs/snapshot.d.ts.map +1 -0
  88. package/lib/cjs/snapshot.js +125 -0
  89. package/lib/cjs/snapshot.js.map +1 -0
  90. package/lib/cjs/statements.d.ts +11 -1
  91. package/lib/cjs/statements.d.ts.map +1 -1
  92. package/lib/cjs/statements.js +13 -2
  93. package/lib/cjs/statements.js.map +1 -1
  94. package/lib/cjs/subject-builder.d.ts +79 -0
  95. package/lib/cjs/subject-builder.d.ts.map +1 -0
  96. package/lib/cjs/subject-builder.js +296 -0
  97. package/lib/cjs/subject-builder.js.map +1 -0
  98. package/lib/cjs/subject-executor.d.ts +122 -0
  99. package/lib/cjs/subject-executor.d.ts.map +1 -0
  100. package/lib/cjs/subject-executor.js +319 -0
  101. package/lib/cjs/subject-executor.js.map +1 -0
  102. package/lib/cjs/subject-sorter.d.ts +70 -0
  103. package/lib/cjs/subject-sorter.d.ts.map +1 -0
  104. package/lib/cjs/subject-sorter.js +173 -0
  105. package/lib/cjs/subject-sorter.js.map +1 -0
  106. package/lib/cjs/subject.d.ts +100 -0
  107. package/lib/cjs/subject.d.ts.map +1 -0
  108. package/lib/cjs/subject.js +89 -0
  109. package/lib/cjs/subject.js.map +1 -0
  110. package/lib/cjs/unit-of-work.d.ts +52 -0
  111. package/lib/cjs/unit-of-work.d.ts.map +1 -0
  112. package/lib/cjs/unit-of-work.js +170 -0
  113. package/lib/cjs/unit-of-work.js.map +1 -0
  114. package/lib/mjs/bootstrap.js +10 -0
  115. package/lib/mjs/bootstrap.js.map +1 -1
  116. package/lib/mjs/builders.d.ts +127 -11
  117. package/lib/mjs/builders.d.ts.map +1 -1
  118. package/lib/mjs/builders.js +370 -285
  119. package/lib/mjs/builders.js.map +1 -1
  120. package/lib/mjs/converters.d.ts +9 -2
  121. package/lib/mjs/converters.d.ts.map +1 -1
  122. package/lib/mjs/converters.js +48 -8
  123. package/lib/mjs/converters.js.map +1 -1
  124. package/lib/mjs/decorators.d.ts +26 -3
  125. package/lib/mjs/decorators.d.ts.map +1 -1
  126. package/lib/mjs/decorators.js +96 -44
  127. package/lib/mjs/decorators.js.map +1 -1
  128. package/lib/mjs/dehydrators.js +1 -1
  129. package/lib/mjs/dehydrators.js.map +1 -1
  130. package/lib/mjs/descriptor.d.ts +1 -0
  131. package/lib/mjs/descriptor.d.ts.map +1 -1
  132. package/lib/mjs/descriptor.js +17 -39
  133. package/lib/mjs/descriptor.js.map +1 -1
  134. package/lib/mjs/driver.d.ts +136 -7
  135. package/lib/mjs/driver.d.ts.map +1 -1
  136. package/lib/mjs/driver.js +279 -0
  137. package/lib/mjs/driver.js.map +1 -1
  138. package/lib/mjs/existsRelationHandlers.d.ts +29 -0
  139. package/lib/mjs/existsRelationHandlers.d.ts.map +1 -0
  140. package/lib/mjs/existsRelationHandlers.js +134 -0
  141. package/lib/mjs/existsRelationHandlers.js.map +1 -0
  142. package/lib/mjs/fp.d.ts.map +1 -1
  143. package/lib/mjs/fp.js +10 -15
  144. package/lib/mjs/fp.js.map +1 -1
  145. package/lib/mjs/hydrators.d.ts.map +1 -1
  146. package/lib/mjs/hydrators.js +29 -2
  147. package/lib/mjs/hydrators.js.map +1 -1
  148. package/lib/mjs/identity-map.d.ts +60 -0
  149. package/lib/mjs/identity-map.d.ts.map +1 -0
  150. package/lib/mjs/identity-map.js +130 -0
  151. package/lib/mjs/identity-map.js.map +1 -0
  152. package/lib/mjs/index.d.ts +12 -0
  153. package/lib/mjs/index.d.ts.map +1 -1
  154. package/lib/mjs/index.js +12 -0
  155. package/lib/mjs/index.js.map +1 -1
  156. package/lib/mjs/interfaces.d.ts +300 -10
  157. package/lib/mjs/interfaces.d.ts.map +1 -1
  158. package/lib/mjs/interfaces.js +53 -0
  159. package/lib/mjs/interfaces.js.map +1 -1
  160. package/lib/mjs/metadata.d.ts.map +1 -1
  161. package/lib/mjs/metadata.js +4 -1
  162. package/lib/mjs/metadata.js.map +1 -1
  163. package/lib/mjs/metrics.d.ts +53 -0
  164. package/lib/mjs/metrics.d.ts.map +1 -0
  165. package/lib/mjs/metrics.js +76 -0
  166. package/lib/mjs/metrics.js.map +1 -0
  167. package/lib/mjs/middlewares.d.ts +13 -1
  168. package/lib/mjs/middlewares.d.ts.map +1 -1
  169. package/lib/mjs/middlewares.js +55 -15
  170. package/lib/mjs/middlewares.js.map +1 -1
  171. package/lib/mjs/model.d.ts +129 -13
  172. package/lib/mjs/model.d.ts.map +1 -1
  173. package/lib/mjs/model.js +451 -95
  174. package/lib/mjs/model.js.map +1 -1
  175. package/lib/mjs/orm.d.ts.map +1 -1
  176. package/lib/mjs/orm.js +12 -3
  177. package/lib/mjs/orm.js.map +1 -1
  178. package/lib/mjs/orphan.d.ts +27 -0
  179. package/lib/mjs/orphan.d.ts.map +1 -0
  180. package/lib/mjs/orphan.js +52 -0
  181. package/lib/mjs/orphan.js.map +1 -0
  182. package/lib/mjs/primary-keys.d.ts +60 -0
  183. package/lib/mjs/primary-keys.d.ts.map +1 -0
  184. package/lib/mjs/primary-keys.js +223 -0
  185. package/lib/mjs/primary-keys.js.map +1 -0
  186. package/lib/mjs/relation-objects.d.ts +101 -9
  187. package/lib/mjs/relation-objects.d.ts.map +1 -1
  188. package/lib/mjs/relation-objects.js +194 -43
  189. package/lib/mjs/relation-objects.js.map +1 -1
  190. package/lib/mjs/relations.d.ts +7 -1
  191. package/lib/mjs/relations.d.ts.map +1 -1
  192. package/lib/mjs/relations.js +16 -1
  193. package/lib/mjs/relations.js.map +1 -1
  194. package/lib/mjs/resilience.d.ts +50 -0
  195. package/lib/mjs/resilience.d.ts.map +1 -0
  196. package/lib/mjs/resilience.js +64 -0
  197. package/lib/mjs/resilience.js.map +1 -0
  198. package/lib/mjs/snapshot.d.ts +58 -0
  199. package/lib/mjs/snapshot.d.ts.map +1 -0
  200. package/lib/mjs/snapshot.js +115 -0
  201. package/lib/mjs/snapshot.js.map +1 -0
  202. package/lib/mjs/statements.d.ts +11 -1
  203. package/lib/mjs/statements.d.ts.map +1 -1
  204. package/lib/mjs/statements.js +14 -3
  205. package/lib/mjs/statements.js.map +1 -1
  206. package/lib/mjs/subject-builder.d.ts +79 -0
  207. package/lib/mjs/subject-builder.d.ts.map +1 -0
  208. package/lib/mjs/subject-builder.js +292 -0
  209. package/lib/mjs/subject-builder.js.map +1 -0
  210. package/lib/mjs/subject-executor.d.ts +122 -0
  211. package/lib/mjs/subject-executor.d.ts.map +1 -0
  212. package/lib/mjs/subject-executor.js +312 -0
  213. package/lib/mjs/subject-executor.js.map +1 -0
  214. package/lib/mjs/subject-sorter.d.ts +70 -0
  215. package/lib/mjs/subject-sorter.d.ts.map +1 -0
  216. package/lib/mjs/subject-sorter.js +168 -0
  217. package/lib/mjs/subject-sorter.js.map +1 -0
  218. package/lib/mjs/subject.d.ts +100 -0
  219. package/lib/mjs/subject.d.ts.map +1 -0
  220. package/lib/mjs/subject.js +84 -0
  221. package/lib/mjs/subject.js.map +1 -0
  222. package/lib/mjs/unit-of-work.d.ts +52 -0
  223. package/lib/mjs/unit-of-work.d.ts.map +1 -0
  224. package/lib/mjs/unit-of-work.js +166 -0
  225. package/lib/mjs/unit-of-work.js.map +1 -0
  226. package/lib/tsconfig.cjs.tsbuildinfo +1 -1
  227. package/lib/tsconfig.mjs.tsbuildinfo +1 -1
  228. package/package.json +10 -7
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Lifecycle state of a driver's connection to its database.
3
+ */
4
+ export declare enum ConnectionState {
5
+ Disconnected = "disconnected",
6
+ Connecting = "connecting",
7
+ Connected = "connected",
8
+ /** Reachable but failing health probes, or mid-reconnect. Queries are still attempted. */
9
+ Degraded = "degraded"
10
+ }
11
+ export interface IConnectionResilienceOptions {
12
+ /**
13
+ * Milliseconds between health probes. 0 disables the periodic probe. Default 30000.
14
+ */
15
+ HealthCheckInterval?: number;
16
+ /**
17
+ * Reconnect attempts per outage before giving up. Default 5.
18
+ */
19
+ MaxRetries?: number;
20
+ /**
21
+ * First backoff delay in ms; doubles each attempt. Default 200.
22
+ */
23
+ RetryDelay?: number;
24
+ /**
25
+ * Upper bound on the backoff delay in ms. Default 5000.
26
+ */
27
+ MaxRetryDelay?: number;
28
+ }
29
+ /**
30
+ * Error codes that mean the transport died rather than the statement being wrong. Retrying a
31
+ * statement that the server rejected only multiplies the failure, so this set is deliberately
32
+ * narrow: connection-level Node socket errors plus the mysql2 protocol codes for a lost or
33
+ * exhausted connection.
34
+ */
35
+ export declare const RETRYABLE_ERROR_CODES: ReadonlySet<string>;
36
+ /**
37
+ * Backoff delay for attempt `n` (0-based), doubling from `base` and clamped to `max`.
38
+ */
39
+ export declare function backoffDelay(attempt: number, base: number, max: number): number;
40
+ /**
41
+ * Promise-returning sleep used by the retry loop.
42
+ */
43
+ export declare function delay(ms: number): Promise<void>;
44
+ /**
45
+ * Walks an error and its `inner` / `cause` chain looking for a retryable code. Driver errors are
46
+ * frequently wrapped ( OrmException carries the original in `inner` ), so a shallow check misses
47
+ * exactly the cases that matter.
48
+ */
49
+ export declare function isRetryableErrorCode(err: unknown): boolean;
50
+ //# sourceMappingURL=resilience.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resilience.d.ts","sourceRoot":"","sources":["../../src/resilience.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,eAAe;IACzB,YAAY,iBAAiB;IAC7B,UAAU,eAAe;IACzB,SAAS,cAAc;IAEvB,0FAA0F;IAC1F,QAAQ,aAAa;CACtB;AAED,MAAM,WAAW,4BAA4B;IAC3C;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAepD,CAAC;AAEH;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAe1D"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Lifecycle state of a driver's connection to its database.
3
+ */
4
+ export var ConnectionState;
5
+ (function (ConnectionState) {
6
+ ConnectionState["Disconnected"] = "disconnected";
7
+ ConnectionState["Connecting"] = "connecting";
8
+ ConnectionState["Connected"] = "connected";
9
+ /** Reachable but failing health probes, or mid-reconnect. Queries are still attempted. */
10
+ ConnectionState["Degraded"] = "degraded";
11
+ })(ConnectionState || (ConnectionState = {}));
12
+ /**
13
+ * Error codes that mean the transport died rather than the statement being wrong. Retrying a
14
+ * statement that the server rejected only multiplies the failure, so this set is deliberately
15
+ * narrow: connection-level Node socket errors plus the mysql2 protocol codes for a lost or
16
+ * exhausted connection.
17
+ */
18
+ export const RETRYABLE_ERROR_CODES = new Set([
19
+ 'ECONNRESET',
20
+ 'ECONNREFUSED',
21
+ 'EPIPE',
22
+ 'ETIMEDOUT',
23
+ 'EHOSTUNREACH',
24
+ 'ENETUNREACH',
25
+ 'ENOTFOUND',
26
+ 'PROTOCOL_CONNECTION_LOST',
27
+ 'PROTOCOL_SEQUENCE_TIMEOUT',
28
+ 'PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR',
29
+ 'PROTOCOL_ENQUEUE_AFTER_QUIT',
30
+ 'ER_CON_COUNT_ERROR',
31
+ 'ER_LOCK_WAIT_TIMEOUT',
32
+ 'SQLITE_BUSY',
33
+ ]);
34
+ /**
35
+ * Backoff delay for attempt `n` (0-based), doubling from `base` and clamped to `max`.
36
+ */
37
+ export function backoffDelay(attempt, base, max) {
38
+ return Math.min(base * Math.pow(2, attempt), max);
39
+ }
40
+ /**
41
+ * Promise-returning sleep used by the retry loop.
42
+ */
43
+ export function delay(ms) {
44
+ return new Promise((resolve) => setTimeout(resolve, ms));
45
+ }
46
+ /**
47
+ * Walks an error and its `inner` / `cause` chain looking for a retryable code. Driver errors are
48
+ * frequently wrapped ( OrmException carries the original in `inner` ), so a shallow check misses
49
+ * exactly the cases that matter.
50
+ */
51
+ export function isRetryableErrorCode(err) {
52
+ let current = err;
53
+ let depth = 0;
54
+ while (current && depth < 5) {
55
+ const code = current.code ?? current.errno;
56
+ if (typeof code === 'string' && RETRYABLE_ERROR_CODES.has(code)) {
57
+ return true;
58
+ }
59
+ current = current.inner ?? current.cause;
60
+ depth++;
61
+ }
62
+ return false;
63
+ }
64
+ //# sourceMappingURL=resilience.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resilience.js","sourceRoot":"","sources":["../../src/resilience.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAN,IAAY,eAOX;AAPD,WAAY,eAAe;IACzB,gDAA6B,CAAA;IAC7B,4CAAyB,CAAA;IACzB,0CAAuB,CAAA;IAEvB,0FAA0F;IAC1F,wCAAqB,CAAA;AACvB,CAAC,EAPW,eAAe,KAAf,eAAe,QAO1B;AAwBD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAwB,IAAI,GAAG,CAAC;IAChE,YAAY;IACZ,cAAc;IACd,OAAO;IACP,WAAW;IACX,cAAc;IACd,aAAa;IACb,WAAW;IACX,0BAA0B;IAC1B,2BAA2B;IAC3B,oCAAoC;IACpC,6BAA6B;IAC7B,oBAAoB;IACpB,sBAAsB;IACtB,aAAa;CACd,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,IAAY,EAAE,GAAW;IACrE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAY;IAC/C,IAAI,OAAO,GAAQ,GAAG,CAAC;IACvB,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,OAAO,OAAO,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC;QAC3C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAChE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;QACzC,KAAK,EAAE,CAAC;IACV,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { IModelDescriptor, IValueConverter } from './interfaces.js';
2
+ /**
3
+ * The diff baseline for one model instance.
4
+ *
5
+ * `Columns` holds a *value copy* of every column at the moment the model was hydrated from
6
+ * the database. `Relations` holds, per relation name, the primary keys of the members that
7
+ * were present when that relation was populated.
8
+ *
9
+ * Both must be copies. If a snapshot aliases live state, a later mutation changes the
10
+ * baseline as well, the diff is empty, and `save()` silently does nothing.
11
+ */
12
+ export interface IModelSnapshot {
13
+ Columns: Map<string, unknown>;
14
+ Relations: Map<string, unknown[]>;
15
+ }
16
+ export declare function createSnapshot(): IModelSnapshot;
17
+ /**
18
+ * Marker held in a snapshot in place of a value the ORM cannot copy.
19
+ *
20
+ * A baseline that ALIASES a mutable object is the worst possible answer: the baseline
21
+ * mutates along with the model, the diff comes out empty, and `save()` silently drops the
22
+ * caller's edit. This marker is never equal to anything, so such a column is reported as
23
+ * changed on every save — a redundant write instead of a lost one. A converter opts out of
24
+ * the redundancy by implementing `snapshotValue` / `snapshotEquals`.
25
+ */
26
+ export declare const UNCOPYABLE: unique symbol;
27
+ /**
28
+ * Takes a value copy suitable for a diff baseline.
29
+ *
30
+ * Immutable values (primitives, luxon `DateTime`) are returned as-is. Everything the ORM can
31
+ * put in a column and that can be mutated in place — `Buffer` (binary/UUID columns), `Date`,
32
+ * arrays and plain objects (JSON columns) — is copied.
33
+ *
34
+ * A mutable instance of a class the ORM does not own cannot be copied safely: cloning it
35
+ * could break its invariants. Such a value is replaced by {@link UNCOPYABLE} unless its
36
+ * column's converter supplies a `snapshotValue` hook.
37
+ *
38
+ * @param value - the in-memory column value
39
+ * @param converter - the column's converter, when it has one
40
+ */
41
+ export declare function snapshotValue(value: unknown, converter?: IValueConverter | null): unknown;
42
+ /**
43
+ * Value equality for a diff. Deliberately stricter than `==`: `null` and `undefined` are
44
+ * different (one is "explicitly cleared", the other "never set"), and `0`/`''`/`false` are
45
+ * never equal to each other.
46
+ *
47
+ * @param a - baseline value
48
+ * @param b - current value
49
+ * @param converter - the column's converter, when it has one
50
+ */
51
+ export declare function snapshotEquals(a: unknown, b: unknown, converter?: IValueConverter | null): boolean;
52
+ /**
53
+ * Builds a column snapshot straight from a raw database row, applying the same converters
54
+ * hydration applies. Used by `save({ reload: true })`, which needs the *database's* current
55
+ * values as the baseline without disturbing the user's in-memory edits.
56
+ */
57
+ export declare function snapshotFromRow(descriptor: IModelDescriptor, row: Record<string, unknown>): Map<string, unknown>;
58
+ //# sourceMappingURL=snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/snapshot.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEpE;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;CACnC;AAED,wBAAgB,cAAc,IAAI,cAAc,CAK/C;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,eAA4C,CAAC;AAEpE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,eAAe,GAAG,IAAI,GAAG,OAAO,CA+BzF;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,eAAe,GAAG,IAAI,GAAG,OAAO,CAoClG;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAgBhH"}
@@ -0,0 +1,115 @@
1
+ /* eslint-disable prettier/prettier */
2
+ import _ from 'lodash';
3
+ import { DateTime } from 'luxon';
4
+ export function createSnapshot() {
5
+ return {
6
+ Columns: new Map(),
7
+ Relations: new Map(),
8
+ };
9
+ }
10
+ /**
11
+ * Marker held in a snapshot in place of a value the ORM cannot copy.
12
+ *
13
+ * A baseline that ALIASES a mutable object is the worst possible answer: the baseline
14
+ * mutates along with the model, the diff comes out empty, and `save()` silently drops the
15
+ * caller's edit. This marker is never equal to anything, so such a column is reported as
16
+ * changed on every save — a redundant write instead of a lost one. A converter opts out of
17
+ * the redundancy by implementing `snapshotValue` / `snapshotEquals`.
18
+ */
19
+ export const UNCOPYABLE = Symbol('spinajs.orm.snapshot.uncopyable');
20
+ /**
21
+ * Takes a value copy suitable for a diff baseline.
22
+ *
23
+ * Immutable values (primitives, luxon `DateTime`) are returned as-is. Everything the ORM can
24
+ * put in a column and that can be mutated in place — `Buffer` (binary/UUID columns), `Date`,
25
+ * arrays and plain objects (JSON columns) — is copied.
26
+ *
27
+ * A mutable instance of a class the ORM does not own cannot be copied safely: cloning it
28
+ * could break its invariants. Such a value is replaced by {@link UNCOPYABLE} unless its
29
+ * column's converter supplies a `snapshotValue` hook.
30
+ *
31
+ * @param value - the in-memory column value
32
+ * @param converter - the column's converter, when it has one
33
+ */
34
+ export function snapshotValue(value, converter) {
35
+ if (converter?.snapshotValue) {
36
+ return converter.snapshotValue(value);
37
+ }
38
+ if (value === null || value === undefined) {
39
+ return value;
40
+ }
41
+ if (typeof value !== 'object') {
42
+ return value;
43
+ }
44
+ if (DateTime.isDateTime(value)) {
45
+ // luxon DateTime is immutable; every "mutation" returns a new instance.
46
+ return value;
47
+ }
48
+ if (Buffer.isBuffer(value)) {
49
+ return Buffer.from(value);
50
+ }
51
+ if (value instanceof Date) {
52
+ return new Date(value.getTime());
53
+ }
54
+ if (Array.isArray(value) || _.isPlainObject(value)) {
55
+ return _.cloneDeep(value);
56
+ }
57
+ return UNCOPYABLE;
58
+ }
59
+ /**
60
+ * Value equality for a diff. Deliberately stricter than `==`: `null` and `undefined` are
61
+ * different (one is "explicitly cleared", the other "never set"), and `0`/`''`/`false` are
62
+ * never equal to each other.
63
+ *
64
+ * @param a - baseline value
65
+ * @param b - current value
66
+ * @param converter - the column's converter, when it has one
67
+ */
68
+ export function snapshotEquals(a, b, converter) {
69
+ if (converter?.snapshotEquals) {
70
+ return converter.snapshotEquals(a, b);
71
+ }
72
+ // Set by `snapshotValue` for a value it could not copy. Never equal to anything, so the
73
+ // column is always reported as changed rather than silently never written.
74
+ if (a === UNCOPYABLE || b === UNCOPYABLE) {
75
+ return false;
76
+ }
77
+ if (a === b) {
78
+ return true;
79
+ }
80
+ if (a === null || a === undefined || b === null || b === undefined) {
81
+ return false;
82
+ }
83
+ if (DateTime.isDateTime(a) && DateTime.isDateTime(b)) {
84
+ return a.toMillis() === b.toMillis();
85
+ }
86
+ if (a instanceof Date && b instanceof Date) {
87
+ return a.getTime() === b.getTime();
88
+ }
89
+ if (Buffer.isBuffer(a) && Buffer.isBuffer(b)) {
90
+ return a.equals(b);
91
+ }
92
+ if (typeof a === 'object' && typeof b === 'object') {
93
+ return _.isEqual(a, b);
94
+ }
95
+ return false;
96
+ }
97
+ /**
98
+ * Builds a column snapshot straight from a raw database row, applying the same converters
99
+ * hydration applies. Used by `save({ reload: true })`, which needs the *database's* current
100
+ * values as the baseline without disturbing the user's in-memory edits.
101
+ */
102
+ export function snapshotFromRow(descriptor, row) {
103
+ const columns = new Map();
104
+ for (const c of descriptor.Columns ?? []) {
105
+ if (!(c.Name in row)) {
106
+ continue;
107
+ }
108
+ // eslint-disable-next-line security/detect-object-injection
109
+ const raw = row[c.Name];
110
+ const converted = c.Converter ? c.Converter.fromDB(raw, row, descriptor.Converters.get(c.Name)?.Options) : raw;
111
+ columns.set(c.Name, snapshotValue(converted, c.Converter));
112
+ }
113
+ return columns;
114
+ }
115
+ //# sourceMappingURL=snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/snapshot.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { IJoinStatementOptions } from './interfaces.js';
2
2
  import type { SelectQueryBuilder, WhereBuilder, RawQuery, QueryBuilder } from './builders.js';
3
- import { ColumnMethods, SqlOperator } from './enums.js';
3
+ import { ColumnMethods, SqlOperator, WhereBoolean } from './enums.js';
4
4
  import { Container, Class, Constructor, IContainer } from '@spinajs/di';
5
5
  import { IColumnDescriptor } from './interfaces.js';
6
6
  import { ModelBase } from './model.js';
@@ -11,13 +11,23 @@ export interface IQueryStatementResult {
11
11
  }
12
12
  export interface IQueryStatement {
13
13
  TableAlias: string;
14
+ /**
15
+ * Boolean connector that precedes this statement inside a WHERE/HAVING clause.
16
+ * The very first statement in a clause has no leading connector (the value is
17
+ * ignored). Subsequent statements are joined by their own connector, so
18
+ * `where(a).where(b).orWhere(c)` compiles to `a AND b OR c`.
19
+ */
20
+ Boolean: WhereBoolean;
14
21
  build(): IQueryStatementResult;
15
22
  clone(parent?: QueryBuilder | SelectQueryBuilder | WhereBuilder<any>): IQueryStatement;
16
23
  }
17
24
  export declare abstract class QueryStatement implements IQueryStatement {
18
25
  protected _tableAlias: string | undefined;
26
+ protected _boolean: WhereBoolean;
19
27
  get TableAlias(): string;
20
28
  set TableAlias(alias: string);
29
+ get Boolean(): WhereBoolean;
30
+ set Boolean(op: WhereBoolean);
21
31
  constructor(tableAlias?: string | null);
22
32
  abstract build(): IQueryStatementResult;
23
33
  abstract clone<T extends QueryBuilder | SelectQueryBuilder | WhereBuilder<any>>(parent?: T): IQueryStatement;
@@ -1 +1 @@
1
- {"version":3,"file":"statements.d.ts","sourceRoot":"","sources":["../../src/statements.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"statements.d.ts","sourceRoot":"","sources":["../../src/statements.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
- import { ColumnMethods, SqlOperator } from './enums.js';
10
+ import { ColumnMethods, SqlOperator, WhereBoolean } from './enums.js';
11
11
  import { NewInstance, Container, Inject } from '@spinajs/di';
12
12
  import _ from 'lodash';
13
13
  import { Lazy } from '@spinajs/util';
@@ -20,7 +20,14 @@ export class QueryStatement {
20
20
  set TableAlias(alias) {
21
21
  this._tableAlias = alias;
22
22
  }
23
+ get Boolean() {
24
+ return this._boolean;
25
+ }
26
+ set Boolean(op) {
27
+ this._boolean = op;
28
+ }
23
29
  constructor(tableAlias) {
30
+ this._boolean = WhereBoolean.AND;
24
31
  this._tableAlias = tableAlias ?? undefined;
25
32
  }
26
33
  }
@@ -127,7 +134,7 @@ let WhereStatement = class WhereStatement extends QueryStatement {
127
134
  const columnDesc = columnName && desc ? desc.Columns.find((x) => x.Name === columnName) : null;
128
135
  // Allow primary key columns and any model property even if not explicitly in Columns array
129
136
  // Some properties may be defined without decorators or only with @Primary
130
- if (columnName && !columnDesc && columnName !== desc?.PrimaryKey && !(columnName in this._model.prototype)) {
137
+ if (columnName && !columnDesc && !desc?.PrimaryKey.includes(columnName) && !(columnName in this._model.prototype)) {
131
138
  throw new InvalidArgument(`column ${columnName} not exists in model ${this._model.name}`);
132
139
  }
133
140
  this._isAggregate = columnDesc?.Aggregate ?? false;
@@ -187,7 +194,11 @@ let JoinStatement = class JoinStatement extends QueryStatement {
187
194
  if (_options.queryCallback) {
188
195
  _options.queryCallback.call(this._whereBuilder);
189
196
  }
190
- this._options.builder.mergeBuilder(this._whereBuilder);
197
+ // Merge columns/sort from the join sub-builder, but NOT its WHERE
198
+ // statements — those are emitted in the JOIN's ON clause by build() so a
199
+ // LEFT JOIN stays a LEFT JOIN (otherwise the condition lands in the main
200
+ // WHERE and filters out rows the outer join is meant to keep).
201
+ this._options.builder.mergeBuilder(this._whereBuilder, false);
191
202
  }
192
203
  }
193
204
  };
@@ -1 +1 @@
1
- {"version":3,"file":"statements.js","sourceRoot":"","sources":["../../src/statements.ts"],"names":[],"mappings":";;;;;;;;;AAEA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAsB,MAAM,EAAc,MAAM,aAAa,CAAC;AAC7F,OAAO,CAAC,MAAM,QAAQ,CAAC;AAGvB,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAezD,MAAM,OAAgB,cAAc;IAGlC,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;IAChC,CAAC;IAED,IAAW,UAAU,CAAC,KAAa;QACjC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,YAAY,UAA0B;QACpC,IAAI,CAAC,WAAW,GAAG,UAAU,IAAI,SAAS,CAAC;IAC7C,CAAC;CAKF;AAGM,IAAe,iBAAiB,GAAhC,MAAe,iBAAkB,SAAQ,cAAc;IAI5D,YAAY,KAAa,EAAE,QAAgB;QACzC,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,QAAQ,IAAI,EAAE,CAAC;IAClC,CAAC;CAGF,CAAA;AAZqB,iBAAiB;IADtC,WAAW,EAAE;;GACQ,iBAAiB,CAYtC;;AAIM,IAAe,sBAAsB,GAArC,MAAe,sBAAuB,SAAQ,cAAc;IACjE,YAAsB,SAAqB,EAAY,KAAa,EAAY,MAA0B,EAAY,UAAkB,EAAY,OAAe;QACjK,KAAK,CAAC,IAAI,CAAC,CAAC;QADQ,cAAS,GAAT,SAAS,CAAY;QAAY,UAAK,GAAL,KAAK,CAAQ;QAAY,WAAM,GAAN,MAAM,CAAoB;QAAY,eAAU,GAAV,UAAU,CAAQ;QAAY,YAAO,GAAP,OAAO,CAAQ;IAEnK,CAAC;CAGF,CAAA;AANqB,sBAAsB;IAF3C,WAAW,EAAE;IACb,MAAM,CAAC,SAAS,CAAC;;GACI,sBAAsB,CAM3C;;AAEM,IAAe,gBAAgB,GAA/B,MAAe,gBAAiB,SAAQ,cAAc;IAG3D,YAAY,UAA6B,EAAE,UAAkB;QAC3D,KAAK,CAAC,UAAU,CAAC,CAAC;QAElB,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;IAC1B,CAAC;CAGF,CAAA;AAVqB,gBAAgB;IADrC,WAAW,EAAE;;GACQ,gBAAgB,CAUrC;;AAGM,IAAe,gBAAgB,GAA/B,MAAe,gBAAiB,SAAQ,cAAc;IAK3D,YAAY,MAAc,EAAE,GAAU,EAAE,GAAY,EAAE,UAAkB;QACtE,KAAK,CAAC,UAAU,CAAC,CAAC;QAElB,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,EAAE,CAAC;IAC9B,CAAC;CAGF,CAAA;AAdqB,gBAAgB;IADrC,WAAW,EAAE;;GACQ,gBAAgB,CAcrC;;AAEM,IAAe,mBAAmB,GAAlC,MAAe,mBAAoB,SAAQ,cAAc;IAG9D,YAAY,OAA0B;QACpC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;CAGF,CAAA;AATqB,mBAAmB;IADxC,WAAW,EAAE;;GACQ,mBAAmB,CASxC;;AAGM,IAAe,kBAAkB,GAAjC,MAAe,kBAAmB,SAAQ,cAAc;IAE7D,YAAsB,QAAuB,EAAY,OAAiB;QACxE,KAAK,EAAE,CAAC;QADY,aAAQ,GAAR,QAAQ,CAAe;QAAY,YAAO,GAAP,OAAO,CAAU;IAE1E,CAAC;CAGF,CAAA;AAPqB,kBAAkB;IADvC,WAAW,EAAE;qCAGoB,IAAI;GAFhB,kBAAkB,CAOvC;;AAGM,IAAe,cAAc,GAA7B,MAAe,cAAe,SAAQ,cAAc;IASzD,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAGD,YAAY,MAAqB,EAAE,QAAqB,EAAE,KAAU,EAAE,OAA8B;QAClG,KAAK,EAAE,CAAC;QArBA,iBAAY,GAAY,KAAK,CAAC;QAsBtC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAExB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,GAAG,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACjD,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YAC9D,MAAM,UAAU,GAAG,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAE/F,2FAA2F;YAC3F,0EAA0E;YAC1E,IAAI,UAAU,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,IAAI,EAAE,UAAU,IAAI,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3G,MAAM,IAAI,eAAe,CAAC,UAAU,UAAU,wBAAwB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5F,CAAC;YAED,IAAI,CAAC,YAAY,GAAG,UAAU,EAAE,SAAS,IAAI,KAAK,CAAC;QACrD,CAAC;IAEH,CAAC;CAGF,CAAA;AApDqB,cAAc;IADnC,WAAW,EAAE;;GACQ,cAAc,CAoDnC;;AAGM,IAAM,IAAI,GAAV,MAAM,IAAI;IAIf,YAAY,MAAc,EAAE,OAA6B;QACvD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF,CAAA;AARY,IAAI;IADhB,WAAW,EAAE;;GACD,IAAI,CAQhB;;AAGM,IAAe,aAAa,GAA5B,MAAe,aAAa;IAIjC,YAAY,KAAU,EAAE,UAAkB;QACxC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;CAGF,CAAA;AAVqB,aAAa;IADlC,WAAW,EAAE;;GACQ,aAAa,CAUlC;;AAGM,IAAe,WAAW,GAA1B,MAAe,WAAY,SAAQ,aAAa;CAAI,CAAA;AAArC,WAAW;IADhC,WAAW,EAAE;GACQ,WAAW,CAA0B;;AAGpD,IAAe,eAAe,GAA9B,MAAe,eAAgB,SAAQ,aAAa;CAAI,CAAA;AAAzC,eAAe;IADpC,WAAW,EAAE;GACQ,eAAe,CAA0B;;AAGxD,IAAe,aAAa,GAA5B,MAAe,aAAc,SAAQ,cAAc;IAOxD,YAAsB,QAA+B;QACnD,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QADb,aAAQ,GAAR,QAAQ,CAAuB;QAInD,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,YAAY,IAAI,CAAC,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;YAEjG,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACvE,MAAM,MAAM,GAAG,mBAAoB,CAAC,MAAO,CAAC;YAC5C,MAAM,SAAS,GAAG,mBAAoB,CAAC,MAAO,CAAC,SAAS,CAAC;YAEzD,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,OAAO,CAAqB,oBAAoB,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;YACrH,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,QAAS,CAAC,CAAC;YACtD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAS,CAAC,CAAC;YAE7C,IAAG,QAAQ,CAAC,aAAa,EAAC,CAAC;gBACzB,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAClD,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,OAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;CAGF,CAAA;AA9BqB,aAAa;IADlC,WAAW,EAAE;;GACQ,aAAa,CA8BlC;;AAGM,IAAe,WAAW,GAA1B,MAAe,WAAY,SAAQ,cAAc;IAMtD,YAAY,MAAc,EAAE,GAAU,EAAE,GAAY,EAAE,OAAgC;QACpF,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;CAGF,CAAA;AAhBqB,WAAW;IADhC,WAAW,EAAE;;GACQ,WAAW,CAgBhC;;AAGM,IAAe,oBAAoB,GAAnC,MAAe,oBAAqB,SAAQ,cAAc;IAE/D,YAAY,OAA2B,EAAE,UAAmB;QAC1D,KAAK,CAAC,UAAU,CAAC,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;CAGF,CAAA;AARqB,oBAAoB;IADzC,WAAW,EAAE;;GACQ,oBAAoB,CAQzC;;AAGM,IAAe,oBAAoB,GAAnC,MAAe,oBAAqB,SAAQ,oBAAoB;IAGrE,YAAY,OAA2B,EAAE,GAAY;QACnD,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC;IAC3B,CAAC;CAGF,CAAA;AAVqB,oBAAoB;IADzC,WAAW,EAAE;;GACQ,oBAAoB,CAUzC;;AAGM,IAAe,cAAc,GAA7B,MAAe,cAAe,SAAQ,cAAc;IAKzD,YAAY,MAAc,EAAE,GAAU,EAAE,GAAY,EAAE,UAAkB;QACtE,KAAK,CAAC,UAAU,CAAC,CAAC;QAElB,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,EAAE,CAAC;IAC9B,CAAC;CAGF,CAAA;AAdqB,cAAc;IADnC,WAAW,EAAE;;GACQ,cAAc,CAcnC;;AAEM,IAAe,eAAe,GAA9B,MAAe,eAAgB,SAAQ,cAAc;IAK1D,YAAY,MAAyB,EAAE,KAAa,EAAE,UAAkB,EAAE,UAAgD;QACxH,KAAK,CAAC,UAAU,CAAC,CAAC;QAElB,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAED,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;IAChC,CAAC;IAED,IAAW,UAAU,CAAC,KAAa;QACjC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,IAAI,UAAU;QACZ,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACjD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,IAAK,IAAI,CAAC,OAAe,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC;IAC9D,CAAC;CAGF,CAAA;AA3CqB,eAAe;IADpC,WAAW,EAAE;;GACQ,eAAe,CA2CpC;;AAED,MAAM,OAAgB,kBAAmB,SAAQ,cAAc;IAC7D,YAAmB,QAAkB;QACnC,KAAK,EAAE,CAAC;QADS,aAAQ,GAAR,QAAQ,CAAU;IAErC,CAAC;CAGF;AAGM,IAAe,qBAAqB,GAApC,MAAe,qBAAsB,SAAQ,eAAe;IAGjE,YAAY,MAAyB,EAAE,MAAqB,EAAE,KAAa,EAAE,UAAkB;QAC7F,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;CAGF,CAAA;AATqB,qBAAqB;IAD1C,WAAW,EAAE;;GACQ,qBAAqB,CAS1C"}
1
+ {"version":3,"file":"statements.js","sourceRoot":"","sources":["../../src/statements.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import { IIdentityMap } from './interfaces.js';
2
+ import type { ModelBase } from './model.js';
3
+ import { Subject, SubjectSet } from './subject.js';
4
+ /**
5
+ * Turns a mutated object graph into a `SubjectSet` — the complete, unordered description of
6
+ * what one `save()` must do.
7
+ *
8
+ * Traversal rules:
9
+ *
10
+ * - a `belongsTo` is followed whenever its `Value` is set, populated or not, because
11
+ * attaching a model to it is an explicit act;
12
+ * - a `hasMany` or `manyToMany` is followed **only when `Populated` is true**, so a relation
13
+ * the caller never loaded is invisible and `Items: OrderItem[] = []` on a freshly
14
+ * constructed model deletes nothing;
15
+ * - `Query` and `Virtual` relations are read-only projections and are never followed.
16
+ */
17
+ export declare class SubjectBuilder {
18
+ protected identityMap: IIdentityMap;
19
+ private _visited;
20
+ constructor(identityMap: IIdentityMap);
21
+ build(root: ModelBase): SubjectSet;
22
+ /**
23
+ * Walks the graph breadth-first from `root`, canonicalizing every model through the
24
+ * identity map so a row reached by two paths yields one instance.
25
+ *
26
+ * @param root - the model `save()` was called on
27
+ */
28
+ collect(root: ModelBase): ModelBase[];
29
+ /**
30
+ * Models directly reachable from `model` under the traversal rules.
31
+ */
32
+ protected relatedOf(model: ModelBase): ModelBase[];
33
+ /**
34
+ * Diffs each collected model against its snapshot and records its `belongsTo` foreign keys.
35
+ * hasMany, manyToMany and orphan handling are layered on by later passes.
36
+ *
37
+ * @param models - output of `collect()`
38
+ */
39
+ buildFrom(models: ModelBase[]): SubjectSet;
40
+ /**
41
+ * Records, for every `belongsTo` with a `Value`, that this subject's foreign-key column
42
+ * takes the target's primary key. The value is *not* read here — the target may not have
43
+ * been inserted yet; the executor resolves it immediately before the statement.
44
+ */
45
+ protected buildBelongsTo(subject: Subject): void;
46
+ /**
47
+ * Diffs each populated `hasMany` on `subject` against the owner's relation snapshot and
48
+ * records the owner's foreign key as pending on every member that stays.
49
+ *
50
+ * A relation with `Populated === false` is skipped entirely — that is the anti-footgun
51
+ * guarantee, and it is why a freshly constructed model with `Items: OrderItem[] = []`
52
+ * deletes nothing.
53
+ *
54
+ * Both new *and* kept members get the pending foreign key. That is what makes re-parenting
55
+ * work: a clean child moved to another owner has its key rewritten and is promoted from a
56
+ * no-op to an UPDATE, instead of keeping its old owner id in the database ( B20 ).
57
+ */
58
+ protected buildHasMany(subject: Subject, set: SubjectSet): void;
59
+ /**
60
+ * Diffs each populated `manyToMany` against the owner's relation snapshot into junction
61
+ * rows to create and destroy.
62
+ *
63
+ * Only the *junction* row is created or destroyed. A target that is new gets its own insert
64
+ * subject from `collect()` so its key exists before the junction row references it; a target
65
+ * that is merely unlinked is left completely alone — removing a tag from an order must
66
+ * never delete the tag.
67
+ */
68
+ protected buildManyToMany(subject: Subject, set: SubjectSet): void;
69
+ /**
70
+ * Turns every `hasMany` removal recorded during the diff into an orphan action.
71
+ *
72
+ * Runs once over the whole set rather than per relation, because the decision needs global
73
+ * information: a child removed from one owner and pushed onto another is a re-parent, not
74
+ * an orphan, and only a set-wide view can tell the two apart. Every key that has a live
75
+ * subject of the same target model in this graph is therefore subtracted.
76
+ */
77
+ protected buildOrphans(set: SubjectSet): void;
78
+ }
79
+ //# sourceMappingURL=subject-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subject-builder.d.ts","sourceRoot":"","sources":["../../src/subject-builder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAA8B,MAAM,iBAAiB,CAAC;AAC3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAI5C,OAAO,EAAgD,OAAO,EAAoB,UAAU,EAAE,MAAM,cAAc,CAAC;AAEnH;;;;;;;;;;;;GAYG;AACH,qBAAa,cAAc;IAGb,SAAS,CAAC,WAAW,EAAE,YAAY;IAF/C,OAAO,CAAC,QAAQ,CAAwB;gBAElB,WAAW,EAAE,YAAY;IAExC,KAAK,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU;IAIzC;;;;;OAKG;IACI,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,EAAE;IA2B5C;;OAEG;IACH,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,EAAE;IAuClD;;;;;OAKG;IACI,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU;IA+BjD;;;;OAIG;IACH,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAgBhD;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI;IAkC/D;;;;;;;;OAQG;IACH,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI;IA0ClE;;;;;;;OAOG;IACH,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI;CA0D9C"}