@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,298 @@
1
+ import type {
2
+ InferValueType as BaseInferValueType,
3
+ Field,
4
+ FieldType,
5
+ Primitive,
6
+ } from './field-types';
7
+
8
+ /**
9
+ * Infers the JavaScript type from a field type.
10
+ * Maps database field types to their corresponding TypeScript types.
11
+ *
12
+ * @template TFieldType - The field type to infer from
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * // Infer string type
17
+ * type NameType = InferValueType<'string'>; // string
18
+ *
19
+ * // Infer array types
20
+ * type TagsType = InferValueType<'string[]'>; // string[]
21
+ * type FlagsType = InferValueType<'boolean[]'>; // boolean[]
22
+ * type DatesType = InferValueType<'date[]'>; // Date[]
23
+ * ```
24
+ *
25
+ * @remarks
26
+ * This type handles both scalar types and array types.
27
+ * For arrays, it maps the base type to an array of that type.
28
+ * This approach is more maintainable and future-proof than
29
+ * explicitly handling each array type.
30
+ */
31
+ export type InferValueType<TFieldType extends FieldType> =
32
+ BaseInferValueType<TFieldType>;
33
+
34
+ /**
35
+ * Infers the output type for a single field.
36
+ * Takes into account whether the field is required and returned in API responses.
37
+ *
38
+ * @template TField - The field definition
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * // A required string field
43
+ * const nameField: Field<'string'> = {
44
+ * type: 'string',
45
+ * required: true
46
+ * };
47
+ * type NameOutput = InferFieldOutput<typeof nameField>; // string
48
+ *
49
+ * // An optional number field
50
+ * const ageField: Field<'number'> = {
51
+ * type: 'number',
52
+ * required: false
53
+ * };
54
+ * type AgeOutput = InferFieldOutput<typeof ageField>; // number | null | undefined
55
+ * ```
56
+ *
57
+ * @remarks
58
+ * If a field has `returned: false`, this will be `never` indicating
59
+ * the field should not appear in API responses.
60
+ */
61
+ export type InferFieldOutput<TField extends Field> =
62
+ TField['returned'] extends false
63
+ ? never
64
+ : TField['required'] extends false
65
+ ? InferValueType<TField['type']> | null | undefined
66
+ : InferValueType<TField['type']>;
67
+
68
+ /**
69
+ * Infers the input type for a single field.
70
+ * Determines the expected type when creating or updating records.
71
+ *
72
+ * @template TField - The field definition
73
+ *
74
+ * @example
75
+ * ```typescript
76
+ * // A non-input field (system-generated)
77
+ * const createdAtField: Field<'date'> = {
78
+ * type: 'date',
79
+ * required: true,
80
+ * input: false
81
+ * };
82
+ * type CreatedAtInput = InferFieldInput<typeof createdAtField>; // never
83
+ * ```
84
+ *
85
+ * @remarks
86
+ * If a field has `input: false`, this will be `never` indicating
87
+ * the field should not be provided in API requests.
88
+ */
89
+ export type InferFieldInput<TField extends Field> =
90
+ TField['input'] extends false
91
+ ? never
92
+ : TField['required'] extends true
93
+ ? InferValueType<TField['type']>
94
+ : InferValueType<TField['type']> | null | undefined;
95
+
96
+ /**
97
+ * Type-safe property mapping helper for field outputs.
98
+ * Maps properties of a record type to their corresponding output types.
99
+ *
100
+ * @template TSchema - The record type containing field definitions
101
+ * @template TKey - The keys of TSchema to map
102
+ *
103
+ * @internal
104
+ * This is an internal helper type used by InferFieldsOutput
105
+ */
106
+ // type MapToFieldOutputType<TSchema, TKey extends keyof TSchema & string> = {
107
+ // [Property in TKey]: TSchema[Property] extends Field
108
+ // ? InferFieldOutput<TSchema[Property]>
109
+ // : never;
110
+ // };
111
+
112
+ // /**
113
+ // * Type-safe property mapping helper for field inputs.
114
+ // * Maps properties of a record type to their corresponding input types.
115
+ // *
116
+ // * @template TSchema - The record type containing field definitions
117
+ // * @template TKey - The keys of TSchema to map
118
+ // *
119
+ // * @internal
120
+ // * This is an internal helper type used by InferFieldsInput
121
+ // */
122
+ // type MapToFieldInputType<TSchema, TKey extends keyof TSchema & string> = {
123
+ // [Property in TKey]: TSchema[Property] extends Field
124
+ // ? InferFieldInput<TSchema[Property]>
125
+ // : never;
126
+ // };
127
+
128
+ /**
129
+ * Type helper to extract required keys from fields that should be returned.
130
+ * Identifies fields that are both required and returned in API responses.
131
+ *
132
+ * @template TSchema - The record type containing field definitions
133
+ *
134
+ * @internal
135
+ * Used to determine which fields must be present in output types
136
+ */
137
+ type RequiredKeys<TSchema> = {
138
+ [Key in keyof TSchema]: TSchema[Key] extends Field
139
+ ? TSchema[Key]['required'] extends true
140
+ ? TSchema[Key]['returned'] extends false
141
+ ? never
142
+ : Key
143
+ : never
144
+ : never;
145
+ }[keyof TSchema];
146
+
147
+ /**
148
+ * Type helper to extract optional keys from fields that should be returned.
149
+ * Identifies fields that are optional but should be returned in API responses.
150
+ *
151
+ * @template TSchema - The record type containing field definitions
152
+ *
153
+ * @internal
154
+ * Used to determine which fields may be present in output types
155
+ */
156
+ type OptionalKeys<TSchema> = {
157
+ [Key in keyof TSchema]: TSchema[Key] extends Field
158
+ ? TSchema[Key]['required'] extends true
159
+ ? never
160
+ : TSchema[Key]['returned'] extends false
161
+ ? never
162
+ : Key
163
+ : never;
164
+ }[keyof TSchema];
165
+
166
+ /**
167
+ * Type helper to extract required keys from fields that accept input.
168
+ * Identifies fields that are both required and accept subject input.
169
+ *
170
+ * @template TSchema - The record type containing field definitions
171
+ *
172
+ * @internal
173
+ * Used to determine which fields must be provided in create operations
174
+ */
175
+ type RequiredInputKeys<TSchema> = {
176
+ [Key in keyof TSchema]: TSchema[Key] extends Field
177
+ ? TSchema[Key]['required'] extends true
178
+ ? TSchema[Key]['input'] extends false
179
+ ? never
180
+ : Key
181
+ : never
182
+ : never;
183
+ }[keyof TSchema];
184
+
185
+ /**
186
+ * Type helper to extract optional keys from fields that accept input.
187
+ * Identifies fields that are optional and accept subject input.
188
+ *
189
+ * @template TSchema - The record type containing field definitions
190
+ *
191
+ * @internal
192
+ * Used to determine which fields may be provided in create operations
193
+ */
194
+ type OptionalInputKeys<TSchema> = {
195
+ [Key in keyof TSchema]: TSchema[Key] extends Field
196
+ ? TSchema[Key]['required'] extends true
197
+ ? never
198
+ : TSchema[Key]['input'] extends false
199
+ ? never
200
+ : Key
201
+ : never;
202
+ }[keyof TSchema];
203
+
204
+ /**
205
+ * Infers the output type shape for a set of fields.
206
+ * Handles required/optional status and returned fields.
207
+ * Used to determine the shape of data when retrieving records.
208
+ *
209
+ * @template TSchema - The field definitions to infer from
210
+ *
211
+ * @example
212
+ * ```typescript
213
+ * // Define a schema
214
+ * const subjectSchema = {
215
+ * id: stringField({ required: true }),
216
+ * name: stringField({ required: true }),
217
+ * email: stringField({ required: true }),
218
+ * age: numberField({ required: false }),
219
+ * password: stringField({ required: true, returned: false })
220
+ * };
221
+ *
222
+ * // Infer the output type (for API responses)
223
+ * type SubjectOutput = InferFieldsOutput<typeof subjectSchema>;
224
+ * // Result: { id: string; name: string; email: string; age?: number | null | undefined }
225
+ * // Note: 'password' is excluded because returned: false
226
+ * ```
227
+ *
228
+ * @remarks
229
+ * This creates a type with:
230
+ * - Required properties for fields marked required and returned
231
+ * - Optional properties for fields marked optional and returned
232
+ * - Excludes fields marked with returned: false
233
+ */
234
+ export type InferFieldsOutput<TSchema> = TSchema extends Record<string, Field>
235
+ ? {
236
+ [Key in RequiredKeys<TSchema> & string]: InferFieldOutput<TSchema[Key]>;
237
+ } & {
238
+ [Key in OptionalKeys<TSchema> & string]?: InferFieldOutput<TSchema[Key]>;
239
+ }
240
+ : Record<string, never>;
241
+
242
+ /**
243
+ * Infers the input type shape for a set of fields.
244
+ * Handles required/optional status and input fields.
245
+ * Used to determine the shape of data expected when creating records.
246
+ *
247
+ * @template TSchema - The field definitions to infer from
248
+ *
249
+ * @example
250
+ * ```typescript
251
+ * // Define a schema
252
+ * const subjectSchema = {
253
+ * id: stringField({ required: true, input: false }), // Auto-generated
254
+ * name: stringField({ required: true }),
255
+ * email: stringField({ required: true }),
256
+ * age: numberField({ required: false }),
257
+ * createdAt: dateField({ required: true, input: false })
258
+ * };
259
+ *
260
+ * // Infer the input type (for create operations)
261
+ * type SubjectInput = InferFieldsInput<typeof subjectSchema>;
262
+ * // Result: { name: string; email: string; age?: number | null | undefined }
263
+ * // Note: 'id' and 'createdAt' are excluded because input: false
264
+ * ```
265
+ *
266
+ * @remarks
267
+ * This creates a type with:
268
+ * - Required properties for fields marked required and input
269
+ * - Optional properties for fields marked optional and input
270
+ * - Excludes fields marked with input: false
271
+ */
272
+ export type InferFieldsInput<TSchema> = TSchema extends Record<string, Field>
273
+ ? {
274
+ [Key in RequiredInputKeys<TSchema> & string]: InferFieldInput<
275
+ TSchema[Key]
276
+ >;
277
+ } & {
278
+ [Key in OptionalInputKeys<TSchema> & string]?: InferFieldInput<
279
+ TSchema[Key]
280
+ >;
281
+ }
282
+ : Record<string, never>;
283
+
284
+ /**
285
+ * Type helper for transform function output based on field type.
286
+ * Ensures transform functions return the correct output type.
287
+ *
288
+ * @template TFieldType - The field type that determines the input parameter type
289
+ *
290
+ * @example
291
+ * ```typescript
292
+ * const dateTransform: TransformOutputFn<'date'> = (value) => value.toISOString();
293
+ * // value is typed as Date
294
+ * ```
295
+ */
296
+ export type TransformOutputFn<TFieldType extends FieldType> = (
297
+ value: InferValueType<TFieldType>
298
+ ) => Primitive | Promise<Primitive>;
@@ -0,0 +1,135 @@
1
+ import type { C15TOptions } from '~/types';
2
+ import type { InferFieldsInput, InferFieldsOutput } from './field-inference';
3
+ import type { Field } from './field-types';
4
+
5
+ /**
6
+ * Infers field types from plugin definitions in C15T options.
7
+ * Extracts and combines field definitions from enabled plugins.
8
+ *
9
+ * @template TOptions - The C15T options configuration type
10
+ * @template TSchemaKey - Key for accessing the specific entity schema within plugins
11
+ * @template TFormat - Format to return ('output' or 'input')
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * // Configuration with plugins defining consent fields
16
+ * interface MyOptions extends C15TOptions {
17
+ * auth: {
18
+ * plugins: {
19
+ * consent: {
20
+ * enabled: true,
21
+ * subjectFields: {
22
+ * acceptedTerms: {
23
+ * type: 'boolean',
24
+ * required: true
25
+ * }
26
+ * }
27
+ * }
28
+ * }
29
+ * }
30
+ * }
31
+ *
32
+ * // Infer the output types for subject fields from plugins
33
+ * type SubjectPluginFields = InferFieldsFromPlugins<MyOptions, 'subjectFields', 'output'>;
34
+ * // Results in { acceptedTerms: boolean }
35
+ * ```
36
+ *
37
+ * @remarks
38
+ * This type helper allows plugins to extend entity schemas with their own fields.
39
+ * It walks through all enabled plugins, extracts fields for the specified entity type,
40
+ * and combines them into a single type.
41
+ */
42
+ export type InferFieldsFromPlugins<
43
+ TOptions extends C15TOptions,
44
+ TSchemaKey extends string,
45
+ TFormat extends 'output' | 'input' = 'output',
46
+ > = InferFieldsFromObjectPath<
47
+ TOptions,
48
+ [string, 'plugins', string, TSchemaKey],
49
+ TFormat
50
+ >;
51
+
52
+ /**
53
+ * Infers field types from C15T options for a specific module.
54
+ * Used to extract additional fields defined in options.
55
+ *
56
+ * @template TOptions - The C15T options configuration type
57
+ * @template TSchemaKey - Key for accessing the specific entity schema
58
+ * @template TFormat - Format to return ('output' or 'input')
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * // Configuration with additional subject fields
63
+ * interface MyOptions extends C15TOptions {
64
+ * auth: {
65
+ * subjectFields: {
66
+ * profile: {
67
+ * type: 'string',
68
+ * required: false
69
+ * }
70
+ * }
71
+ * }
72
+ * }
73
+ *
74
+ * // Infer the output types for subject fields from options
75
+ * type SubjectAdditionalFields = InferFieldsFromOptions<MyOptions, 'subject', 'subjectFields', 'output'>;
76
+ * // Results in { profile?: string | null | undefined }
77
+ * ```
78
+ *
79
+ * @remarks
80
+ * TSchemaKey can be one of:
81
+ * - Single string key like 'subjectFields' to access TOptions[T]['subjectFields']
82
+ * - Array of strings for a nested path like ['subject', 'subjectFields']
83
+ *
84
+ * This type helper extracts custom fields defined directly in the options object,
85
+ * rather than those defined in plugins.
86
+ */
87
+ export type InferFieldsFromOptions<
88
+ TOptions extends C15TOptions,
89
+ TModuleKey extends keyof TOptions & string,
90
+ TSchemaKey extends string,
91
+ TFormat extends 'output' | 'input' = 'output',
92
+ > = InferFieldsFromObjectPath<TOptions, [TModuleKey, TSchemaKey], TFormat>;
93
+
94
+ // Internal helper type
95
+ type InferFieldsFromObjectPath<
96
+ TOptions,
97
+ TPath extends (string | number)[],
98
+ TFormat extends 'output' | 'input',
99
+ > = TFormat extends 'output'
100
+ ? InferFieldsOutput<GetFieldsFromPath<TOptions, TPath>>
101
+ : InferFieldsInput<GetFieldsFromPath<TOptions, TPath>>;
102
+
103
+ // Internal helper type for accessing nested paths
104
+ type GetFieldsFromPath<
105
+ TOptions,
106
+ TPath extends (string | number)[],
107
+ > = TPath extends [infer TFirst, ...infer TRest]
108
+ ? TFirst extends keyof TOptions
109
+ ? TRest extends (string | number)[]
110
+ ? TRest['length'] extends 0
111
+ ? TOptions[TFirst] extends Record<string, Field>
112
+ ? TOptions[TFirst]
113
+ : never
114
+ : GetFieldsFromPath<TOptions[TFirst], TRest>
115
+ : never
116
+ : TFirst extends string
117
+ ? TOptions extends Record<string, unknown>
118
+ ? TRest extends (string | number)[]
119
+ ? TRest['length'] extends 0
120
+ ? {
121
+ [K in keyof TOptions]: K extends TFirst
122
+ ? TOptions[K] extends Record<string, Field>
123
+ ? TOptions[K]
124
+ : never
125
+ : never;
126
+ }[keyof TOptions & TFirst]
127
+ : {
128
+ [K in keyof TOptions]: K extends TFirst
129
+ ? GetFieldsFromPath<TOptions[K], TRest>
130
+ : never;
131
+ }[keyof TOptions & TFirst]
132
+ : never
133
+ : never
134
+ : never
135
+ : Record<string, never>;
@@ -0,0 +1,233 @@
1
+ /**
2
+ * The set of field types supported by C15T.
3
+ * Specifies the data types that can be used for database fields.
4
+ *
5
+ * @remarks
6
+ * These types determine how data is stored, validated, and transformed.
7
+ * The system supports both scalar types and array types.
8
+ */
9
+ export type FieldType =
10
+ | 'string'
11
+ | 'number'
12
+ | 'boolean'
13
+ | 'date'
14
+ | 'timezone'
15
+ | 'json'
16
+ | 'string[]'
17
+ | 'number[]';
18
+
19
+ /**
20
+ * Primitive types that can be stored in the database.
21
+ */
22
+ export type Primitive = string | number | boolean | Date | null | undefined;
23
+
24
+ /**
25
+ * JSON value types that can be stored in JSON fields.
26
+ */
27
+ export type JsonValue =
28
+ | string
29
+ | number
30
+ | boolean
31
+ | null
32
+ | JsonValue[]
33
+ | { [key: string]: JsonValue };
34
+
35
+ /**
36
+ * Configuration options for a database field.
37
+ * Defines the behavior, validation, and transformations for a field.
38
+ *
39
+ * @template TFieldType - The data type of the field
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * // Basic required string field
44
+ * const basicConfig: FieldConfig<'string'> = {
45
+ * type: 'string',
46
+ * required: true
47
+ * };
48
+ *
49
+ * // Optional number field with validation
50
+ * const numberConfig: FieldConfig<'number'> = {
51
+ * type: 'number',
52
+ * required: false,
53
+ * validator: (value) => value >= 0 ? null : 'Must be non-negative'
54
+ * };
55
+ *
56
+ * // Date field with transform and default
57
+ * const dateConfig: FieldConfig<'date'> = {
58
+ * type: 'date',
59
+ * defaultValue: () => new Date(),
60
+ * transform: {
61
+ * output: (date) => date.toISOString()
62
+ * }
63
+ * };
64
+ * ```
65
+ *
66
+ * @remarks
67
+ * This is the core configuration object that defines how a field behaves
68
+ * in the database schema. It controls whether the field is required, how
69
+ * it's transformed, validated, and more.
70
+ */
71
+ export type FieldConfig<TFieldType extends FieldType> = {
72
+ /**
73
+ * The data type of the field.
74
+ * Determines how the field is stored and validated.
75
+ */
76
+ type: TFieldType;
77
+
78
+ /**
79
+ * Whether the field is required for record creation.
80
+ * If true, the field must be provided when creating a record.
81
+ * @default true
82
+ */
83
+ required?: boolean;
84
+
85
+ /**
86
+ * Whether the field should be returned in API responses.
87
+ * If false, the field will be excluded from query results.
88
+ * @default true
89
+ */
90
+ returned?: boolean;
91
+
92
+ /**
93
+ * Whether the field accepts input from API requests.
94
+ * If false, the field cannot be set directly by clients.
95
+ * @default true
96
+ */
97
+ input?: boolean;
98
+
99
+ /**
100
+ * Default value for the field when not provided in create operations.
101
+ * Can be a static value or a function that returns a value.
102
+ */
103
+ defaultValue?: Primitive | (() => Primitive);
104
+
105
+ /**
106
+ * Functions to transform the field value during input/output operations.
107
+ * Can modify values before storage or after retrieval.
108
+ */
109
+ transform?: {
110
+ /**
111
+ * Transform function for field input.
112
+ * Applied when data is being saved to the database.
113
+ */
114
+ input?: (
115
+ value: InferValueType<TFieldType>
116
+ ) => Primitive | Promise<Primitive>;
117
+
118
+ /**
119
+ * Transform function for field output.
120
+ * Applied when data is being retrieved from the database.
121
+ */
122
+ output?: (
123
+ value: unknown
124
+ ) => InferValueType<TFieldType> | Promise<InferValueType<TFieldType>>;
125
+ };
126
+
127
+ /**
128
+ * Custom validation function for the field.
129
+ * Returns null if valid, or an error message if invalid.
130
+ */
131
+ validator?: (value: InferValueType<TFieldType>) => string | null;
132
+
133
+ /**
134
+ * Whether the field should be unique across all records.
135
+ * If true, no two records can have the same value for this field.
136
+ */
137
+ unique?: boolean;
138
+
139
+ /**
140
+ * Whether the field should be indexed for faster lookups.
141
+ * If true, an index will be created for this field.
142
+ */
143
+ indexed?: boolean;
144
+
145
+ /**
146
+ * Whether the field should be sortable in queries.
147
+ * If false, the field cannot be used in ORDER BY clauses.
148
+ * @default true
149
+ */
150
+ sortable?: boolean;
151
+
152
+ /**
153
+ * Custom database field name.
154
+ * If not provided, the field name will be used as-is.
155
+ */
156
+ fieldName?: string;
157
+
158
+ /**
159
+ * Whether the field should be stored as a bigint.
160
+ * Only applicable to number fields.
161
+ * @default false
162
+ */
163
+ bigint?: boolean;
164
+
165
+ /**
166
+ * References to other models.
167
+ */
168
+ references?: {
169
+ model: string;
170
+ entity: string;
171
+ field: string;
172
+ onDelete: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
173
+ };
174
+ };
175
+
176
+ /**
177
+ * Helper type to infer the base JavaScript type from a field type.
178
+ */
179
+ export type InferValueType<TFieldType extends FieldType> =
180
+ TFieldType extends 'string'
181
+ ? string
182
+ : TFieldType extends 'number'
183
+ ? number
184
+ : TFieldType extends 'boolean'
185
+ ? boolean
186
+ : TFieldType extends 'date'
187
+ ? Date
188
+ : TFieldType extends 'timezone'
189
+ ? string
190
+ : TFieldType extends 'json'
191
+ ? JsonValue
192
+ : TFieldType extends 'string[]'
193
+ ? string[]
194
+ : TFieldType extends 'number[]'
195
+ ? number[]
196
+ : never;
197
+
198
+ /**
199
+ * The complete definition of a database field.
200
+ * Combines the field type with its configuration options.
201
+ *
202
+ * @template TFieldType - The data type of the field
203
+ *
204
+ * @example
205
+ * ```typescript
206
+ * // A simple string field
207
+ * const nameField: Field<'string'> = {
208
+ * type: 'string',
209
+ * required: true,
210
+ * unique: true
211
+ * };
212
+ *
213
+ * // A number field with validation
214
+ * const ageField: Field<'number'> = {
215
+ * type: 'number',
216
+ * required: true,
217
+ * validator: (value) => value >= 0 ? null : 'Age must be non-negative'
218
+ * };
219
+ *
220
+ * // A date field with transforms
221
+ * const createdAtField: Field<'date'> = {
222
+ * type: 'date',
223
+ * required: true,
224
+ * input: false,
225
+ * defaultValue: () => new Date(),
226
+ * transform: {
227
+ * output: (date) => date.toISOString()
228
+ * }
229
+ * };
230
+ * ```
231
+ */
232
+ export type Field<TFieldType extends FieldType = FieldType> =
233
+ FieldConfig<TFieldType>;