@coursebuilder/adapter-drizzle 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (239) hide show
  1. package/dist/chunk-6CBAFOL3.js +38 -0
  2. package/dist/chunk-AIDEJDKJ.js +44 -0
  3. package/dist/chunk-BRGTUNY2.js +78 -0
  4. package/dist/chunk-H4MXNDWO.js +34 -0
  5. package/dist/chunk-ICL7XZ2Y.js +50 -0
  6. package/dist/chunk-JD4KFACE.js +43 -0
  7. package/dist/chunk-JQFZOCAU.js +4099 -0
  8. package/dist/chunk-KI47TR7F.js +47 -0
  9. package/dist/chunk-KVN3JV7C.js +60 -0
  10. package/dist/chunk-LLWSIKQV.js +18 -0
  11. package/dist/chunk-MBQ3TMHH.js +44 -0
  12. package/dist/chunk-NISOQSUL.js +47 -0
  13. package/dist/chunk-PUGK2AEH.js +746 -0
  14. package/dist/chunk-RMRO5TA7.js +228 -0
  15. package/dist/chunk-SFJM6FKE.js +36 -0
  16. package/dist/chunk-SQR6UWVO.js +225 -0
  17. package/dist/chunk-TA6VLEV5.js +45 -0
  18. package/dist/chunk-TMQIGK3N.js +36 -0
  19. package/dist/chunk-US2EXVMI.js +42 -0
  20. package/dist/chunk-UY3DVPP3.js +48 -0
  21. package/dist/chunk-VEFCDI73.js +67 -0
  22. package/dist/chunk-VNI36MMC.js +7 -0
  23. package/dist/chunk-VZABQCFH.js +40 -0
  24. package/dist/index.d.ts +15 -0
  25. package/dist/index.js +54 -0
  26. package/dist/lib/mysql/index.cjs +5414 -0
  27. package/dist/lib/mysql/index.cjs.map +1 -0
  28. package/dist/lib/mysql/index.d.ts +5713 -0
  29. package/dist/lib/mysql/index.js +30 -0
  30. package/dist/lib/mysql/index.js.map +1 -0
  31. package/dist/lib/mysql/schemas/auth/accounts.cjs +177 -0
  32. package/dist/lib/mysql/schemas/auth/accounts.cjs.map +1 -0
  33. package/dist/lib/mysql/schemas/auth/accounts.d.ts +184 -0
  34. package/dist/lib/mysql/schemas/auth/accounts.js +12 -0
  35. package/dist/lib/mysql/schemas/auth/accounts.js.map +1 -0
  36. package/dist/lib/mysql/schemas/auth/permissions.cjs +155 -0
  37. package/dist/lib/mysql/schemas/auth/permissions.cjs.map +1 -0
  38. package/dist/lib/mysql/schemas/auth/permissions.d.ts +100 -0
  39. package/dist/lib/mysql/schemas/auth/permissions.js +12 -0
  40. package/dist/lib/mysql/schemas/auth/permissions.js.map +1 -0
  41. package/dist/lib/mysql/schemas/auth/role-permissions.cjs +200 -0
  42. package/dist/lib/mysql/schemas/auth/role-permissions.cjs.map +1 -0
  43. package/dist/lib/mysql/schemas/auth/role-permissions.d.ts +89 -0
  44. package/dist/lib/mysql/schemas/auth/role-permissions.js +12 -0
  45. package/dist/lib/mysql/schemas/auth/role-permissions.js.map +1 -0
  46. package/dist/lib/mysql/schemas/auth/roles.cjs +157 -0
  47. package/dist/lib/mysql/schemas/auth/roles.cjs.map +1 -0
  48. package/dist/lib/mysql/schemas/auth/roles.d.ts +100 -0
  49. package/dist/lib/mysql/schemas/auth/roles.js +12 -0
  50. package/dist/lib/mysql/schemas/auth/roles.js.map +1 -0
  51. package/dist/lib/mysql/schemas/auth/sessions.cjs +156 -0
  52. package/dist/lib/mysql/schemas/auth/sessions.cjs.map +1 -0
  53. package/dist/lib/mysql/schemas/auth/sessions.d.ts +52 -0
  54. package/dist/lib/mysql/schemas/auth/sessions.js +13 -0
  55. package/dist/lib/mysql/schemas/auth/sessions.js.map +1 -0
  56. package/dist/lib/mysql/schemas/auth/user-permissions.cjs +207 -0
  57. package/dist/lib/mysql/schemas/auth/user-permissions.cjs.map +1 -0
  58. package/dist/lib/mysql/schemas/auth/user-permissions.d.ts +89 -0
  59. package/dist/lib/mysql/schemas/auth/user-permissions.js +12 -0
  60. package/dist/lib/mysql/schemas/auth/user-permissions.js.map +1 -0
  61. package/dist/lib/mysql/schemas/auth/user-roles.cjs +205 -0
  62. package/dist/lib/mysql/schemas/auth/user-roles.cjs.map +1 -0
  63. package/dist/lib/mysql/schemas/auth/user-roles.d.ts +89 -0
  64. package/dist/lib/mysql/schemas/auth/user-roles.js +12 -0
  65. package/dist/lib/mysql/schemas/auth/user-roles.js.map +1 -0
  66. package/dist/lib/mysql/schemas/auth/users.cjs +364 -0
  67. package/dist/lib/mysql/schemas/auth/users.cjs.map +1 -0
  68. package/dist/lib/mysql/schemas/auth/users.d.ts +105 -0
  69. package/dist/lib/mysql/schemas/auth/users.js +12 -0
  70. package/dist/lib/mysql/schemas/auth/users.js.map +1 -0
  71. package/dist/lib/mysql/schemas/auth/verification-tokens.cjs +57 -0
  72. package/dist/lib/mysql/schemas/auth/verification-tokens.cjs.map +1 -0
  73. package/dist/lib/mysql/schemas/auth/verification-tokens.d.ts +60 -0
  74. package/dist/lib/mysql/schemas/auth/verification-tokens.js +8 -0
  75. package/dist/lib/mysql/schemas/auth/verification-tokens.js.map +1 -0
  76. package/dist/lib/mysql/schemas/commerce/coupon.cjs +81 -0
  77. package/dist/lib/mysql/schemas/commerce/coupon.cjs.map +1 -0
  78. package/dist/lib/mysql/schemas/commerce/coupon.d.ts +168 -0
  79. package/dist/lib/mysql/schemas/commerce/coupon.js +8 -0
  80. package/dist/lib/mysql/schemas/commerce/coupon.js.map +1 -0
  81. package/dist/lib/mysql/schemas/commerce/merchant-account.cjs +61 -0
  82. package/dist/lib/mysql/schemas/commerce/merchant-account.cjs.map +1 -0
  83. package/dist/lib/mysql/schemas/commerce/merchant-account.d.ts +72 -0
  84. package/dist/lib/mysql/schemas/commerce/merchant-account.js +8 -0
  85. package/dist/lib/mysql/schemas/commerce/merchant-account.js.map +1 -0
  86. package/dist/lib/mysql/schemas/commerce/merchant-charge.cjs +71 -0
  87. package/dist/lib/mysql/schemas/commerce/merchant-charge.cjs.map +1 -0
  88. package/dist/lib/mysql/schemas/commerce/merchant-charge.d.ts +108 -0
  89. package/dist/lib/mysql/schemas/commerce/merchant-charge.js +8 -0
  90. package/dist/lib/mysql/schemas/commerce/merchant-charge.js.map +1 -0
  91. package/dist/lib/mysql/schemas/commerce/merchant-coupon.cjs +64 -0
  92. package/dist/lib/mysql/schemas/commerce/merchant-coupon.cjs.map +1 -0
  93. package/dist/lib/mysql/schemas/commerce/merchant-coupon.d.ts +84 -0
  94. package/dist/lib/mysql/schemas/commerce/merchant-coupon.js +8 -0
  95. package/dist/lib/mysql/schemas/commerce/merchant-coupon.js.map +1 -0
  96. package/dist/lib/mysql/schemas/commerce/merchant-customer.cjs +65 -0
  97. package/dist/lib/mysql/schemas/commerce/merchant-customer.cjs.map +1 -0
  98. package/dist/lib/mysql/schemas/commerce/merchant-customer.d.ts +84 -0
  99. package/dist/lib/mysql/schemas/commerce/merchant-customer.js +8 -0
  100. package/dist/lib/mysql/schemas/commerce/merchant-customer.js.map +1 -0
  101. package/dist/lib/mysql/schemas/commerce/merchant-price.cjs +68 -0
  102. package/dist/lib/mysql/schemas/commerce/merchant-price.cjs.map +1 -0
  103. package/dist/lib/mysql/schemas/commerce/merchant-price.d.ts +96 -0
  104. package/dist/lib/mysql/schemas/commerce/merchant-price.js +8 -0
  105. package/dist/lib/mysql/schemas/commerce/merchant-price.js.map +1 -0
  106. package/dist/lib/mysql/schemas/commerce/merchant-product.cjs +65 -0
  107. package/dist/lib/mysql/schemas/commerce/merchant-product.cjs.map +1 -0
  108. package/dist/lib/mysql/schemas/commerce/merchant-product.d.ts +84 -0
  109. package/dist/lib/mysql/schemas/commerce/merchant-product.js +8 -0
  110. package/dist/lib/mysql/schemas/commerce/merchant-product.js.map +1 -0
  111. package/dist/lib/mysql/schemas/commerce/merchant-session.cjs +55 -0
  112. package/dist/lib/mysql/schemas/commerce/merchant-session.cjs.map +1 -0
  113. package/dist/lib/mysql/schemas/commerce/merchant-session.d.ts +48 -0
  114. package/dist/lib/mysql/schemas/commerce/merchant-session.js +8 -0
  115. package/dist/lib/mysql/schemas/commerce/merchant-session.js.map +1 -0
  116. package/dist/lib/mysql/schemas/commerce/price.cjs +66 -0
  117. package/dist/lib/mysql/schemas/commerce/price.cjs.map +1 -0
  118. package/dist/lib/mysql/schemas/commerce/price.d.ts +96 -0
  119. package/dist/lib/mysql/schemas/commerce/price.js +8 -0
  120. package/dist/lib/mysql/schemas/commerce/price.js.map +1 -0
  121. package/dist/lib/mysql/schemas/commerce/product.cjs +63 -0
  122. package/dist/lib/mysql/schemas/commerce/product.cjs.map +1 -0
  123. package/dist/lib/mysql/schemas/commerce/product.d.ts +96 -0
  124. package/dist/lib/mysql/schemas/commerce/product.js +8 -0
  125. package/dist/lib/mysql/schemas/commerce/product.js.map +1 -0
  126. package/dist/lib/mysql/schemas/commerce/purchase-user-transfer.cjs +88 -0
  127. package/dist/lib/mysql/schemas/commerce/purchase-user-transfer.cjs.map +1 -0
  128. package/dist/lib/mysql/schemas/commerce/purchase-user-transfer.d.ts +132 -0
  129. package/dist/lib/mysql/schemas/commerce/purchase-user-transfer.js +8 -0
  130. package/dist/lib/mysql/schemas/commerce/purchase-user-transfer.js.map +1 -0
  131. package/dist/lib/mysql/schemas/commerce/purchase.cjs +99 -0
  132. package/dist/lib/mysql/schemas/commerce/purchase.cjs.map +1 -0
  133. package/dist/lib/mysql/schemas/commerce/purchase.d.ts +216 -0
  134. package/dist/lib/mysql/schemas/commerce/purchase.js +8 -0
  135. package/dist/lib/mysql/schemas/commerce/purchase.js.map +1 -0
  136. package/dist/lib/mysql/schemas/communication/communication-channel.cjs +59 -0
  137. package/dist/lib/mysql/schemas/communication/communication-channel.cjs.map +1 -0
  138. package/dist/lib/mysql/schemas/communication/communication-channel.d.ts +96 -0
  139. package/dist/lib/mysql/schemas/communication/communication-channel.js +8 -0
  140. package/dist/lib/mysql/schemas/communication/communication-channel.js.map +1 -0
  141. package/dist/lib/mysql/schemas/communication/communication-preference-types.cjs +57 -0
  142. package/dist/lib/mysql/schemas/communication/communication-preference-types.cjs.map +1 -0
  143. package/dist/lib/mysql/schemas/communication/communication-preference-types.d.ts +96 -0
  144. package/dist/lib/mysql/schemas/communication/communication-preference-types.js +8 -0
  145. package/dist/lib/mysql/schemas/communication/communication-preference-types.js.map +1 -0
  146. package/dist/lib/mysql/schemas/communication/communication-preferences.cjs +253 -0
  147. package/dist/lib/mysql/schemas/communication/communication-preferences.cjs.map +1 -0
  148. package/dist/lib/mysql/schemas/communication/communication-preferences.d.ts +150 -0
  149. package/dist/lib/mysql/schemas/communication/communication-preferences.js +12 -0
  150. package/dist/lib/mysql/schemas/communication/communication-preferences.js.map +1 -0
  151. package/dist/lib/mysql/schemas/content/content-contributions.cjs +252 -0
  152. package/dist/lib/mysql/schemas/content/content-contributions.cjs.map +1 -0
  153. package/dist/lib/mysql/schemas/content/content-contributions.d.ts +114 -0
  154. package/dist/lib/mysql/schemas/content/content-contributions.js +12 -0
  155. package/dist/lib/mysql/schemas/content/content-contributions.js.map +1 -0
  156. package/dist/lib/mysql/schemas/content/content-resource-resource.cjs +179 -0
  157. package/dist/lib/mysql/schemas/content/content-resource-resource.cjs.map +1 -0
  158. package/dist/lib/mysql/schemas/content/content-resource-resource.d.ts +101 -0
  159. package/dist/lib/mysql/schemas/content/content-resource-resource.js +12 -0
  160. package/dist/lib/mysql/schemas/content/content-resource-resource.js.map +1 -0
  161. package/dist/lib/mysql/schemas/content/content-resource.cjs +246 -0
  162. package/dist/lib/mysql/schemas/content/content-resource.cjs.map +1 -0
  163. package/dist/lib/mysql/schemas/content/content-resource.d.ts +103 -0
  164. package/dist/lib/mysql/schemas/content/content-resource.js +12 -0
  165. package/dist/lib/mysql/schemas/content/content-resource.js.map +1 -0
  166. package/dist/lib/mysql/schemas/content/contribution-types.cjs +162 -0
  167. package/dist/lib/mysql/schemas/content/contribution-types.cjs.map +1 -0
  168. package/dist/lib/mysql/schemas/content/contribution-types.d.ts +112 -0
  169. package/dist/lib/mysql/schemas/content/contribution-types.js +12 -0
  170. package/dist/lib/mysql/schemas/content/contribution-types.js.map +1 -0
  171. package/dist/lib/mysql/schemas/content/resource-progress.cjs +69 -0
  172. package/dist/lib/mysql/schemas/content/resource-progress.cjs.map +1 -0
  173. package/dist/lib/mysql/schemas/content/resource-progress.d.ts +84 -0
  174. package/dist/lib/mysql/schemas/content/resource-progress.js +8 -0
  175. package/dist/lib/mysql/schemas/content/resource-progress.js.map +1 -0
  176. package/dist/lib/pg.cjs +247 -0
  177. package/dist/lib/pg.cjs.map +1 -0
  178. package/{lib → dist/lib}/pg.d.ts +44 -41
  179. package/dist/lib/pg.js +10 -0
  180. package/dist/lib/pg.js.map +1 -0
  181. package/dist/lib/sqlite.cjs +259 -0
  182. package/dist/lib/sqlite.cjs.map +1 -0
  183. package/{lib → dist/lib}/sqlite.d.ts +53 -49
  184. package/dist/lib/sqlite.js +11 -0
  185. package/dist/lib/sqlite.js.map +1 -0
  186. package/dist/lib/utils.cjs +39 -0
  187. package/dist/lib/utils.cjs.map +1 -0
  188. package/dist/lib/utils.d.ts +28 -0
  189. package/dist/lib/utils.js +8 -0
  190. package/dist/lib/utils.js.map +1 -0
  191. package/package.json +20 -11
  192. package/src/index.ts +16 -11
  193. package/src/lib/mysql/index.ts +424 -0
  194. package/src/lib/mysql/schemas/auth/accounts.ts +52 -0
  195. package/src/lib/mysql/schemas/auth/permissions.ts +44 -0
  196. package/src/lib/mysql/schemas/auth/role-permissions.ts +56 -0
  197. package/src/lib/mysql/schemas/auth/roles.ts +46 -0
  198. package/src/lib/mysql/schemas/auth/sessions.ts +28 -0
  199. package/src/lib/mysql/schemas/auth/user-permissions.ts +56 -0
  200. package/src/lib/mysql/schemas/auth/user-roles.ts +56 -0
  201. package/src/lib/mysql/schemas/auth/users.ts +58 -0
  202. package/src/lib/mysql/schemas/auth/verification-tokens.ts +24 -0
  203. package/src/lib/mysql/schemas/commerce/coupon.ts +47 -0
  204. package/src/lib/mysql/schemas/commerce/merchant-account.ts +31 -0
  205. package/src/lib/mysql/schemas/commerce/merchant-charge.ts +44 -0
  206. package/src/lib/mysql/schemas/commerce/merchant-coupon.ts +38 -0
  207. package/src/lib/mysql/schemas/commerce/merchant-customer.ts +38 -0
  208. package/src/lib/mysql/schemas/commerce/merchant-price.ts +41 -0
  209. package/src/lib/mysql/schemas/commerce/merchant-product.ts +38 -0
  210. package/src/lib/mysql/schemas/commerce/merchant-session.ts +22 -0
  211. package/src/lib/mysql/schemas/commerce/price.ts +32 -0
  212. package/src/lib/mysql/schemas/commerce/product.ts +31 -0
  213. package/src/lib/mysql/schemas/commerce/purchase-user-transfer.ts +46 -0
  214. package/src/lib/mysql/schemas/commerce/purchase.ts +48 -0
  215. package/src/lib/mysql/schemas/communication/communication-channel.ts +35 -0
  216. package/src/lib/mysql/schemas/communication/communication-preference-types.ts +30 -0
  217. package/src/lib/mysql/schemas/communication/communication-preferences.ts +78 -0
  218. package/src/lib/mysql/schemas/content/content-contributions.ts +70 -0
  219. package/src/lib/mysql/schemas/content/content-resource-resource.ts +60 -0
  220. package/src/lib/mysql/schemas/content/content-resource.ts +57 -0
  221. package/src/lib/mysql/schemas/content/contribution-types.ts +49 -0
  222. package/src/lib/mysql/schemas/content/resource-progress.ts +38 -0
  223. package/src/lib/pg.ts +272 -252
  224. package/src/lib/sqlite.ts +261 -201
  225. package/src/lib/utils.ts +24 -21
  226. package/index.d.ts +0 -6
  227. package/index.d.ts.map +0 -1
  228. package/index.js +0 -20
  229. package/lib/mysql.d.ts +0 -505
  230. package/lib/mysql.d.ts.map +0 -1
  231. package/lib/mysql.js +0 -319
  232. package/lib/pg.d.ts.map +0 -1
  233. package/lib/pg.js +0 -231
  234. package/lib/sqlite.d.ts.map +0 -1
  235. package/lib/sqlite.js +0 -189
  236. package/lib/utils.d.ts +0 -26
  237. package/lib/utils.d.ts.map +0 -1
  238. package/lib/utils.js +0 -7
  239. package/src/lib/mysql.ts +0 -402
package/lib/sqlite.js DELETED
@@ -1,189 +0,0 @@
1
- import { and, eq, sql } from 'drizzle-orm';
2
- import { sqliteTable as defaultSqliteTableFn, integer, primaryKey, text, } from 'drizzle-orm/sqlite-core';
3
- import { stripUndefined } from './utils.js';
4
- export function createTables(sqliteTable) {
5
- const users = sqliteTable('user', {
6
- id: text('id').notNull().primaryKey(),
7
- name: text('name'),
8
- role: text('role', { enum: ['user', 'admin'] }).default('user'),
9
- email: text('email').notNull(),
10
- emailVerified: integer('emailVerified', { mode: 'timestamp_ms' }),
11
- image: text('image'),
12
- });
13
- const accounts = sqliteTable('account', {
14
- userId: text('userId')
15
- .notNull()
16
- .references(() => users.id, { onDelete: 'cascade' }),
17
- type: text('type').$type().notNull(),
18
- provider: text('provider').notNull(),
19
- providerAccountId: text('providerAccountId').notNull(),
20
- refresh_token: text('refresh_token'),
21
- access_token: text('access_token'),
22
- expires_at: integer('expires_at'),
23
- token_type: text('token_type'),
24
- scope: text('scope'),
25
- id_token: text('id_token'),
26
- session_state: text('session_state'),
27
- }, (account) => ({
28
- pk: primaryKey({ columns: [account.provider, account.providerAccountId] }),
29
- }));
30
- const sessions = sqliteTable('session', {
31
- sessionToken: text('sessionToken').notNull().primaryKey(),
32
- userId: text('userId')
33
- .notNull()
34
- .references(() => users.id, { onDelete: 'cascade' }),
35
- expires: integer('expires', { mode: 'timestamp_ms' }).notNull(),
36
- });
37
- const verificationTokens = sqliteTable('verificationToken', {
38
- identifier: text('identifier').notNull(),
39
- token: text('token').notNull(),
40
- expires: integer('expires', { mode: 'timestamp_ms' }).notNull(),
41
- }, (vt) => ({
42
- pk: primaryKey({ columns: [vt.identifier, vt.token] }),
43
- }));
44
- const contentResource = sqliteTable('contentResource', {
45
- id: text('id', { length: 255 }).notNull().primaryKey(),
46
- type: text('type', { length: 255 }).notNull(),
47
- createdById: text('createdById', { length: 255 }).notNull(),
48
- fields: text('metadata', { mode: 'json' }).$type().default({}),
49
- createdAt: integer('createdAt', {
50
- mode: 'timestamp_ms',
51
- }).default(sql `CURRENT_TIME`),
52
- updatedAt: integer('updatedAt', {
53
- mode: 'timestamp_ms',
54
- }).default(sql `CURRENT_TIME`),
55
- deletedAt: integer('deletedAt', {
56
- mode: 'timestamp_ms',
57
- }),
58
- });
59
- const contentResourceResource = sqliteTable('contentResourceResource', {
60
- resourceOfId: text('resourceOfId', { length: 255 }).notNull(),
61
- resourceId: text('resourceId', { length: 255 }).notNull(),
62
- position: integer('position').notNull().default(0),
63
- metadata: text('metadata', { mode: 'json' }).$type().default({}),
64
- createdAt: integer('createdAt', {
65
- mode: 'timestamp_ms',
66
- }).default(sql `CURRENT_TIME`),
67
- updatedAt: integer('updatedAt', {
68
- mode: 'timestamp_ms',
69
- }).default(sql `CURRENT_TIME`),
70
- deletedAt: integer('deletedAt', {
71
- mode: 'timestamp_ms',
72
- }),
73
- }, (crr) => ({
74
- pk: primaryKey({ columns: [crr.resourceOfId, crr.resourceId] }),
75
- }));
76
- return { users, accounts, sessions, verificationTokens, contentResource, contentResourceResource };
77
- }
78
- export function SQLiteDrizzleAdapter(client, tableFn = defaultSqliteTableFn) {
79
- const { users, accounts, sessions, verificationTokens, contentResource } = createTables(tableFn);
80
- return {
81
- async updateContentResourceFields(options) {
82
- return null;
83
- },
84
- async getVideoResource(id) {
85
- // TODO Implement
86
- return null;
87
- },
88
- async createContentResource(resource) {
89
- return client
90
- .insert(contentResource)
91
- .values({ ...resource, id: crypto.randomUUID() })
92
- .returning()
93
- .get();
94
- },
95
- async getContentResource(data) {
96
- const result = await client.select().from(contentResource).where(eq(contentResource.id, data)).get();
97
- return result ?? null;
98
- },
99
- async createUser(data) {
100
- return client
101
- .insert(users)
102
- .values({ ...data, id: crypto.randomUUID() })
103
- .returning()
104
- .get();
105
- },
106
- async getUser(data) {
107
- const result = await client.select().from(users).where(eq(users.id, data)).get();
108
- return result ?? null;
109
- },
110
- async getUserByEmail(data) {
111
- const result = await client.select().from(users).where(eq(users.email, data)).get();
112
- return result ?? null;
113
- },
114
- createSession(data) {
115
- return client.insert(sessions).values(data).returning().get();
116
- },
117
- async getSessionAndUser(data) {
118
- const result = await client
119
- .select({ session: sessions, user: users })
120
- .from(sessions)
121
- .where(eq(sessions.sessionToken, data))
122
- .innerJoin(users, eq(users.id, sessions.userId))
123
- .get();
124
- return result ?? null;
125
- },
126
- async updateUser(data) {
127
- if (!data.id) {
128
- throw new Error('No user id.');
129
- }
130
- const result = await client.update(users).set(data).where(eq(users.id, data.id)).returning().get();
131
- return result ?? null;
132
- },
133
- async updateSession(data) {
134
- const result = await client
135
- .update(sessions)
136
- .set(data)
137
- .where(eq(sessions.sessionToken, data.sessionToken))
138
- .returning()
139
- .get();
140
- return result ?? null;
141
- },
142
- async linkAccount(rawAccount) {
143
- return stripUndefined(await client.insert(accounts).values(rawAccount).returning().get());
144
- },
145
- async getUserByAccount(account) {
146
- const results = await client
147
- .select()
148
- .from(accounts)
149
- .leftJoin(users, eq(users.id, accounts.userId))
150
- .where(and(eq(accounts.provider, account.provider), eq(accounts.providerAccountId, account.providerAccountId)))
151
- .get();
152
- if (!results) {
153
- return null;
154
- }
155
- return Promise.resolve(results).then((results) => results.user);
156
- },
157
- async deleteSession(sessionToken) {
158
- const result = await client.delete(sessions).where(eq(sessions.sessionToken, sessionToken)).returning().get();
159
- return result ?? null;
160
- },
161
- async createVerificationToken(token) {
162
- const result = await client.insert(verificationTokens).values(token).returning().get();
163
- return result ?? null;
164
- },
165
- async useVerificationToken(token) {
166
- try {
167
- const result = await client
168
- .delete(verificationTokens)
169
- .where(and(eq(verificationTokens.identifier, token.identifier), eq(verificationTokens.token, token.token)))
170
- .returning()
171
- .get();
172
- return result ?? null;
173
- }
174
- catch (err) {
175
- throw new Error('No verification token found.');
176
- }
177
- },
178
- async deleteUser(id) {
179
- const result = await client.delete(users).where(eq(users.id, id)).returning().get();
180
- return result ?? null;
181
- },
182
- async unlinkAccount(account) {
183
- await client
184
- .delete(accounts)
185
- .where(and(eq(accounts.providerAccountId, account.providerAccountId), eq(accounts.provider, account.provider)))
186
- .run();
187
- },
188
- };
189
- }
package/lib/utils.d.ts DELETED
@@ -1,26 +0,0 @@
1
- import { type MySqlDatabase } from 'drizzle-orm/mysql-core';
2
- import type { AnyMySqlTable, MySqlTableFn } from 'drizzle-orm/mysql-core';
3
- import { type PgDatabase } from 'drizzle-orm/pg-core';
4
- import type { AnyPgTable, PgTableFn } from 'drizzle-orm/pg-core';
5
- import { type BaseSQLiteDatabase } from 'drizzle-orm/sqlite-core';
6
- import type { AnySQLiteTable, SQLiteTableFn } from 'drizzle-orm/sqlite-core';
7
- import type { DefaultSchema as MySqlSchema } from './mysql.js';
8
- import type { DefaultSchema as PgSchema } from './pg.js';
9
- import type { DefaultSchema as SQLiteSchema } from './sqlite.js';
10
- export type AnyMySqlDatabase = MySqlDatabase<any, any>;
11
- export type AnyPgDatabase = PgDatabase<any, any, any>;
12
- export type AnySQLiteDatabase = BaseSQLiteDatabase<any, any, any, any>;
13
- export interface MinimumSchema {
14
- mysql: MySqlSchema & Record<string, AnyMySqlTable>;
15
- pg: PgSchema & Record<string, AnyPgTable>;
16
- sqlite: SQLiteSchema & Record<string, AnySQLiteTable>;
17
- }
18
- export type SqlFlavorOptions = AnyMySqlDatabase | AnyPgDatabase | AnySQLiteDatabase;
19
- export type ClientFlavors<Flavor> = Flavor extends AnyMySqlDatabase ? MinimumSchema['mysql'] : Flavor extends AnyPgDatabase ? MinimumSchema['pg'] : Flavor extends AnySQLiteDatabase ? MinimumSchema['sqlite'] : never;
20
- export type TableFn<Flavor> = Flavor extends AnyMySqlDatabase ? MySqlTableFn : Flavor extends AnyPgDatabase ? PgTableFn : Flavor extends AnySQLiteDatabase ? SQLiteTableFn : AnySQLiteTable;
21
- type NonNullableProps<T> = {
22
- [P in keyof T]: null extends T[P] ? never : P;
23
- }[keyof T];
24
- export declare function stripUndefined<T>(obj: T): Pick<T, NonNullableProps<T>>;
25
- export {};
26
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACzE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAE5E,OAAO,KAAK,EAAE,aAAa,IAAI,WAAW,EAAE,MAAM,YAAY,CAAA;AAC9D,OAAO,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,SAAS,CAAA;AACxD,OAAO,KAAK,EAAE,aAAa,IAAI,YAAY,EAAE,MAAM,aAAa,CAAA;AAEhE,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;AACtD,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AACrD,MAAM,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AAEtE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAClD,EAAE,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACzC,MAAM,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;CACtD;AAED,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,GAAG,aAAa,GAAG,iBAAiB,CAAA;AAEnF,MAAM,MAAM,aAAa,CAAC,MAAM,IAAI,MAAM,SAAS,gBAAgB,GAC/D,aAAa,CAAC,OAAO,CAAC,GACtB,MAAM,SAAS,aAAa,GAC1B,aAAa,CAAC,IAAI,CAAC,GACnB,MAAM,SAAS,iBAAiB,GAC9B,aAAa,CAAC,QAAQ,CAAC,GACvB,KAAK,CAAA;AAEb,MAAM,MAAM,OAAO,CAAC,MAAM,IAAI,MAAM,SAAS,gBAAgB,GACzD,YAAY,GACZ,MAAM,SAAS,aAAa,GAC1B,SAAS,GACT,MAAM,SAAS,iBAAiB,GAC9B,aAAa,GACb,cAAc,CAAA;AAEtB,KAAK,gBAAgB,CAAC,CAAC,IAAI;KACxB,CAAC,IAAI,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;CAC9C,CAAC,MAAM,CAAC,CAAC,CAAA;AAEV,wBAAgB,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAItE"}
package/lib/utils.js DELETED
@@ -1,7 +0,0 @@
1
- export function stripUndefined(obj) {
2
- const result = {};
3
- for (const key in obj)
4
- if (obj[key] !== undefined)
5
- result[key] = obj[key];
6
- return result;
7
- }
package/src/lib/mysql.ts DELETED
@@ -1,402 +0,0 @@
1
- import type { AdapterAccount, AdapterSession, AdapterUser } from '@auth/core/adapters'
2
- import { addSeconds, isAfter } from 'date-fns'
3
- import { and, eq, sql } from 'drizzle-orm'
4
- import {
5
- mysqlTable as defaultMySqlTableFn,
6
- double,
7
- index,
8
- int,
9
- json,
10
- MySqlDatabase,
11
- mysqlEnum,
12
- MySqlTableFn,
13
- primaryKey,
14
- timestamp,
15
- varchar,
16
- } from 'drizzle-orm/mysql-core'
17
-
18
- import { type CourseBuilderAdapter } from '@coursebuilder/core/adapters'
19
- import { VideoResourceSchema } from '@coursebuilder/core/schemas/video-resource'
20
-
21
- export function createTables(mySqlTable: MySqlTableFn) {
22
- const users = mySqlTable('user', {
23
- id: varchar('id', { length: 255 }).notNull().primaryKey(),
24
- name: varchar('name', { length: 255 }),
25
- email: varchar('email', { length: 255 }).notNull(),
26
- role: mysqlEnum('role', ['user', 'admin']).default('user'),
27
- emailVerified: timestamp('emailVerified', {
28
- mode: 'date',
29
- fsp: 3,
30
- }).defaultNow(),
31
- image: varchar('image', { length: 255 }),
32
- })
33
-
34
- const accounts = mySqlTable(
35
- 'account',
36
- {
37
- userId: varchar('userId', { length: 255 })
38
- .notNull()
39
- .references(() => users.id, { onDelete: 'cascade' }),
40
- type: varchar('type', { length: 255 }).$type<AdapterAccount['type']>().notNull(),
41
- provider: varchar('provider', { length: 255 }).notNull(),
42
- providerAccountId: varchar('providerAccountId', {
43
- length: 255,
44
- }).notNull(),
45
- refresh_token: varchar('refresh_token', { length: 255 }),
46
- access_token: varchar('access_token', { length: 255 }),
47
- expires_at: int('expires_at'),
48
- token_type: varchar('token_type', { length: 255 }),
49
- scope: varchar('scope', { length: 255 }),
50
- id_token: varchar('id_token', { length: 255 }),
51
- session_state: varchar('session_state', { length: 255 }),
52
- },
53
- (account) => ({
54
- pk: primaryKey({ columns: [account.provider, account.providerAccountId] }),
55
- userIdIdx: index('userId_idx').on(account.userId),
56
- }),
57
- )
58
-
59
- const sessions = mySqlTable(
60
- 'session',
61
- {
62
- sessionToken: varchar('sessionToken', { length: 255 }).notNull().primaryKey(),
63
- userId: varchar('userId', { length: 255 })
64
- .notNull()
65
- .references(() => users.id, { onDelete: 'cascade' }),
66
- expires: timestamp('expires', { mode: 'date' }).notNull(),
67
- },
68
- (session) => ({
69
- userIdIdx: index('userId_idx').on(session.userId),
70
- }),
71
- )
72
-
73
- const verificationTokens = mySqlTable(
74
- 'verificationToken',
75
- {
76
- identifier: varchar('identifier', { length: 255 }).notNull(),
77
- token: varchar('token', { length: 255 }).notNull(),
78
- expires: timestamp('expires', { mode: 'date' }).notNull(),
79
- createdAt: timestamp('createdAt', {
80
- mode: 'date',
81
- fsp: 3,
82
- }).default(sql`CURRENT_TIMESTAMP(3)`),
83
- },
84
- (vt) => ({
85
- pk: primaryKey({ columns: [vt.identifier, vt.token] }),
86
- }),
87
- )
88
-
89
- const contentResource = mySqlTable(
90
- 'contentResource',
91
- {
92
- id: varchar('id', { length: 255 }).notNull().primaryKey(),
93
- type: varchar('type', { length: 255 }).notNull(),
94
- createdById: varchar('createdById', { length: 255 }).notNull(),
95
- fields: json('fields').$type<Record<string, any>>().default({}),
96
- createdAt: timestamp('createdAt', {
97
- mode: 'date',
98
- fsp: 3,
99
- }).defaultNow(),
100
- updatedAt: timestamp('updatedAt', {
101
- mode: 'date',
102
- fsp: 3,
103
- }).defaultNow(),
104
- deletedAt: timestamp('deletedAt', {
105
- mode: 'date',
106
- fsp: 3,
107
- }),
108
- },
109
- (cm) => ({
110
- typeIdx: index('type_idx').on(cm.type),
111
- createdByIdx: index('createdById_idx').on(cm.createdById),
112
- createdAtIdx: index('createdAt_idx').on(cm.createdAt),
113
- }),
114
- )
115
-
116
- const contentResourceResource = mySqlTable(
117
- 'contentResourceResource',
118
- {
119
- resourceOfId: varchar('resourceOfId', { length: 255 }).notNull(),
120
- resourceId: varchar('resourceId', { length: 255 }).notNull(),
121
- position: double('position').notNull().default(0),
122
- metadata: json('fields').$type<Record<string, any>>().default({}),
123
- createdAt: timestamp('createdAt', {
124
- mode: 'date',
125
- fsp: 3,
126
- }).defaultNow(),
127
- updatedAt: timestamp('updatedAt', {
128
- mode: 'date',
129
- fsp: 3,
130
- }).defaultNow(),
131
- deletedAt: timestamp('deletedAt', {
132
- mode: 'date',
133
- fsp: 3,
134
- }),
135
- },
136
- (crr) => ({
137
- pk: primaryKey({ columns: [crr.resourceOfId, crr.resourceId] }),
138
- contentResourceIdIdx: index('contentResourceId_idx').on(crr.resourceOfId),
139
- resourceIdIdx: index('resourceId_idx').on(crr.resourceId),
140
- }),
141
- )
142
-
143
- return { users, accounts, sessions, verificationTokens, contentResource, contentResourceResource }
144
- }
145
-
146
- export type DefaultSchema = ReturnType<typeof createTables>
147
-
148
- export function mySqlDrizzleAdapter(
149
- client: InstanceType<typeof MySqlDatabase>,
150
- tableFn = defaultMySqlTableFn,
151
- ): CourseBuilderAdapter {
152
- const { users, accounts, sessions, verificationTokens, contentResource } = createTables(tableFn)
153
-
154
- return {
155
- async updateContentResourceFields(options) {
156
- const setFields = Object.entries(options.fields)
157
- .map(([fieldName, fieldValue], index, array) => {
158
- const comma = index < array.length - 1 ? ',' : ''
159
- return sql`${fieldName} = ${fieldValue}${comma}`
160
- })
161
- .join(' ')
162
-
163
- const query = sql`
164
- UPDATE ${contentResource}
165
- SET ${setFields}
166
- WHERE
167
- id = ${options.id};
168
- `
169
- return client
170
- .execute(query)
171
- .then((_) => {
172
- return this.getContentResource(options.id)
173
- })
174
- .catch((error) => {
175
- console.error(error)
176
- throw error
177
- })
178
- },
179
- async getVideoResource(id) {
180
- if (!id) {
181
- throw new Error('videoResourceId is required')
182
- }
183
-
184
- const query = sql`
185
- SELECT
186
- id as _id,
187
- CAST(updatedAt AS DATETIME) as _updatedAt,
188
- CAST(createdAt AS DATETIME) as _createdAt,
189
- JSON_EXTRACT (${contentResource.fields}, "$.state") AS state,
190
- JSON_EXTRACT (${contentResource.fields}, "$.duration") AS duration,
191
- JSON_EXTRACT (${contentResource.fields}, "$.muxPlaybackId") AS muxPlaybackId,
192
- JSON_EXTRACT (${contentResource.fields}, "$.muxAssetId") AS muxAssetId,
193
- JSON_EXTRACT (${contentResource.fields}, "$.transcript") AS transcript
194
- FROM
195
- ${contentResource}
196
- WHERE
197
- type = 'videoResource'
198
- AND (id = ${id});
199
-
200
- `
201
- return client
202
- .execute(query)
203
- .then((result: any) => {
204
- const parsedResource = VideoResourceSchema.safeParse(result.rows[0])
205
- return parsedResource.success ? parsedResource.data : null
206
- })
207
- .catch((error) => {
208
- console.error(error)
209
- return error
210
- })
211
- },
212
- async createContentResource(data) {
213
- const id = crypto.randomUUID()
214
-
215
- await client.insert(contentResource).values({ ...data, id })
216
-
217
- return await client
218
- .select()
219
- .from(contentResource)
220
- .where(eq(contentResource.id, id))
221
- .then((res) => res[0])
222
- },
223
- async getContentResource(data) {
224
- const thing =
225
- (await client
226
- .select()
227
- .from(contentResource)
228
- .where(eq(contentResource.id, data))
229
- .then((res) => res[0])) ?? null
230
-
231
- return thing
232
- },
233
- async createUser(data) {
234
- const id = crypto.randomUUID()
235
-
236
- await client.insert(users).values({ ...data, id })
237
-
238
- return await client
239
- .select()
240
- .from(users)
241
- .where(eq(users.id, id))
242
- .then((res) => res[0] as AdapterUser)
243
- },
244
- async getUser(data) {
245
- const thing =
246
- (await client
247
- .select()
248
- .from(users)
249
- .where(eq(users.id, data))
250
- .then((res) => res[0])) ?? null
251
-
252
- return thing
253
- },
254
- async getUserByEmail(data) {
255
- const user =
256
- (await client
257
- .select()
258
- .from(users)
259
- .where(eq(users.email, data))
260
- .then((res) => res[0])) ?? null
261
-
262
- return user
263
- },
264
- async createSession(data) {
265
- await client.insert(sessions).values(data)
266
-
267
- return await client
268
- .select()
269
- .from(sessions)
270
- .where(eq(sessions.sessionToken, data.sessionToken))
271
- .then((res) => res[0] as AdapterSession)
272
- },
273
- async getSessionAndUser(data) {
274
- const sessionAndUser =
275
- (await client
276
- .select({
277
- session: sessions,
278
- user: users,
279
- })
280
- .from(sessions)
281
- .where(eq(sessions.sessionToken, data))
282
- .innerJoin(users, eq(users.id, sessions.userId))
283
- .then((res) => res[0])) ?? null
284
-
285
- return sessionAndUser
286
- },
287
- async updateUser(data) {
288
- if (!data.id) {
289
- throw new Error('No user id.')
290
- }
291
-
292
- await client.update(users).set(data).where(eq(users.id, data.id))
293
-
294
- return await client
295
- .select()
296
- .from(users)
297
- .where(eq(users.id, data.id))
298
- .then((res) => res[0] as AdapterUser)
299
- },
300
- async updateSession(data) {
301
- await client.update(sessions).set(data).where(eq(sessions.sessionToken, data.sessionToken))
302
-
303
- return await client
304
- .select()
305
- .from(sessions)
306
- .where(eq(sessions.sessionToken, data.sessionToken))
307
- .then((res) => res[0])
308
- },
309
- async linkAccount(rawAccount) {
310
- await client.insert(accounts).values(rawAccount)
311
- },
312
- async getUserByAccount(account) {
313
- const dbAccount =
314
- (await client
315
- .select()
316
- .from(accounts)
317
- .where(
318
- and(eq(accounts.providerAccountId, account.providerAccountId), eq(accounts.provider, account.provider)),
319
- )
320
- .leftJoin(users, eq(accounts.userId, users.id))
321
- .then((res) => res[0])) ?? null
322
-
323
- if (!dbAccount) {
324
- return null
325
- }
326
-
327
- return dbAccount.user
328
- },
329
- async deleteSession(sessionToken) {
330
- const session =
331
- (await client
332
- .select()
333
- .from(sessions)
334
- .where(eq(sessions.sessionToken, sessionToken))
335
- .then((res) => res[0])) ?? null
336
-
337
- await client.delete(sessions).where(eq(sessions.sessionToken, sessionToken))
338
-
339
- return session
340
- },
341
- async createVerificationToken(token) {
342
- await client.insert(verificationTokens).values(token)
343
-
344
- return await client
345
- .select()
346
- .from(verificationTokens)
347
- .where(eq(verificationTokens.identifier, token.identifier))
348
- .then((res) => res[0])
349
- },
350
- async useVerificationToken(token) {
351
- try {
352
- const deletedToken =
353
- (await client
354
- .select()
355
- .from(verificationTokens)
356
- .where(and(eq(verificationTokens.identifier, token.identifier), eq(verificationTokens.token, token.token)))
357
- .then((res) => res[0])) ?? null
358
-
359
- if (deletedToken?.createdAt) {
360
- const TIMEOUT_IN_SECONDS = 90
361
- const expireMultipleClicks = addSeconds(deletedToken.createdAt, TIMEOUT_IN_SECONDS)
362
- const now = new Date()
363
-
364
- if (isAfter(expireMultipleClicks, now)) {
365
- // @ts-ignore
366
- const { id: _, ...verificationToken } = token
367
- return deletedToken
368
- } else {
369
- await client
370
- .delete(verificationTokens)
371
- .where(
372
- and(eq(verificationTokens.identifier, token.identifier), eq(verificationTokens.token, token.token)),
373
- )
374
- return deletedToken
375
- }
376
- }
377
-
378
- return deletedToken
379
- } catch (err) {
380
- throw new Error('No verification token found.')
381
- }
382
- },
383
- async deleteUser(id) {
384
- const user = await client
385
- .select()
386
- .from(users)
387
- .where(eq(users.id, id))
388
- .then((res) => res[0] ?? null)
389
-
390
- await client.delete(users).where(eq(users.id, id))
391
-
392
- return user
393
- },
394
- async unlinkAccount(account) {
395
- await client
396
- .delete(accounts)
397
- .where(and(eq(accounts.providerAccountId, account.providerAccountId), eq(accounts.provider, account.provider)))
398
-
399
- return undefined
400
- },
401
- }
402
- }