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.
- package/.turbo/turbo-build.log +52 -52
- package/CHANGELOG.md +37 -0
- package/dist/better-auth/database-adapter/index.js +27 -8
- package/dist/better-auth/database-adapter/index.js.map +1 -1
- package/dist/better-auth/database-adapter/repository/generic.d.ts.map +1 -1
- package/dist/better-auth/database-adapter/repository/session.d.ts.map +1 -1
- package/dist/better-auth/database-adapter/repository/user.d.ts.map +1 -1
- package/dist/{chunk-G7AMZRMZ.js → chunk-YDZ264RU.js} +4957 -4569
- package/dist/chunk-YDZ264RU.js.map +1 -0
- package/dist/expo/index.js +34 -9
- package/dist/expo/index.js.map +1 -1
- package/dist/expo/storage/expo-sqlite-adapter.d.ts +7 -0
- package/dist/expo/storage/expo-sqlite-adapter.d.ts.map +1 -1
- package/dist/expo/tests/expo-sqlite-adapter.test.d.ts +2 -0
- package/dist/expo/tests/expo-sqlite-adapter.test.d.ts.map +1 -0
- package/dist/index.js +3 -5
- package/dist/index.js.map +1 -1
- package/dist/prosemirror/index.js +29 -1
- package/dist/prosemirror/index.js.map +1 -1
- package/dist/prosemirror/lib/recreateTransform.d.ts +11 -0
- package/dist/prosemirror/lib/recreateTransform.d.ts.map +1 -0
- package/dist/prosemirror/tests/recreateTransform.test.d.ts +2 -0
- package/dist/prosemirror/tests/recreateTransform.test.d.ts.map +1 -0
- package/dist/react-native/index.js +55 -14
- package/dist/react-native/index.js.map +1 -1
- package/dist/react-native/storage/op-sqlite-adapter.d.ts +7 -0
- package/dist/react-native/storage/op-sqlite-adapter.d.ts.map +1 -1
- package/dist/react-native-core/auth/auth.d.ts +1 -1
- package/dist/react-native-core/auth/auth.d.ts.map +1 -1
- package/dist/react-native-core/index.js +21 -6
- package/dist/react-native-core/index.js.map +1 -1
- package/dist/svelte/Provider.svelte +37 -0
- package/dist/svelte/Provider.svelte.d.ts.map +1 -1
- package/dist/testing.js +1 -1
- package/dist/tools/coValues/CoValueBase.d.ts.map +1 -1
- package/dist/tools/coValues/account.d.ts +8 -9
- package/dist/tools/coValues/account.d.ts.map +1 -1
- package/dist/tools/coValues/coFeed.d.ts +16 -27
- package/dist/tools/coValues/coFeed.d.ts.map +1 -1
- package/dist/tools/coValues/coList.d.ts +42 -42
- package/dist/tools/coValues/coList.d.ts.map +1 -1
- package/dist/tools/coValues/coMap.d.ts +29 -276
- package/dist/tools/coValues/coMap.d.ts.map +1 -1
- package/dist/tools/coValues/coPlainText.d.ts +4 -4
- package/dist/tools/coValues/coPlainText.d.ts.map +1 -1
- package/dist/tools/coValues/coVector.d.ts +2 -1
- package/dist/tools/coValues/coVector.d.ts.map +1 -1
- package/dist/tools/coValues/group.d.ts.map +1 -1
- package/dist/tools/coValues/interfaces.d.ts +18 -6
- package/dist/tools/coValues/interfaces.d.ts.map +1 -1
- package/dist/tools/coValues/profile.d.ts +2 -2
- package/dist/tools/coValues/profile.d.ts.map +1 -1
- package/dist/tools/coValues/schemaUnion.d.ts +6 -64
- package/dist/tools/coValues/schemaUnion.d.ts.map +1 -1
- package/dist/tools/exports.d.ts +1 -2
- package/dist/tools/exports.d.ts.map +1 -1
- package/dist/tools/implementation/createContext.d.ts.map +1 -1
- package/dist/tools/implementation/schemaRuntime.d.ts +36 -0
- package/dist/tools/implementation/schemaRuntime.d.ts.map +1 -0
- package/dist/tools/implementation/zodSchema/initializeBuiltinSchemas.d.ts +2 -0
- package/dist/tools/implementation/zodSchema/initializeBuiltinSchemas.d.ts.map +1 -0
- package/dist/tools/implementation/zodSchema/runtimeConverters/coValueSchemaTransformation.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/runtimeConverters/schemaFieldToCoFieldDef.d.ts +3 -4
- package/dist/tools/implementation/zodSchema/runtimeConverters/schemaFieldToCoFieldDef.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaInvariant.d.ts +15 -0
- package/dist/tools/implementation/zodSchema/schemaInvariant.d.ts.map +1 -0
- package/dist/tools/implementation/zodSchema/schemaPermissions.d.ts +5 -0
- package/dist/tools/implementation/zodSchema/schemaPermissions.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/AccountSchema.d.ts +4 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/AccountSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoDiscriminatedUnionSchema.d.ts +2 -0
- package/dist/tools/implementation/zodSchema/schemaTypes/CoDiscriminatedUnionSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoFeedSchema.d.ts +7 -9
- package/dist/tools/implementation/zodSchema/schemaTypes/CoFeedSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoListSchema.d.ts +7 -9
- package/dist/tools/implementation/zodSchema/schemaTypes/CoListSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoMapSchema.d.ts +11 -10
- package/dist/tools/implementation/zodSchema/schemaTypes/CoMapSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoOptionalSchema.d.ts +3 -0
- package/dist/tools/implementation/zodSchema/schemaTypes/CoOptionalSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoRecordSchema.d.ts +9 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoRecordSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoValueSchema.d.ts +2 -0
- package/dist/tools/implementation/zodSchema/schemaTypes/CoValueSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoVectorSchema.d.ts +3 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoVectorSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.d.ts +3 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/GroupSchema.d.ts +3 -0
- package/dist/tools/implementation/zodSchema/schemaTypes/GroupSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/PlainTextSchema.d.ts +3 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/PlainTextSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/RichTextSchema.d.ts +3 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/RichTextSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/schemaValidators.d.ts +18 -0
- package/dist/tools/implementation/zodSchema/schemaTypes/schemaValidators.d.ts.map +1 -0
- package/dist/tools/implementation/zodSchema/unionUtils.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/validationSettings.d.ts +68 -0
- package/dist/tools/implementation/zodSchema/validationSettings.d.ts.map +1 -0
- package/dist/tools/implementation/zodSchema/zodCo.d.ts +1 -1
- package/dist/tools/implementation/zodSchema/zodCo.d.ts.map +1 -1
- package/dist/tools/internal.d.ts +3 -1
- package/dist/tools/internal.d.ts.map +1 -1
- package/dist/tools/testing.d.ts +3 -3
- package/dist/tools/testing.d.ts.map +1 -1
- package/dist/tools/tests/runtimeValidation.test.d.ts +2 -0
- package/dist/tools/tests/runtimeValidation.test.d.ts.map +1 -0
- package/dist/tools/tests/schemaInvariant.test.d.ts +2 -0
- package/dist/tools/tests/schemaInvariant.test.d.ts.map +1 -0
- package/dist/tools/tests/utils.d.ts +2 -0
- package/dist/tools/tests/utils.d.ts.map +1 -1
- package/package.json +4 -5
- package/src/better-auth/database-adapter/repository/generic.ts +9 -3
- package/src/better-auth/database-adapter/repository/session.ts +10 -4
- package/src/better-auth/database-adapter/repository/user.ts +8 -1
- package/src/better-auth/database-adapter/tests/index.test.ts +1 -1
- package/src/better-auth/database-adapter/tests/repository/user.test.ts +0 -55
- package/src/browser/tests/createInviteLink.test.ts +1 -1
- package/src/expo/provider.tsx +1 -1
- package/src/expo/storage/expo-sqlite-adapter.ts +34 -7
- package/src/expo/tests/expo-sqlite-adapter.test.ts +41 -0
- package/src/prosemirror/lib/recreateTransform.ts +48 -0
- package/src/prosemirror/lib/sync.ts +1 -1
- package/src/prosemirror/tests/recreateTransform.test.ts +228 -0
- package/src/react/tests/useAcceptInvite.test.ts +1 -1
- package/src/react-core/tests/useCoState.test.ts +1 -1
- package/src/react-native/provider.tsx +1 -1
- package/src/react-native/storage/op-sqlite-adapter.ts +34 -8
- package/src/react-native-core/auth/auth.ts +26 -7
- package/src/svelte/Provider.svelte +37 -0
- package/src/tools/coValues/CoValueBase.ts +2 -1
- package/src/tools/coValues/account.ts +39 -56
- package/src/tools/coValues/coFeed.ts +104 -62
- package/src/tools/coValues/coList.ts +183 -110
- package/src/tools/coValues/coMap.ts +130 -107
- package/src/tools/coValues/coPlainText.ts +19 -5
- package/src/tools/coValues/coVector.ts +17 -3
- package/src/tools/coValues/group.ts +1 -0
- package/src/tools/coValues/interfaces.ts +58 -14
- package/src/tools/coValues/profile.ts +3 -4
- package/src/tools/coValues/schemaUnion.ts +33 -91
- package/src/tools/exports.ts +1 -2
- package/src/tools/implementation/createContext.ts +3 -0
- package/src/tools/implementation/schemaRuntime.ts +140 -0
- package/src/tools/implementation/zodSchema/initializeBuiltinSchemas.ts +9 -0
- package/src/tools/implementation/zodSchema/runtimeConverters/coValueSchemaTransformation.ts +54 -82
- package/src/tools/implementation/zodSchema/runtimeConverters/schemaFieldToCoFieldDef.ts +168 -176
- package/src/tools/implementation/zodSchema/schemaInvariant.ts +54 -0
- package/src/tools/implementation/zodSchema/schemaPermissions.ts +28 -4
- package/src/tools/implementation/zodSchema/schemaTypes/AccountSchema.ts +20 -0
- package/src/tools/implementation/zodSchema/schemaTypes/CoDiscriminatedUnionSchema.ts +22 -0
- package/src/tools/implementation/zodSchema/schemaTypes/CoFeedSchema.ts +49 -11
- package/src/tools/implementation/zodSchema/schemaTypes/CoListSchema.ts +49 -14
- package/src/tools/implementation/zodSchema/schemaTypes/CoMapSchema.ts +105 -13
- package/src/tools/implementation/zodSchema/schemaTypes/CoOptionalSchema.ts +13 -0
- package/src/tools/implementation/zodSchema/schemaTypes/CoRecordSchema.ts +13 -2
- package/src/tools/implementation/zodSchema/schemaTypes/CoValueSchema.ts +4 -0
- package/src/tools/implementation/zodSchema/schemaTypes/CoVectorSchema.ts +22 -1
- package/src/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.ts +13 -1
- package/src/tools/implementation/zodSchema/schemaTypes/GroupSchema.ts +13 -0
- package/src/tools/implementation/zodSchema/schemaTypes/PlainTextSchema.ts +21 -1
- package/src/tools/implementation/zodSchema/schemaTypes/RichTextSchema.ts +21 -1
- package/src/tools/implementation/zodSchema/schemaTypes/schemaValidators.ts +137 -0
- package/src/tools/implementation/zodSchema/unionUtils.ts +17 -14
- package/src/tools/implementation/zodSchema/validationSettings.ts +113 -0
- package/src/tools/implementation/zodSchema/zodCo.ts +1 -1
- package/src/tools/internal.ts +3 -1
- package/src/tools/subscribe/SubscriptionScope.ts +1 -1
- package/src/tools/tests/coDiscriminatedUnion.test.ts +377 -4
- package/src/tools/tests/coFeed.test-d.ts +22 -0
- package/src/tools/tests/coFeed.test.ts +270 -1
- package/src/tools/tests/coList.test-d.ts +22 -0
- package/src/tools/tests/coList.test.ts +694 -4
- package/src/tools/tests/coMap.record.test.ts +238 -3
- package/src/tools/tests/coMap.test-d.ts +33 -0
- package/src/tools/tests/coMap.test.ts +610 -16
- package/src/tools/tests/coMap.unique.test.ts +45 -0
- package/src/tools/tests/coOptional.test.ts +14 -1
- package/src/tools/tests/deepLoading.test.ts +4 -2
- package/src/tools/tests/group.test.ts +77 -0
- package/src/tools/tests/load.test.ts +30 -0
- package/src/tools/tests/patterns/quest.test.ts +15 -10
- package/src/tools/tests/runtimeValidation.test.ts +438 -0
- package/src/tools/tests/schemaInvariant.test.ts +37 -0
- package/src/tools/tests/schemaUnion.test.ts +1 -1
- package/src/tools/tests/subscribe.test.ts +4 -1
- package/src/tools/tests/utils.ts +42 -1
- package/testSetup.ts +2 -0
- package/dist/chunk-G7AMZRMZ.js.map +0 -1
- package/dist/tools/implementation/schema.d.ts +0 -100
- package/dist/tools/implementation/schema.d.ts.map +0 -1
- package/dist/tools/tests/schema.test.d.ts +0 -2
- package/dist/tools/tests/schema.test.d.ts.map +0 -1
- package/src/tools/implementation/schema.ts +0 -273
- package/src/tools/tests/schema.test.ts +0 -244
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> jazz-tools@0.20.
|
|
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
|
[34mCLI[39m Building entry: {"index":"src/index.ts","testing":"src/testing.ts","tools/ssr":"src/tools/ssr/index.ts"}
|
|
@@ -109,21 +109,21 @@
|
|
|
109
109
|
[34mESM[39m Build start
|
|
110
110
|
[32mESM[39m [1mdist/tiptap/index.js [22m[32m564.00 B[39m
|
|
111
111
|
[32mESM[39m [1mdist/tiptap/index.js.map [22m[32m1.21 KB[39m
|
|
112
|
-
[32mESM[39m ⚡️ Build success in
|
|
113
|
-
[32mESM[39m [1mdist/worker/index.js [22m[32m3.45 KB[39m
|
|
114
|
-
[32mESM[39m [1mdist/worker/edge-wasm.js [22m[32m259.00 B[39m
|
|
115
|
-
[32mESM[39m [1mdist/worker/napi-crypto.js [22m[32m110.00 B[39m
|
|
116
|
-
[32mESM[39m [1mdist/worker/index.js.map [22m[32m6.97 KB[39m
|
|
117
|
-
[32mESM[39m [1mdist/worker/edge-wasm.js.map [22m[32m505.00 B[39m
|
|
118
|
-
[32mESM[39m [1mdist/worker/napi-crypto.js.map [22m[32m162.00 B[39m
|
|
119
|
-
[32mESM[39m ⚡️ Build success in 30ms
|
|
112
|
+
[32mESM[39m ⚡️ Build success in 39ms
|
|
120
113
|
[32mESM[39m [1mdist/better-auth/auth/client.js [22m[32m4.54 KB[39m
|
|
121
114
|
[32mESM[39m [1mdist/better-auth/auth/server.js [22m[32m8.40 KB[39m
|
|
122
115
|
[32mESM[39m [1mdist/better-auth/auth/react.js [22m[32m813.00 B[39m
|
|
123
116
|
[32mESM[39m [1mdist/better-auth/auth/client.js.map [22m[32m8.44 KB[39m
|
|
124
117
|
[32mESM[39m [1mdist/better-auth/auth/server.js.map [22m[32m15.40 KB[39m
|
|
125
118
|
[32mESM[39m [1mdist/better-auth/auth/react.js.map [22m[32m2.07 KB[39m
|
|
126
|
-
[32mESM[39m ⚡️ Build success in
|
|
119
|
+
[32mESM[39m ⚡️ Build success in 33ms
|
|
120
|
+
[32mESM[39m [1mdist/worker/index.js [22m[32m3.45 KB[39m
|
|
121
|
+
[32mESM[39m [1mdist/worker/edge-wasm.js [22m[32m259.00 B[39m
|
|
122
|
+
[32mESM[39m [1mdist/worker/napi-crypto.js [22m[32m110.00 B[39m
|
|
123
|
+
[32mESM[39m [1mdist/worker/index.js.map [22m[32m6.97 KB[39m
|
|
124
|
+
[32mESM[39m [1mdist/worker/edge-wasm.js.map [22m[32m505.00 B[39m
|
|
125
|
+
[32mESM[39m [1mdist/worker/napi-crypto.js.map [22m[32m162.00 B[39m
|
|
126
|
+
[32mESM[39m ⚡️ Build success in 44ms
|
|
127
127
|
[32mESM[39m [1mdist/media/index.js [22m[32m236.00 B[39m
|
|
128
128
|
[32mESM[39m [1mdist/media/index.browser.js [22m[32m2.79 KB[39m
|
|
129
129
|
[32mESM[39m [1mdist/media/index.native.js [22m[32m4.02 KB[39m
|
|
@@ -134,85 +134,85 @@
|
|
|
134
134
|
[32mESM[39m [1mdist/media/index.native.js.map [22m[32m8.13 KB[39m
|
|
135
135
|
[32mESM[39m [1mdist/media/index.server.js.map [22m[32m6.37 KB[39m
|
|
136
136
|
[32mESM[39m [1mdist/media/chunk-IRL3KNPO.js.map [22m[32m17.00 KB[39m
|
|
137
|
-
[32mESM[39m ⚡️ Build success in
|
|
137
|
+
[32mESM[39m ⚡️ Build success in 50ms
|
|
138
138
|
[32mESM[39m [1mdist/react-core/index.js [22m[32m17.87 KB[39m
|
|
139
139
|
[32mESM[39m [1mdist/react-core/testing.js [22m[32m904.00 B[39m
|
|
140
140
|
[32mESM[39m [1mdist/react-core/chunk-UOYH6JFJ.js [22m[32m189.00 B[39m
|
|
141
141
|
[32mESM[39m [1mdist/react-core/index.js.map [22m[32m58.59 KB[39m
|
|
142
142
|
[32mESM[39m [1mdist/react-core/testing.js.map [22m[32m1.34 KB[39m
|
|
143
143
|
[32mESM[39m [1mdist/react-core/chunk-UOYH6JFJ.js.map [22m[32m363.00 B[39m
|
|
144
|
-
[32mESM[39m ⚡️ Build success in
|
|
145
|
-
[32mESM[39m [1mdist/
|
|
146
|
-
[32mESM[39m [1mdist/browser/index.js.map [22m[32m34.06 KB[39m
|
|
147
|
-
[32mESM[39m ⚡️ Build success in 51ms
|
|
148
|
-
[32mESM[39m [1mdist/better-auth/database-adapter/index.js [22m[32m26.65 KB[39m
|
|
149
|
-
[32mESM[39m [1mdist/better-auth/database-adapter/index.js.map [22m[32m58.27 KB[39m
|
|
150
|
-
[32mESM[39m ⚡️ Build success in 41ms
|
|
151
|
-
[32mESM[39m [1mdist/prosemirror/index.js [22m[32m77.76 KB[39m
|
|
152
|
-
[32mESM[39m [1mdist/prosemirror/index.js.map [22m[32m307.20 KB[39m
|
|
153
|
-
[32mESM[39m ⚡️ Build success in 56ms
|
|
154
|
-
[32mESM[39m [1mdist/expo/index.js [22m[32m4.86 KB[39m
|
|
144
|
+
[32mESM[39m ⚡️ Build success in 50ms
|
|
145
|
+
[32mESM[39m [1mdist/expo/index.js [22m[32m5.65 KB[39m
|
|
155
146
|
[32mESM[39m [1mdist/expo/testing.js [22m[32m112.00 B[39m
|
|
156
147
|
[32mESM[39m [1mdist/expo/polyfills.js [22m[32m858.00 B[39m
|
|
157
|
-
[32mESM[39m [1mdist/expo/index.js.map [22m[
|
|
148
|
+
[32mESM[39m [1mdist/expo/index.js.map [22m[32m11.85 KB[39m
|
|
158
149
|
[32mESM[39m [1mdist/expo/testing.js.map [22m[32m168.00 B[39m
|
|
159
150
|
[32mESM[39m [1mdist/expo/polyfills.js.map [22m[32m1.61 KB[39m
|
|
160
|
-
[32mESM[39m ⚡️ Build success in
|
|
161
|
-
[32mESM[39m [1mdist/
|
|
151
|
+
[32mESM[39m ⚡️ Build success in 44ms
|
|
152
|
+
[32mESM[39m [1mdist/better-auth/database-adapter/index.js [22m[32m26.86 KB[39m
|
|
153
|
+
[32mESM[39m [1mdist/better-auth/database-adapter/index.js.map [22m[32m58.67 KB[39m
|
|
154
|
+
[32mESM[39m ⚡️ Build success in 56ms
|
|
155
|
+
[32mESM[39m [1mdist/browser/index.js [22m[32m15.96 KB[39m
|
|
156
|
+
[32mESM[39m [1mdist/browser/index.js.map [22m[32m34.06 KB[39m
|
|
157
|
+
[32mESM[39m ⚡️ Build success in 72ms
|
|
158
|
+
[32mESM[39m [1mdist/prosemirror/index.js [22m[32m78.48 KB[39m
|
|
159
|
+
[32mESM[39m [1mdist/prosemirror/index.js.map [22m[32m309.11 KB[39m
|
|
160
|
+
[32mESM[39m ⚡️ Build success in 71ms
|
|
161
|
+
[32mESM[39m [1mdist/react/index.js [22m[32m26.02 KB[39m
|
|
162
|
+
[32mESM[39m [1mdist/react/testing.js [22m[32m122.00 B[39m
|
|
163
|
+
[32mESM[39m [1mdist/react/ssr.js [22m[32m693.00 B[39m
|
|
164
|
+
[32mESM[39m [1mdist/react/testing.js.map [22m[32m165.00 B[39m
|
|
165
|
+
[32mESM[39m [1mdist/react/index.js.map [22m[32m55.45 KB[39m
|
|
166
|
+
[32mESM[39m [1mdist/react/ssr.js.map [22m[32m1.10 KB[39m
|
|
167
|
+
[32mESM[39m ⚡️ Build success in 65ms
|
|
162
168
|
[32mESM[39m [1mdist/react-native-core/testing.js [22m[32m119.00 B[39m
|
|
163
|
-
[32mESM[39m [1mdist/react-native-core/index.js
|
|
169
|
+
[32mESM[39m [1mdist/react-native-core/index.js [22m[32m34.47 KB[39m
|
|
164
170
|
[32mESM[39m [1mdist/react-native-core/testing.js.map [22m[32m175.00 B[39m
|
|
165
|
-
[32mESM[39m
|
|
166
|
-
[32mESM[39m
|
|
171
|
+
[32mESM[39m [1mdist/react-native-core/index.js.map [22m[32m69.10 KB[39m
|
|
172
|
+
[32mESM[39m ⚡️ Build success in 77ms
|
|
173
|
+
[32mESM[39m [1mdist/react-native/index.js [22m[32m38.21 KB[39m
|
|
167
174
|
[32mESM[39m [1mdist/react-native/testing.js [22m[32m120.00 B[39m
|
|
168
175
|
[32mESM[39m [1mdist/react-native/polyfills.js [22m[32m858.00 B[39m
|
|
169
|
-
[32mESM[39m [1mdist/react-native/index.js.map [22m[
|
|
176
|
+
[32mESM[39m [1mdist/react-native/index.js.map [22m[32m76.75 KB[39m
|
|
170
177
|
[32mESM[39m [1mdist/react-native/testing.js.map [22m[32m176.00 B[39m
|
|
171
178
|
[32mESM[39m [1mdist/react-native/polyfills.js.map [22m[32m1.61 KB[39m
|
|
172
|
-
[32mESM[39m ⚡️ Build success in
|
|
173
|
-
[32mESM[39m [1mdist/react/index.js [22m[32m26.02 KB[39m
|
|
174
|
-
[32mESM[39m [1mdist/react/testing.js [22m[32m122.00 B[39m
|
|
175
|
-
[32mESM[39m [1mdist/react/ssr.js [22m[32m693.00 B[39m
|
|
176
|
-
[32mESM[39m [1mdist/react/index.js.map [22m[32m55.45 KB[39m
|
|
177
|
-
[32mESM[39m [1mdist/react/testing.js.map [22m[32m165.00 B[39m
|
|
178
|
-
[32mESM[39m [1mdist/react/ssr.js.map [22m[32m1.10 KB[39m
|
|
179
|
-
[32mESM[39m ⚡️ Build success in 64ms
|
|
180
|
-
[32mESM[39m [1mdist/inspector/index.js [22m[32m37.49 KB[39m
|
|
179
|
+
[32mESM[39m ⚡️ Build success in 85ms
|
|
181
180
|
[32mESM[39m [1mdist/inspector/standalone.js [22m[32m12.61 KB[39m
|
|
181
|
+
[32mESM[39m [1mdist/inspector/index.js [22m[32m37.49 KB[39m
|
|
182
182
|
[32mESM[39m [1mdist/inspector/chunk-ORKZSKZF.js [22m[32m128.83 KB[39m
|
|
183
|
-
[32mESM[39m [1mdist/inspector/index.js.map [22m[32m63.80 KB[39m
|
|
184
183
|
[32mESM[39m [1mdist/inspector/standalone.js.map [22m[32m20.11 KB[39m
|
|
184
|
+
[32mESM[39m [1mdist/inspector/index.js.map [22m[32m63.80 KB[39m
|
|
185
185
|
[32mESM[39m [1mdist/inspector/chunk-ORKZSKZF.js.map [22m[32m222.34 KB[39m
|
|
186
|
-
[32mESM[39m ⚡️ Build success in
|
|
187
|
-
[32mESM[39m [1mdist/index.js [22m[32m32.17 KB[39m
|
|
188
|
-
[32mESM[39m [1mdist/testing.js [22m[32m8.56 KB[39m
|
|
189
|
-
[32mESM[39m [1mdist/chunk-G7AMZRMZ.js [22m[32m247.36 KB[39m
|
|
190
|
-
[32mESM[39m [1mdist/tools/ssr.js [22m[32m156.00 B[39m
|
|
186
|
+
[32mESM[39m ⚡️ Build success in 114ms
|
|
191
187
|
[32mESM[39m [1mdist/chunk-K4D7IMFM.js [22m[32m690.00 B[39m
|
|
188
|
+
[32mESM[39m [1mdist/tools/ssr.js [22m[32m156.00 B[39m
|
|
189
|
+
[32mESM[39m [1mdist/testing.js [22m[32m8.56 KB[39m
|
|
190
|
+
[32mESM[39m [1mdist/index.js [22m[32m32.18 KB[39m
|
|
192
191
|
[32mESM[39m [1mdist/chunk-ZQWSQH6L.js [22m[32m945.00 B[39m
|
|
193
|
-
[32mESM[39m [1mdist/
|
|
194
|
-
[32mESM[39m [1mdist/index.js.map [22m[32m65.34 KB[39m
|
|
192
|
+
[32mESM[39m [1mdist/chunk-YDZ264RU.js [22m[32m261.62 KB[39m
|
|
195
193
|
[32mESM[39m [1mdist/chunk-K4D7IMFM.js.map [22m[32m1.10 KB[39m
|
|
196
194
|
[32mESM[39m [1mdist/tools/ssr.js.map [22m[32m71.00 B[39m
|
|
195
|
+
[32mESM[39m [1mdist/testing.js.map [22m[32m16.22 KB[39m
|
|
197
196
|
[32mESM[39m [1mdist/chunk-ZQWSQH6L.js.map [22m[32m71.00 B[39m
|
|
198
|
-
[32mESM[39m [1mdist/
|
|
199
|
-
[32mESM[39m
|
|
197
|
+
[32mESM[39m [1mdist/index.js.map [22m[32m65.34 KB[39m
|
|
198
|
+
[32mESM[39m [1mdist/chunk-YDZ264RU.js.map [22m[32m603.45 KB[39m
|
|
199
|
+
[32mESM[39m ⚡️ Build success in 143ms
|
|
200
200
|
[32mESM[39m [1mdist/inspector/register-custom-element.js [22m[32m305.00 B[39m
|
|
201
201
|
[32mESM[39m [1mdist/inspector/register-custom-element.js.map [22m[32m445.00 B[39m
|
|
202
202
|
[32mESM[39m [1mdist/inspector/custom-element-7G7IZVLL.js [22m[32m1.64 MB[39m
|
|
203
203
|
[32mESM[39m [1mdist/inspector/custom-element-7G7IZVLL.js.map [22m[32m2.52 MB[39m
|
|
204
|
-
[32mESM[39m ⚡️ Build success in
|
|
204
|
+
[32mESM[39m ⚡️ Build success in 177ms
|
|
205
205
|
|
|
206
|
-
> jazz-tools@0.20.
|
|
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.
|
|
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.
|
|
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(
|
|
162
|
-
|
|
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(
|
|
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(
|
|
447
|
-
|
|
448
|
-
|
|
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":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAQxD,qBAAa,cAAc;IACzB,SAAS,CAAC,cAAc,EAAE,QAAQ,CAAC;IACnC,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE;QAAE,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IAC7D,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;IACvB,SAAS,CAAC,gBAAgB,EAAE,kBAAkB,CAAC;IAE/C,OAAO,CAAC,eAAe,CAIG;gBAGxB,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;IAa7B,UAAU;IAWJ,MAAM,CACV,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"generic.d.ts","sourceRoot":"","sources":["../../../../src/better-auth/database-adapter/repository/generic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAQxD,qBAAa,cAAc;IACzB,SAAS,CAAC,cAAc,EAAE,QAAQ,CAAC;IACnC,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE;QAAE,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IAC7D,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;IACvB,SAAS,CAAC,gBAAgB,EAAE,kBAAkB,CAAC;IAE/C,OAAO,CAAC,eAAe,CAIG;gBAGxB,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;IAa7B,UAAU;IAWJ,MAAM,CACV,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,CAAC;IAkEf,OAAO,CACX,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,YAAY,EAAE,GACpB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAItB,QAAQ,CACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,CAAC;QAAE,KAAK,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,KAAK,CAAA;KAAE,CAAC,GACxE,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAoBtB,YAAY,CAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,KAAK,CAAA;KAAE,CAAC,GAC1E,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAsBtB,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;IA2BjB,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;IAkBjB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAuClE,KAAK,CACT,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,YAAY,EAAE,GAAG,SAAS,GAChC,OAAO,CAAC,MAAM,CAAC;IAIlB,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM;IAQjC,SAAS,CAAC,sBAAsB,CAAC,CAAC,SAAS,SAAS,EAClD,IAAI,EAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,EAC1B,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,CAAC,EAAE;CAYP"}
|
|
@@ -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;
|
|
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;
|
|
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"}
|