@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,151 @@
1
+ import type { GenericEndpointContext } from '~/types';
2
+ import type { EntityName, EntityTypeMap } from '../core/types';
3
+ import type { DatabaseHook, HookOperation, HookPhase } from './types';
4
+
5
+ /**
6
+ * Process hooks for a given phase and operation.
7
+ *
8
+ * @typeParam TEntityData - Type of the entity data being processed
9
+ *
10
+ * @param data - The data to process through hooks
11
+ * @param model - The entity type/model name
12
+ * @param operation - The operation being performed (create/update)
13
+ * @param phase - The hook execution phase (before/after)
14
+ * @param hooks - Array of hook sets to process
15
+ * @param context - Optional request context
16
+ * @returns The processed data, potentially transformed, or null if aborted
17
+ *
18
+ * @remarks
19
+ * This core utility function handles the execution of hooks for various
20
+ * database operations. It traverses all registered hooks for the specified
21
+ * entity, operation, and phase, applying transformations or aborting as needed.
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * const processedData = await processHooks(
26
+ * { name: 'Alice' },
27
+ * 'subject',
28
+ * 'create',
29
+ * 'before',
30
+ * registeredHooks
31
+ * );
32
+ * ```
33
+ */
34
+ export async function processHooks<
35
+ TEntityName extends EntityName,
36
+ TEntityData extends Record<string, unknown>,
37
+ >(
38
+ data: TEntityData,
39
+ model: TEntityName,
40
+ operation: HookOperation,
41
+ phase: HookPhase,
42
+ hooks: DatabaseHook[],
43
+ context?: GenericEndpointContext
44
+ ): Promise<TEntityData | null> {
45
+ let currentData = { ...data };
46
+
47
+ for (const hookSet of hooks) {
48
+ // Skip if no hooks for this model
49
+ const modelHooks = hookSet[model];
50
+ if (!modelHooks) {
51
+ continue;
52
+ }
53
+
54
+ // Skip if no hooks for this operation
55
+ const operationHooks = modelHooks[operation];
56
+ if (!operationHooks) {
57
+ continue;
58
+ }
59
+
60
+ // Skip if no hooks for this phase
61
+ const hookFn = operationHooks[phase];
62
+ if (!hookFn) {
63
+ continue;
64
+ }
65
+
66
+ if (phase === 'before') {
67
+ const result = await hookFn(
68
+ currentData as unknown as EntityTypeMap[TEntityName],
69
+ context
70
+ );
71
+
72
+ if (result && typeof result === 'object' && 'kind' in result) {
73
+ switch (result.kind) {
74
+ case 'abort':
75
+ return null;
76
+ case 'transform': {
77
+ const transformData = result.data;
78
+ currentData = {
79
+ ...currentData,
80
+ ...transformData,
81
+ };
82
+ break;
83
+ }
84
+ default:
85
+ // Continue with current data
86
+ break;
87
+ }
88
+ }
89
+ } else {
90
+ // For 'after' hooks, we use the same type casting approach
91
+ await hookFn(
92
+ currentData as unknown as EntityTypeMap[TEntityName],
93
+ context
94
+ );
95
+ }
96
+ }
97
+
98
+ return currentData;
99
+ }
100
+
101
+ /**
102
+ * Process hooks for multiple records.
103
+ *
104
+ * @typeParam TEntityName - Type of the entity name
105
+ * @typeParam TEntityData - Type of the entity data
106
+ *
107
+ * @param records - Array of records to process
108
+ * @param model - The entity type/model name
109
+ * @param hooks - Array of hook sets to process
110
+ * @param context - Optional request context
111
+ * @returns Promise that resolves when all hooks have been processed
112
+ *
113
+ * @remarks
114
+ * This utility function handles processing after-update hooks for a batch
115
+ * of records, ensuring each record goes through the appropriate hooks.
116
+ *
117
+ * @example
118
+ * ```typescript
119
+ * // Process 'after update' hooks for multiple subjects
120
+ * await processAfterHooksForMany(
121
+ * updatedSubjects,
122
+ * 'subject',
123
+ * registeredHooks,
124
+ * { batchId: 'sub_x1pftyoufsm7xgo1kv' }
125
+ * );
126
+ * ```
127
+ */
128
+ export async function processAfterHooksForMany<
129
+ TEntityName extends EntityName,
130
+ TEntityData extends Record<string, unknown>,
131
+ >(
132
+ records: TEntityData[],
133
+ model: TEntityName,
134
+ hooks: DatabaseHook[],
135
+ context?: GenericEndpointContext
136
+ ): Promise<void> {
137
+ if (!records.length) {
138
+ return;
139
+ }
140
+
141
+ for (const record of records) {
142
+ await processHooks<TEntityName, TEntityData>(
143
+ record,
144
+ model,
145
+ 'update',
146
+ 'after',
147
+ hooks,
148
+ context
149
+ );
150
+ }
151
+ }
@@ -0,0 +1,68 @@
1
+ import type { Adapter } from '~/db/adapters/types';
2
+ import { createWithHook } from './create-hooks';
3
+ import type {
4
+ CreateWithHooksProps,
5
+ HookContext,
6
+ UpdateWithHooksProps,
7
+ } from './types';
8
+ import { updateWithHooks } from './update-hooks';
9
+ import { updateManyWithHooks } from './update-many-hooks';
10
+
11
+ /**
12
+ * Creates a set of functions that apply hooks before and after database operations.
13
+ *
14
+ * @param adapter - The database adapter to use for operations
15
+ * @param ctx - Context object containing options and hooks
16
+ * @returns Object with hook-enabled database operation functions
17
+ *
18
+ * @remarks
19
+ * This factory function generates hook-enabled versions of common database operations
20
+ * (create, update, updateMany), allowing for consistent hook processing across
21
+ * the application.
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * const { createWithHooks } = getWithHooks(adapter, {
26
+ * options: c15tOptions,
27
+ * hooks: c15tOptions.databaseHooks || []
28
+ * });
29
+ *
30
+ * const subject = await createWithHooks({
31
+ * data: { name: 'Alice' },
32
+ * model: 'subject'
33
+ * });
34
+ * ```
35
+ */
36
+ export function getWithHooks(adapter: Adapter, ctx: HookContext) {
37
+ return {
38
+ createWithHooks: <
39
+ TInputData extends Record<string, unknown>,
40
+ TOutputData extends Record<string, unknown> = TInputData,
41
+ >({
42
+ data,
43
+ model,
44
+ customFn,
45
+ context,
46
+ }: CreateWithHooksProps<TInputData>) =>
47
+ createWithHook<TInputData, TOutputData>(adapter, ctx, {
48
+ data,
49
+ model,
50
+ customFn,
51
+ context,
52
+ }),
53
+
54
+ updateWithHooks: <
55
+ TInputData extends Record<string, unknown>,
56
+ TOutputData extends Record<string, unknown> = TInputData,
57
+ >(
58
+ props: UpdateWithHooksProps<TInputData, TOutputData>
59
+ ) => updateWithHooks<TInputData, TOutputData>(adapter, ctx, props),
60
+
61
+ updateManyWithHooks: <
62
+ TInputData extends Record<string, unknown>,
63
+ TOutputData extends Record<string, unknown> = TInputData,
64
+ >(
65
+ props: UpdateWithHooksProps<TInputData, TOutputData>
66
+ ) => updateManyWithHooks<TInputData, TOutputData>(adapter, ctx, props),
67
+ };
68
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Database Module - Main Entry Point
3
+ *
4
+ * This module provides a type-safe interface for interacting with the database.
5
+ */
6
+
7
+ // Schema-related exports
8
+ export {
9
+ getConsentTables,
10
+ parseInputData,
11
+ parseEntityOutputData,
12
+ getAllFields,
13
+ } from './schema/index';
14
+
15
+ // Field-related exports
16
+ export type {
17
+ Field,
18
+ FieldType,
19
+ } from './core/fields';
20
+
21
+ export {
22
+ stringField,
23
+ numberField,
24
+ booleanField,
25
+ dateField,
26
+ stringArrayField,
27
+ numberArrayField,
28
+ } from './core/fields';
29
+
30
+ export { getMigrations } from './migration/index';
31
+
32
+ export { getAdapter } from './utils/adapter-factory';
@@ -0,0 +1,89 @@
1
+ import type { C15TOptions } from '~/types';
2
+ import { createLogger } from '../../utils/logger';
3
+ import { createKyselyAdapter } from '../adapters/kysely-adapter/dialect';
4
+ import {
5
+ buildColumnAddMigrations,
6
+ buildTableCreateMigrations,
7
+ } from './migration-builders';
8
+ import { createMigrationExecutors } from './migration-execution';
9
+ import { analyzeSchemaChanges } from './schema-comparison';
10
+ import type { MigrationResult } from './types';
11
+
12
+ /**
13
+ * Generates database migrations based on schema differences
14
+ *
15
+ * This is the main entry point for the migration system. It orchestrates
16
+ * the entire process from connecting to the database to generating migrations.
17
+ *
18
+ * @param config - C15T configuration containing database connection and schema details
19
+ *
20
+ * @returns MigrationResult containing:
21
+ * - toBeCreated: Tables that need to be created
22
+ * - toBeAdded: Columns that need to be added to existing tables
23
+ * - runMigrations: Function to execute all migrations
24
+ * - compileMigrations: Function to compile migrations to SQL without executing
25
+ *
26
+ * @throws Will exit the process if the Kysely adapter is not available
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * // Generate migrations and execute them
31
+ * const { runMigrations } = await getMigrations(config);
32
+ * await runMigrations();
33
+ *
34
+ * // Or generate migrations and get the SQL
35
+ * const { compileMigrations } = await getMigrations(config);
36
+ * const sql = await compileMigrations();
37
+ * console.log("Migration SQL:", sql);
38
+ * ```
39
+ */
40
+ export async function getMigrations(
41
+ config: C15TOptions
42
+ ): Promise<MigrationResult> {
43
+ const logger = createLogger(config.logger);
44
+
45
+ // Initialize database connection
46
+ let { kysely: db, databaseType: dbType } = await createKyselyAdapter(config);
47
+
48
+ // Check if the database type is supported
49
+ if (!dbType) {
50
+ logger.warn(
51
+ 'Could not determine database type, defaulting to sqlite. Please provide a type in the database options to avoid this.'
52
+ );
53
+ dbType = 'sqlite';
54
+ }
55
+
56
+ // Check if the database is connected
57
+ if (!db) {
58
+ logger.error(
59
+ "Only kysely adapter is supported for migrations. You can use `generate` command to generate the schema, if you're using a different adapter."
60
+ );
61
+ process.exit(1);
62
+ }
63
+
64
+ // Get database metadata
65
+ const tableMetadata = await db.introspection.getTables();
66
+
67
+ // Analyze schema differences
68
+ const { toBeCreated, toBeAdded } = analyzeSchemaChanges(
69
+ config,
70
+ tableMetadata,
71
+ dbType
72
+ );
73
+
74
+ // Build migration operations
75
+ const columnMigrations = buildColumnAddMigrations(db, toBeAdded, dbType);
76
+ const tableMigrations = buildTableCreateMigrations(db, toBeCreated, dbType);
77
+ const migrations = [...columnMigrations, ...tableMigrations];
78
+
79
+ // Create migration executors
80
+ const { runMigrations, compileMigrations } =
81
+ createMigrationExecutors(migrations);
82
+
83
+ return {
84
+ toBeCreated,
85
+ toBeAdded,
86
+ runMigrations,
87
+ compileMigrations,
88
+ };
89
+ }
@@ -0,0 +1,44 @@
1
+ import { getConsentTables } from '~/db';
2
+ import type { C15TOptions } from '~/types';
3
+ import { processTablesIntoSchema } from './process-tables';
4
+ import type { SchemaDefinition } from './types';
5
+
6
+ /**
7
+ * Generates a complete database schema from the C15T configuration
8
+ *
9
+ * This function serves as the main entry point for schema generation.
10
+ * It retrieves table definitions from the consent module and processes
11
+ * them into a structured schema representation.
12
+ *
13
+ * @param config - The complete C15T configuration
14
+ * @returns A structured schema definition with fields and table properties
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * import type { C15TOptions } from '~/types';
19
+ *
20
+ * // Your configuration
21
+ * const c15tConfig: C15TOptions = {
22
+ * // configuration properties
23
+ * };
24
+ *
25
+ * const schema = getSchema(c15tConfig);
26
+ * // Use schema for migrations or database operations
27
+ * ```
28
+ */
29
+ export function getSchema(config: C15TOptions): SchemaDefinition {
30
+ try {
31
+ // Retrieve table definitions from the consent module
32
+ const tables = getConsentTables(config);
33
+
34
+ // Process tables into a structured schema
35
+ return processTablesIntoSchema(tables);
36
+ } catch (error) {
37
+ // Log the error or handle it according to your application's needs
38
+ // biome-ignore lint/suspicious/noConsole: <explanation>
39
+ console.error('Failed to generate schema:', error);
40
+ throw new Error(
41
+ `Schema generation failed: ${error instanceof Error ? error.message : String(error)}`
42
+ );
43
+ }
44
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Schema Module
3
+ *
4
+ * This module handles the generation and processing of database schemas
5
+ * based on the C15T configuration. It transforms table definitions into
6
+ * a structured schema representation that can be used for database operations.
7
+ *
8
+ * @module schema
9
+ *
10
+ * Example usage:
11
+ * ```typescript
12
+ * import { getSchema } from '~/db/migration/get-schema';
13
+ * import type { SchemaDefinition } from '~/db/migration/get-schema';
14
+ *
15
+ * // Get schema based on configuration
16
+ * const schema: SchemaDefinition = getSchema(config);
17
+ * ```
18
+ */
19
+ export { getSchema } from './get-schema';
20
+ export type { SchemaDefinition, TableSchemaDefinition } from './types';
@@ -0,0 +1,66 @@
1
+ import type { Field } from '~/db/core/fields';
2
+ import type { EntityName } from '~/db/core/types';
3
+ import type { C15TDBSchema } from '~/db/schema/definition';
4
+
5
+ /**
6
+ * Processes field definitions for a table
7
+ *
8
+ * This function handles field attributes, field name mappings, and references
9
+ * to other tables. It ensures that all fields are properly configured and
10
+ * references are correctly set up.
11
+ *
12
+ * @param fields - Raw field definitions from the table
13
+ * @param tables - All available tables for resolving references
14
+ * @returns Processed field definitions
15
+ */
16
+ export function processFields<T extends EntityName>(
17
+ fields: C15TDBSchema[T]['fields'],
18
+ tables: C15TDBSchema
19
+ ): Record<string, Field> {
20
+ const actualFields: Record<string, Field> = {};
21
+
22
+ // Process each field in the fields collection
23
+ for (const [fieldKey, field] of Object.entries(fields)) {
24
+ // Skip undefined fields
25
+ if (!field) {
26
+ continue;
27
+ }
28
+
29
+ // Use the specified fieldName or the key if fieldName is not provided
30
+ const fieldName = field.fieldName || fieldKey;
31
+
32
+ // Cast field to Field to ensure it has the right type
33
+ const typedField = field as Field;
34
+ actualFields[fieldName] = typedField;
35
+
36
+ // Handle references to other tables - first check if the field has a references property
37
+ if (typedField && 'references' in typedField && typedField.references) {
38
+ const EntityName = typedField.references.model as EntityName;
39
+ const refTable = tables[EntityName];
40
+
41
+ // Only set up the reference if the referenced table exists
42
+ if (refTable) {
43
+ // Create a new object for references to avoid modifying the original
44
+ actualFields[fieldName] = {
45
+ ...typedField,
46
+ references: {
47
+ model: refTable.entityName,
48
+ entity: refTable.entityName,
49
+ field: typedField.references.field,
50
+ onDelete: typedField.references.onDelete,
51
+ },
52
+ };
53
+ } else {
54
+ // Log warning and remove invalid reference if table not found
55
+ // biome-ignore lint/suspicious/noConsole: no Logger implementation
56
+ console.warn(
57
+ `Warning: Referenced table '${EntityName}' not found for field '${fieldName}'. The reference will be removed to prevent inconsistent state.`
58
+ );
59
+ const { references, ...fieldWithoutRef } = typedField;
60
+ actualFields[fieldName] = fieldWithoutRef;
61
+ }
62
+ }
63
+ }
64
+
65
+ return actualFields;
66
+ }
@@ -0,0 +1,68 @@
1
+ import type { Field } from '~/db/core/fields';
2
+ import type { C15TDBSchema } from '../../schema/definition';
3
+ import { processFields } from './process-fields';
4
+ import type { SchemaDefinition } from './types';
5
+
6
+ /**
7
+ * Processes table definitions into a structured schema
8
+ *
9
+ * This function transforms the raw table definitions into a formal schema structure,
10
+ * handling field processing, references, and merging of table definitions.
11
+ *
12
+ * @param tables - Raw table definitions from the consent module
13
+ * @returns A structured schema definition
14
+ */
15
+ export function processTablesIntoSchema(
16
+ tables: C15TDBSchema
17
+ ): SchemaDefinition {
18
+ const schema: SchemaDefinition = {};
19
+
20
+ // Process each table in the tables collection
21
+ for (const [key, table] of Object.entries(tables)) {
22
+ // Skip undefined tables
23
+ if (!table) {
24
+ continue;
25
+ }
26
+
27
+ // Process the fields for this table
28
+ let actualFields: Record<string, Field>;
29
+ try {
30
+ const fields = table.fields;
31
+ if (typeof fields !== 'object' || fields === null) {
32
+ // biome-ignore lint/suspicious/noConsole: its okay
33
+ console.warn(
34
+ `Invalid fields for table ${key}: Expected object, got ${typeof fields}`
35
+ );
36
+ continue;
37
+ }
38
+ actualFields = processFields(fields, tables);
39
+ } catch (error) {
40
+ // biome-ignore lint/suspicious/noConsole: its okay
41
+ console.error(`Error processing fields for table ${key}:`, error);
42
+ continue; // Skip this table if field processing fails
43
+ }
44
+
45
+ // Determine the model name (use the key if EntityName is not specified)
46
+ const EntityName = table.entityName || key;
47
+
48
+ // Update existing schema entry or create a new one
49
+ if (schema[EntityName]) {
50
+ // Merge with existing schema entry if one exists
51
+ schema[EntityName] = {
52
+ ...schema[EntityName],
53
+ fields: {
54
+ ...schema[EntityName]?.fields,
55
+ ...actualFields,
56
+ },
57
+ };
58
+ } else {
59
+ // Create a new schema entry
60
+ schema[EntityName] = {
61
+ fields: actualFields,
62
+ order: table.order || Number.POSITIVE_INFINITY, // Default to lowest priority
63
+ };
64
+ }
65
+ }
66
+
67
+ return schema;
68
+ }
@@ -0,0 +1,18 @@
1
+ import type { Field } from '~/db/core/fields';
2
+
3
+ /**
4
+ * Represents a complete table definition within the schema
5
+ *
6
+ * @property fields - Map of field names to their attribute definitions
7
+ * @property order - Priority order for table creation (lower numbers are created first)
8
+ */
9
+ export interface TableSchemaDefinition {
10
+ fields: Record<string, Field>;
11
+ order: number;
12
+ }
13
+
14
+ /**
15
+ * Represents the complete database schema
16
+ * Maps table names to their definitions
17
+ */
18
+ export type SchemaDefinition = Record<string, TableSchemaDefinition>;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Migration system for c15t
3
+ *
4
+ * This module provides functionality to generate and execute database migrations
5
+ * based on schema definitions.
6
+ *
7
+ * This is inspired by the better-auth migration system
8
+ * (https://github.com/betterauth/better-auth or relevant link)
9
+ *
10
+ * @module migration
11
+ */
12
+ export { getMigrations } from './get-migration';
13
+ export type {
14
+ MigrationResult,
15
+ MigrationOperation,
16
+ ColumnsToAdd,
17
+ TableToCreate,
18
+ } from './types';