@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,170 @@
1
+ import type { ColumnDataType, Expression, Kysely } from 'kysely';
2
+ import type {
3
+ Database,
4
+ KyselyDatabaseType,
5
+ } from '~/db/adapters/kysely-adapter/types';
6
+ import type { C15TOptions } from '~/types';
7
+ import { createLogger } from '~/utils/logger';
8
+ import { getType } from './type-mapping';
9
+ import type { ColumnsToAdd, MigrationOperation, TableToCreate } from './types';
10
+
11
+ /**
12
+ * Builds migrations for adding columns to existing tables
13
+ *
14
+ * This function creates ALTER TABLE statements to add missing columns
15
+ * to existing tables in the database.
16
+ *
17
+ * @param db - Kysely database instance used to build SQL operations
18
+ * @param toBeAdded - Collection of tables and columns that need to be added
19
+ * @param dbType - Database type to determine appropriate column types
20
+ * @returns Array of migration operations ready to be executed
21
+ */
22
+ export function buildColumnAddMigrations(
23
+ db: Kysely<Database>,
24
+ toBeAdded: ColumnsToAdd[],
25
+ dbType: KyselyDatabaseType
26
+ ): MigrationOperation[] {
27
+ // Array to collect all migration operations
28
+ const migrations: MigrationOperation[] = [];
29
+
30
+ // Process each table that needs columns added
31
+ for (const table of toBeAdded) {
32
+ // For each field in the table that needs to be added
33
+ for (const [fieldName, field] of Object.entries(table.fields)) {
34
+ // Get the appropriate database-specific type for this field
35
+ const type = getType(field, dbType) as
36
+ | ColumnDataType
37
+ | Expression<C15TOptions['database']>;
38
+
39
+ // Build an ALTER TABLE statement using Kysely's fluent API
40
+ const exec = db.schema
41
+ .alterTable(table.table)
42
+ // Add the column with the appropriate name and type
43
+ .addColumn(fieldName, type, (col) => {
44
+ // Start with nullability constraint based on field requirements
45
+ let column = field.required !== false ? col.notNull() : col;
46
+
47
+ // Add foreign key reference if specified
48
+ if (field.references) {
49
+ column = column.references(
50
+ `${field.references.model}.${field.references.field}`
51
+ );
52
+ }
53
+
54
+ // Add unique constraint if specified
55
+ if (field.unique) {
56
+ column = column.unique();
57
+ }
58
+
59
+ return column;
60
+ });
61
+
62
+ // Add this migration operation to our collection
63
+ migrations.push(exec);
64
+ }
65
+ }
66
+
67
+ return migrations;
68
+ }
69
+
70
+ /**
71
+ * Builds migrations for creating new tables
72
+ *
73
+ * This function creates CREATE TABLE statements for tables
74
+ * that don't exist in the database but are defined in the schema.
75
+ *
76
+ * @param db - Kysely database instance used to build SQL operations
77
+ * @param toBeCreated - Collection of tables that need to be created
78
+ * @param dbType - Database type to determine appropriate column types
79
+ * @returns Array of migration operations ready to be executed
80
+ */
81
+ export function buildTableCreateMigrations(
82
+ db: Kysely<Database>,
83
+ toBeCreated: TableToCreate[],
84
+ dbType: KyselyDatabaseType
85
+ ): MigrationOperation[] {
86
+ const logger = createLogger();
87
+ const migrations: MigrationOperation[] = [];
88
+
89
+ // Process each table that needs to be created
90
+ for (const table of toBeCreated) {
91
+ // Log all field names to detect potential duplicate 'id' issues
92
+ const fieldNames = Object.keys(table.fields);
93
+ logger.info(
94
+ `Creating table ${table.table} with fields: ${fieldNames.join(', ')}`
95
+ );
96
+
97
+ // Check for potential ID field conflict - warning for explicit 'id' field
98
+ // This is important because we automatically add an 'id' primary key
99
+ if (fieldNames.includes('id')) {
100
+ logger.warn(
101
+ `⚠️ Table ${table.table} already has an explicit 'id' field, which may conflict with the auto-generated primary key`
102
+ );
103
+ }
104
+
105
+ // Check for another potential issue: field with fieldName 'id' but different key
106
+ // This could cause column duplication errors
107
+ for (const [fieldName, field] of Object.entries(table.fields)) {
108
+ if (field.fieldName === 'id' && fieldName !== 'id') {
109
+ logger.error(
110
+ `❌ ERROR: Table ${table.table} has field '${fieldName}' with fieldName 'id' - this will cause a duplicate column error`
111
+ );
112
+ }
113
+ }
114
+
115
+ // Start building the CREATE TABLE statement
116
+ // Always add an 'id' primary key column first
117
+ let dbT = db.schema.createTable(table.table).addColumn(
118
+ 'id',
119
+ // Choose appropriate ID type based on database
120
+ // MySQL and MSSQL use varchar(36) for UUIDs, others use text
121
+ dbType === 'mysql' || dbType === 'mssql' ? 'varchar(36)' : 'text',
122
+ // Make it a primary key and non-nullable
123
+ (col) => col.primaryKey().notNull()
124
+ );
125
+
126
+ // Now add all the subject-defined fields to the table
127
+ for (const [fieldName, field] of Object.entries(table.fields)) {
128
+ // Get appropriate database-specific type for this field
129
+ const type = getType(field, dbType) as
130
+ | ColumnDataType
131
+ | Expression<C15TOptions['database']>;
132
+
133
+ // Log what we're doing for debugging purposes
134
+ logger.info(
135
+ `Adding column ${fieldName} (fieldName: ${field.fieldName || fieldName}) to table ${table.table}`
136
+ );
137
+
138
+ // Add this column to the CREATE TABLE statement
139
+ dbT = dbT.addColumn(fieldName, type, (col) => {
140
+ // Apply constraints to the column
141
+
142
+ // 1. Nullability constraint - make NOT NULL if field is required
143
+ let column = field.required !== false ? col.notNull() : col;
144
+
145
+ // 2. Foreign key constraint - add REFERENCES if field references another table
146
+ if (field.references) {
147
+ column = column.references(
148
+ `${field.references.model}.${field.references.field}`
149
+ );
150
+ }
151
+
152
+ // 3. Uniqueness constraint - add UNIQUE if the field must have unique values
153
+ if (field.unique) {
154
+ column = column.unique();
155
+ }
156
+
157
+ return column;
158
+ });
159
+ }
160
+
161
+ // Generate and log the raw SQL for debugging/preview
162
+ const sqlDebug = dbT.compile().sql;
163
+ logger.info(`SQL for table ${table.table}:\n${sqlDebug}`);
164
+
165
+ // Add this completed CREATE TABLE statement to our migrations collection
166
+ migrations.push(dbT);
167
+ }
168
+
169
+ return migrations;
170
+ }
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Migration execution functionality
3
+ *
4
+ * This module handles executing or compiling migrations.
5
+ *
6
+ * @module migration/migration-execution
7
+ */
8
+ import { createLogger } from '../../utils/logger';
9
+ import type { MigrationOperation } from './types';
10
+
11
+ /**
12
+ * Creates functions to run or compile the generated migrations
13
+ *
14
+ * @param migrations - Migration operations to execute
15
+ * @returns Object with runMigrations and compileMigrations functions
16
+ */
17
+ export function createMigrationExecutors(migrations: MigrationOperation[]) {
18
+ const logger = createLogger();
19
+
20
+ /**
21
+ * Executes all migration operations against the database
22
+ *
23
+ * This function runs each migration in sequence, executing the SQL operations
24
+ * directly against the connected database. If any migration fails, the
25
+ * process is halted with an error.
26
+ *
27
+ * @remarks
28
+ * Migrations are executed in the order they were added to the migrations array.
29
+ * Column additions are typically executed before table creations to ensure
30
+ * any references between them are properly established.
31
+ *
32
+ * Error handling includes:
33
+ * - Detailed logging of which migration failed
34
+ * - Capturing the exact SQL that caused the error
35
+ * - Rethrowing the error to allow callers to implement recovery strategies
36
+ *
37
+ * @throws Will throw the original database error with additional context
38
+ *
39
+ * @returns A promise that resolves when all migrations are complete
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * try {
44
+ * await runMigrations();
45
+ * console.log('All migrations completed successfully');
46
+ * } catch (error) {
47
+ * console.error('Migration failed:', error);
48
+ * }
49
+ * ```
50
+ */
51
+ async function runMigrations() {
52
+ // Loop through each migration operation in sequence
53
+ for (const migration of migrations) {
54
+ try {
55
+ // Execute this migration against the database
56
+ await migration.execute();
57
+ } catch (error) {
58
+ // If a migration fails, log the specific SQL that failed
59
+ const sql = migration.compile().sql;
60
+ logger.error(`Migration failed! SQL:\n${sql}`);
61
+
62
+ // Rethrow the error to allow the caller to handle it
63
+ throw error;
64
+ }
65
+ }
66
+ }
67
+
68
+ /**
69
+ * Compiles all migrations to SQL without executing them
70
+ *
71
+ * @returns SQL string of all migrations
72
+ */
73
+ async function compileMigrations() {
74
+ const compiled = migrations.map((m) => m.compile().sql);
75
+ return `${compiled.join(';\n\n')};`;
76
+ }
77
+
78
+ return { runMigrations, compileMigrations };
79
+ }
@@ -0,0 +1,216 @@
1
+ import type { TableMetadata } from 'kysely';
2
+ import type { Field } from '~/db/core/fields';
3
+ /**
4
+ * Schema comparison functionality for database migrations
5
+ *
6
+ * This module analyzes differences between the expected schema definition and the
7
+ * actual database schema to determine what tables need to be created and what
8
+ * columns need to be added to existing tables.
9
+ *
10
+ * The comparison process follows these steps:
11
+ * 1. Load the expected schema from configuration
12
+ * 2. Compare it with tables in the actual database
13
+ * 3. Identify tables that don't exist but should be created
14
+ * 4. Identify columns that need to be added to existing tables
15
+ *
16
+ * @remarks
17
+ * This is a core part of the migration system and is used by the main migration
18
+ * generator to determine what database changes are needed.
19
+ *
20
+ * @module migration/schema-comparison
21
+ */
22
+ import type { C15TOptions } from '~/types';
23
+ import { createLogger } from '../../utils/logger';
24
+ import type { KyselyDatabaseType } from '../adapters/kysely-adapter/types';
25
+ import { getSchema } from '../core/get-schema';
26
+ import type { TableSchemaDefinition } from './get-schema/types';
27
+ import { matchType } from './type-mapping';
28
+ import type { ColumnsToAdd, TableToCreate } from './types';
29
+
30
+ /**
31
+ * Analyzes schema differences between the expected schema and actual database
32
+ *
33
+ * This function compares the schema defined in the application with the
34
+ * actual database structure to determine what changes need to be made.
35
+ *
36
+ * @param config - c15t configuration containing the schema definition
37
+ * @param tableMetadata - Database table metadata from introspection, containing
38
+ * information about existing tables and columns
39
+ * @param dbType - The database type (postgres, mysql, sqlite, mssql) which affects
40
+ * how types are compared and mapped
41
+ *
42
+ * @returns An object containing tables to be created and columns to be added
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * const changes = analyzeSchemaChanges(
47
+ * appConfig,
48
+ * databaseMetadata,
49
+ * 'postgres'
50
+ * );
51
+ *
52
+ * console.log(`Need to create ${changes.toBeCreated.length} tables`);
53
+ * console.log(`Need to add columns to ${changes.toBeAdded.length} tables`);
54
+ * ```
55
+ */
56
+ export function analyzeSchemaChanges(
57
+ config: C15TOptions,
58
+ tableMetadata: TableMetadata[],
59
+ dbType: KyselyDatabaseType
60
+ ): { toBeCreated: TableToCreate[]; toBeAdded: ColumnsToAdd[] } {
61
+ const betterAuthSchema = getSchema(config);
62
+ const logger = createLogger(config.logger);
63
+ const toBeCreated: TableToCreate[] = [];
64
+ const toBeAdded: ColumnsToAdd[] = [];
65
+
66
+ for (const [key, value] of Object.entries(betterAuthSchema)) {
67
+ const table = tableMetadata.find((t: { name: string }) => t.name === key);
68
+ if (!table) {
69
+ handleNewTable(key, value as TableSchemaDefinition, toBeCreated);
70
+ continue;
71
+ }
72
+
73
+ handleExistingTable(
74
+ key,
75
+ value as TableSchemaDefinition,
76
+ table,
77
+ toBeAdded,
78
+ dbType,
79
+ logger
80
+ );
81
+ }
82
+
83
+ return { toBeCreated, toBeAdded };
84
+ }
85
+
86
+ /**
87
+ * Handles logic for a table that needs to be created
88
+ *
89
+ * This function adds a new table to the list of tables to be created,
90
+ * handling cases where the table might already be in the list, or
91
+ * where it needs to be inserted at a specific position based on order.
92
+ *
93
+ * @param tableName - The name of the table to be created
94
+ * @param value - Table definition containing fields and order
95
+ * @param toBeCreated - Array of tables to be created, modified in-place
96
+ *
97
+ * @remarks
98
+ * The function uses the table's order property to maintain dependencies
99
+ * between tables. Tables with lower order values are created first.
100
+ *
101
+ * If a table with the same name already exists in the list, its fields
102
+ * will be merged with the new fields rather than replacing the entry.
103
+ */
104
+ function handleNewTable(
105
+ tableName: string,
106
+ value: TableSchemaDefinition,
107
+ toBeCreated: TableToCreate[]
108
+ ): void {
109
+ const tIndex = toBeCreated.findIndex((t) => t.table === tableName);
110
+ const tableData = {
111
+ table: tableName,
112
+ fields: value.fields,
113
+ order: value.order || Number.POSITIVE_INFINITY,
114
+ };
115
+
116
+ const insertIndex = toBeCreated.findIndex(
117
+ (t) => (t.order || Number.POSITIVE_INFINITY) > tableData.order
118
+ );
119
+
120
+ if (insertIndex === -1) {
121
+ if (tIndex === -1) {
122
+ toBeCreated.push(tableData);
123
+ } else {
124
+ const existingTable = toBeCreated[tIndex];
125
+ if (existingTable) {
126
+ existingTable.fields = {
127
+ ...existingTable.fields,
128
+ ...value.fields,
129
+ };
130
+ }
131
+ }
132
+ } else {
133
+ toBeCreated.splice(insertIndex, 0, tableData);
134
+ }
135
+ }
136
+
137
+ /**
138
+ * Handles logic for an existing table that might need columns added
139
+ *
140
+ * This function compares the expected table fields with the actual
141
+ * table columns to determine which columns need to be added.
142
+ * It also logs warnings for type mismatches.
143
+ *
144
+ * @param tableName - The name of the table being checked
145
+ * @param value - Table definition containing expected fields and order
146
+ * @param table - Actual table metadata from database introspection
147
+ * @param toBeAdded - Array of table columns to be added, modified in-place
148
+ * @param dbType - Database type for type matching
149
+ * @param logger - Logger instance for warnings and errors
150
+ *
151
+ * @remarks
152
+ * Fields are compared by name and type. If a field exists in the expected schema
153
+ * but not in the actual table, it will be added to the list of columns to add.
154
+ *
155
+ * If a field exists in both but has a different type, a warning is logged.
156
+ * Type matching takes into account differences in type names between database systems.
157
+ *
158
+ * @example
159
+ * ```typescript
160
+ * // This might produce logs like:
161
+ * // "Field subjectId in table subjects has a different type in the database. Expected string but got varchar."
162
+ * handleExistingTable(
163
+ * 'subjects',
164
+ * { fields: { subjectId: { type: 'string', required: true } }, order: 1 },
165
+ * dbTable,
166
+ * columnsToAdd,
167
+ * 'postgres',
168
+ * logger
169
+ * );
170
+ * ```
171
+ */
172
+ function handleExistingTable(
173
+ tableName: string,
174
+ value: TableSchemaDefinition,
175
+ table: TableMetadata,
176
+ toBeAdded: ColumnsToAdd[],
177
+ dbType: KyselyDatabaseType,
178
+ logger: ReturnType<typeof createLogger>
179
+ ): void {
180
+ // Collection of fields that need to be added to the existing table
181
+ const toBeAddedFields: Record<string, Field> = {};
182
+
183
+ // Iterate through each field in the expected schema for this table
184
+ for (const [fieldName, field] of Object.entries(value.fields)) {
185
+ // Check if the field exists in the actual database table
186
+ const column = table.columns.find((c) => c.name === fieldName);
187
+
188
+ // If the field doesn't exist in the database, mark it to be added
189
+ if (!column) {
190
+ toBeAddedFields[fieldName] = field;
191
+ continue; // Skip the rest of this iteration
192
+ }
193
+
194
+ // Field exists, so check if its type matches the expected type
195
+ // If types match, no action needed so continue to next field
196
+ if (matchType(column.dataType, field.type, dbType)) {
197
+ continue;
198
+ }
199
+
200
+ // If we reach here, the field exists but has a different type
201
+ // We don't alter column types to avoid data loss, just log a warning
202
+ logger.warn(
203
+ `Field ${fieldName} in table ${tableName} has a different type in the database. Expected ${field.type} but got ${column.dataType}.`
204
+ );
205
+ }
206
+
207
+ // After checking all fields, if we found fields that need to be added,
208
+ // add an entry to the toBeAdded array with all fields for this table
209
+ if (Object.keys(toBeAddedFields).length > 0) {
210
+ toBeAdded.push({
211
+ table: tableName,
212
+ fields: toBeAddedFields,
213
+ order: value.order || Number.POSITIVE_INFINITY, // Use specified order or lowest priority
214
+ });
215
+ }
216
+ }