@c15t/backend 0.0.1-rc.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (521) hide show
  1. package/.turbo/turbo-build.log +11 -0
  2. package/.turbo/turbo-check-types.log +5 -0
  3. package/.turbo/turbo-fmt.log +7 -0
  4. package/.turbo/turbo-lint.log +6 -0
  5. package/.turbo/turbo-test.log +26 -0
  6. package/README-next.md +223 -0
  7. package/README.md +164 -0
  8. package/dist/api/call.d.ts +176 -0
  9. package/dist/api/call.d.ts.map +1 -0
  10. package/dist/api/index.d.ts +935 -0
  11. package/dist/api/index.d.ts.map +1 -0
  12. package/dist/api/middlewares/index.d.ts +39 -0
  13. package/dist/api/middlewares/index.d.ts.map +1 -0
  14. package/dist/api/middlewares/origin-check.d.ts +82 -0
  15. package/dist/api/middlewares/origin-check.d.ts.map +1 -0
  16. package/dist/api/middlewares/validate-context.d.ts +38 -0
  17. package/dist/api/middlewares/validate-context.d.ts.map +1 -0
  18. package/dist/api/routes/__tests__/consent.test.d.ts +2 -0
  19. package/dist/api/routes/__tests__/consent.test.d.ts.map +1 -0
  20. package/dist/api/routes/__tests__/status.test.d.ts +2 -0
  21. package/dist/api/routes/__tests__/status.test.d.ts.map +1 -0
  22. package/dist/api/routes/error.d.ts +57 -0
  23. package/dist/api/routes/error.d.ts.map +1 -0
  24. package/dist/api/routes/generate-consent-receipt.d.ts +130 -0
  25. package/dist/api/routes/generate-consent-receipt.d.ts.map +1 -0
  26. package/dist/api/routes/get-consent-history.d.ts +133 -0
  27. package/dist/api/routes/get-consent-history.d.ts.map +1 -0
  28. package/dist/api/routes/get-consent-policy.d.ts +164 -0
  29. package/dist/api/routes/get-consent-policy.d.ts.map +1 -0
  30. package/dist/api/routes/get-consent.d.ts +148 -0
  31. package/dist/api/routes/get-consent.d.ts.map +1 -0
  32. package/dist/api/routes/index.d.ts +339 -0
  33. package/dist/api/routes/index.d.ts.map +1 -0
  34. package/dist/api/routes/ok.d.ts +87 -0
  35. package/dist/api/routes/ok.d.ts.map +1 -0
  36. package/dist/api/routes/set-consent.d.ts +245 -0
  37. package/dist/api/routes/set-consent.d.ts.map +1 -0
  38. package/dist/api/routes/show-consent-banner.d.ts +127 -0
  39. package/dist/api/routes/show-consent-banner.d.ts.map +1 -0
  40. package/dist/api/routes/status.d.ts +61 -0
  41. package/dist/api/routes/status.d.ts.map +1 -0
  42. package/dist/api/routes/verify-consent.d.ts +179 -0
  43. package/dist/api/routes/verify-consent.d.ts.map +1 -0
  44. package/dist/api/routes/withdraw-consent.d.ts +194 -0
  45. package/dist/api/routes/withdraw-consent.d.ts.map +1 -0
  46. package/dist/api/to-endpoints.d.ts +35 -0
  47. package/dist/api/to-endpoints.d.ts.map +1 -0
  48. package/dist/client/index.cjs +139 -0
  49. package/dist/client/index.d.ts +203 -0
  50. package/dist/client/index.d.ts.map +1 -0
  51. package/dist/client/index.js +106 -0
  52. package/dist/client/types.d.ts +431 -0
  53. package/dist/client/types.d.ts.map +1 -0
  54. package/dist/core.d.ts +124 -0
  55. package/dist/core.d.ts.map +1 -0
  56. package/dist/core.test.d.ts +2 -0
  57. package/dist/core.test.d.ts.map +1 -0
  58. package/dist/db/adapters/drizzle-adapter/drizzle-adapter.d.ts +122 -0
  59. package/dist/db/adapters/drizzle-adapter/drizzle-adapter.d.ts.map +1 -0
  60. package/dist/db/adapters/drizzle-adapter/index.d.ts +2 -0
  61. package/dist/db/adapters/drizzle-adapter/index.d.ts.map +1 -0
  62. package/dist/db/adapters/drizzle.cjs +1531 -0
  63. package/dist/db/adapters/drizzle.js +1489 -0
  64. package/dist/db/adapters/kysely-adapter/dialect.d.ts +72 -0
  65. package/dist/db/adapters/kysely-adapter/dialect.d.ts.map +1 -0
  66. package/dist/db/adapters/kysely-adapter/index.d.ts +4 -0
  67. package/dist/db/adapters/kysely-adapter/index.d.ts.map +1 -0
  68. package/dist/db/adapters/kysely-adapter/kysely-adapter.d.ts +98 -0
  69. package/dist/db/adapters/kysely-adapter/kysely-adapter.d.ts.map +1 -0
  70. package/dist/db/adapters/kysely-adapter/types.d.ts +281 -0
  71. package/dist/db/adapters/kysely-adapter/types.d.ts.map +1 -0
  72. package/dist/db/adapters/kysely.cjs +1551 -0
  73. package/dist/db/adapters/kysely.js +1508 -0
  74. package/dist/db/adapters/memory-adapter/index.d.ts +2 -0
  75. package/dist/db/adapters/memory-adapter/index.d.ts.map +1 -0
  76. package/dist/db/adapters/memory-adapter/memory-adapter.d.ts +56 -0
  77. package/dist/db/adapters/memory-adapter/memory-adapter.d.ts.map +1 -0
  78. package/dist/db/adapters/memory.cjs +1391 -0
  79. package/dist/db/adapters/memory.js +1349 -0
  80. package/dist/db/adapters/prisma-adapter/index.d.ts +2 -0
  81. package/dist/db/adapters/prisma-adapter/index.d.ts.map +1 -0
  82. package/dist/db/adapters/prisma-adapter/prisma-adapter.d.ts +143 -0
  83. package/dist/db/adapters/prisma-adapter/prisma-adapter.d.ts.map +1 -0
  84. package/dist/db/adapters/prisma.cjs +1503 -0
  85. package/dist/db/adapters/prisma.js +1461 -0
  86. package/dist/db/adapters/types.d.ts +154 -0
  87. package/dist/db/adapters/types.d.ts.map +1 -0
  88. package/dist/db/adapters/utils.d.ts +36 -0
  89. package/dist/db/adapters/utils.d.ts.map +1 -0
  90. package/dist/db/core/fields/field-factory.d.ts +383 -0
  91. package/dist/db/core/fields/field-factory.d.ts.map +1 -0
  92. package/dist/db/core/fields/field-inference.d.ts +218 -0
  93. package/dist/db/core/fields/field-inference.d.ts.map +1 -0
  94. package/dist/db/core/fields/field-options-integration.d.ts +90 -0
  95. package/dist/db/core/fields/field-options-integration.d.ts.map +1 -0
  96. package/dist/db/core/fields/field-types.d.ts +182 -0
  97. package/dist/db/core/fields/field-types.d.ts.map +1 -0
  98. package/dist/db/core/fields/id-generator.d.ts +19 -0
  99. package/dist/db/core/fields/id-generator.d.ts.map +1 -0
  100. package/dist/db/core/fields/index.d.ts +8 -0
  101. package/dist/db/core/fields/index.d.ts.map +1 -0
  102. package/dist/db/core/fields/superjson-utils.d.ts +34 -0
  103. package/dist/db/core/fields/superjson-utils.d.ts.map +1 -0
  104. package/dist/db/core/fields/zod-fields.d.ts +1011 -0
  105. package/dist/db/core/fields/zod-fields.d.ts.map +1 -0
  106. package/dist/db/core/get-schema.d.ts +36 -0
  107. package/dist/db/core/get-schema.d.ts.map +1 -0
  108. package/dist/db/core/types.d.ts +41 -0
  109. package/dist/db/core/types.d.ts.map +1 -0
  110. package/dist/db/create-registry.d.ts +760 -0
  111. package/dist/db/create-registry.d.ts.map +1 -0
  112. package/dist/db/hooks/create-hooks.d.ts +32 -0
  113. package/dist/db/hooks/create-hooks.d.ts.map +1 -0
  114. package/dist/db/hooks/index.d.ts +40 -0
  115. package/dist/db/hooks/index.d.ts.map +1 -0
  116. package/dist/db/hooks/types.d.ts +133 -0
  117. package/dist/db/hooks/types.d.ts.map +1 -0
  118. package/dist/db/hooks/update-hooks.d.ts +33 -0
  119. package/dist/db/hooks/update-hooks.d.ts.map +1 -0
  120. package/dist/db/hooks/update-many-hooks.d.ts +55 -0
  121. package/dist/db/hooks/update-many-hooks.d.ts.map +1 -0
  122. package/dist/db/hooks/utils.d.ts +62 -0
  123. package/dist/db/hooks/utils.d.ts.map +1 -0
  124. package/dist/db/hooks/with-hooks-factory.d.ts +33 -0
  125. package/dist/db/hooks/with-hooks-factory.d.ts.map +1 -0
  126. package/dist/db/index.cjs +2458 -0
  127. package/dist/db/index.d.ts +11 -0
  128. package/dist/db/index.d.ts.map +1 -0
  129. package/dist/db/index.js +2404 -0
  130. package/dist/db/migration/get-migration.d.ts +32 -0
  131. package/dist/db/migration/get-migration.d.ts.map +1 -0
  132. package/dist/db/migration/get-schema/get-schema.d.ts +27 -0
  133. package/dist/db/migration/get-schema/get-schema.d.ts.map +1 -0
  134. package/dist/db/migration/get-schema/index.d.ts +21 -0
  135. package/dist/db/migration/get-schema/index.d.ts.map +1 -0
  136. package/dist/db/migration/get-schema/process-fields.d.ts +16 -0
  137. package/dist/db/migration/get-schema/process-fields.d.ts.map +1 -0
  138. package/dist/db/migration/get-schema/process-tables.d.ts +13 -0
  139. package/dist/db/migration/get-schema/process-tables.d.ts.map +1 -0
  140. package/dist/db/migration/get-schema/types.d.ts +17 -0
  141. package/dist/db/migration/get-schema/types.d.ts.map +1 -0
  142. package/dist/db/migration/index.cjs +1613 -0
  143. package/dist/db/migration/index.d.ts +14 -0
  144. package/dist/db/migration/index.d.ts.map +1 -0
  145. package/dist/db/migration/index.js +1571 -0
  146. package/dist/db/migration/migration-builders.d.ts +28 -0
  147. package/dist/db/migration/migration-builders.d.ts.map +1 -0
  148. package/dist/db/migration/migration-execution.d.ts +12 -0
  149. package/dist/db/migration/migration-execution.d.ts.map +1 -0
  150. package/dist/db/migration/schema-comparison.d.ts +54 -0
  151. package/dist/db/migration/schema-comparison.d.ts.map +1 -0
  152. package/dist/db/migration/type-mapping.d.ts +86 -0
  153. package/dist/db/migration/type-mapping.d.ts.map +1 -0
  154. package/dist/db/migration/types.d.ts +37 -0
  155. package/dist/db/migration/types.d.ts.map +1 -0
  156. package/dist/db/schema/audit-log/index.d.ts +4 -0
  157. package/dist/db/schema/audit-log/index.d.ts.map +1 -0
  158. package/dist/db/schema/audit-log/registry.d.ts +128 -0
  159. package/dist/db/schema/audit-log/registry.d.ts.map +1 -0
  160. package/dist/db/schema/audit-log/schema.d.ts +67 -0
  161. package/dist/db/schema/audit-log/schema.d.ts.map +1 -0
  162. package/dist/db/schema/audit-log/table.d.ts +175 -0
  163. package/dist/db/schema/audit-log/table.d.ts.map +1 -0
  164. package/dist/db/schema/audit-log/types.d.ts +29 -0
  165. package/dist/db/schema/audit-log/types.d.ts.map +1 -0
  166. package/dist/db/schema/consent/index.d.ts +4 -0
  167. package/dist/db/schema/consent/index.d.ts.map +1 -0
  168. package/dist/db/schema/consent/registry.d.ts +318 -0
  169. package/dist/db/schema/consent/registry.d.ts.map +1 -0
  170. package/dist/db/schema/consent/schema.d.ts +135 -0
  171. package/dist/db/schema/consent/schema.d.ts.map +1 -0
  172. package/dist/db/schema/consent/table.d.ts +245 -0
  173. package/dist/db/schema/consent/table.d.ts.map +1 -0
  174. package/dist/db/schema/consent/types.d.ts +37 -0
  175. package/dist/db/schema/consent/types.d.ts.map +1 -0
  176. package/dist/db/schema/consent-geo-location/index.d.ts +4 -0
  177. package/dist/db/schema/consent-geo-location/index.d.ts.map +1 -0
  178. package/dist/db/schema/consent-geo-location/registry.d.ts +96 -0
  179. package/dist/db/schema/consent-geo-location/registry.d.ts.map +1 -0
  180. package/dist/db/schema/consent-geo-location/schema.d.ts +71 -0
  181. package/dist/db/schema/consent-geo-location/schema.d.ts.map +1 -0
  182. package/dist/db/schema/consent-geo-location/table.d.ts +167 -0
  183. package/dist/db/schema/consent-geo-location/table.d.ts.map +1 -0
  184. package/dist/db/schema/consent-geo-location/types.d.ts +21 -0
  185. package/dist/db/schema/consent-geo-location/types.d.ts.map +1 -0
  186. package/dist/db/schema/consent-policy/index.d.ts +4 -0
  187. package/dist/db/schema/consent-policy/index.d.ts.map +1 -0
  188. package/dist/db/schema/consent-policy/registry.d.ts +186 -0
  189. package/dist/db/schema/consent-policy/registry.d.ts.map +1 -0
  190. package/dist/db/schema/consent-policy/schema.d.ts +68 -0
  191. package/dist/db/schema/consent-policy/schema.d.ts.map +1 -0
  192. package/dist/db/schema/consent-policy/table.d.ts +147 -0
  193. package/dist/db/schema/consent-policy/table.d.ts.map +1 -0
  194. package/dist/db/schema/consent-policy/types.d.ts +28 -0
  195. package/dist/db/schema/consent-policy/types.d.ts.map +1 -0
  196. package/dist/db/schema/consent-purpose/index.d.ts +4 -0
  197. package/dist/db/schema/consent-purpose/index.d.ts.map +1 -0
  198. package/dist/db/schema/consent-purpose/registry.d.ts +136 -0
  199. package/dist/db/schema/consent-purpose/registry.d.ts.map +1 -0
  200. package/dist/db/schema/consent-purpose/schema.d.ts +79 -0
  201. package/dist/db/schema/consent-purpose/schema.d.ts.map +1 -0
  202. package/dist/db/schema/consent-purpose/table.d.ts +161 -0
  203. package/dist/db/schema/consent-purpose/table.d.ts.map +1 -0
  204. package/dist/db/schema/consent-purpose/types.d.ts +16 -0
  205. package/dist/db/schema/consent-purpose/types.d.ts.map +1 -0
  206. package/dist/db/schema/consent-purpose-junction/index.d.ts +4 -0
  207. package/dist/db/schema/consent-purpose-junction/index.d.ts.map +1 -0
  208. package/dist/db/schema/consent-purpose-junction/registry.d.ts +109 -0
  209. package/dist/db/schema/consent-purpose-junction/registry.d.ts.map +1 -0
  210. package/dist/db/schema/consent-purpose-junction/schema.d.ts +57 -0
  211. package/dist/db/schema/consent-purpose-junction/schema.d.ts.map +1 -0
  212. package/dist/db/schema/consent-purpose-junction/table.d.ts +138 -0
  213. package/dist/db/schema/consent-purpose-junction/table.d.ts.map +1 -0
  214. package/dist/db/schema/consent-purpose-junction/types.d.ts +14 -0
  215. package/dist/db/schema/consent-purpose-junction/types.d.ts.map +1 -0
  216. package/dist/db/schema/consent-record/index.d.ts +4 -0
  217. package/dist/db/schema/consent-record/index.d.ts.map +1 -0
  218. package/dist/db/schema/consent-record/registry.d.ts +119 -0
  219. package/dist/db/schema/consent-record/registry.d.ts.map +1 -0
  220. package/dist/db/schema/consent-record/schema.d.ts +57 -0
  221. package/dist/db/schema/consent-record/schema.d.ts.map +1 -0
  222. package/dist/db/schema/consent-record/table.d.ts +123 -0
  223. package/dist/db/schema/consent-record/table.d.ts.map +1 -0
  224. package/dist/db/schema/consent-record/types.d.ts +21 -0
  225. package/dist/db/schema/consent-record/types.d.ts.map +1 -0
  226. package/dist/db/schema/consent-withdrawal/index.d.ts +4 -0
  227. package/dist/db/schema/consent-withdrawal/index.d.ts.map +1 -0
  228. package/dist/db/schema/consent-withdrawal/registry.d.ts +134 -0
  229. package/dist/db/schema/consent-withdrawal/registry.d.ts.map +1 -0
  230. package/dist/db/schema/consent-withdrawal/schema.d.ts +67 -0
  231. package/dist/db/schema/consent-withdrawal/schema.d.ts.map +1 -0
  232. package/dist/db/schema/consent-withdrawal/table.d.ts +170 -0
  233. package/dist/db/schema/consent-withdrawal/table.d.ts.map +1 -0
  234. package/dist/db/schema/consent-withdrawal/types.d.ts +28 -0
  235. package/dist/db/schema/consent-withdrawal/types.d.ts.map +1 -0
  236. package/dist/db/schema/definition.d.ts +1100 -0
  237. package/dist/db/schema/definition.d.ts.map +1 -0
  238. package/dist/db/schema/domain/index.d.ts +4 -0
  239. package/dist/db/schema/domain/index.d.ts.map +1 -0
  240. package/dist/db/schema/domain/registry.d.ts +169 -0
  241. package/dist/db/schema/domain/registry.d.ts.map +1 -0
  242. package/dist/db/schema/domain/schema.d.ts +60 -0
  243. package/dist/db/schema/domain/schema.d.ts.map +1 -0
  244. package/dist/db/schema/domain/table.d.ts +140 -0
  245. package/dist/db/schema/domain/table.d.ts.map +1 -0
  246. package/dist/db/schema/domain/types.d.ts +27 -0
  247. package/dist/db/schema/domain/types.d.ts.map +1 -0
  248. package/dist/db/schema/geo-location/index.d.ts +4 -0
  249. package/dist/db/schema/geo-location/index.d.ts.map +1 -0
  250. package/dist/db/schema/geo-location/registry.d.ts +114 -0
  251. package/dist/db/schema/geo-location/registry.d.ts.map +1 -0
  252. package/dist/db/schema/geo-location/schema.d.ts +58 -0
  253. package/dist/db/schema/geo-location/schema.d.ts.map +1 -0
  254. package/dist/db/schema/geo-location/table.d.ts +132 -0
  255. package/dist/db/schema/geo-location/table.d.ts.map +1 -0
  256. package/dist/db/schema/geo-location/types.d.ts +17 -0
  257. package/dist/db/schema/geo-location/types.d.ts.map +1 -0
  258. package/dist/db/schema/index.d.ts +85 -0
  259. package/dist/db/schema/index.d.ts.map +1 -0
  260. package/dist/db/schema/parser.d.ts +183 -0
  261. package/dist/db/schema/parser.d.ts.map +1 -0
  262. package/dist/db/schema/schemas.d.ts +383 -0
  263. package/dist/db/schema/schemas.d.ts.map +1 -0
  264. package/dist/db/schema/subject/index.d.ts +4 -0
  265. package/dist/db/schema/subject/index.d.ts.map +1 -0
  266. package/dist/db/schema/subject/registry.d.ts +141 -0
  267. package/dist/db/schema/subject/registry.d.ts.map +1 -0
  268. package/dist/db/schema/subject/schema.d.ts +56 -0
  269. package/dist/db/schema/subject/schema.d.ts.map +1 -0
  270. package/dist/db/schema/subject/table.d.ts +136 -0
  271. package/dist/db/schema/subject/table.d.ts.map +1 -0
  272. package/dist/db/schema/subject/types.d.ts +22 -0
  273. package/dist/db/schema/subject/types.d.ts.map +1 -0
  274. package/dist/db/schema/types.d.ts +136 -0
  275. package/dist/db/schema/types.d.ts.map +1 -0
  276. package/dist/db/utils/adapter-factory.d.ts +21 -0
  277. package/dist/db/utils/adapter-factory.d.ts.map +1 -0
  278. package/dist/db/utils/index.d.ts +10 -0
  279. package/dist/db/utils/index.d.ts.map +1 -0
  280. package/dist/db/utils.d.ts +4 -0
  281. package/dist/db/utils.d.ts.map +1 -0
  282. package/dist/error/codes.cjs +68 -0
  283. package/dist/error/codes.d.ts +175 -0
  284. package/dist/error/codes.d.ts.map +1 -0
  285. package/dist/error/codes.js +35 -0
  286. package/dist/error/error.d.ts +79 -0
  287. package/dist/error/error.d.ts.map +1 -0
  288. package/dist/error/index.cjs +172 -0
  289. package/dist/error/index.d.ts +9 -0
  290. package/dist/error/index.d.ts.map +1 -0
  291. package/dist/error/index.js +129 -0
  292. package/dist/error/logging.d.ts +25 -0
  293. package/dist/error/logging.d.ts.map +1 -0
  294. package/dist/error/pipeline.d.ts +19 -0
  295. package/dist/error/pipeline.d.ts.map +1 -0
  296. package/dist/error/recovery.d.ts +22 -0
  297. package/dist/error/recovery.d.ts.map +1 -0
  298. package/dist/error/results.d.ts +56 -0
  299. package/dist/error/results.d.ts.map +1 -0
  300. package/dist/index.cjs +4777 -0
  301. package/dist/index.d.ts +46 -0
  302. package/dist/index.d.ts.map +1 -0
  303. package/dist/index.js +4708 -0
  304. package/dist/init.d.ts +52 -0
  305. package/dist/init.d.ts.map +1 -0
  306. package/dist/init.test.d.ts +2 -0
  307. package/dist/init.test.d.ts.map +1 -0
  308. package/dist/integrations/index.cjs +281 -0
  309. package/dist/integrations/index.d.ts +7 -0
  310. package/dist/integrations/index.d.ts.map +1 -0
  311. package/dist/integrations/index.js +248 -0
  312. package/dist/integrations/next.cjs +131 -0
  313. package/dist/integrations/next.d.ts +29 -0
  314. package/dist/integrations/next.d.ts.map +1 -0
  315. package/dist/integrations/next.js +99 -0
  316. package/dist/integrations/react.cjs +182 -0
  317. package/dist/integrations/react.d.ts +257 -0
  318. package/dist/integrations/react.d.ts.map +1 -0
  319. package/dist/integrations/react.js +150 -0
  320. package/dist/plugins/geo/index.d.ts +2 -0
  321. package/dist/plugins/geo/index.d.ts.map +1 -0
  322. package/dist/test/utils.d.ts +65 -0
  323. package/dist/test/utils.d.ts.map +1 -0
  324. package/dist/types/api.d.ts +89 -0
  325. package/dist/types/api.d.ts.map +1 -0
  326. package/dist/types/context.d.ts +205 -0
  327. package/dist/types/context.d.ts.map +1 -0
  328. package/dist/types/helper.d.ts +78 -0
  329. package/dist/types/helper.d.ts.map +1 -0
  330. package/dist/types/index.cjs +19 -0
  331. package/dist/types/index.d.ts +6 -0
  332. package/dist/types/index.d.ts.map +1 -0
  333. package/dist/types/index.js +0 -0
  334. package/dist/types/options.d.ts +172 -0
  335. package/dist/types/options.d.ts.map +1 -0
  336. package/dist/types/plugins.d.ts +442 -0
  337. package/dist/types/plugins.d.ts.map +1 -0
  338. package/dist/utils/env.d.ts +77 -0
  339. package/dist/utils/env.d.ts.map +1 -0
  340. package/dist/utils/hide-metadata.d.ts +22 -0
  341. package/dist/utils/hide-metadata.d.ts.map +1 -0
  342. package/dist/utils/index.cjs +268 -0
  343. package/dist/utils/index.d.ts +18 -0
  344. package/dist/utils/index.d.ts.map +1 -0
  345. package/dist/utils/index.js +210 -0
  346. package/dist/utils/ip.d.ts +10 -0
  347. package/dist/utils/ip.d.ts.map +1 -0
  348. package/dist/utils/json.d.ts +14 -0
  349. package/dist/utils/json.d.ts.map +1 -0
  350. package/dist/utils/logger.d.ts +108 -0
  351. package/dist/utils/logger.d.ts.map +1 -0
  352. package/dist/utils/url.d.ts +87 -0
  353. package/dist/utils/url.d.ts.map +1 -0
  354. package/dist/utils/wildcard.d.ts +46 -0
  355. package/dist/utils/wildcard.d.ts.map +1 -0
  356. package/knip.json +37 -0
  357. package/package.json +146 -0
  358. package/rslib.config.ts +104 -0
  359. package/src/api/call.ts +177 -0
  360. package/src/api/index.ts +303 -0
  361. package/src/api/middlewares/index.ts +38 -0
  362. package/src/api/middlewares/origin-check.ts +260 -0
  363. package/src/api/middlewares/validate-context.ts +175 -0
  364. package/src/api/routes/__tests__/consent.test.ts +270 -0
  365. package/src/api/routes/__tests__/status.test.ts +36 -0
  366. package/src/api/routes/error.ts +130 -0
  367. package/src/api/routes/generate-consent-receipt.ts +244 -0
  368. package/src/api/routes/get-consent-history.ts +128 -0
  369. package/src/api/routes/get-consent-policy.ts +327 -0
  370. package/src/api/routes/get-consent.ts +230 -0
  371. package/src/api/routes/index.ts +12 -0
  372. package/src/api/routes/ok.ts +45 -0
  373. package/src/api/routes/set-consent.ts +328 -0
  374. package/src/api/routes/show-consent-banner.ts +149 -0
  375. package/src/api/routes/status.ts +62 -0
  376. package/src/api/routes/verify-consent.ts +272 -0
  377. package/src/api/routes/withdraw-consent.ts +293 -0
  378. package/src/api/to-endpoints.ts +371 -0
  379. package/src/client/index.ts +471 -0
  380. package/src/client/types.ts +458 -0
  381. package/src/core.test.ts +303 -0
  382. package/src/core.ts +267 -0
  383. package/src/db/adapters/drizzle-adapter/drizzle-adapter.ts +711 -0
  384. package/src/db/adapters/drizzle-adapter/index.ts +1 -0
  385. package/src/db/adapters/kysely-adapter/dialect.ts +192 -0
  386. package/src/db/adapters/kysely-adapter/index.ts +3 -0
  387. package/src/db/adapters/kysely-adapter/kysely-adapter.ts +1168 -0
  388. package/src/db/adapters/kysely-adapter/types.ts +307 -0
  389. package/src/db/adapters/memory-adapter/index.ts +1 -0
  390. package/src/db/adapters/memory-adapter/memory-adapter.ts +648 -0
  391. package/src/db/adapters/prisma-adapter/index.ts +1 -0
  392. package/src/db/adapters/prisma-adapter/prisma-adapter.ts +586 -0
  393. package/src/db/adapters/types.ts +203 -0
  394. package/src/db/adapters/utils.ts +51 -0
  395. package/src/db/core/fields/field-factory.ts +804 -0
  396. package/src/db/core/fields/field-inference.ts +298 -0
  397. package/src/db/core/fields/field-options-integration.ts +135 -0
  398. package/src/db/core/fields/field-types.ts +233 -0
  399. package/src/db/core/fields/id-generator.ts +57 -0
  400. package/src/db/core/fields/index.ts +56 -0
  401. package/src/db/core/fields/superjson-utils.ts +155 -0
  402. package/src/db/core/fields/zod-fields.ts +269 -0
  403. package/src/db/core/get-schema.ts +102 -0
  404. package/src/db/core/types.ts +52 -0
  405. package/src/db/create-registry.ts +31 -0
  406. package/src/db/hooks/create-hooks.ts +88 -0
  407. package/src/db/hooks/index.ts +39 -0
  408. package/src/db/hooks/types.ts +164 -0
  409. package/src/db/hooks/update-hooks.ts +91 -0
  410. package/src/db/hooks/update-many-hooks.ts +176 -0
  411. package/src/db/hooks/utils.ts +151 -0
  412. package/src/db/hooks/with-hooks-factory.ts +68 -0
  413. package/src/db/index.ts +32 -0
  414. package/src/db/migration/get-migration.ts +89 -0
  415. package/src/db/migration/get-schema/get-schema.ts +44 -0
  416. package/src/db/migration/get-schema/index.ts +20 -0
  417. package/src/db/migration/get-schema/process-fields.ts +66 -0
  418. package/src/db/migration/get-schema/process-tables.ts +68 -0
  419. package/src/db/migration/get-schema/types.ts +18 -0
  420. package/src/db/migration/index.ts +18 -0
  421. package/src/db/migration/migration-builders.ts +170 -0
  422. package/src/db/migration/migration-execution.ts +79 -0
  423. package/src/db/migration/schema-comparison.ts +216 -0
  424. package/src/db/migration/type-mapping.ts +255 -0
  425. package/src/db/migration/types.ts +46 -0
  426. package/src/db/schema/audit-log/index.ts +3 -0
  427. package/src/db/schema/audit-log/registry.ts +228 -0
  428. package/src/db/schema/audit-log/schema.ts +46 -0
  429. package/src/db/schema/audit-log/table.ts +185 -0
  430. package/src/db/schema/audit-log/types.ts +29 -0
  431. package/src/db/schema/consent/index.ts +3 -0
  432. package/src/db/schema/consent/registry.ts +381 -0
  433. package/src/db/schema/consent/schema.ts +65 -0
  434. package/src/db/schema/consent/table.ts +220 -0
  435. package/src/db/schema/consent/types.ts +39 -0
  436. package/src/db/schema/consent-geo-location/index.ts +3 -0
  437. package/src/db/schema/consent-geo-location/registry.ts +124 -0
  438. package/src/db/schema/consent-geo-location/schema.ts +51 -0
  439. package/src/db/schema/consent-geo-location/table.ts +169 -0
  440. package/src/db/schema/consent-geo-location/types.ts +21 -0
  441. package/src/db/schema/consent-policy/index.ts +3 -0
  442. package/src/db/schema/consent-policy/registry.ts +313 -0
  443. package/src/db/schema/consent-policy/schema.ts +47 -0
  444. package/src/db/schema/consent-policy/table.ts +141 -0
  445. package/src/db/schema/consent-policy/types.ts +28 -0
  446. package/src/db/schema/consent-purpose/index.ts +3 -0
  447. package/src/db/schema/consent-purpose/registry.ts +188 -0
  448. package/src/db/schema/consent-purpose/schema.ts +58 -0
  449. package/src/db/schema/consent-purpose/table.ts +154 -0
  450. package/src/db/schema/consent-purpose/types.ts +16 -0
  451. package/src/db/schema/consent-purpose-junction/index.ts +3 -0
  452. package/src/db/schema/consent-purpose-junction/registry.ts +189 -0
  453. package/src/db/schema/consent-purpose-junction/schema.ts +49 -0
  454. package/src/db/schema/consent-purpose-junction/table.ts +142 -0
  455. package/src/db/schema/consent-purpose-junction/types.ts +14 -0
  456. package/src/db/schema/consent-record/index.ts +3 -0
  457. package/src/db/schema/consent-record/registry.ts +209 -0
  458. package/src/db/schema/consent-record/schema.ts +42 -0
  459. package/src/db/schema/consent-record/table.ts +124 -0
  460. package/src/db/schema/consent-record/types.ts +21 -0
  461. package/src/db/schema/consent-withdrawal/index.ts +3 -0
  462. package/src/db/schema/consent-withdrawal/registry.ts +219 -0
  463. package/src/db/schema/consent-withdrawal/schema.ts +48 -0
  464. package/src/db/schema/consent-withdrawal/table.ts +181 -0
  465. package/src/db/schema/consent-withdrawal/types.ts +29 -0
  466. package/src/db/schema/definition.ts +196 -0
  467. package/src/db/schema/domain/index.ts +3 -0
  468. package/src/db/schema/domain/registry.ts +272 -0
  469. package/src/db/schema/domain/schema.ts +43 -0
  470. package/src/db/schema/domain/table.ts +137 -0
  471. package/src/db/schema/domain/types.ts +27 -0
  472. package/src/db/schema/geo-location/index.ts +3 -0
  473. package/src/db/schema/geo-location/registry.ts +159 -0
  474. package/src/db/schema/geo-location/schema.ts +45 -0
  475. package/src/db/schema/geo-location/table.ts +148 -0
  476. package/src/db/schema/geo-location/types.ts +18 -0
  477. package/src/db/schema/index.ts +96 -0
  478. package/src/db/schema/parser.ts +417 -0
  479. package/src/db/schema/schemas.ts +35 -0
  480. package/src/db/schema/subject/index.ts +3 -0
  481. package/src/db/schema/subject/registry.ts +371 -0
  482. package/src/db/schema/subject/schema.ts +41 -0
  483. package/src/db/schema/subject/table.ts +139 -0
  484. package/src/db/schema/subject/types.ts +22 -0
  485. package/src/db/schema/types.ts +154 -0
  486. package/src/db/utils/adapter-factory.ts +64 -0
  487. package/src/db/utils/index.ts +10 -0
  488. package/src/db/utils.ts +42 -0
  489. package/src/docs/ADVANCED_JSON_HANDLING.md +99 -0
  490. package/src/docs/neverthrow.md +171 -0
  491. package/src/error/codes.ts +201 -0
  492. package/src/error/error.ts +145 -0
  493. package/src/error/index.ts +23 -0
  494. package/src/error/logging.ts +52 -0
  495. package/src/error/pipeline.ts +57 -0
  496. package/src/error/recovery.ts +45 -0
  497. package/src/error/results.ts +100 -0
  498. package/src/index.ts +79 -0
  499. package/src/init.test.ts +235 -0
  500. package/src/init.ts +261 -0
  501. package/src/integrations/index.ts +10 -0
  502. package/src/integrations/next.ts +136 -0
  503. package/src/integrations/react.ts +567 -0
  504. package/src/plugins/geo/index.ts +563 -0
  505. package/src/test/utils.ts +244 -0
  506. package/src/types/api.ts +101 -0
  507. package/src/types/context.ts +235 -0
  508. package/src/types/helper.ts +87 -0
  509. package/src/types/index.ts +5 -0
  510. package/src/types/options.ts +189 -0
  511. package/src/types/plugins.ts +538 -0
  512. package/src/utils/env.ts +103 -0
  513. package/src/utils/hide-metadata.ts +21 -0
  514. package/src/utils/index.ts +17 -0
  515. package/src/utils/ip.ts +45 -0
  516. package/src/utils/json.ts +19 -0
  517. package/src/utils/logger.ts +252 -0
  518. package/src/utils/url.ts +194 -0
  519. package/src/utils/wildcard.ts +253 -0
  520. package/tsconfig.json +12 -0
  521. package/vitest.config.ts +14 -0
@@ -0,0 +1,711 @@
1
+ //@ts-nocheck
2
+
3
+ import {
4
+ type SQL,
5
+ and,
6
+ asc,
7
+ count,
8
+ desc,
9
+ eq,
10
+ inArray,
11
+ like,
12
+ or,
13
+ } from 'drizzle-orm';
14
+ import { BASE_ERROR_CODES, C15TError } from '~/error';
15
+ import type { Adapter, C15TOptions, Where } from '~/types';
16
+ import { getConsentTables } from '../..';
17
+
18
+ import { generateId } from '~/db/core/fields';
19
+ import type { EntityName } from '~/db/core/types';
20
+ import { applyDefaultValue } from '../utils';
21
+
22
+ /**
23
+ * Database interface for Drizzle ORM integration
24
+ *
25
+ * This generic interface represents a Drizzle ORM database connection.
26
+ * It allows the adapter to work with different Drizzle providers.
27
+ *
28
+ * @remarks
29
+ * The interface uses an index signature to allow for dynamic access to
30
+ * the database's properties and methods.
31
+ */
32
+ export interface DB {
33
+ [key: string]: unknown;
34
+ }
35
+
36
+ /**
37
+ * Creates a transformer for converting between C15T data models and Drizzle schema
38
+ *
39
+ * This function creates an object with utility methods for converting data between
40
+ * the C15T internal representation and the Drizzle ORM schema representation.
41
+ *
42
+ * @internal This function is primarily used internally by the drizzleAdapter
43
+ * @param db - The Drizzle database instance
44
+ * @param config - Configuration options for the Drizzle adapter
45
+ * @param options - C15T options
46
+ * @returns An object containing entity transformation utilities
47
+ * @throws {C15TError} If the schema is not found or if a model or field doesn't exist
48
+ */
49
+ const createEntityTransformer = (
50
+ db: DB,
51
+ config: DrizzleAdapterConfig,
52
+ options: C15TOptions
53
+ ) => {
54
+ const schema = getConsentTables(options);
55
+
56
+ /**
57
+ * Gets the field name in the database schema
58
+ *
59
+ * @internal
60
+ * @param model - The model name
61
+ * @param field - The field name in the C15T model
62
+ * @returns The corresponding field name in the database schema
63
+ */
64
+ function getField(model: string, field: string) {
65
+ if (field === 'id') {
66
+ return field;
67
+ }
68
+ const f = schema[model].fields[field];
69
+ return f.fieldName || field;
70
+ }
71
+
72
+ /**
73
+ * Gets the schema model for a given entity name
74
+ *
75
+ * @internal
76
+ * @param entityName - The entity name to get the schema for
77
+ * @returns The schema model for the entity
78
+ * @throws {C15TError} If the schema is not found or the model doesn't exist in the schema
79
+ */
80
+ function getSchema(entityName: string) {
81
+ const schema = config.schema || db._.fullSchema;
82
+ if (!schema) {
83
+ throw new C15TError(
84
+ 'The schema could not be found. Please ensure the schema is properly configured in the adapter.',
85
+ {
86
+ code: BASE_ERROR_CODES.DATABASE_CONNECTION_ERROR,
87
+ status: 500,
88
+ data: {
89
+ provider: config.provider,
90
+ },
91
+ }
92
+ );
93
+ }
94
+ const model = getEntityName(entityName);
95
+ const schemaModel = schema[model];
96
+ if (!schemaModel) {
97
+ throw new C15TError(
98
+ `The model "${model}" does not exist in the schema. Please verify the model name and ensure it is defined in your schema.`,
99
+ {
100
+ code: BASE_ERROR_CODES.DATABASE_QUERY_ERROR,
101
+ status: 404,
102
+ data: {
103
+ model,
104
+ availableModels: Object.keys(schema),
105
+ },
106
+ }
107
+ );
108
+ }
109
+ return schemaModel;
110
+ }
111
+
112
+ /**
113
+ * Converts a model name to its corresponding entity name in the database
114
+ *
115
+ * @internal
116
+ * @param model - The model name to convert
117
+ * @returns The database entity name
118
+ */
119
+ const getEntityName = (model: string) => {
120
+ if (schema[model].entityName !== model) {
121
+ return schema[model].entityName;
122
+ }
123
+
124
+ if (config.usePlural) {
125
+ return `${model}s`;
126
+ }
127
+
128
+ return model;
129
+ };
130
+
131
+ /**
132
+ * Converts C15T where clauses to Drizzle ORM conditions
133
+ *
134
+ * @internal
135
+ * @typeParam EntityType - The type of entity being queried
136
+ * @param where - Array of where conditions from C15T
137
+ * @param model - The model name
138
+ * @returns Array of Drizzle ORM conditions
139
+ * @throws {C15TError} If a field doesn't exist or if the operator value is invalid
140
+ */
141
+ function convertWhereClause<EntityType extends EntityName>(
142
+ where: Where<EntityType>[],
143
+ model: EntityType
144
+ ) {
145
+ const schemaModel = getSchema(model);
146
+ if (!where) {
147
+ return [];
148
+ }
149
+ if (where.length === 1) {
150
+ const w = where[0];
151
+ if (!w) {
152
+ return [];
153
+ }
154
+ const field = getField(model, w.field);
155
+ if (!schemaModel[field]) {
156
+ throw new C15TError(
157
+ `The field "${field}" does not exist in model "${model}". Please verify the field name and ensure it is defined in your schema.`,
158
+ {
159
+ code: BASE_ERROR_CODES.DATABASE_QUERY_ERROR,
160
+ status: 404,
161
+ data: {
162
+ model,
163
+ field,
164
+ availableFields: Object.keys(schemaModel),
165
+ },
166
+ }
167
+ );
168
+ }
169
+ if (w.operator === 'in') {
170
+ if (!Array.isArray(w.value)) {
171
+ throw new C15TError(
172
+ `The value for the field "${field}" must be an array when using the "in" operator.`,
173
+ {
174
+ code: BASE_ERROR_CODES.BAD_REQUEST,
175
+ status: 400,
176
+ data: {
177
+ field,
178
+ operator: w.operator,
179
+ expectedType: 'array',
180
+ actualType: typeof w.value,
181
+ },
182
+ }
183
+ );
184
+ }
185
+ return [inArray(schemaModel[field], w.value)];
186
+ }
187
+
188
+ if (w.operator === 'contains') {
189
+ return [like(schemaModel[field], `%${w.value}%`)];
190
+ }
191
+
192
+ if (w.operator === 'starts_with') {
193
+ return [like(schemaModel[field], `${w.value}%`)];
194
+ }
195
+
196
+ if (w.operator === 'ends_with') {
197
+ return [like(schemaModel[field], `%${w.value}`)];
198
+ }
199
+
200
+ return [eq(schemaModel[field], w.value)];
201
+ }
202
+ const andGroup = where.filter((w) => w.connector === 'AND' || !w.connector);
203
+ const orGroup = where.filter((w) => w.connector === 'OR');
204
+
205
+ const andClause = and(
206
+ ...andGroup.map((w) => {
207
+ const field = getField(model, w.field);
208
+ if (w.operator === 'in') {
209
+ if (!Array.isArray(w.value)) {
210
+ throw new C15TError(
211
+ `The value for the field "${field}" must be an array when using the "in" operator.`,
212
+ {
213
+ code: BASE_ERROR_CODES.BAD_REQUEST,
214
+ status: 400,
215
+ data: {
216
+ field,
217
+ operator: w.operator,
218
+ expectedType: 'array',
219
+ actualType: typeof w.value,
220
+ },
221
+ }
222
+ );
223
+ }
224
+ return inArray(schemaModel[field], w.value);
225
+ }
226
+ return eq(schemaModel[field], w.value);
227
+ })
228
+ );
229
+ const orClause = or(
230
+ ...orGroup.map((w) => {
231
+ const field = getField(model, w.field);
232
+ return eq(schemaModel[field], w.value);
233
+ })
234
+ );
235
+
236
+ const clause: SQL<unknown>[] = [];
237
+ if (andGroup.length && andClause) {
238
+ clause.push(andClause);
239
+ }
240
+ if (orGroup.length && orClause) {
241
+ clause.push(orClause);
242
+ }
243
+ return clause;
244
+ }
245
+
246
+ const useDatabaseGeneratedId = options?.advanced?.generateId === false;
247
+ return {
248
+ getSchema,
249
+ /**
250
+ * Transforms input data from C15T format to Drizzle format
251
+ *
252
+ * @internal
253
+ * @param data - The data to transform
254
+ * @param model - The model name
255
+ * @param action - Whether this is a create or update operation
256
+ * @returns Transformed data for Drizzle ORM
257
+ */
258
+ transformInput(
259
+ data: Record<string, unknown>,
260
+ model: string,
261
+ action: 'create' | 'update'
262
+ ) {
263
+ const transformedData: Record<string, unknown> =
264
+ useDatabaseGeneratedId || action === 'update'
265
+ ? {}
266
+ : {
267
+ id: options.advanced?.generateId
268
+ ? options.advanced.generateId({
269
+ model,
270
+ })
271
+ : data.id || generateId(schema[model].entityPrefix),
272
+ };
273
+ const fields = schema[model].fields;
274
+ for (const field in fields) {
275
+ if (Object.hasOwn(fields, field)) {
276
+ const value = data[field];
277
+ if (value === undefined && !fields[field].defaultValue) {
278
+ continue;
279
+ }
280
+ transformedData[fields[field].fieldName || field] = applyDefaultValue(
281
+ value,
282
+ fields[field],
283
+ action
284
+ );
285
+ }
286
+ }
287
+ return transformedData;
288
+ },
289
+ /**
290
+ * Transforms output data from Drizzle format to C15T format
291
+ *
292
+ * @internal
293
+ * @param data - The data to transform
294
+ * @param model - The model name
295
+ * @param select - Optional array of fields to select
296
+ * @returns Transformed data for C15T or null if no data
297
+ */
298
+ transformOutput(
299
+ data: Record<string, unknown>,
300
+ model: string,
301
+ select: string[] = []
302
+ ) {
303
+ if (!data) {
304
+ return null;
305
+ }
306
+
307
+ let transformedData: Record<string, unknown> = {};
308
+
309
+ if (
310
+ (data.id || data._id) &&
311
+ (select.length === 0 || select.includes('id'))
312
+ ) {
313
+ transformedData = { id: data.id };
314
+ }
315
+
316
+ const tableSchema = schema[model].fields;
317
+ for (const key in tableSchema) {
318
+ if (select.length && !select.includes(key)) {
319
+ continue;
320
+ }
321
+ const field = tableSchema[key];
322
+ if (field) {
323
+ transformedData[key] = data[field.fieldName || key];
324
+ }
325
+ }
326
+ return transformedData;
327
+ },
328
+ convertWhereClause,
329
+ /**
330
+ * Helper for returning data from operations in MySQL
331
+ *
332
+ * @internal
333
+ * @param model - The model name
334
+ * @param builder - The query builder
335
+ * @param data - The data being operated on
336
+ * @param where - Optional where conditions
337
+ * @returns The result of the operation
338
+ */
339
+ withReturning: async (
340
+ model: string,
341
+ builder: unknown,
342
+ data: Record<string, unknown>,
343
+ where?: Where<string>[]
344
+ ) => {
345
+ if (config.provider !== 'mysql') {
346
+ const c = await builder.returning();
347
+ return c[0];
348
+ }
349
+
350
+ await builder.execute();
351
+ const schemaModel = getSchema(model);
352
+ const builderVal = builder.config?.values;
353
+
354
+ if (where?.length) {
355
+ const clause = convertWhereClause(where, model);
356
+ const res = await db
357
+ .select()
358
+ .from(schemaModel)
359
+ .where(...clause);
360
+ return res[0];
361
+ }
362
+
363
+ if (builderVal) {
364
+ const tId = builderVal[0]?.id.value;
365
+ const res = await db
366
+ .select()
367
+ .from(schemaModel)
368
+ .where(eq(schemaModel.id, tId));
369
+ return res[0];
370
+ }
371
+
372
+ if (data.id) {
373
+ const res = await db
374
+ .select()
375
+ .from(schemaModel)
376
+ .where(eq(schemaModel.id, data.id));
377
+ return res[0];
378
+ }
379
+ },
380
+ getField,
381
+ getEntityName,
382
+ };
383
+ };
384
+
385
+ /**
386
+ * Configuration options for the Drizzle adapter
387
+ *
388
+ * @example
389
+ * ```typescript
390
+ * // Basic Drizzle adapter configuration
391
+ * const config: DrizzleAdapterConfig = {
392
+ * provider: 'pg', // PostgreSQL
393
+ * usePlural: true // Use plural table names
394
+ * };
395
+ *
396
+ * // Configuration with explicit schema
397
+ * const configWithSchema: DrizzleAdapterConfig = {
398
+ * provider: 'mysql',
399
+ * schema: {
400
+ * subjects: subjects, // Drizzle schema objects
401
+ * consents: consents,
402
+ * purposes: purposes
403
+ * }
404
+ * };
405
+ * ```
406
+ */
407
+ export interface DrizzleAdapterConfig {
408
+ /**
409
+ * The schema object that defines the tables and fields
410
+ *
411
+ * @remarks
412
+ * If not provided, the adapter will attempt to use `db._.fullSchema`
413
+ */
414
+ schema?: Record<string, unknown>;
415
+
416
+ /**
417
+ * The database provider
418
+ *
419
+ * @remarks
420
+ * Different providers have different SQL dialects and features
421
+ */
422
+ provider: 'pg' | 'mysql' | 'sqlite';
423
+
424
+ /**
425
+ * If the table names in the schema are plural
426
+ * set this to true. For example, if the schema
427
+ * has an object with a key "subjects" instead of "subject"
428
+ *
429
+ * @default false
430
+ */
431
+ usePlural?: boolean;
432
+ }
433
+
434
+ /**
435
+ * Validates that the schema contains all required fields
436
+ *
437
+ * @internal
438
+ * @param schema - The schema to check
439
+ * @param model - The model name
440
+ * @param values - The values to validate against the schema
441
+ * @throws {C15TError} If the schema is missing or a field doesn't exist
442
+ */
443
+ function checkMissingFields(
444
+ schema: Record<string, unknown>,
445
+ model: string,
446
+ values: Record<string, unknown>
447
+ ) {
448
+ if (!schema) {
449
+ throw new C15TError(
450
+ 'The schema could not be found. Please ensure the schema is properly configured in the adapter.',
451
+ {
452
+ code: BASE_ERROR_CODES.DATABASE_CONNECTION_ERROR,
453
+ status: 500,
454
+ }
455
+ );
456
+ }
457
+ for (const key in values) {
458
+ if (!schema[key]) {
459
+ throw new C15TError(
460
+ `The field "${key}" does not exist in the "${model}" schema. Please update your drizzle schema or re-generate using "npx @c15t/cli generate".`
461
+ );
462
+ }
463
+ }
464
+ }
465
+
466
+ /**
467
+ * Creates a C15T adapter for Drizzle ORM
468
+ *
469
+ * This factory function creates an adapter that allows C15T to use Drizzle ORM
470
+ * as its database layer. It supports PostgreSQL, MySQL, and SQLite.
471
+ *
472
+ * @param db - The Drizzle database instance
473
+ * @param config - Configuration options for the Drizzle adapter
474
+ * @returns A C15T adapter factory function
475
+ *
476
+ * @example
477
+ * ```typescript
478
+ * import { drizzle } from 'drizzle-orm/postgres-js';
479
+ * import postgres from 'postgres';
480
+ * import { drizzleAdapter } from '@c15t/db/adapters/drizzle';
481
+ * import * as schema from './schema';
482
+ * import { c15tInstance } from '@c15t/backend';
483
+ *
484
+ * // Create a Postgres connection
485
+ * const connection = postgres('postgresql://user:password@localhost:5432/db');
486
+ * const db = drizzle(connection, { schema });
487
+ *
488
+ * // Create the C15T instance with Drizzle adapter
489
+ * const c15t = c15tInstance({
490
+ * storage: drizzleAdapter(db, {
491
+ * provider: 'pg',
492
+ * schema, // Pass your Drizzle schema
493
+ * usePlural: true
494
+ * }),
495
+ * // Other C15T options...
496
+ * secret: process.env.SECRET
497
+ * });
498
+ *
499
+ * // Use in your application
500
+ * export default c15tInstance.handler;
501
+ * ```
502
+ *
503
+ * @example
504
+ * ```typescript
505
+ * // Using with MySQL
506
+ * import { drizzle } from 'drizzle-orm/mysql2';
507
+ * import mysql from 'mysql2/promise';
508
+ * import { c15tInstance } from '@c15t/backend';
509
+ *
510
+ * const connection = await mysql.createConnection({
511
+ * host: 'localhost',
512
+ * user: 'root',
513
+ * database: 'c15t'
514
+ * });
515
+ *
516
+ * const db = drizzle(connection);
517
+ *
518
+ * const c15t = c15tInstance({
519
+ * storage: drizzleAdapter(db, {
520
+ * provider: 'mysql'
521
+ * }),
522
+ * secret: process.env.SECRET
523
+ * });
524
+ * ```
525
+ */
526
+ export const drizzleAdapter =
527
+ (db: DB, config: DrizzleAdapterConfig) => (options: C15TOptions) => {
528
+ const {
529
+ transformInput,
530
+ transformOutput,
531
+ convertWhereClause,
532
+ getSchema,
533
+ withReturning,
534
+ getField,
535
+ getEntityName,
536
+ } = createEntityTransformer(db, config, options);
537
+ return {
538
+ id: 'drizzle',
539
+ /**
540
+ * Creates a new record in the database
541
+ *
542
+ * @param data - The data for the create operation
543
+ * @returns The created record
544
+ * @throws {C15TError} If the model or fields don't exist
545
+ */
546
+ async create(data) {
547
+ const { model, data: values } = data;
548
+ const transformed = transformInput(values, model, 'create');
549
+ const schemaModel = getSchema(model);
550
+ checkMissingFields(schemaModel, getEntityName(model), transformed);
551
+ const builder = db.insert(schemaModel).values(transformed);
552
+ const returned = await withReturning(model, builder, transformed);
553
+ return transformOutput(returned, model);
554
+ },
555
+ /**
556
+ * Finds a single record matching the where conditions
557
+ *
558
+ * @param data - The data for the find operation
559
+ * @returns The found record or null if not found
560
+ * @throws {C15TError} If the model or fields don't exist
561
+ */
562
+ async findOne(data) {
563
+ const { model, where, select } = data;
564
+ const schemaModel = getSchema(model);
565
+ const clause = convertWhereClause(where, model);
566
+ const res = await db
567
+ .select()
568
+ .from(schemaModel)
569
+ .where(...clause);
570
+
571
+ if (!res.length) {
572
+ return null;
573
+ }
574
+ return transformOutput(res[0], model, select);
575
+ },
576
+ /**
577
+ * Finds multiple records matching the where conditions
578
+ *
579
+ * @param data - The data for the find operation
580
+ * @returns Array of matching records
581
+ * @throws {C15TError} If the model or fields don't exist
582
+ */
583
+ async findMany(data) {
584
+ const { model, where, sortBy, limit, offset } = data;
585
+ const schemaModel = getSchema(model);
586
+ const clause = where ? convertWhereClause(where, model) : [];
587
+
588
+ const sortFn = sortBy?.direction === 'desc' ? desc : asc;
589
+ const builder = db
590
+ .select()
591
+ .from(schemaModel)
592
+ .limit(limit || 100)
593
+ .offset(offset || 0);
594
+ if (sortBy?.field) {
595
+ builder.orderBy(sortFn(schemaModel[getField(model, sortBy?.field)]));
596
+ }
597
+ const res = await builder.where(...clause);
598
+ return res.map((r) => transformOutput(r, model));
599
+ },
600
+ /**
601
+ * Counts records matching the where conditions
602
+ *
603
+ * @param data - The data for the count operation
604
+ * @returns The count of matching records
605
+ * @throws {C15TError} If the model or fields don't exist
606
+ */
607
+ async count(data) {
608
+ const { model, where } = data;
609
+ const schemaModel = getSchema(model);
610
+ const clause = where ? convertWhereClause(where, model) : [];
611
+ const res = await db
612
+ .select({ count: count() })
613
+ .from(schemaModel)
614
+ .where(...clause);
615
+ return res[0].count;
616
+ },
617
+ /**
618
+ * Updates a single record matching the where conditions
619
+ *
620
+ * @param data - The data for the update operation
621
+ * @returns The updated record
622
+ * @throws {C15TError} If the model or fields don't exist
623
+ */
624
+ async update(data) {
625
+ const { model, where, update } = data;
626
+ const schemaModel = getSchema(model);
627
+ const clause = convertWhereClause(where, model);
628
+ const transformed = transformInput(update, model, 'update');
629
+ const result = await db
630
+ .update(schemaModel)
631
+ .set(transformed)
632
+ .where(clause)
633
+ .returning();
634
+ return result.length ? transformOutput(result[0], model) : null;
635
+ },
636
+ /**
637
+ * Updates multiple records matching the where conditions
638
+ *
639
+ * @param data - The data for the update operation
640
+ * @returns The number of records updated
641
+ * @throws {C15TError} If the model or fields don't exist
642
+ */
643
+ async updateMany(data) {
644
+ const { model, where, update: values } = data;
645
+ const schemaModel = getSchema(model);
646
+ const clause = convertWhereClause(where, model);
647
+ const transformed = transformInput(values, model, 'update');
648
+ const builder = db
649
+ .update(schemaModel)
650
+ .set(transformed)
651
+ .where(...clause);
652
+ const res = await builder;
653
+ return res ? res.changes : 0;
654
+ },
655
+ /**
656
+ * Deletes a single record matching the where conditions
657
+ *
658
+ * @param data - The data for the delete operation
659
+ * @throws {C15TError} If the model or fields don't exist
660
+ */
661
+ async delete(data) {
662
+ const { model, where } = data;
663
+ const schemaModel = getSchema(model);
664
+ const clause = convertWhereClause(where, model);
665
+ const builder = db.delete(schemaModel).where(...clause);
666
+ await builder;
667
+ },
668
+ /**
669
+ * Deletes multiple records matching the where conditions
670
+ *
671
+ * @param data - The data for the delete operation
672
+ * @returns The number of records deleted
673
+ * @throws {C15TError} If the model or fields don't exist
674
+ */
675
+ async deleteMany(data) {
676
+ const { model, where } = data;
677
+ const schemaModel = getSchema(model);
678
+ const clause = convertWhereClause(where, model);
679
+ const result = await db.delete(schemaModel).where(clause);
680
+ return result ? (result.rowCount as number) : 0;
681
+ },
682
+ /**
683
+ * Executes a function within a database transaction
684
+ *
685
+ * This method wraps Drizzle's transaction functionality to provide a consistent interface
686
+ * for executing multiple database operations atomically.
687
+ *
688
+ * @typeParam ResultType - The type of data returned by the transaction
689
+ * @param data - The transaction data containing the callback function
690
+ * @returns A promise that resolves with the result of the callback function
691
+ * @throws {Error} If the transaction fails to complete
692
+ */
693
+ async transaction<ResultType>(data: {
694
+ callback: (transactionAdapter: Adapter) => Promise<ResultType>;
695
+ }): Promise<ResultType> {
696
+ const { callback } = data;
697
+
698
+ return await db.transaction(async (tx) => {
699
+ // Create a new adapter instance that uses the transaction connection
700
+ const transactionAdapter = drizzleAdapter(
701
+ tx as unknown as DB,
702
+ config
703
+ )(options);
704
+
705
+ // Execute the callback function with the transaction adapter
706
+ return await callback(transactionAdapter);
707
+ });
708
+ },
709
+ options: config,
710
+ } satisfies Adapter;
711
+ };
@@ -0,0 +1 @@
1
+ export * from './drizzle-adapter';