jazz-tools 0.20.8 → 0.20.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 (195) hide show
  1. package/.turbo/turbo-build.log +52 -52
  2. package/CHANGELOG.md +37 -0
  3. package/dist/better-auth/database-adapter/index.js +27 -8
  4. package/dist/better-auth/database-adapter/index.js.map +1 -1
  5. package/dist/better-auth/database-adapter/repository/generic.d.ts.map +1 -1
  6. package/dist/better-auth/database-adapter/repository/session.d.ts.map +1 -1
  7. package/dist/better-auth/database-adapter/repository/user.d.ts.map +1 -1
  8. package/dist/{chunk-G7AMZRMZ.js → chunk-YDZ264RU.js} +4957 -4569
  9. package/dist/chunk-YDZ264RU.js.map +1 -0
  10. package/dist/expo/index.js +34 -9
  11. package/dist/expo/index.js.map +1 -1
  12. package/dist/expo/storage/expo-sqlite-adapter.d.ts +7 -0
  13. package/dist/expo/storage/expo-sqlite-adapter.d.ts.map +1 -1
  14. package/dist/expo/tests/expo-sqlite-adapter.test.d.ts +2 -0
  15. package/dist/expo/tests/expo-sqlite-adapter.test.d.ts.map +1 -0
  16. package/dist/index.js +3 -5
  17. package/dist/index.js.map +1 -1
  18. package/dist/prosemirror/index.js +29 -1
  19. package/dist/prosemirror/index.js.map +1 -1
  20. package/dist/prosemirror/lib/recreateTransform.d.ts +11 -0
  21. package/dist/prosemirror/lib/recreateTransform.d.ts.map +1 -0
  22. package/dist/prosemirror/tests/recreateTransform.test.d.ts +2 -0
  23. package/dist/prosemirror/tests/recreateTransform.test.d.ts.map +1 -0
  24. package/dist/react-native/index.js +55 -14
  25. package/dist/react-native/index.js.map +1 -1
  26. package/dist/react-native/storage/op-sqlite-adapter.d.ts +7 -0
  27. package/dist/react-native/storage/op-sqlite-adapter.d.ts.map +1 -1
  28. package/dist/react-native-core/auth/auth.d.ts +1 -1
  29. package/dist/react-native-core/auth/auth.d.ts.map +1 -1
  30. package/dist/react-native-core/index.js +21 -6
  31. package/dist/react-native-core/index.js.map +1 -1
  32. package/dist/svelte/Provider.svelte +37 -0
  33. package/dist/svelte/Provider.svelte.d.ts.map +1 -1
  34. package/dist/testing.js +1 -1
  35. package/dist/tools/coValues/CoValueBase.d.ts.map +1 -1
  36. package/dist/tools/coValues/account.d.ts +8 -9
  37. package/dist/tools/coValues/account.d.ts.map +1 -1
  38. package/dist/tools/coValues/coFeed.d.ts +16 -27
  39. package/dist/tools/coValues/coFeed.d.ts.map +1 -1
  40. package/dist/tools/coValues/coList.d.ts +42 -42
  41. package/dist/tools/coValues/coList.d.ts.map +1 -1
  42. package/dist/tools/coValues/coMap.d.ts +29 -276
  43. package/dist/tools/coValues/coMap.d.ts.map +1 -1
  44. package/dist/tools/coValues/coPlainText.d.ts +4 -4
  45. package/dist/tools/coValues/coPlainText.d.ts.map +1 -1
  46. package/dist/tools/coValues/coVector.d.ts +2 -1
  47. package/dist/tools/coValues/coVector.d.ts.map +1 -1
  48. package/dist/tools/coValues/group.d.ts.map +1 -1
  49. package/dist/tools/coValues/interfaces.d.ts +18 -6
  50. package/dist/tools/coValues/interfaces.d.ts.map +1 -1
  51. package/dist/tools/coValues/profile.d.ts +2 -2
  52. package/dist/tools/coValues/profile.d.ts.map +1 -1
  53. package/dist/tools/coValues/schemaUnion.d.ts +6 -64
  54. package/dist/tools/coValues/schemaUnion.d.ts.map +1 -1
  55. package/dist/tools/exports.d.ts +1 -2
  56. package/dist/tools/exports.d.ts.map +1 -1
  57. package/dist/tools/implementation/createContext.d.ts.map +1 -1
  58. package/dist/tools/implementation/schemaRuntime.d.ts +36 -0
  59. package/dist/tools/implementation/schemaRuntime.d.ts.map +1 -0
  60. package/dist/tools/implementation/zodSchema/initializeBuiltinSchemas.d.ts +2 -0
  61. package/dist/tools/implementation/zodSchema/initializeBuiltinSchemas.d.ts.map +1 -0
  62. package/dist/tools/implementation/zodSchema/runtimeConverters/coValueSchemaTransformation.d.ts.map +1 -1
  63. package/dist/tools/implementation/zodSchema/runtimeConverters/schemaFieldToCoFieldDef.d.ts +3 -4
  64. package/dist/tools/implementation/zodSchema/runtimeConverters/schemaFieldToCoFieldDef.d.ts.map +1 -1
  65. package/dist/tools/implementation/zodSchema/schemaInvariant.d.ts +15 -0
  66. package/dist/tools/implementation/zodSchema/schemaInvariant.d.ts.map +1 -0
  67. package/dist/tools/implementation/zodSchema/schemaPermissions.d.ts +5 -0
  68. package/dist/tools/implementation/zodSchema/schemaPermissions.d.ts.map +1 -1
  69. package/dist/tools/implementation/zodSchema/schemaTypes/AccountSchema.d.ts +4 -1
  70. package/dist/tools/implementation/zodSchema/schemaTypes/AccountSchema.d.ts.map +1 -1
  71. package/dist/tools/implementation/zodSchema/schemaTypes/CoDiscriminatedUnionSchema.d.ts +2 -0
  72. package/dist/tools/implementation/zodSchema/schemaTypes/CoDiscriminatedUnionSchema.d.ts.map +1 -1
  73. package/dist/tools/implementation/zodSchema/schemaTypes/CoFeedSchema.d.ts +7 -9
  74. package/dist/tools/implementation/zodSchema/schemaTypes/CoFeedSchema.d.ts.map +1 -1
  75. package/dist/tools/implementation/zodSchema/schemaTypes/CoListSchema.d.ts +7 -9
  76. package/dist/tools/implementation/zodSchema/schemaTypes/CoListSchema.d.ts.map +1 -1
  77. package/dist/tools/implementation/zodSchema/schemaTypes/CoMapSchema.d.ts +11 -10
  78. package/dist/tools/implementation/zodSchema/schemaTypes/CoMapSchema.d.ts.map +1 -1
  79. package/dist/tools/implementation/zodSchema/schemaTypes/CoOptionalSchema.d.ts +3 -0
  80. package/dist/tools/implementation/zodSchema/schemaTypes/CoOptionalSchema.d.ts.map +1 -1
  81. package/dist/tools/implementation/zodSchema/schemaTypes/CoRecordSchema.d.ts +9 -1
  82. package/dist/tools/implementation/zodSchema/schemaTypes/CoRecordSchema.d.ts.map +1 -1
  83. package/dist/tools/implementation/zodSchema/schemaTypes/CoValueSchema.d.ts +2 -0
  84. package/dist/tools/implementation/zodSchema/schemaTypes/CoValueSchema.d.ts.map +1 -1
  85. package/dist/tools/implementation/zodSchema/schemaTypes/CoVectorSchema.d.ts +3 -1
  86. package/dist/tools/implementation/zodSchema/schemaTypes/CoVectorSchema.d.ts.map +1 -1
  87. package/dist/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.d.ts +3 -1
  88. package/dist/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.d.ts.map +1 -1
  89. package/dist/tools/implementation/zodSchema/schemaTypes/GroupSchema.d.ts +3 -0
  90. package/dist/tools/implementation/zodSchema/schemaTypes/GroupSchema.d.ts.map +1 -1
  91. package/dist/tools/implementation/zodSchema/schemaTypes/PlainTextSchema.d.ts +3 -1
  92. package/dist/tools/implementation/zodSchema/schemaTypes/PlainTextSchema.d.ts.map +1 -1
  93. package/dist/tools/implementation/zodSchema/schemaTypes/RichTextSchema.d.ts +3 -1
  94. package/dist/tools/implementation/zodSchema/schemaTypes/RichTextSchema.d.ts.map +1 -1
  95. package/dist/tools/implementation/zodSchema/schemaTypes/schemaValidators.d.ts +18 -0
  96. package/dist/tools/implementation/zodSchema/schemaTypes/schemaValidators.d.ts.map +1 -0
  97. package/dist/tools/implementation/zodSchema/unionUtils.d.ts.map +1 -1
  98. package/dist/tools/implementation/zodSchema/validationSettings.d.ts +68 -0
  99. package/dist/tools/implementation/zodSchema/validationSettings.d.ts.map +1 -0
  100. package/dist/tools/implementation/zodSchema/zodCo.d.ts +1 -1
  101. package/dist/tools/implementation/zodSchema/zodCo.d.ts.map +1 -1
  102. package/dist/tools/internal.d.ts +3 -1
  103. package/dist/tools/internal.d.ts.map +1 -1
  104. package/dist/tools/testing.d.ts +3 -3
  105. package/dist/tools/testing.d.ts.map +1 -1
  106. package/dist/tools/tests/runtimeValidation.test.d.ts +2 -0
  107. package/dist/tools/tests/runtimeValidation.test.d.ts.map +1 -0
  108. package/dist/tools/tests/schemaInvariant.test.d.ts +2 -0
  109. package/dist/tools/tests/schemaInvariant.test.d.ts.map +1 -0
  110. package/dist/tools/tests/utils.d.ts +2 -0
  111. package/dist/tools/tests/utils.d.ts.map +1 -1
  112. package/package.json +4 -5
  113. package/src/better-auth/database-adapter/repository/generic.ts +9 -3
  114. package/src/better-auth/database-adapter/repository/session.ts +10 -4
  115. package/src/better-auth/database-adapter/repository/user.ts +8 -1
  116. package/src/better-auth/database-adapter/tests/index.test.ts +1 -1
  117. package/src/better-auth/database-adapter/tests/repository/user.test.ts +0 -55
  118. package/src/browser/tests/createInviteLink.test.ts +1 -1
  119. package/src/expo/provider.tsx +1 -1
  120. package/src/expo/storage/expo-sqlite-adapter.ts +34 -7
  121. package/src/expo/tests/expo-sqlite-adapter.test.ts +41 -0
  122. package/src/prosemirror/lib/recreateTransform.ts +48 -0
  123. package/src/prosemirror/lib/sync.ts +1 -1
  124. package/src/prosemirror/tests/recreateTransform.test.ts +228 -0
  125. package/src/react/tests/useAcceptInvite.test.ts +1 -1
  126. package/src/react-core/tests/useCoState.test.ts +1 -1
  127. package/src/react-native/provider.tsx +1 -1
  128. package/src/react-native/storage/op-sqlite-adapter.ts +34 -8
  129. package/src/react-native-core/auth/auth.ts +26 -7
  130. package/src/svelte/Provider.svelte +37 -0
  131. package/src/tools/coValues/CoValueBase.ts +2 -1
  132. package/src/tools/coValues/account.ts +39 -56
  133. package/src/tools/coValues/coFeed.ts +104 -62
  134. package/src/tools/coValues/coList.ts +183 -110
  135. package/src/tools/coValues/coMap.ts +130 -107
  136. package/src/tools/coValues/coPlainText.ts +19 -5
  137. package/src/tools/coValues/coVector.ts +17 -3
  138. package/src/tools/coValues/group.ts +1 -0
  139. package/src/tools/coValues/interfaces.ts +58 -14
  140. package/src/tools/coValues/profile.ts +3 -4
  141. package/src/tools/coValues/schemaUnion.ts +33 -91
  142. package/src/tools/exports.ts +1 -2
  143. package/src/tools/implementation/createContext.ts +3 -0
  144. package/src/tools/implementation/schemaRuntime.ts +140 -0
  145. package/src/tools/implementation/zodSchema/initializeBuiltinSchemas.ts +9 -0
  146. package/src/tools/implementation/zodSchema/runtimeConverters/coValueSchemaTransformation.ts +54 -82
  147. package/src/tools/implementation/zodSchema/runtimeConverters/schemaFieldToCoFieldDef.ts +168 -176
  148. package/src/tools/implementation/zodSchema/schemaInvariant.ts +54 -0
  149. package/src/tools/implementation/zodSchema/schemaPermissions.ts +28 -4
  150. package/src/tools/implementation/zodSchema/schemaTypes/AccountSchema.ts +20 -0
  151. package/src/tools/implementation/zodSchema/schemaTypes/CoDiscriminatedUnionSchema.ts +22 -0
  152. package/src/tools/implementation/zodSchema/schemaTypes/CoFeedSchema.ts +49 -11
  153. package/src/tools/implementation/zodSchema/schemaTypes/CoListSchema.ts +49 -14
  154. package/src/tools/implementation/zodSchema/schemaTypes/CoMapSchema.ts +105 -13
  155. package/src/tools/implementation/zodSchema/schemaTypes/CoOptionalSchema.ts +13 -0
  156. package/src/tools/implementation/zodSchema/schemaTypes/CoRecordSchema.ts +13 -2
  157. package/src/tools/implementation/zodSchema/schemaTypes/CoValueSchema.ts +4 -0
  158. package/src/tools/implementation/zodSchema/schemaTypes/CoVectorSchema.ts +22 -1
  159. package/src/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.ts +13 -1
  160. package/src/tools/implementation/zodSchema/schemaTypes/GroupSchema.ts +13 -0
  161. package/src/tools/implementation/zodSchema/schemaTypes/PlainTextSchema.ts +21 -1
  162. package/src/tools/implementation/zodSchema/schemaTypes/RichTextSchema.ts +21 -1
  163. package/src/tools/implementation/zodSchema/schemaTypes/schemaValidators.ts +137 -0
  164. package/src/tools/implementation/zodSchema/unionUtils.ts +17 -14
  165. package/src/tools/implementation/zodSchema/validationSettings.ts +113 -0
  166. package/src/tools/implementation/zodSchema/zodCo.ts +1 -1
  167. package/src/tools/internal.ts +3 -1
  168. package/src/tools/subscribe/SubscriptionScope.ts +1 -1
  169. package/src/tools/tests/coDiscriminatedUnion.test.ts +377 -4
  170. package/src/tools/tests/coFeed.test-d.ts +22 -0
  171. package/src/tools/tests/coFeed.test.ts +270 -1
  172. package/src/tools/tests/coList.test-d.ts +22 -0
  173. package/src/tools/tests/coList.test.ts +694 -4
  174. package/src/tools/tests/coMap.record.test.ts +238 -3
  175. package/src/tools/tests/coMap.test-d.ts +33 -0
  176. package/src/tools/tests/coMap.test.ts +610 -16
  177. package/src/tools/tests/coMap.unique.test.ts +45 -0
  178. package/src/tools/tests/coOptional.test.ts +14 -1
  179. package/src/tools/tests/deepLoading.test.ts +4 -2
  180. package/src/tools/tests/group.test.ts +77 -0
  181. package/src/tools/tests/load.test.ts +30 -0
  182. package/src/tools/tests/patterns/quest.test.ts +15 -10
  183. package/src/tools/tests/runtimeValidation.test.ts +438 -0
  184. package/src/tools/tests/schemaInvariant.test.ts +37 -0
  185. package/src/tools/tests/schemaUnion.test.ts +1 -1
  186. package/src/tools/tests/subscribe.test.ts +4 -1
  187. package/src/tools/tests/utils.ts +42 -1
  188. package/testSetup.ts +2 -0
  189. package/dist/chunk-G7AMZRMZ.js.map +0 -1
  190. package/dist/tools/implementation/schema.d.ts +0 -100
  191. package/dist/tools/implementation/schema.d.ts.map +0 -1
  192. package/dist/tools/tests/schema.test.d.ts +0 -2
  193. package/dist/tools/tests/schema.test.d.ts.map +0 -1
  194. package/src/tools/implementation/schema.ts +0 -273
  195. package/src/tools/tests/schema.test.ts +0 -244
@@ -1,5 +1,5 @@
1
1
 
2
- > jazz-tools@0.20.8 build /home/runner/_work/jazz/jazz/packages/jazz-tools
2
+ > jazz-tools@0.20.10 build /home/runner/_work/jazz/jazz/packages/jazz-tools
3
3
  > tsup && pnpm types && pnpm build:svelte && pnpm build:better-auth-svelte
4
4
 
5
5
  CLI Building entry: {"index":"src/index.ts","testing":"src/testing.ts","tools/ssr":"src/tools/ssr/index.ts"}
@@ -109,21 +109,21 @@
109
109
  ESM Build start
110
110
  ESM dist/tiptap/index.js 564.00 B
111
111
  ESM dist/tiptap/index.js.map 1.21 KB
112
- ESM ⚡️ Build success in 31ms
113
- ESM dist/worker/index.js 3.45 KB
114
- ESM dist/worker/edge-wasm.js 259.00 B
115
- ESM dist/worker/napi-crypto.js 110.00 B
116
- ESM dist/worker/index.js.map 6.97 KB
117
- ESM dist/worker/edge-wasm.js.map 505.00 B
118
- ESM dist/worker/napi-crypto.js.map 162.00 B
119
- ESM ⚡️ Build success in 30ms
112
+ ESM ⚡️ Build success in 39ms
120
113
  ESM dist/better-auth/auth/client.js 4.54 KB
121
114
  ESM dist/better-auth/auth/server.js 8.40 KB
122
115
  ESM dist/better-auth/auth/react.js 813.00 B
123
116
  ESM dist/better-auth/auth/client.js.map 8.44 KB
124
117
  ESM dist/better-auth/auth/server.js.map 15.40 KB
125
118
  ESM dist/better-auth/auth/react.js.map 2.07 KB
126
- ESM ⚡️ Build success in 29ms
119
+ ESM ⚡️ Build success in 33ms
120
+ ESM dist/worker/index.js 3.45 KB
121
+ ESM dist/worker/edge-wasm.js 259.00 B
122
+ ESM dist/worker/napi-crypto.js 110.00 B
123
+ ESM dist/worker/index.js.map 6.97 KB
124
+ ESM dist/worker/edge-wasm.js.map 505.00 B
125
+ ESM dist/worker/napi-crypto.js.map 162.00 B
126
+ ESM ⚡️ Build success in 44ms
127
127
  ESM dist/media/index.js 236.00 B
128
128
  ESM dist/media/index.browser.js 2.79 KB
129
129
  ESM dist/media/index.native.js 4.02 KB
@@ -134,85 +134,85 @@
134
134
  ESM dist/media/index.native.js.map 8.13 KB
135
135
  ESM dist/media/index.server.js.map 6.37 KB
136
136
  ESM dist/media/chunk-IRL3KNPO.js.map 17.00 KB
137
- ESM ⚡️ Build success in 37ms
137
+ ESM ⚡️ Build success in 50ms
138
138
  ESM dist/react-core/index.js 17.87 KB
139
139
  ESM dist/react-core/testing.js 904.00 B
140
140
  ESM dist/react-core/chunk-UOYH6JFJ.js 189.00 B
141
141
  ESM dist/react-core/index.js.map 58.59 KB
142
142
  ESM dist/react-core/testing.js.map 1.34 KB
143
143
  ESM dist/react-core/chunk-UOYH6JFJ.js.map 363.00 B
144
- ESM ⚡️ Build success in 47ms
145
- ESM dist/browser/index.js 15.96 KB
146
- ESM dist/browser/index.js.map 34.06 KB
147
- ESM ⚡️ Build success in 51ms
148
- ESM dist/better-auth/database-adapter/index.js 26.65 KB
149
- ESM dist/better-auth/database-adapter/index.js.map 58.27 KB
150
- ESM ⚡️ Build success in 41ms
151
- ESM dist/prosemirror/index.js 77.76 KB
152
- ESM dist/prosemirror/index.js.map 307.20 KB
153
- ESM ⚡️ Build success in 56ms
154
- ESM dist/expo/index.js 4.86 KB
144
+ ESM ⚡️ Build success in 50ms
145
+ ESM dist/expo/index.js 5.65 KB
155
146
  ESM dist/expo/testing.js 112.00 B
156
147
  ESM dist/expo/polyfills.js 858.00 B
157
- ESM dist/expo/index.js.map 10.59 KB
148
+ ESM dist/expo/index.js.map 11.85 KB
158
149
  ESM dist/expo/testing.js.map 168.00 B
159
150
  ESM dist/expo/polyfills.js.map 1.61 KB
160
- ESM ⚡️ Build success in 51ms
161
- ESM dist/react-native-core/index.js 34.14 KB
151
+ ESM ⚡️ Build success in 44ms
152
+ ESM dist/better-auth/database-adapter/index.js 26.86 KB
153
+ ESM dist/better-auth/database-adapter/index.js.map 58.67 KB
154
+ ESM ⚡️ Build success in 56ms
155
+ ESM dist/browser/index.js 15.96 KB
156
+ ESM dist/browser/index.js.map 34.06 KB
157
+ ESM ⚡️ Build success in 72ms
158
+ ESM dist/prosemirror/index.js 78.48 KB
159
+ ESM dist/prosemirror/index.js.map 309.11 KB
160
+ ESM ⚡️ Build success in 71ms
161
+ ESM dist/react/index.js 26.02 KB
162
+ ESM dist/react/testing.js 122.00 B
163
+ ESM dist/react/ssr.js 693.00 B
164
+ ESM dist/react/testing.js.map 165.00 B
165
+ ESM dist/react/index.js.map 55.45 KB
166
+ ESM dist/react/ssr.js.map 1.10 KB
167
+ ESM ⚡️ Build success in 65ms
162
168
  ESM dist/react-native-core/testing.js 119.00 B
163
- ESM dist/react-native-core/index.js.map 68.45 KB
169
+ ESM dist/react-native-core/index.js 34.47 KB
164
170
  ESM dist/react-native-core/testing.js.map 175.00 B
165
- ESM ⚡️ Build success in 65ms
166
- ESM dist/react-native/index.js 37.08 KB
171
+ ESM dist/react-native-core/index.js.map 69.10 KB
172
+ ESM ⚡️ Build success in 77ms
173
+ ESM dist/react-native/index.js 38.21 KB
167
174
  ESM dist/react-native/testing.js 120.00 B
168
175
  ESM dist/react-native/polyfills.js 858.00 B
169
- ESM dist/react-native/index.js.map 74.82 KB
176
+ ESM dist/react-native/index.js.map 76.75 KB
170
177
  ESM dist/react-native/testing.js.map 176.00 B
171
178
  ESM dist/react-native/polyfills.js.map 1.61 KB
172
- ESM ⚡️ Build success in 67ms
173
- ESM dist/react/index.js 26.02 KB
174
- ESM dist/react/testing.js 122.00 B
175
- ESM dist/react/ssr.js 693.00 B
176
- ESM dist/react/index.js.map 55.45 KB
177
- ESM dist/react/testing.js.map 165.00 B
178
- ESM dist/react/ssr.js.map 1.10 KB
179
- ESM ⚡️ Build success in 64ms
180
- ESM dist/inspector/index.js 37.49 KB
179
+ ESM ⚡️ Build success in 85ms
181
180
  ESM dist/inspector/standalone.js 12.61 KB
181
+ ESM dist/inspector/index.js 37.49 KB
182
182
  ESM dist/inspector/chunk-ORKZSKZF.js 128.83 KB
183
- ESM dist/inspector/index.js.map 63.80 KB
184
183
  ESM dist/inspector/standalone.js.map 20.11 KB
184
+ ESM dist/inspector/index.js.map 63.80 KB
185
185
  ESM dist/inspector/chunk-ORKZSKZF.js.map 222.34 KB
186
- ESM ⚡️ Build success in 81ms
187
- ESM dist/index.js 32.17 KB
188
- ESM dist/testing.js 8.56 KB
189
- ESM dist/chunk-G7AMZRMZ.js 247.36 KB
190
- ESM dist/tools/ssr.js 156.00 B
186
+ ESM ⚡️ Build success in 114ms
191
187
  ESM dist/chunk-K4D7IMFM.js 690.00 B
188
+ ESM dist/tools/ssr.js 156.00 B
189
+ ESM dist/testing.js 8.56 KB
190
+ ESM dist/index.js 32.18 KB
192
191
  ESM dist/chunk-ZQWSQH6L.js 945.00 B
193
- ESM dist/testing.js.map 16.22 KB
194
- ESM dist/index.js.map 65.34 KB
192
+ ESM dist/chunk-YDZ264RU.js 261.62 KB
195
193
  ESM dist/chunk-K4D7IMFM.js.map 1.10 KB
196
194
  ESM dist/tools/ssr.js.map 71.00 B
195
+ ESM dist/testing.js.map 16.22 KB
197
196
  ESM dist/chunk-ZQWSQH6L.js.map 71.00 B
198
- ESM dist/chunk-G7AMZRMZ.js.map 578.08 KB
199
- ESM ⚡️ Build success in 111ms
197
+ ESM dist/index.js.map 65.34 KB
198
+ ESM dist/chunk-YDZ264RU.js.map 603.45 KB
199
+ ESM ⚡️ Build success in 143ms
200
200
  ESM dist/inspector/register-custom-element.js 305.00 B
201
201
  ESM dist/inspector/register-custom-element.js.map 445.00 B
202
202
  ESM dist/inspector/custom-element-7G7IZVLL.js 1.64 MB
203
203
  ESM dist/inspector/custom-element-7G7IZVLL.js.map 2.52 MB
204
- ESM ⚡️ Build success in 140ms
204
+ ESM ⚡️ Build success in 177ms
205
205
 
206
- > jazz-tools@0.20.8 types /home/runner/_work/jazz/jazz/packages/jazz-tools
206
+ > jazz-tools@0.20.10 types /home/runner/_work/jazz/jazz/packages/jazz-tools
207
207
  > tsc --outDir dist
208
208
 
209
209
 
210
- > jazz-tools@0.20.8 build:svelte /home/runner/_work/jazz/jazz/packages/jazz-tools
210
+ > jazz-tools@0.20.10 build:svelte /home/runner/_work/jazz/jazz/packages/jazz-tools
211
211
  > rm -rf dist/svelte && svelte-package -i src/svelte -o dist/svelte --tsconfig tsconfig.svelte.json
212
212
 
213
213
  src/svelte -> dist/svelte
214
214
 
215
- > jazz-tools@0.20.8 build:better-auth-svelte /home/runner/_work/jazz/jazz/packages/jazz-tools
215
+ > jazz-tools@0.20.10 build:better-auth-svelte /home/runner/_work/jazz/jazz/packages/jazz-tools
216
216
  > mkdir -p dist/better-auth/auth && svelte-package -i src/better-auth/auth -o dist/better-auth/auth-temp --tsconfig tsconfig.svelte.json && cp dist/better-auth/auth-temp/svelte.svelte dist/better-auth/auth/svelte.svelte && cp dist/better-auth/auth-temp/svelte.svelte.d.ts dist/better-auth/auth/svelte.d.ts && rm -rf dist/better-auth/auth-temp
217
217
 
218
218
  src/better-auth/auth -> dist/better-auth/auth-temp
package/CHANGELOG.md CHANGED
@@ -1,5 +1,42 @@
1
1
  # jazz-tools
2
2
 
3
+ ## 0.20.10
4
+
5
+ ### Patch Changes
6
+
7
+ - 706ab57: Added optional restricted deletion mode for CoList values, allowing only manager/admin roles to perform deletions when enabled via schema permissions: `co.list().withPermission({writer: "appendOnly"})`
8
+ - 01c3641: Add optional `navigation` prop to `JazzSvelteProvider` that automatically waits for pending CoValue syncs before SvelteKit navigations, preventing stale data on SSR pages.
9
+ - 796c65b: **BREAKING:** The `in` operator on CoMap instances now returns `true` for all schema-defined keys, even if the value is `undefined` or has been deleted. This fixes a fatal `TypeError` on React Native 0.84+ (Hermes V1) caused by proxy invariant violations.
10
+
11
+ Previously, `"key" in coMap` returned `false` for unset/deleted optional properties. Now it returns `true` for any key with a schema descriptor, consistent with `Object.keys()` and `Object.getOwnPropertyDescriptor()`.
12
+
13
+ To check whether a key has an actual value set, use `coMap.$jazz.has("key")` instead of the `in` operator.
14
+
15
+ Also adds `configurable: true` to all internal property definitions (`$jazz`, `$isLoaded`, `[TypeSym]`, `_instanceID`) across all CoValue types to satisfy ES2015 proxy invariants enforced by Hermes V1.
16
+
17
+ - 81c3a0a: Replaced a vulnerable dependency with a local implementation, removing transitive vulnerabilities.
18
+ - cdcdad1: Introduced runtime validation for schema-based CoValues. All mutations now accept a `validation` option of `strict` or `loose`. `setDefaultValidationMode()` can also be used to enable or disable validation across the entire app. Currently, the default validation mode is `warn`: updates and inserts of invalid data will still be allowed, but a console warning will be issued. The usage of `setDefaultValidationMode("strict")` is encouraged, as it will be the default mode in the future.
19
+ - 1317e90: Removed the legacy `coField` and `Encoders` exports and completed the runtime schema migration to the new schema descriptors. Apps still using the old schema APIs should migrate to the current `co`/zod based schemas.
20
+ - 76c6229: Reuse Expo & OP-SQLite DB client across Jazz providers
21
+ - e707d3c: Add contextual hints to the "unable to load" error message when sync is disabled (`when: "never"`) or restricted (`when: "signedUp"`).
22
+ - Updated dependencies [706ab57]
23
+ - Updated dependencies [3f50adb]
24
+ - Updated dependencies [283ff4f]
25
+ - Updated dependencies [93c220c]
26
+ - Updated dependencies [41d8587]
27
+ - cojson@0.20.10
28
+ - cojson-transport-ws@0.20.10
29
+ - cojson-storage-indexeddb@0.20.10
30
+
31
+ ## 0.20.9
32
+
33
+ ### Patch Changes
34
+
35
+ - 75ecd19: Reverted the Expo SQLite adapter to use non-exclusive transactions, to fix the "database is locked" error when read queries are executed in the middle of a transaction.
36
+ - cojson@0.20.9
37
+ - cojson-storage-indexeddb@0.20.9
38
+ - cojson-transport-ws@0.20.9
39
+
3
40
  ## 0.20.8
4
41
 
5
42
  ### Patch Changes
@@ -158,9 +158,15 @@ var JazzRepository = class {
158
158
  });
159
159
  const list = resolved.tables?.[model];
160
160
  if (!uniqueId) {
161
- const node2 = schema.create(data, {
162
- owner: list.$jazz.owner
163
- });
161
+ const node2 = schema.create(
162
+ {
163
+ ...data,
164
+ _deleted: false
165
+ },
166
+ {
167
+ owner: list.$jazz.owner
168
+ }
169
+ );
164
170
  list.$jazz.push(node2);
165
171
  return node2;
166
172
  }
@@ -323,7 +329,14 @@ var UserRepository = class extends JazzRepository {
323
329
  if (emailIndex.$isLoaded && emailIndex.user) {
324
330
  throw new Error("Email already exists");
325
331
  }
326
- const user = await super.create(model, data, uniqueId);
332
+ const user = await super.create(
333
+ model,
334
+ {
335
+ sessions: [],
336
+ ...data
337
+ },
338
+ uniqueId
339
+ );
327
340
  await this.updateEmailIndex(userEmail, user.$jazz.id);
328
341
  user.$jazz.set(
329
342
  "sessions",
@@ -443,10 +456,16 @@ var SessionRepository = class extends JazzRepository {
443
456
  sessions: true
444
457
  }
445
458
  });
446
- const session = this.getSchema("session").create(data, {
447
- unique: data.token,
448
- owner: this.owner
449
- });
459
+ const session = this.getSchema("session").create(
460
+ {
461
+ ...data,
462
+ _deleted: false
463
+ },
464
+ {
465
+ unique: data.token,
466
+ owner: this.owner
467
+ }
468
+ );
450
469
  sessions.$jazz.push(session);
451
470
  return session;
452
471
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/better-auth/database-adapter/index.ts","../../../src/better-auth/database-adapter/utils.ts","../../../src/better-auth/database-adapter/repository/generic.ts","../../../src/better-auth/database-adapter/repository/user.ts","../../../src/better-auth/database-adapter/repository/session.ts","../../../src/better-auth/database-adapter/repository/verification.ts","../../../src/better-auth/database-adapter/repository/account.ts","../../../src/better-auth/database-adapter/schema.ts"],"sourcesContent":["import {\n createAdapterFactory,\n type DBAdapterDebugLogOption,\n} from \"better-auth/adapters\";\nimport type { Account } from \"jazz-tools\";\nimport { startWorker } from \"jazz-tools/worker\";\nimport {\n JazzRepository,\n UserRepository,\n SessionRepository,\n VerificationRepository,\n AccountRepository,\n} from \"./repository/index.js\";\nimport { createJazzSchema, tableItem2Record } from \"./schema.js\";\n\nexport interface JazzAdapterConfig {\n /**\n * Helps you debug issues with the adapter.\n */\n debugLogs?: DBAdapterDebugLogOption;\n /**\n * The sync server to use.\n */\n syncServer: string;\n /**\n * The worker account ID to use.\n */\n accountID: string;\n /**\n * The worker account secret to use.\n */\n accountSecret: string;\n}\n\n/**\n * Creates a Better Auth database adapter that integrates with Jazz framework.\n *\n * This adapter provides a seamless integration between Better Auth and Jazz,\n * allowing you to use Jazz as database for for Better Auth's authentication system.\n *\n * @param config - Configuration object for the Jazz Better Auth adapter\n * @param config.syncServer - The Jazz sync server URL to connect to (e.g., \"wss://your-sync-server.com\")\n * @param config.accountID - The worker account ID for the Jazz worker that will handle auth operations\n * @param config.accountSecret - The worker account secret for authenticating with the Jazz sync server\n * @param config.debugLogs - Optional debug logging configuration to help troubleshoot adapter issues\n *\n * @returns A Better Auth adapter instance configured to work with Jazz\n *\n * @example\n * ```typescript\n * import { JazzBetterAuthDatabaseAdapter } from \"jazz-tools/better-auth/database-adapter\";\n * import { createAuth } from \"better-auth\";\n *\n * const auth = createAuth({\n * adapter: JazzBetterAuthDatabaseAdapter({\n * syncServer: \"wss://your-jazz-sync-server.com\",\n * accountID: \"auth-worker-account-id\",\n * accountSecret: \"your-worker-account-secret\",\n * }),\n * // ... other auth configuration\n * });\n * ```\n */\nexport const JazzBetterAuthDatabaseAdapter = (\n config: JazzAdapterConfig,\n): ReturnType<typeof createAdapterFactory> =>\n createAdapterFactory({\n config: {\n adapterId: \"jazz-tools-adapter\", // A unique identifier for the adapter.\n adapterName: \"Jazz Tools Adapter\", // The name of the adapter.\n debugLogs: config.debugLogs ?? false, // Whether to enable debug logs.\n supportsJSON: true, // Whether the database supports JSON. (Default: false)\n supportsDates: true, // Whether the database supports dates. (Default: true)\n supportsBooleans: true, // Whether the database supports booleans. (Default: true)\n supportsNumericIds: false, // Whether the database supports auto-incrementing numeric IDs. (Default: true)\n disableIdGeneration: true,\n },\n adapter: ({ schema }) => {\n const JazzSchema = createJazzSchema(schema);\n\n let worker: Account | undefined = undefined;\n\n async function getWorker(): Promise<Account> {\n if (worker) {\n return worker;\n }\n\n const result = await startWorker({\n AccountSchema: JazzSchema.WorkerAccount,\n syncServer: config.syncServer,\n accountID: config.accountID,\n accountSecret: config.accountSecret,\n skipInboxLoad: true,\n asActiveAccount: false,\n });\n\n worker = result.worker;\n\n return result.worker;\n }\n\n async function initRepository(\n model: string,\n ensureSync: boolean = false,\n ): Promise<JazzRepository> {\n let Repository: typeof JazzRepository | undefined = undefined;\n switch (model) {\n case \"user\":\n Repository = UserRepository;\n break;\n case \"session\":\n Repository = SessionRepository;\n break;\n case \"verification\":\n Repository = VerificationRepository;\n break;\n case \"account\":\n Repository = AccountRepository;\n break;\n }\n\n if (!Repository) {\n Repository = JazzRepository;\n }\n\n const worker = await getWorker();\n const database = await JazzSchema.loadDatabase(worker);\n\n const repository = new Repository(\n JazzSchema.DatabaseRoot,\n database,\n worker,\n schema,\n ensureSync,\n );\n\n return repository;\n }\n\n return {\n create: async ({ data, model, select }): Promise<any> => {\n // console.log(\"create\", { data, model, select });\n const repository = await initRepository(model, true);\n\n const created = await repository.create(model, data);\n\n await repository.ensureSync();\n\n return tableItem2Record(created);\n },\n update: async ({ model, where, update }): Promise<any> => {\n // console.log(\"update\", { model, where, update });\n const repository = await initRepository(model, true);\n\n const updated = await repository.update(\n model,\n where,\n update as Record<string, any>,\n );\n\n if (updated.length === 0) {\n return null;\n }\n\n await repository.ensureSync();\n\n return tableItem2Record(updated[0]!);\n },\n updateMany: async ({ model, where, update }) => {\n // console.log(\"updateMany\", { model, where, update });\n const repository = await initRepository(model, true);\n\n const updated = await repository.update(model, where, update);\n\n await repository.ensureSync();\n\n return updated.length;\n },\n delete: async ({ model, where }) => {\n // console.log(\"delete\", { model, where });\n const repository = await initRepository(model, true);\n\n await repository.deleteValue(model, where);\n\n await repository.ensureSync();\n },\n findOne: async ({ model, where }): Promise<any> => {\n // console.log(\"findOne\", { model, where });\n const repository = await initRepository(model);\n\n const item = await repository.findOne(model, where);\n\n return tableItem2Record(item);\n },\n findMany: async ({\n model,\n where,\n limit,\n sortBy,\n offset,\n }): Promise<any[]> => {\n const repository = await initRepository(model);\n\n const items = await repository.findMany(\n model,\n where,\n limit,\n sortBy,\n offset,\n );\n\n return items.map(tableItem2Record);\n },\n deleteMany: async ({ model, where }) => {\n const repository = await initRepository(model, true);\n\n const deleted = await repository.deleteValue(model, where);\n\n await repository.ensureSync();\n\n return deleted;\n },\n count: async ({ model, where }) => {\n // console.log(\"count\", { model, where });\n const repository = await initRepository(model);\n\n return repository.count(model, where);\n },\n };\n },\n });\n","import { CleanedWhere } from \"better-auth/adapters\";\n\nexport function filterListByWhere<T>(\n data: T[],\n where: CleanedWhere[] | undefined,\n): T[] {\n if (!Array.isArray(data)) {\n throw new Error(\"Expected data to be an array\");\n }\n\n if (where === undefined) {\n return data;\n }\n\n if (!Array.isArray(where)) {\n throw new Error(\"Expected where to be an array\");\n }\n\n // Helper to evaluate a single condition\n function evaluateCondition(item: any, condition: CleanedWhere): boolean {\n const { field, operator, value } = condition;\n const itemValue = field === \"id\" ? item.$jazz.id : item[field];\n\n switch (operator) {\n case \"eq\":\n return itemValue === value;\n case \"ne\":\n return itemValue !== value;\n case \"lt\":\n return value !== null && itemValue < value;\n case \"lte\":\n return value !== null && itemValue <= value;\n case \"gt\":\n return value !== null && itemValue > value;\n case \"gte\":\n return value !== null && itemValue >= value;\n case \"in\":\n return Array.isArray(value)\n ? (value as (string | number | boolean | Date)[]).includes(itemValue)\n : false;\n case \"not_in\":\n return Array.isArray(value)\n ? !(value as (string | number | boolean | Date)[]).includes(itemValue)\n : false;\n case \"contains\":\n return typeof itemValue === \"string\" && typeof value === \"string\"\n ? itemValue.includes(value)\n : false;\n case \"starts_with\":\n return typeof itemValue === \"string\" && typeof value === \"string\"\n ? itemValue.startsWith(value)\n : false;\n case \"ends_with\":\n return typeof itemValue === \"string\" && typeof value === \"string\"\n ? itemValue.endsWith(value)\n : false;\n default:\n throw new Error(`Unsupported operator: ${operator}`);\n }\n }\n\n // Group conditions by connector (AND/OR)\n // If no connector, default to AND between all\n return data.filter((item) => {\n let result: boolean = true;\n for (let i = 0; i < where.length; i++) {\n const condition = where[i]!;\n const matches = evaluateCondition(item, condition);\n if (i === 0) {\n result = matches;\n } else {\n const connector = condition.connector || \"AND\";\n if (connector === \"AND\") {\n result = result && matches;\n } else if (connector === \"OR\") {\n result = result || matches;\n } else {\n throw new Error(`Unsupported connector: ${connector}`);\n }\n }\n }\n return result;\n });\n}\n\nexport function sortListByField<T extends Record<string, any> | null>(\n data: T[],\n sort?: { field: string; direction: \"asc\" | \"desc\" },\n): T[] {\n if (!sort) {\n return data;\n }\n\n const { field, direction } = sort;\n\n data.sort((a, b) => {\n if (a === null || b === null) {\n return 0;\n }\n\n if (typeof a[field] === \"string\" && typeof b[field] === \"string\") {\n return direction === \"asc\"\n ? a[field].localeCompare(b[field])\n : b[field].localeCompare(a[field]);\n }\n\n return direction === \"asc\" ? a[field] - b[field] : b[field] - a[field];\n });\n\n return data;\n}\n\nexport function paginateList<T>(\n data: T[],\n limit: number | undefined,\n offset: number | undefined,\n): T[] {\n if (offset === undefined && limit === undefined) {\n return data;\n }\n\n if (limit === 0) {\n return [];\n }\n\n let start = offset ?? 0;\n if (start < 0) {\n start = 0;\n }\n\n const end = limit ? start + limit : undefined;\n return data.slice(start, end);\n}\n\nfunction isWhereByField(field: string, where: CleanedWhere): boolean {\n return (\n where.field === field &&\n where.operator === \"eq\" &&\n where.connector === \"AND\"\n );\n}\n\nexport function isWhereBySingleField<T extends string>(\n field: T,\n where: CleanedWhere[] | undefined,\n): where is [{ field: T; operator: \"eq\"; value: string; connector: \"AND\" }] {\n if (where === undefined || where.length !== 1) {\n return false;\n }\n\n const [cond] = where;\n if (!cond) {\n return false;\n }\n\n return isWhereByField(field, cond);\n}\n\nexport function containWhereByField<T extends string>(\n field: T,\n where: CleanedWhere[] | undefined,\n): boolean {\n if (where === undefined) {\n return false;\n }\n\n return where.some((cond) => isWhereByField(field, cond));\n}\n\nexport function extractWhereByField<T extends string>(\n field: T,\n where: CleanedWhere[] | undefined,\n): [CleanedWhere | undefined, CleanedWhere[]] {\n if (where === undefined) {\n return [undefined, []];\n }\n\n return [\n where.find((cond) => isWhereByField(field, cond)),\n where.filter((cond) => !isWhereByField(field, cond)),\n ];\n}\n","import { CleanedWhere } from \"better-auth/adapters\";\nimport { BetterAuthDBSchema } from \"better-auth/db\";\nimport { Account, CoList, CoMap, Group, co } from \"jazz-tools\";\nimport type { Database, TableItem } from \"../schema.js\";\nimport {\n filterListByWhere,\n isWhereBySingleField,\n paginateList,\n sortListByField,\n} from \"../utils.js\";\n\nexport class JazzRepository {\n protected databaseSchema: Database;\n protected databaseRoot: co.loaded<Database, { group: true }>;\n protected worker: Account;\n protected owner: Group;\n protected betterAuthSchema: BetterAuthDBSchema;\n\n private coValuesTracker:\n | {\n done: () => Set<`co_z${string}`>;\n }\n | undefined = undefined;\n\n constructor(\n databaseSchema: Database,\n databaseRoot: co.loaded<Database, { group: true }>,\n worker: Account,\n betterAuthSchema: BetterAuthDBSchema = {},\n ensureSync: boolean = false,\n ) {\n this.databaseSchema = databaseSchema;\n this.databaseRoot = databaseRoot;\n this.worker = worker;\n this.owner = databaseRoot.group;\n this.betterAuthSchema = betterAuthSchema;\n\n if (ensureSync)\n this.coValuesTracker =\n worker.$jazz.raw.core.node.syncManager.trackDirtyCoValues();\n }\n\n ensureSync() {\n if (!this.coValuesTracker)\n throw new Error(\"Repository wasn't initialized with ensureSync option\");\n\n return Promise.all(\n Array.from(this.coValuesTracker.done(), (id) =>\n this.worker.$jazz.raw.core.node.syncManager.waitForSync(id),\n ),\n );\n }\n\n async create(\n model: string,\n data: Record<string, any>,\n uniqueId?: string,\n ): Promise<TableItem> {\n const schema = this.getSchema(model);\n\n const resolved = await this.databaseRoot.$jazz.ensureLoaded({\n resolve: {\n tables: {\n [model]: true,\n },\n },\n });\n\n const list = resolved.tables?.[model] as unknown as CoList<CoMap>;\n\n if (!uniqueId) {\n // Use the same owner of the table.\n const node = schema.create(data, {\n owner: list.$jazz.owner,\n });\n\n list.$jazz.push(node);\n\n return node;\n }\n\n // If we have a unique id, we must check for soft deleted items first\n const existingNode = await schema.loadUnique(\n uniqueId,\n list.$jazz.owner.$jazz.id,\n {\n loadAs: this.worker,\n },\n );\n\n // if the entity exists and is not soft deleted, we must throw an error\n if (\n existingNode.$isLoaded &&\n existingNode.$jazz.raw.get(\"_deleted\") !== true\n ) {\n throw new Error(\"Entity already exists\");\n }\n\n // create the entity or update the deleted one\n const node = await schema.upsertUnique({\n value: {\n ...data,\n _deleted: false,\n },\n owner: list.$jazz.owner,\n unique: uniqueId,\n });\n\n if (!node.$isLoaded) {\n throw new Error(\"Unable to create entity\");\n }\n\n list.$jazz.push(node);\n\n return node;\n }\n\n async findOne(\n model: string,\n where: CleanedWhere[],\n ): Promise<TableItem | null> {\n return this.findMany(model, where, 1).then((users) => users?.at(0) ?? null);\n }\n\n async findById(\n model: string,\n where: [{ field: \"id\"; operator: \"eq\"; value: string; connector: \"AND\" }],\n ): Promise<TableItem | null> {\n const id = where[0]!.value;\n\n if (!id.startsWith(\"co_\")) {\n return null;\n }\n\n const node = await this.getSchema(model).load(id, { loadAs: this.worker });\n\n if (!node.$isLoaded) {\n return null;\n }\n\n if (node.$jazz.raw.get(\"_deleted\")) {\n return null;\n }\n\n return node;\n }\n\n async findByUnique(\n model: string,\n where: [{ field: string; operator: \"eq\"; value: string; connector: \"AND\" }],\n ): Promise<TableItem | null> {\n const value = where[0]!.value;\n\n const node = await this.getSchema(model).loadUnique(\n value,\n this.owner.$jazz.id,\n {\n loadAs: this.worker,\n },\n );\n\n if (!node.$isLoaded) {\n return null;\n }\n\n if (node.$jazz.raw.get(\"_deleted\")) {\n return null;\n }\n\n return node;\n }\n\n async findMany(\n model: string,\n where: CleanedWhere[] | undefined,\n limit?: number,\n sortBy?: { field: string; direction: \"asc\" | \"desc\" },\n offset?: number,\n ): Promise<TableItem[]> {\n // ensure schema exists\n this.getSchema(model);\n\n if (isWhereBySingleField(\"id\", where)) {\n return this.findById(model, where).then((node) => (node ? [node] : []));\n }\n\n const resolvedRoot = await this.databaseRoot.$jazz.ensureLoaded({\n resolve: {\n tables: {\n [model]: {\n $each: true,\n },\n },\n },\n });\n\n const list = resolvedRoot.tables?.[model] as CoList<CoMap> | undefined;\n\n if (!list) {\n return [];\n }\n\n return this.filterSortPaginateList(list, where, limit, sortBy, offset);\n }\n\n async update(\n model: string,\n where: CleanedWhere[],\n update: Record<string, any>,\n ): Promise<TableItem[]> {\n const nodes = await this.findMany(model, where);\n\n if (nodes.length === 0) {\n return [];\n }\n\n for (const node of nodes) {\n for (const [key, value] of Object.entries(\n update as Record<string, any>,\n )) {\n node.$jazz.set(key, value);\n }\n }\n\n return nodes;\n }\n\n async deleteValue(model: string, where: CleanedWhere[]): Promise<number> {\n const items = await this.findMany(model, where);\n\n if (items.length === 0) {\n return 0;\n }\n\n const resolved = await this.databaseRoot.$jazz.ensureLoaded({\n resolve: {\n tables: {\n [model]: {\n $each: true,\n },\n },\n },\n });\n\n if (!resolved) {\n throw new Error(\"Unable to load values\");\n }\n\n const list = resolved?.tables?.[model] as unknown as CoList<CoMap>;\n\n for (const toBeDeleted of items) {\n // Get entries without trigger the shallow load\n const index = [...list.entries()].findIndex(\n ([_, value]) => value && value.$jazz.id === toBeDeleted.$jazz.id,\n );\n\n toBeDeleted.$jazz.set(\"_deleted\", true);\n\n if (index !== -1) {\n list.$jazz.remove(index);\n }\n }\n\n return items.length;\n }\n\n async count(\n model: string,\n where: CleanedWhere[] | undefined,\n ): Promise<number> {\n return this.findMany(model, where).then((values) => values.length);\n }\n\n protected getSchema(model: string) {\n const schema = this.databaseSchema.shape.tables.shape[model]?.element;\n if (!schema) {\n throw new Error(`Schema for model \"${model}\" not found`);\n }\n return schema;\n }\n\n protected filterSortPaginateList<T extends TableItem>(\n list: CoList<CoMap | null>,\n where: CleanedWhere[] | undefined,\n limit?: number,\n sortBy?: { field: string; direction: \"asc\" | \"desc\" },\n offset?: number,\n ): T[] {\n // ignore nullable values and soft deleted items\n return [\n list.filter(\n (item) => item !== null && item.$jazz.raw.get(\"_deleted\") !== true,\n ),\n ]\n .map((list) => filterListByWhere(list, where))\n .map((list) => sortListByField(list, sortBy))\n .map((list) => paginateList(list, limit, offset))\n .at(0)! as T[];\n }\n}\n","import { CleanedWhere } from \"better-auth/adapters\";\nimport { co, z } from \"jazz-tools\";\nimport { JazzRepository } from \"./generic\";\nimport { isWhereBySingleField } from \"../utils\";\nimport type { TableItem } from \"../schema\";\n\nconst EmailIndex = co.map({ user: z.string().nullable() });\n\nexport class UserRepository extends JazzRepository {\n /**\n * Custom logic:\n * - sessions are stored inside the user object\n * - keep sync email index\n */\n async create(\n model: string,\n data: Record<string, any>,\n uniqueId?: string,\n ): Promise<TableItem> {\n const SessionListSchema = this.databaseSchema.shape.tables.shape.session;\n\n if (!SessionListSchema) {\n throw new Error(\"Session list schema not found\");\n }\n\n const userEmail = data[this.getEmailProperty()] as string;\n\n const emailIndex = await this.loadEmailIndex(userEmail);\n\n if (emailIndex.$isLoaded && emailIndex.user) {\n throw new Error(\"Email already exists\");\n }\n\n const user = await super.create(model, data, uniqueId);\n\n await this.updateEmailIndex(userEmail, user.$jazz.id);\n\n user.$jazz.set(\n \"sessions\",\n co.list(SessionListSchema).create([], user.$jazz.owner),\n );\n\n return user;\n }\n\n /**\n * Custom logic:\n * - if the email is in the where clause, find by email\n */\n async findMany(\n model: string,\n where: CleanedWhere[] | undefined,\n limit?: number,\n sortBy?: { field: string; direction: \"asc\" | \"desc\" },\n offset?: number,\n ): Promise<TableItem[]> {\n if (isWhereBySingleField(\"email\", where)) {\n return this.findByEmail(where[0].value as string);\n }\n\n return super.findMany(model, where, limit, sortBy, offset);\n }\n\n private getEmailProperty(): string {\n return this.betterAuthSchema.user?.fields.email?.fieldName || \"email\";\n }\n\n private async findByEmail(email: string): Promise<TableItem[]> {\n const emailIndex = await this.loadEmailIndex(email);\n\n if (!emailIndex.$isLoaded) {\n return [];\n }\n\n const user = emailIndex.user;\n\n if (!user) {\n return [];\n }\n\n return this.findById(\"user\", [\n { field: \"id\", operator: \"eq\", value: user, connector: \"AND\" },\n ]).then((user) => (user ? [user] : []));\n }\n\n /**\n * Custom logic:\n * - if the email is changed, update the email index\n */\n async update(\n model: string,\n where: CleanedWhere[],\n update: Record<string, any>,\n ): Promise<TableItem[]> {\n const nodes = await this.findMany(model, where);\n if (nodes.length === 0) {\n return [];\n }\n\n const newEmail = (update as Record<string, any>)[this.getEmailProperty()] as\n | string\n | undefined;\n\n for (const node of nodes) {\n const oldEmail = node.$jazz.raw.get(this.getEmailProperty()) as\n | string\n | undefined;\n for (const [key, value] of Object.entries(\n update as Record<string, any>,\n )) {\n node.$jazz.set(key, value);\n }\n\n // if the email is changed, update the email index\n if (\n oldEmail !== newEmail &&\n oldEmail !== undefined &&\n newEmail !== undefined\n ) {\n await this.updateEmailIndex(oldEmail, null);\n await this.updateEmailIndex(newEmail, node.$jazz.id);\n }\n }\n\n return nodes;\n }\n\n async deleteValue(model: string, where: CleanedWhere[]): Promise<number> {\n const nodes = await this.findMany(model, where);\n\n const deleted = await super.deleteValue(model, where);\n\n for (const node of nodes) {\n const email = node.$jazz.raw.get(this.getEmailProperty()) as\n | string\n | undefined;\n if (email) {\n await this.updateEmailIndex(email, null);\n }\n }\n\n return deleted;\n }\n\n private async loadEmailIndex(email: string) {\n const emailIndex = await EmailIndex.loadUnique(email, this.owner.$jazz.id, {\n loadAs: this.worker,\n });\n\n return emailIndex;\n }\n\n private async updateEmailIndex(email: string, userId: string | null) {\n await EmailIndex.upsertUnique({\n value: {\n user: userId,\n },\n unique: email,\n owner: this.owner,\n });\n }\n}\n","import { BetterAuthDBSchema } from \"better-auth/db\";\nimport { CleanedWhere } from \"better-auth/adapters\";\nimport { co, Account } from \"jazz-tools\";\nimport { JazzRepository } from \"./generic\";\nimport { UserRepository } from \"./user\";\nimport {\n containWhereByField,\n extractWhereByField,\n filterListByWhere,\n isWhereBySingleField,\n} from \"../utils\";\nimport type { Database, TableItem } from \"../schema\";\n\ntype UserSchema = co.Map<{\n sessions: co.List<co.Map<any>>;\n}>;\n\nexport class SessionRepository extends JazzRepository {\n protected userRepository: UserRepository;\n\n constructor(\n databaseSchema: Database,\n databaseRoot: co.loaded<Database, { group: true }>,\n worker: Account,\n betterAuthSchema: BetterAuthDBSchema = {},\n ensureSync: boolean = false,\n ) {\n super(databaseSchema, databaseRoot, worker, betterAuthSchema, ensureSync);\n\n this.userRepository = new UserRepository(\n databaseSchema,\n databaseRoot,\n worker,\n betterAuthSchema,\n );\n }\n\n /**\n * Custom logic: sessions are stored inside the user object\n */\n async create(\n model: string,\n data: Record<string, any>,\n uniqueId?: string,\n ): Promise<TableItem> {\n if (typeof data.token !== \"string\" || typeof data.userId !== \"string\") {\n throw new Error(\"Token and userId are required for session creation\");\n }\n\n const user = await this.userRepository.findById(\"user\", [\n {\n field: \"id\",\n operator: \"eq\",\n value: data.userId,\n connector: \"AND\",\n },\n ]);\n\n if (!user) {\n throw new Error(\"User not found\");\n }\n\n const { sessions } = await user.$jazz.ensureLoaded({\n resolve: {\n sessions: true,\n },\n });\n\n const session = this.getSchema(\"session\").create(data, {\n unique: data.token,\n owner: this.owner,\n });\n\n sessions.$jazz.push(session);\n\n return session;\n }\n\n /**\n * Custom logic: sessions are stored inside the user object.\n */\n async findMany(\n model: string,\n where: CleanedWhere[] | undefined,\n limit?: number,\n sortBy?: { field: string; direction: \"asc\" | \"desc\" },\n offset?: number,\n ): Promise<TableItem[]> {\n if (isWhereBySingleField(\"id\", where)) {\n return this.findById(model, where).then((node) => (node ? [node] : []));\n }\n\n if (isWhereBySingleField(\"token\", where)) {\n return this.findByUnique(model, where).then((node) =>\n node ? [node] : [],\n );\n }\n\n if (containWhereByField(\"userId\", where)) {\n const [userIdWhere, otherWhere] = extractWhereByField(\"userId\", where);\n\n const user = await this.userRepository.findById(\"user\", [\n {\n field: \"id\",\n operator: \"eq\",\n value: userIdWhere!.value as string,\n connector: \"AND\",\n },\n ]);\n\n if (!user) {\n console.warn(\"Trying to find user's sessions, but user not found\");\n return [];\n }\n\n const { sessions } = await user.$jazz.ensureLoaded({\n resolve: {\n sessions: {\n $each: true,\n },\n },\n });\n\n return this.filterSortPaginateList(\n sessions,\n otherWhere,\n limit,\n sortBy,\n offset,\n );\n }\n\n throw new Error(\n \"Unable to find session with where: \" + JSON.stringify(where),\n );\n }\n\n /**\n * Custom logic: sessions are stored inside the user object.\n */\n async deleteValue(model: string, where: CleanedWhere[]): Promise<number> {\n const items = await this.findMany(model, where);\n if (items.length === 0) {\n return 0;\n }\n\n const userId = items[0]!.userId;\n\n return this.deleteSession(userId, items);\n }\n\n private async deleteSession(\n userId: string,\n items: TableItem[],\n ): Promise<number> {\n const user = await this.userRepository.findById(\"user\", [\n {\n field: \"id\",\n operator: \"eq\",\n value: userId,\n connector: \"AND\",\n },\n ]);\n\n if (!user) {\n throw new Error(\"User not found\");\n }\n\n const { sessions } = await user.$jazz.ensureLoaded({\n resolve: {\n sessions: true,\n },\n });\n\n for (const toBeDeleted of items) {\n // Get entries without trigger the shallow load\n const index = [...sessions.entries()].findIndex(\n ([_, value]) => value && value.$jazz.id === toBeDeleted.$jazz.id,\n );\n\n toBeDeleted.$jazz.set(\"_deleted\", true);\n\n if (index !== -1) {\n sessions.$jazz.remove(index);\n }\n }\n\n return items.length;\n }\n}\n","import { CleanedWhere } from \"better-auth/adapters\";\nimport { JazzRepository } from \"./generic\";\nimport { isWhereBySingleField } from \"../utils\";\nimport type { TableItem } from \"../schema\";\n\nexport class VerificationRepository extends JazzRepository {\n /**\n * Custom logic: property identifier is used as uniqueId\n */\n async create(\n model: string,\n data: Record<string, any>,\n uniqueId?: string,\n ): Promise<TableItem> {\n return super.create(model, data, data[\"identifier\"]);\n }\n\n /**\n * Custom logic: property identifier is used as uniqueId\n * If we look for identifier, we use findByUnique instead of findMany\n */\n async findMany(\n model: string,\n where: CleanedWhere[] | undefined,\n limit?: number,\n sortBy?: { field: string; direction: \"asc\" | \"desc\" },\n offset?: number,\n ): Promise<TableItem[]> {\n if (isWhereBySingleField(\"identifier\", where)) {\n return this.findByUnique(model, where).then((node) =>\n node ? [node] : [],\n );\n }\n\n return super.findMany(model, where, limit, sortBy, offset);\n }\n}\n","import { CleanedWhere } from \"better-auth/adapters\";\nimport { co, z } from \"jazz-tools\";\nimport { JazzRepository } from \"./generic\";\nimport { isWhereBySingleField } from \"../utils\";\nimport type { TableItem } from \"../schema\";\n\n/**\n * This list stores an array of covalues ID\n * mapped by the accountID property.\n * Because accountId is not unique, and it is used on every social login\n */\nconst AccountIdIndex = co.list(z.string());\n\nexport class AccountRepository extends JazzRepository {\n /**\n * Custom logic:\n * - keep sync accountId index\n */\n async create(\n model: string,\n data: Record<string, any>,\n uniqueId?: string,\n ): Promise<TableItem> {\n const account = await super.create(model, data, uniqueId);\n\n await this.updateAccountIdIndex(\n account[this.getAccountIdProperty()],\n account.$jazz.id,\n );\n\n return account;\n }\n\n /**\n * Custom logic:\n * - if the accountId is in the where clause, get the ids from the index\n */\n async findMany(\n model: string,\n where: CleanedWhere[] | undefined,\n limit?: number,\n sortBy?: { field: string; direction: \"asc\" | \"desc\" },\n offset?: number,\n ): Promise<TableItem[]> {\n if (isWhereBySingleField(this.getAccountIdProperty(), where)) {\n const accountIdIndex = await this.getAccountIdIndex(where[0].value);\n\n const ids = accountIdIndex.$isLoaded ? accountIdIndex : [];\n\n if (ids.length === 0) {\n return [];\n }\n\n // except for accountId clashing from different social providers,\n // ids should contain a single id, max two\n const results = await Promise.all(\n ids.map((id) =>\n super.findById(model, [\n { field: \"id\", operator: \"eq\", value: id, connector: \"AND\" },\n ]),\n ),\n );\n\n return results.filter((value) => value !== null);\n }\n\n return super.findMany(model, where, limit, sortBy, offset);\n }\n\n async deleteValue(model: string, where: CleanedWhere[]): Promise<number> {\n const nodes = await this.findMany(model, where);\n\n const deleted = await super.deleteValue(model, where);\n\n for (const node of nodes) {\n const accountId = node.$jazz.raw.get(this.getAccountIdProperty()) as\n | string\n | undefined;\n\n if (accountId) {\n await this.deleteAccountIdIndex(accountId, node.$jazz.id);\n }\n }\n\n return deleted;\n }\n\n private async getAccountIdIndex(accountId: string) {\n const indexUnique = this.getAccountIdProperty() + \"_\" + accountId;\n\n const accountIdIndex = await AccountIdIndex.loadUnique(\n indexUnique,\n this.owner.$jazz.id,\n {\n loadAs: this.worker,\n },\n );\n\n return accountIdIndex;\n }\n\n private async updateAccountIdIndex(accountId: string, entityId: string) {\n const accountIdIndex = await this.getAccountIdIndex(accountId);\n\n const ids = accountIdIndex.$isLoaded ? accountIdIndex : [];\n\n await AccountIdIndex.upsertUnique({\n value: [...ids, entityId],\n unique: this.getAccountIdProperty() + \"_\" + accountId,\n owner: this.owner,\n });\n }\n\n private async deleteAccountIdIndex(accountId: string, entityId: string) {\n const accountIdIndex = await this.getAccountIdIndex(accountId);\n\n const ids = accountIdIndex.$isLoaded ? accountIdIndex : [];\n\n await AccountIdIndex.upsertUnique({\n value: ids.filter((id) => id !== entityId),\n unique: this.getAccountIdProperty() + \"_\" + accountId,\n owner: this.owner,\n });\n }\n\n private getAccountIdProperty(): string {\n return (\n this.betterAuthSchema.account?.fields.accountId?.fieldName || \"accountId\"\n );\n }\n}\n","import { BetterAuthDBSchema, DBFieldAttribute } from \"better-auth/db\";\nimport { Group, co, z } from \"jazz-tools\";\n\ntype TableRow = co.Map<any>;\nexport type TableItem = co.loaded<TableRow>;\n\ntype Table = co.List<TableRow>;\nexport type Database = co.Map<{\n group: typeof Group;\n tables: co.Map<{\n [key: string]: Table;\n }>;\n}>;\n\ntype WorkerAccount = co.Account<{\n profile: co.Profile;\n root: co.Map<any>;\n}>;\n\ntype JazzSchema = {\n WorkerAccount: WorkerAccount;\n DatabaseRoot: Database;\n betterAuthSchema: BetterAuthDBSchema;\n loadDatabase: (\n account: co.loaded<co.Account>,\n options?: Parameters<Database[\"loadUnique\"]>[2],\n ) => Promise<co.loaded<Database, { group: true }>>;\n};\n\nconst DATABASE_ROOT_ID = \"better-auth-root\";\n\nexport function createJazzSchema(schema: BetterAuthDBSchema): JazzSchema {\n const tablesSchema = generateSchemaFromBetterAuthSchema(schema);\n\n const DatabaseRoot: Database = co.map({\n group: Group,\n tables: co.map(tablesSchema),\n });\n\n const WorkerAccount: WorkerAccount = co\n .account({\n profile: co.profile(),\n root: co.map({}),\n })\n .withMigration(async (account) => {\n const dbRoot = await DatabaseRoot.loadUnique(\n DATABASE_ROOT_ID,\n account.$jazz.id,\n {\n resolve: {\n group: true,\n tables: true,\n },\n loadAs: account,\n },\n );\n\n if (!dbRoot.$isLoaded) {\n // Create a group for the first time\n // it will be the owner of the all tables and data\n const adminGroup = Group.create({ owner: account });\n await DatabaseRoot.upsertUnique({\n value: {\n group: adminGroup,\n // create empty tables for each model\n tables: co\n .map(tablesSchema)\n .create(\n Object.fromEntries(\n Object.entries(tablesSchema).map(([key, value]) => [\n key,\n value.create([], adminGroup),\n ]),\n ),\n adminGroup,\n ),\n },\n unique: DATABASE_ROOT_ID,\n owner: account,\n });\n } else {\n // partial migrations\n for (const [key, value] of Object.entries(\n DatabaseRoot.shape.tables.shape,\n )) {\n if (dbRoot.tables[key] === undefined) {\n dbRoot.tables.$jazz.set(key, value.create([], dbRoot.group));\n }\n }\n }\n });\n\n return {\n WorkerAccount,\n DatabaseRoot,\n betterAuthSchema: schema,\n async loadDatabase(account, options) {\n if (\n options?.resolve === false ||\n (typeof options?.resolve === \"object\" &&\n options?.resolve.group !== true)\n ) {\n throw new Error(\"Group is required to load the database\");\n }\n\n const db = (await DatabaseRoot.loadUnique(\n DATABASE_ROOT_ID,\n account.$jazz.id,\n {\n resolve: {\n group: true,\n tables: true,\n },\n loadAs: account,\n ...options,\n },\n )) as co.loaded<Database, { group: true }>;\n\n if (!db) {\n throw new Error(\"Database not found\");\n }\n\n return db;\n },\n };\n}\n\ntype ZodPrimitiveSchema =\n | z.z.ZodString\n | z.z.ZodNumber\n | z.z.ZodBoolean\n | z.z.ZodNull\n | z.z.ZodDate\n | z.z.ZodLiteral;\ntype ZodOptionalPrimitiveSchema = z.z.ZodOptional<ZodPrimitiveSchema>;\n\nfunction generateSchemaFromBetterAuthSchema(schema: BetterAuthDBSchema) {\n const tablesSchema: Record<string, Table> = {};\n\n for (const [key, value] of Object.entries(schema)) {\n const modelShape: Record<\n string,\n ZodPrimitiveSchema | ZodOptionalPrimitiveSchema\n > = {\n _deleted: z.boolean(),\n };\n\n for (const [fieldName, field] of Object.entries(value.fields)) {\n modelShape[field.fieldName || fieldName] = convertFieldToCoValue(field);\n }\n\n const coMap = co.map(modelShape);\n tablesSchema[key] = co.list(coMap);\n }\n\n if (tablesSchema[\"user\"] && tablesSchema[\"session\"]) {\n tablesSchema[\"user\"] = co.list(\n co\n .map({\n ...tablesSchema[\"user\"].element.shape,\n sessions: tablesSchema[\"session\"],\n })\n .withMigration((user) => {\n if (user.sessions === undefined) {\n user.$jazz.set(\n \"sessions\",\n tablesSchema[\"session\"]!.create([], user.$jazz.owner),\n );\n }\n }),\n );\n } else {\n throw new Error(\n \"Cannot find user and session tables, sessions will not be persisted\",\n );\n }\n\n return tablesSchema;\n}\n\nfunction convertFieldToCoValue(field: DBFieldAttribute) {\n let zodType: ZodPrimitiveSchema | ZodOptionalPrimitiveSchema;\n\n switch (field.type) {\n case \"string\":\n zodType = z.string();\n break;\n case \"number\":\n zodType = z.number();\n break;\n case \"boolean\":\n zodType = z.boolean();\n break;\n case \"date\":\n zodType = z.date();\n break;\n default:\n throw new Error(`Unsupported field type: ${field.type}`);\n }\n\n if (field.required === false) {\n zodType = zodType.optional();\n }\n\n return zodType;\n}\n\nexport function tableItem2Record(\n tableItem: TableItem | null | undefined,\n): Record<string, any> | null | undefined {\n if (!tableItem) {\n return tableItem;\n }\n\n // tableItem.toJSON() transforms Date objects to ISO strings\n // by returning ...rest, we keep the objects\n const { $jazz, ...rest } = tableItem;\n return {\n ...rest,\n id: $jazz.id,\n };\n}\n"],"mappings":"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","names":["node","list","user","co","z","co","z","co","z","worker"]}
1
+ {"version":3,"sources":["../../../src/better-auth/database-adapter/index.ts","../../../src/better-auth/database-adapter/utils.ts","../../../src/better-auth/database-adapter/repository/generic.ts","../../../src/better-auth/database-adapter/repository/user.ts","../../../src/better-auth/database-adapter/repository/session.ts","../../../src/better-auth/database-adapter/repository/verification.ts","../../../src/better-auth/database-adapter/repository/account.ts","../../../src/better-auth/database-adapter/schema.ts"],"sourcesContent":["import {\n createAdapterFactory,\n type DBAdapterDebugLogOption,\n} from \"better-auth/adapters\";\nimport type { Account } from \"jazz-tools\";\nimport { startWorker } from \"jazz-tools/worker\";\nimport {\n JazzRepository,\n UserRepository,\n SessionRepository,\n VerificationRepository,\n AccountRepository,\n} from \"./repository/index.js\";\nimport { createJazzSchema, tableItem2Record } from \"./schema.js\";\n\nexport interface JazzAdapterConfig {\n /**\n * Helps you debug issues with the adapter.\n */\n debugLogs?: DBAdapterDebugLogOption;\n /**\n * The sync server to use.\n */\n syncServer: string;\n /**\n * The worker account ID to use.\n */\n accountID: string;\n /**\n * The worker account secret to use.\n */\n accountSecret: string;\n}\n\n/**\n * Creates a Better Auth database adapter that integrates with Jazz framework.\n *\n * This adapter provides a seamless integration between Better Auth and Jazz,\n * allowing you to use Jazz as database for for Better Auth's authentication system.\n *\n * @param config - Configuration object for the Jazz Better Auth adapter\n * @param config.syncServer - The Jazz sync server URL to connect to (e.g., \"wss://your-sync-server.com\")\n * @param config.accountID - The worker account ID for the Jazz worker that will handle auth operations\n * @param config.accountSecret - The worker account secret for authenticating with the Jazz sync server\n * @param config.debugLogs - Optional debug logging configuration to help troubleshoot adapter issues\n *\n * @returns A Better Auth adapter instance configured to work with Jazz\n *\n * @example\n * ```typescript\n * import { JazzBetterAuthDatabaseAdapter } from \"jazz-tools/better-auth/database-adapter\";\n * import { createAuth } from \"better-auth\";\n *\n * const auth = createAuth({\n * adapter: JazzBetterAuthDatabaseAdapter({\n * syncServer: \"wss://your-jazz-sync-server.com\",\n * accountID: \"auth-worker-account-id\",\n * accountSecret: \"your-worker-account-secret\",\n * }),\n * // ... other auth configuration\n * });\n * ```\n */\nexport const JazzBetterAuthDatabaseAdapter = (\n config: JazzAdapterConfig,\n): ReturnType<typeof createAdapterFactory> =>\n createAdapterFactory({\n config: {\n adapterId: \"jazz-tools-adapter\", // A unique identifier for the adapter.\n adapterName: \"Jazz Tools Adapter\", // The name of the adapter.\n debugLogs: config.debugLogs ?? false, // Whether to enable debug logs.\n supportsJSON: true, // Whether the database supports JSON. (Default: false)\n supportsDates: true, // Whether the database supports dates. (Default: true)\n supportsBooleans: true, // Whether the database supports booleans. (Default: true)\n supportsNumericIds: false, // Whether the database supports auto-incrementing numeric IDs. (Default: true)\n disableIdGeneration: true,\n },\n adapter: ({ schema }) => {\n const JazzSchema = createJazzSchema(schema);\n\n let worker: Account | undefined = undefined;\n\n async function getWorker(): Promise<Account> {\n if (worker) {\n return worker;\n }\n\n const result = await startWorker({\n AccountSchema: JazzSchema.WorkerAccount,\n syncServer: config.syncServer,\n accountID: config.accountID,\n accountSecret: config.accountSecret,\n skipInboxLoad: true,\n asActiveAccount: false,\n });\n\n worker = result.worker;\n\n return result.worker;\n }\n\n async function initRepository(\n model: string,\n ensureSync: boolean = false,\n ): Promise<JazzRepository> {\n let Repository: typeof JazzRepository | undefined = undefined;\n switch (model) {\n case \"user\":\n Repository = UserRepository;\n break;\n case \"session\":\n Repository = SessionRepository;\n break;\n case \"verification\":\n Repository = VerificationRepository;\n break;\n case \"account\":\n Repository = AccountRepository;\n break;\n }\n\n if (!Repository) {\n Repository = JazzRepository;\n }\n\n const worker = await getWorker();\n const database = await JazzSchema.loadDatabase(worker);\n\n const repository = new Repository(\n JazzSchema.DatabaseRoot,\n database,\n worker,\n schema,\n ensureSync,\n );\n\n return repository;\n }\n\n return {\n create: async ({ data, model, select }): Promise<any> => {\n // console.log(\"create\", { data, model, select });\n const repository = await initRepository(model, true);\n\n const created = await repository.create(model, data);\n\n await repository.ensureSync();\n\n return tableItem2Record(created);\n },\n update: async ({ model, where, update }): Promise<any> => {\n // console.log(\"update\", { model, where, update });\n const repository = await initRepository(model, true);\n\n const updated = await repository.update(\n model,\n where,\n update as Record<string, any>,\n );\n\n if (updated.length === 0) {\n return null;\n }\n\n await repository.ensureSync();\n\n return tableItem2Record(updated[0]!);\n },\n updateMany: async ({ model, where, update }) => {\n // console.log(\"updateMany\", { model, where, update });\n const repository = await initRepository(model, true);\n\n const updated = await repository.update(model, where, update);\n\n await repository.ensureSync();\n\n return updated.length;\n },\n delete: async ({ model, where }) => {\n // console.log(\"delete\", { model, where });\n const repository = await initRepository(model, true);\n\n await repository.deleteValue(model, where);\n\n await repository.ensureSync();\n },\n findOne: async ({ model, where }): Promise<any> => {\n // console.log(\"findOne\", { model, where });\n const repository = await initRepository(model);\n\n const item = await repository.findOne(model, where);\n\n return tableItem2Record(item);\n },\n findMany: async ({\n model,\n where,\n limit,\n sortBy,\n offset,\n }): Promise<any[]> => {\n const repository = await initRepository(model);\n\n const items = await repository.findMany(\n model,\n where,\n limit,\n sortBy,\n offset,\n );\n\n return items.map(tableItem2Record);\n },\n deleteMany: async ({ model, where }) => {\n const repository = await initRepository(model, true);\n\n const deleted = await repository.deleteValue(model, where);\n\n await repository.ensureSync();\n\n return deleted;\n },\n count: async ({ model, where }) => {\n // console.log(\"count\", { model, where });\n const repository = await initRepository(model);\n\n return repository.count(model, where);\n },\n };\n },\n });\n","import { CleanedWhere } from \"better-auth/adapters\";\n\nexport function filterListByWhere<T>(\n data: T[],\n where: CleanedWhere[] | undefined,\n): T[] {\n if (!Array.isArray(data)) {\n throw new Error(\"Expected data to be an array\");\n }\n\n if (where === undefined) {\n return data;\n }\n\n if (!Array.isArray(where)) {\n throw new Error(\"Expected where to be an array\");\n }\n\n // Helper to evaluate a single condition\n function evaluateCondition(item: any, condition: CleanedWhere): boolean {\n const { field, operator, value } = condition;\n const itemValue = field === \"id\" ? item.$jazz.id : item[field];\n\n switch (operator) {\n case \"eq\":\n return itemValue === value;\n case \"ne\":\n return itemValue !== value;\n case \"lt\":\n return value !== null && itemValue < value;\n case \"lte\":\n return value !== null && itemValue <= value;\n case \"gt\":\n return value !== null && itemValue > value;\n case \"gte\":\n return value !== null && itemValue >= value;\n case \"in\":\n return Array.isArray(value)\n ? (value as (string | number | boolean | Date)[]).includes(itemValue)\n : false;\n case \"not_in\":\n return Array.isArray(value)\n ? !(value as (string | number | boolean | Date)[]).includes(itemValue)\n : false;\n case \"contains\":\n return typeof itemValue === \"string\" && typeof value === \"string\"\n ? itemValue.includes(value)\n : false;\n case \"starts_with\":\n return typeof itemValue === \"string\" && typeof value === \"string\"\n ? itemValue.startsWith(value)\n : false;\n case \"ends_with\":\n return typeof itemValue === \"string\" && typeof value === \"string\"\n ? itemValue.endsWith(value)\n : false;\n default:\n throw new Error(`Unsupported operator: ${operator}`);\n }\n }\n\n // Group conditions by connector (AND/OR)\n // If no connector, default to AND between all\n return data.filter((item) => {\n let result: boolean = true;\n for (let i = 0; i < where.length; i++) {\n const condition = where[i]!;\n const matches = evaluateCondition(item, condition);\n if (i === 0) {\n result = matches;\n } else {\n const connector = condition.connector || \"AND\";\n if (connector === \"AND\") {\n result = result && matches;\n } else if (connector === \"OR\") {\n result = result || matches;\n } else {\n throw new Error(`Unsupported connector: ${connector}`);\n }\n }\n }\n return result;\n });\n}\n\nexport function sortListByField<T extends Record<string, any> | null>(\n data: T[],\n sort?: { field: string; direction: \"asc\" | \"desc\" },\n): T[] {\n if (!sort) {\n return data;\n }\n\n const { field, direction } = sort;\n\n data.sort((a, b) => {\n if (a === null || b === null) {\n return 0;\n }\n\n if (typeof a[field] === \"string\" && typeof b[field] === \"string\") {\n return direction === \"asc\"\n ? a[field].localeCompare(b[field])\n : b[field].localeCompare(a[field]);\n }\n\n return direction === \"asc\" ? a[field] - b[field] : b[field] - a[field];\n });\n\n return data;\n}\n\nexport function paginateList<T>(\n data: T[],\n limit: number | undefined,\n offset: number | undefined,\n): T[] {\n if (offset === undefined && limit === undefined) {\n return data;\n }\n\n if (limit === 0) {\n return [];\n }\n\n let start = offset ?? 0;\n if (start < 0) {\n start = 0;\n }\n\n const end = limit ? start + limit : undefined;\n return data.slice(start, end);\n}\n\nfunction isWhereByField(field: string, where: CleanedWhere): boolean {\n return (\n where.field === field &&\n where.operator === \"eq\" &&\n where.connector === \"AND\"\n );\n}\n\nexport function isWhereBySingleField<T extends string>(\n field: T,\n where: CleanedWhere[] | undefined,\n): where is [{ field: T; operator: \"eq\"; value: string; connector: \"AND\" }] {\n if (where === undefined || where.length !== 1) {\n return false;\n }\n\n const [cond] = where;\n if (!cond) {\n return false;\n }\n\n return isWhereByField(field, cond);\n}\n\nexport function containWhereByField<T extends string>(\n field: T,\n where: CleanedWhere[] | undefined,\n): boolean {\n if (where === undefined) {\n return false;\n }\n\n return where.some((cond) => isWhereByField(field, cond));\n}\n\nexport function extractWhereByField<T extends string>(\n field: T,\n where: CleanedWhere[] | undefined,\n): [CleanedWhere | undefined, CleanedWhere[]] {\n if (where === undefined) {\n return [undefined, []];\n }\n\n return [\n where.find((cond) => isWhereByField(field, cond)),\n where.filter((cond) => !isWhereByField(field, cond)),\n ];\n}\n","import { CleanedWhere } from \"better-auth/adapters\";\nimport { BetterAuthDBSchema } from \"better-auth/db\";\nimport { Account, CoList, CoMap, Group, co } from \"jazz-tools\";\nimport type { Database, TableItem } from \"../schema.js\";\nimport {\n filterListByWhere,\n isWhereBySingleField,\n paginateList,\n sortListByField,\n} from \"../utils.js\";\n\nexport class JazzRepository {\n protected databaseSchema: Database;\n protected databaseRoot: co.loaded<Database, { group: true }>;\n protected worker: Account;\n protected owner: Group;\n protected betterAuthSchema: BetterAuthDBSchema;\n\n private coValuesTracker:\n | {\n done: () => Set<`co_z${string}`>;\n }\n | undefined = undefined;\n\n constructor(\n databaseSchema: Database,\n databaseRoot: co.loaded<Database, { group: true }>,\n worker: Account,\n betterAuthSchema: BetterAuthDBSchema = {},\n ensureSync: boolean = false,\n ) {\n this.databaseSchema = databaseSchema;\n this.databaseRoot = databaseRoot;\n this.worker = worker;\n this.owner = databaseRoot.group;\n this.betterAuthSchema = betterAuthSchema;\n\n if (ensureSync)\n this.coValuesTracker =\n worker.$jazz.raw.core.node.syncManager.trackDirtyCoValues();\n }\n\n ensureSync() {\n if (!this.coValuesTracker)\n throw new Error(\"Repository wasn't initialized with ensureSync option\");\n\n return Promise.all(\n Array.from(this.coValuesTracker.done(), (id) =>\n this.worker.$jazz.raw.core.node.syncManager.waitForSync(id),\n ),\n );\n }\n\n async create(\n model: string,\n data: Record<string, any>,\n uniqueId?: string,\n ): Promise<TableItem> {\n const schema = this.getSchema(model);\n\n const resolved = await this.databaseRoot.$jazz.ensureLoaded({\n resolve: {\n tables: {\n [model]: true,\n },\n },\n });\n\n const list = resolved.tables?.[model] as unknown as CoList<CoMap>;\n\n if (!uniqueId) {\n // Use the same owner of the table.\n const node = schema.create(\n {\n ...data,\n _deleted: false,\n },\n {\n owner: list.$jazz.owner,\n },\n );\n\n list.$jazz.push(node);\n\n return node;\n }\n\n // If we have a unique id, we must check for soft deleted items first\n const existingNode = await schema.loadUnique(\n uniqueId,\n list.$jazz.owner.$jazz.id,\n {\n loadAs: this.worker,\n },\n );\n\n // if the entity exists and is not soft deleted, we must throw an error\n if (\n existingNode.$isLoaded &&\n existingNode.$jazz.raw.get(\"_deleted\") !== true\n ) {\n throw new Error(\"Entity already exists\");\n }\n\n // create the entity or update the deleted one\n const node = await schema.upsertUnique({\n value: {\n ...data,\n _deleted: false,\n },\n owner: list.$jazz.owner,\n unique: uniqueId,\n });\n\n if (!node.$isLoaded) {\n throw new Error(\"Unable to create entity\");\n }\n\n list.$jazz.push(node);\n\n return node;\n }\n\n async findOne(\n model: string,\n where: CleanedWhere[],\n ): Promise<TableItem | null> {\n return this.findMany(model, where, 1).then((users) => users?.at(0) ?? null);\n }\n\n async findById(\n model: string,\n where: [{ field: \"id\"; operator: \"eq\"; value: string; connector: \"AND\" }],\n ): Promise<TableItem | null> {\n const id = where[0]!.value;\n\n if (!id.startsWith(\"co_\")) {\n return null;\n }\n\n const node = await this.getSchema(model).load(id, { loadAs: this.worker });\n\n if (!node.$isLoaded) {\n return null;\n }\n\n if (node.$jazz.raw.get(\"_deleted\")) {\n return null;\n }\n\n return node;\n }\n\n async findByUnique(\n model: string,\n where: [{ field: string; operator: \"eq\"; value: string; connector: \"AND\" }],\n ): Promise<TableItem | null> {\n const value = where[0]!.value;\n\n const node = await this.getSchema(model).loadUnique(\n value,\n this.owner.$jazz.id,\n {\n loadAs: this.worker,\n },\n );\n\n if (!node.$isLoaded) {\n return null;\n }\n\n if (node.$jazz.raw.get(\"_deleted\")) {\n return null;\n }\n\n return node;\n }\n\n async findMany(\n model: string,\n where: CleanedWhere[] | undefined,\n limit?: number,\n sortBy?: { field: string; direction: \"asc\" | \"desc\" },\n offset?: number,\n ): Promise<TableItem[]> {\n // ensure schema exists\n this.getSchema(model);\n\n if (isWhereBySingleField(\"id\", where)) {\n return this.findById(model, where).then((node) => (node ? [node] : []));\n }\n\n const resolvedRoot = await this.databaseRoot.$jazz.ensureLoaded({\n resolve: {\n tables: {\n [model]: {\n $each: true,\n },\n },\n },\n });\n\n const list = resolvedRoot.tables?.[model] as CoList<CoMap> | undefined;\n\n if (!list) {\n return [];\n }\n\n return this.filterSortPaginateList(list, where, limit, sortBy, offset);\n }\n\n async update(\n model: string,\n where: CleanedWhere[],\n update: Record<string, any>,\n ): Promise<TableItem[]> {\n const nodes = await this.findMany(model, where);\n\n if (nodes.length === 0) {\n return [];\n }\n\n for (const node of nodes) {\n for (const [key, value] of Object.entries(\n update as Record<string, any>,\n )) {\n node.$jazz.set(key, value);\n }\n }\n\n return nodes;\n }\n\n async deleteValue(model: string, where: CleanedWhere[]): Promise<number> {\n const items = await this.findMany(model, where);\n\n if (items.length === 0) {\n return 0;\n }\n\n const resolved = await this.databaseRoot.$jazz.ensureLoaded({\n resolve: {\n tables: {\n [model]: {\n $each: true,\n },\n },\n },\n });\n\n if (!resolved) {\n throw new Error(\"Unable to load values\");\n }\n\n const list = resolved?.tables?.[model] as unknown as CoList<CoMap>;\n\n for (const toBeDeleted of items) {\n // Get entries without trigger the shallow load\n const index = [...list.entries()].findIndex(\n ([_, value]) => value && value.$jazz.id === toBeDeleted.$jazz.id,\n );\n\n toBeDeleted.$jazz.set(\"_deleted\", true);\n\n if (index !== -1) {\n list.$jazz.remove(index);\n }\n }\n\n return items.length;\n }\n\n async count(\n model: string,\n where: CleanedWhere[] | undefined,\n ): Promise<number> {\n return this.findMany(model, where).then((values) => values.length);\n }\n\n protected getSchema(model: string) {\n const schema = this.databaseSchema.shape.tables.shape[model]?.element;\n if (!schema) {\n throw new Error(`Schema for model \"${model}\" not found`);\n }\n return schema;\n }\n\n protected filterSortPaginateList<T extends TableItem>(\n list: CoList<CoMap | null>,\n where: CleanedWhere[] | undefined,\n limit?: number,\n sortBy?: { field: string; direction: \"asc\" | \"desc\" },\n offset?: number,\n ): T[] {\n // ignore nullable values and soft deleted items\n return [\n list.filter(\n (item) => item !== null && item.$jazz.raw.get(\"_deleted\") !== true,\n ),\n ]\n .map((list) => filterListByWhere(list, where))\n .map((list) => sortListByField(list, sortBy))\n .map((list) => paginateList(list, limit, offset))\n .at(0)! as T[];\n }\n}\n","import { CleanedWhere } from \"better-auth/adapters\";\nimport { co, z } from \"jazz-tools\";\nimport { JazzRepository } from \"./generic\";\nimport { isWhereBySingleField } from \"../utils\";\nimport type { TableItem } from \"../schema\";\n\nconst EmailIndex = co.map({ user: z.string().nullable() });\n\nexport class UserRepository extends JazzRepository {\n /**\n * Custom logic:\n * - sessions are stored inside the user object\n * - keep sync email index\n */\n async create(\n model: string,\n data: Record<string, any>,\n uniqueId?: string,\n ): Promise<TableItem> {\n const SessionListSchema = this.databaseSchema.shape.tables.shape.session;\n\n if (!SessionListSchema) {\n throw new Error(\"Session list schema not found\");\n }\n\n const userEmail = data[this.getEmailProperty()] as string;\n\n const emailIndex = await this.loadEmailIndex(userEmail);\n\n if (emailIndex.$isLoaded && emailIndex.user) {\n throw new Error(\"Email already exists\");\n }\n\n const user = await super.create(\n model,\n {\n sessions: [],\n ...data,\n },\n uniqueId,\n );\n\n await this.updateEmailIndex(userEmail, user.$jazz.id);\n\n user.$jazz.set(\n \"sessions\",\n co.list(SessionListSchema).create([], user.$jazz.owner),\n );\n\n return user;\n }\n\n /**\n * Custom logic:\n * - if the email is in the where clause, find by email\n */\n async findMany(\n model: string,\n where: CleanedWhere[] | undefined,\n limit?: number,\n sortBy?: { field: string; direction: \"asc\" | \"desc\" },\n offset?: number,\n ): Promise<TableItem[]> {\n if (isWhereBySingleField(\"email\", where)) {\n return this.findByEmail(where[0].value as string);\n }\n\n return super.findMany(model, where, limit, sortBy, offset);\n }\n\n private getEmailProperty(): string {\n return this.betterAuthSchema.user?.fields.email?.fieldName || \"email\";\n }\n\n private async findByEmail(email: string): Promise<TableItem[]> {\n const emailIndex = await this.loadEmailIndex(email);\n\n if (!emailIndex.$isLoaded) {\n return [];\n }\n\n const user = emailIndex.user;\n\n if (!user) {\n return [];\n }\n\n return this.findById(\"user\", [\n { field: \"id\", operator: \"eq\", value: user, connector: \"AND\" },\n ]).then((user) => (user ? [user] : []));\n }\n\n /**\n * Custom logic:\n * - if the email is changed, update the email index\n */\n async update(\n model: string,\n where: CleanedWhere[],\n update: Record<string, any>,\n ): Promise<TableItem[]> {\n const nodes = await this.findMany(model, where);\n if (nodes.length === 0) {\n return [];\n }\n\n const newEmail = (update as Record<string, any>)[this.getEmailProperty()] as\n | string\n | undefined;\n\n for (const node of nodes) {\n const oldEmail = node.$jazz.raw.get(this.getEmailProperty()) as\n | string\n | undefined;\n for (const [key, value] of Object.entries(\n update as Record<string, any>,\n )) {\n node.$jazz.set(key, value);\n }\n\n // if the email is changed, update the email index\n if (\n oldEmail !== newEmail &&\n oldEmail !== undefined &&\n newEmail !== undefined\n ) {\n await this.updateEmailIndex(oldEmail, null);\n await this.updateEmailIndex(newEmail, node.$jazz.id);\n }\n }\n\n return nodes;\n }\n\n async deleteValue(model: string, where: CleanedWhere[]): Promise<number> {\n const nodes = await this.findMany(model, where);\n\n const deleted = await super.deleteValue(model, where);\n\n for (const node of nodes) {\n const email = node.$jazz.raw.get(this.getEmailProperty()) as\n | string\n | undefined;\n if (email) {\n await this.updateEmailIndex(email, null);\n }\n }\n\n return deleted;\n }\n\n private async loadEmailIndex(email: string) {\n const emailIndex = await EmailIndex.loadUnique(email, this.owner.$jazz.id, {\n loadAs: this.worker,\n });\n\n return emailIndex;\n }\n\n private async updateEmailIndex(email: string, userId: string | null) {\n await EmailIndex.upsertUnique({\n value: {\n user: userId,\n },\n unique: email,\n owner: this.owner,\n });\n }\n}\n","import { BetterAuthDBSchema } from \"better-auth/db\";\nimport { CleanedWhere } from \"better-auth/adapters\";\nimport { co, Account } from \"jazz-tools\";\nimport { JazzRepository } from \"./generic\";\nimport { UserRepository } from \"./user\";\nimport {\n containWhereByField,\n extractWhereByField,\n filterListByWhere,\n isWhereBySingleField,\n} from \"../utils\";\nimport type { Database, TableItem } from \"../schema\";\n\ntype UserSchema = co.Map<{\n sessions: co.List<co.Map<any>>;\n}>;\n\nexport class SessionRepository extends JazzRepository {\n protected userRepository: UserRepository;\n\n constructor(\n databaseSchema: Database,\n databaseRoot: co.loaded<Database, { group: true }>,\n worker: Account,\n betterAuthSchema: BetterAuthDBSchema = {},\n ensureSync: boolean = false,\n ) {\n super(databaseSchema, databaseRoot, worker, betterAuthSchema, ensureSync);\n\n this.userRepository = new UserRepository(\n databaseSchema,\n databaseRoot,\n worker,\n betterAuthSchema,\n );\n }\n\n /**\n * Custom logic: sessions are stored inside the user object\n */\n async create(\n model: string,\n data: Record<string, any>,\n uniqueId?: string,\n ): Promise<TableItem> {\n if (typeof data.token !== \"string\" || typeof data.userId !== \"string\") {\n throw new Error(\"Token and userId are required for session creation\");\n }\n\n const user = await this.userRepository.findById(\"user\", [\n {\n field: \"id\",\n operator: \"eq\",\n value: data.userId,\n connector: \"AND\",\n },\n ]);\n\n if (!user) {\n throw new Error(\"User not found\");\n }\n\n const { sessions } = await user.$jazz.ensureLoaded({\n resolve: {\n sessions: true,\n },\n });\n\n const session = this.getSchema(\"session\").create(\n {\n ...data,\n _deleted: false,\n },\n {\n unique: data.token,\n owner: this.owner,\n },\n );\n\n sessions.$jazz.push(session);\n\n return session;\n }\n\n /**\n * Custom logic: sessions are stored inside the user object.\n */\n async findMany(\n model: string,\n where: CleanedWhere[] | undefined,\n limit?: number,\n sortBy?: { field: string; direction: \"asc\" | \"desc\" },\n offset?: number,\n ): Promise<TableItem[]> {\n if (isWhereBySingleField(\"id\", where)) {\n return this.findById(model, where).then((node) => (node ? [node] : []));\n }\n\n if (isWhereBySingleField(\"token\", where)) {\n return this.findByUnique(model, where).then((node) =>\n node ? [node] : [],\n );\n }\n\n if (containWhereByField(\"userId\", where)) {\n const [userIdWhere, otherWhere] = extractWhereByField(\"userId\", where);\n\n const user = await this.userRepository.findById(\"user\", [\n {\n field: \"id\",\n operator: \"eq\",\n value: userIdWhere!.value as string,\n connector: \"AND\",\n },\n ]);\n\n if (!user) {\n console.warn(\"Trying to find user's sessions, but user not found\");\n return [];\n }\n\n const { sessions } = await user.$jazz.ensureLoaded({\n resolve: {\n sessions: {\n $each: true,\n },\n },\n });\n\n return this.filterSortPaginateList(\n sessions,\n otherWhere,\n limit,\n sortBy,\n offset,\n );\n }\n\n throw new Error(\n \"Unable to find session with where: \" + JSON.stringify(where),\n );\n }\n\n /**\n * Custom logic: sessions are stored inside the user object.\n */\n async deleteValue(model: string, where: CleanedWhere[]): Promise<number> {\n const items = await this.findMany(model, where);\n if (items.length === 0) {\n return 0;\n }\n\n const userId = items[0]!.userId;\n\n return this.deleteSession(userId, items);\n }\n\n private async deleteSession(\n userId: string,\n items: TableItem[],\n ): Promise<number> {\n const user = await this.userRepository.findById(\"user\", [\n {\n field: \"id\",\n operator: \"eq\",\n value: userId,\n connector: \"AND\",\n },\n ]);\n\n if (!user) {\n throw new Error(\"User not found\");\n }\n\n const { sessions } = await user.$jazz.ensureLoaded({\n resolve: {\n sessions: true,\n },\n });\n\n for (const toBeDeleted of items) {\n // Get entries without trigger the shallow load\n const index = [...sessions.entries()].findIndex(\n ([_, value]) => value && value.$jazz.id === toBeDeleted.$jazz.id,\n );\n\n toBeDeleted.$jazz.set(\"_deleted\", true);\n\n if (index !== -1) {\n sessions.$jazz.remove(index);\n }\n }\n\n return items.length;\n }\n}\n","import { CleanedWhere } from \"better-auth/adapters\";\nimport { JazzRepository } from \"./generic\";\nimport { isWhereBySingleField } from \"../utils\";\nimport type { TableItem } from \"../schema\";\n\nexport class VerificationRepository extends JazzRepository {\n /**\n * Custom logic: property identifier is used as uniqueId\n */\n async create(\n model: string,\n data: Record<string, any>,\n uniqueId?: string,\n ): Promise<TableItem> {\n return super.create(model, data, data[\"identifier\"]);\n }\n\n /**\n * Custom logic: property identifier is used as uniqueId\n * If we look for identifier, we use findByUnique instead of findMany\n */\n async findMany(\n model: string,\n where: CleanedWhere[] | undefined,\n limit?: number,\n sortBy?: { field: string; direction: \"asc\" | \"desc\" },\n offset?: number,\n ): Promise<TableItem[]> {\n if (isWhereBySingleField(\"identifier\", where)) {\n return this.findByUnique(model, where).then((node) =>\n node ? [node] : [],\n );\n }\n\n return super.findMany(model, where, limit, sortBy, offset);\n }\n}\n","import { CleanedWhere } from \"better-auth/adapters\";\nimport { co, z } from \"jazz-tools\";\nimport { JazzRepository } from \"./generic\";\nimport { isWhereBySingleField } from \"../utils\";\nimport type { TableItem } from \"../schema\";\n\n/**\n * This list stores an array of covalues ID\n * mapped by the accountID property.\n * Because accountId is not unique, and it is used on every social login\n */\nconst AccountIdIndex = co.list(z.string());\n\nexport class AccountRepository extends JazzRepository {\n /**\n * Custom logic:\n * - keep sync accountId index\n */\n async create(\n model: string,\n data: Record<string, any>,\n uniqueId?: string,\n ): Promise<TableItem> {\n const account = await super.create(model, data, uniqueId);\n\n await this.updateAccountIdIndex(\n account[this.getAccountIdProperty()],\n account.$jazz.id,\n );\n\n return account;\n }\n\n /**\n * Custom logic:\n * - if the accountId is in the where clause, get the ids from the index\n */\n async findMany(\n model: string,\n where: CleanedWhere[] | undefined,\n limit?: number,\n sortBy?: { field: string; direction: \"asc\" | \"desc\" },\n offset?: number,\n ): Promise<TableItem[]> {\n if (isWhereBySingleField(this.getAccountIdProperty(), where)) {\n const accountIdIndex = await this.getAccountIdIndex(where[0].value);\n\n const ids = accountIdIndex.$isLoaded ? accountIdIndex : [];\n\n if (ids.length === 0) {\n return [];\n }\n\n // except for accountId clashing from different social providers,\n // ids should contain a single id, max two\n const results = await Promise.all(\n ids.map((id) =>\n super.findById(model, [\n { field: \"id\", operator: \"eq\", value: id, connector: \"AND\" },\n ]),\n ),\n );\n\n return results.filter((value) => value !== null);\n }\n\n return super.findMany(model, where, limit, sortBy, offset);\n }\n\n async deleteValue(model: string, where: CleanedWhere[]): Promise<number> {\n const nodes = await this.findMany(model, where);\n\n const deleted = await super.deleteValue(model, where);\n\n for (const node of nodes) {\n const accountId = node.$jazz.raw.get(this.getAccountIdProperty()) as\n | string\n | undefined;\n\n if (accountId) {\n await this.deleteAccountIdIndex(accountId, node.$jazz.id);\n }\n }\n\n return deleted;\n }\n\n private async getAccountIdIndex(accountId: string) {\n const indexUnique = this.getAccountIdProperty() + \"_\" + accountId;\n\n const accountIdIndex = await AccountIdIndex.loadUnique(\n indexUnique,\n this.owner.$jazz.id,\n {\n loadAs: this.worker,\n },\n );\n\n return accountIdIndex;\n }\n\n private async updateAccountIdIndex(accountId: string, entityId: string) {\n const accountIdIndex = await this.getAccountIdIndex(accountId);\n\n const ids = accountIdIndex.$isLoaded ? accountIdIndex : [];\n\n await AccountIdIndex.upsertUnique({\n value: [...ids, entityId],\n unique: this.getAccountIdProperty() + \"_\" + accountId,\n owner: this.owner,\n });\n }\n\n private async deleteAccountIdIndex(accountId: string, entityId: string) {\n const accountIdIndex = await this.getAccountIdIndex(accountId);\n\n const ids = accountIdIndex.$isLoaded ? accountIdIndex : [];\n\n await AccountIdIndex.upsertUnique({\n value: ids.filter((id) => id !== entityId),\n unique: this.getAccountIdProperty() + \"_\" + accountId,\n owner: this.owner,\n });\n }\n\n private getAccountIdProperty(): string {\n return (\n this.betterAuthSchema.account?.fields.accountId?.fieldName || \"accountId\"\n );\n }\n}\n","import { BetterAuthDBSchema, DBFieldAttribute } from \"better-auth/db\";\nimport { Group, co, z } from \"jazz-tools\";\n\ntype TableRow = co.Map<any>;\nexport type TableItem = co.loaded<TableRow>;\n\ntype Table = co.List<TableRow>;\nexport type Database = co.Map<{\n group: typeof Group;\n tables: co.Map<{\n [key: string]: Table;\n }>;\n}>;\n\ntype WorkerAccount = co.Account<{\n profile: co.Profile;\n root: co.Map<any>;\n}>;\n\ntype JazzSchema = {\n WorkerAccount: WorkerAccount;\n DatabaseRoot: Database;\n betterAuthSchema: BetterAuthDBSchema;\n loadDatabase: (\n account: co.loaded<co.Account>,\n options?: Parameters<Database[\"loadUnique\"]>[2],\n ) => Promise<co.loaded<Database, { group: true }>>;\n};\n\nconst DATABASE_ROOT_ID = \"better-auth-root\";\n\nexport function createJazzSchema(schema: BetterAuthDBSchema): JazzSchema {\n const tablesSchema = generateSchemaFromBetterAuthSchema(schema);\n\n const DatabaseRoot: Database = co.map({\n group: Group,\n tables: co.map(tablesSchema),\n });\n\n const WorkerAccount: WorkerAccount = co\n .account({\n profile: co.profile(),\n root: co.map({}),\n })\n .withMigration(async (account) => {\n const dbRoot = await DatabaseRoot.loadUnique(\n DATABASE_ROOT_ID,\n account.$jazz.id,\n {\n resolve: {\n group: true,\n tables: true,\n },\n loadAs: account,\n },\n );\n\n if (!dbRoot.$isLoaded) {\n // Create a group for the first time\n // it will be the owner of the all tables and data\n const adminGroup = Group.create({ owner: account });\n await DatabaseRoot.upsertUnique({\n value: {\n group: adminGroup,\n // create empty tables for each model\n tables: co\n .map(tablesSchema)\n .create(\n Object.fromEntries(\n Object.entries(tablesSchema).map(([key, value]) => [\n key,\n value.create([], adminGroup),\n ]),\n ),\n adminGroup,\n ),\n },\n unique: DATABASE_ROOT_ID,\n owner: account,\n });\n } else {\n // partial migrations\n for (const [key, value] of Object.entries(\n DatabaseRoot.shape.tables.shape,\n )) {\n if (dbRoot.tables[key] === undefined) {\n dbRoot.tables.$jazz.set(key, value.create([], dbRoot.group));\n }\n }\n }\n });\n\n return {\n WorkerAccount,\n DatabaseRoot,\n betterAuthSchema: schema,\n async loadDatabase(account, options) {\n if (\n options?.resolve === false ||\n (typeof options?.resolve === \"object\" &&\n options?.resolve.group !== true)\n ) {\n throw new Error(\"Group is required to load the database\");\n }\n\n const db = (await DatabaseRoot.loadUnique(\n DATABASE_ROOT_ID,\n account.$jazz.id,\n {\n resolve: {\n group: true,\n tables: true,\n },\n loadAs: account,\n ...options,\n },\n )) as co.loaded<Database, { group: true }>;\n\n if (!db) {\n throw new Error(\"Database not found\");\n }\n\n return db;\n },\n };\n}\n\ntype ZodPrimitiveSchema =\n | z.z.ZodString\n | z.z.ZodNumber\n | z.z.ZodBoolean\n | z.z.ZodNull\n | z.z.ZodDate\n | z.z.ZodLiteral;\ntype ZodOptionalPrimitiveSchema = z.z.ZodOptional<ZodPrimitiveSchema>;\n\nfunction generateSchemaFromBetterAuthSchema(schema: BetterAuthDBSchema) {\n const tablesSchema: Record<string, Table> = {};\n\n for (const [key, value] of Object.entries(schema)) {\n const modelShape: Record<\n string,\n ZodPrimitiveSchema | ZodOptionalPrimitiveSchema\n > = {\n _deleted: z.boolean(),\n };\n\n for (const [fieldName, field] of Object.entries(value.fields)) {\n modelShape[field.fieldName || fieldName] = convertFieldToCoValue(field);\n }\n\n const coMap = co.map(modelShape);\n tablesSchema[key] = co.list(coMap);\n }\n\n if (tablesSchema[\"user\"] && tablesSchema[\"session\"]) {\n tablesSchema[\"user\"] = co.list(\n co\n .map({\n ...tablesSchema[\"user\"].element.shape,\n sessions: tablesSchema[\"session\"],\n })\n .withMigration((user) => {\n if (user.sessions === undefined) {\n user.$jazz.set(\n \"sessions\",\n tablesSchema[\"session\"]!.create([], user.$jazz.owner),\n );\n }\n }),\n );\n } else {\n throw new Error(\n \"Cannot find user and session tables, sessions will not be persisted\",\n );\n }\n\n return tablesSchema;\n}\n\nfunction convertFieldToCoValue(field: DBFieldAttribute) {\n let zodType: ZodPrimitiveSchema | ZodOptionalPrimitiveSchema;\n\n switch (field.type) {\n case \"string\":\n zodType = z.string();\n break;\n case \"number\":\n zodType = z.number();\n break;\n case \"boolean\":\n zodType = z.boolean();\n break;\n case \"date\":\n zodType = z.date();\n break;\n default:\n throw new Error(`Unsupported field type: ${field.type}`);\n }\n\n if (field.required === false) {\n zodType = zodType.optional();\n }\n\n return zodType;\n}\n\nexport function tableItem2Record(\n tableItem: TableItem | null | undefined,\n): Record<string, any> | null | undefined {\n if (!tableItem) {\n return tableItem;\n }\n\n // tableItem.toJSON() transforms Date objects to ISO strings\n // by returning ...rest, we keep the objects\n const { $jazz, ...rest } = tableItem;\n return {\n ...rest,\n id: $jazz.id,\n };\n}\n"],"mappings":"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","names":["node","list","user","co","z","co","z","co","z","worker"]}
@@ -1 +1 @@
1
- {"version":3,"file":"generic.d.ts","sourceRoot":"","sources":["../../../../src/better-auth/database-adapter/repository/generic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generic.d.ts","sourceRoot":"","sources":["../../../../src/better-auth/database-adapter/repository/generic.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../src/better-auth/database-adapter/repository/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAOxC,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAMrD,qBAAa,iBAAkB,SAAQ,cAAc;IACnD,SAAS,CAAC,cAAc,EAAE,cAAc,CAAC;gBAGvC,cAAc,EAAE,QAAQ,EACxB,YAAY,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE;QAAE,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC,EAClD,MAAM,EAAE,OAAO,EACf,gBAAgB,GAAE,kBAAuB,EACzC,UAAU,GAAE,OAAe;IAY7B;;OAEG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,CAAC;IAkCrB;;OAEG;IACG,QAAQ,CACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,YAAY,EAAE,GAAG,SAAS,EACjC,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,EACrD,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,EAAE,CAAC;IAkDvB;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YAW1D,aAAa;CAsC5B"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../src/better-auth/database-adapter/repository/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAOxC,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAMrD,qBAAa,iBAAkB,SAAQ,cAAc;IACnD,SAAS,CAAC,cAAc,EAAE,cAAc,CAAC;gBAGvC,cAAc,EAAE,QAAQ,EACxB,YAAY,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE;QAAE,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC,EAClD,MAAM,EAAE,OAAO,EACf,gBAAgB,GAAE,kBAAuB,EACzC,UAAU,GAAE,OAAe;IAY7B;;OAEG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,CAAC;IAwCrB;;OAEG;IACG,QAAQ,CACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,YAAY,EAAE,GAAG,SAAS,EACjC,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,EACrD,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,EAAE,CAAC;IAkDvB;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YAW1D,aAAa;CAsC5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../../src/better-auth/database-adapter/repository/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAI3C,qBAAa,cAAe,SAAQ,cAAc;IAChD;;;;OAIG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,CAAC;IA2BrB;;;OAGG;IACG,QAAQ,CACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,YAAY,EAAE,GAAG,SAAS,EACjC,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,EACrD,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,EAAE,CAAC;IAQvB,OAAO,CAAC,gBAAgB;YAIV,WAAW;IAkBzB;;;OAGG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,YAAY,EAAE,EACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,OAAO,CAAC,SAAS,EAAE,CAAC;IAkCjB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YAiB1D,cAAc;YAQd,gBAAgB;CAS/B"}
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../../src/better-auth/database-adapter/repository/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAI3C,qBAAa,cAAe,SAAQ,cAAc;IAChD;;;;OAIG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,CAAC;IAkCrB;;;OAGG;IACG,QAAQ,CACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,YAAY,EAAE,GAAG,SAAS,EACjC,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,EACrD,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,EAAE,CAAC;IAQvB,OAAO,CAAC,gBAAgB;YAIV,WAAW;IAkBzB;;;OAGG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,YAAY,EAAE,EACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,OAAO,CAAC,SAAS,EAAE,CAAC;IAkCjB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YAiB1D,cAAc;YAQd,gBAAgB;CAS/B"}