@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,648 @@
1
+ import type {
2
+ EntityInput,
3
+ EntityName,
4
+ EntityOutput,
5
+ EntityTypeMap,
6
+ } from '~/db/core/types';
7
+ import type { C15TOptions } from '~/types';
8
+ import { getConsentTables } from '../..';
9
+
10
+ import { type Field, type Primitive, generateId } from '~/db/core/fields';
11
+
12
+ import type { Adapter, TableFields, Where } from '../types';
13
+ import { applyDefaultValue } from '../utils';
14
+
15
+ /**
16
+ * In-memory database structure for the memory adapter
17
+ *
18
+ * This interface defines the structure of the in-memory database used by the
19
+ * memory adapter. It's a simple key-value store where each key represents a
20
+ * collection/table name, and the value is an array of records.
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * const db: MemoryDB = {
25
+ * consent: [
26
+ * { id: 'cns_0i1dv2gasuubm7xlm2qj', subjectId: 'sub_x1pftyoufsm7xgo1kv', purposeId: 'pur_e8zyhgozr3im7xj59it', allowed: true },
27
+ * { id: 'cns_yxfwrgvn2bhm7xkjcsv', subjectId: 'sub_37lpazdq73qm7xiia1p', purposeId: 'pur_vv76m0rtb2dm7xj59gt', allowed: false }
28
+ * ],
29
+ * consentPurpose: [
30
+ * { id: 'pol_1116FRpKFncEvRmVbnJW6JhMxD', name: 'Marketing', description: 'For sending promotional materials' }
31
+ * ]
32
+ * };
33
+ * ```
34
+ */
35
+ export interface MemoryDB {
36
+ [key: string]: Record<string, unknown>[];
37
+ }
38
+ /**
39
+ * Interface for where conditions in memory adapter queries
40
+ *
41
+ * This interface defines the structure of query conditions used
42
+ * in database operations. It supports various operators and connectors
43
+ * for building complex query conditions.
44
+ *
45
+ * @typeParam EntityType - The entity type being queried
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * // Simple equality condition
50
+ * const whereCondition: WhereCondition<'consent'> = {
51
+ * field: 'subjectId',
52
+ * value: 'sub_x1pftyoufsm7xgo1kv'
53
+ * };
54
+ *
55
+ * // More complex condition with operator
56
+ * const complexCondition: WhereCondition<'consent'> = {
57
+ * field: 'purposeId',
58
+ * value: ['pur_uvrr67my07m7xj2bta', 'pur_e8zyhgozr3im7xj59it'],
59
+ * operator: 'in'
60
+ * };
61
+ *
62
+ * // Using OR connector
63
+ * const orCondition: WhereCondition<'consent'> = {
64
+ * field: 'purposeId',
65
+ * value: 'pur_e8zyhgozr3im7xj59it',
66
+ * connector: 'OR' // Will match this OR the previous condition
67
+ * };
68
+ * ```
69
+ */
70
+ interface WhereCondition<EntityType extends EntityName> {
71
+ /**
72
+ * The field to apply the condition to
73
+ */
74
+ field: keyof EntityTypeMap[EntityType] | 'id';
75
+
76
+ /**
77
+ * The value to compare against
78
+ */
79
+ value: unknown;
80
+
81
+ /**
82
+ * The operator to use for comparison
83
+ *
84
+ * @default "="
85
+ */
86
+ operator?:
87
+ | 'in'
88
+ | 'eq'
89
+ | 'ne'
90
+ | 'contains'
91
+ | 'starts_with'
92
+ | 'ends_with'
93
+ | '=';
94
+
95
+ /**
96
+ * The logical connector to use with previous conditions.
97
+ * When set to 'OR', the condition will be combined with previous conditions using OR logic.
98
+ * When set to 'AND' or omitted, conditions will be combined using AND logic.
99
+ *
100
+ * @default "AND"
101
+ *
102
+ * @example
103
+ * ```typescript
104
+ * // Match records where purposeId is 'pur_e8zyhgozr3im7xj59it' OR subjectId is 'sub_x1pftyoufsm7xgo1kv'
105
+ * const where = [
106
+ * { field: 'purposeId', value: 'pur_e8zyhgozr3im7xj59it' },
107
+ * { field: 'subjectId', value: 'sub_x1pftyoufsm7xgo1kv', connector: 'OR' }
108
+ * ];
109
+ * ```
110
+ */
111
+ connector?: 'AND' | 'OR';
112
+ }
113
+
114
+ /**
115
+ * Creates entity transformation utilities for the memory adapter
116
+ *
117
+ * This function creates helper methods for converting between c15t's
118
+ * data format and the in-memory format, handling field mapping,
119
+ * value transformation, and query filtering.
120
+ *
121
+ * @internal This function is used internally by the memoryAdapter
122
+ * @param options - The c15t options
123
+ * @returns An object containing entity transformation utilities
124
+ */
125
+ const createEntityTransformer = (options: C15TOptions) => {
126
+ const schema = getConsentTables(options);
127
+
128
+ /**
129
+ * Gets the database field name for a model field
130
+ *
131
+ * @internal
132
+ * @typeParam EntityType - The entity type
133
+ * @param model - The model name
134
+ * @param field - The field name in the c15t model
135
+ * @returns The corresponding field name in the database schema
136
+ */
137
+ function getField<EntityType extends EntityName>(
138
+ model: EntityType,
139
+ field: keyof EntityTypeMap[EntityType] | string
140
+ ): string {
141
+ if (field === 'id') {
142
+ return field;
143
+ }
144
+ const modelFields = schema[model]?.fields;
145
+ const f = modelFields
146
+ ? (modelFields as Record<string, Field>)[field as string]
147
+ : undefined;
148
+ return f?.fieldName || (field as string);
149
+ }
150
+
151
+ return {
152
+ /**
153
+ * Transforms input data from c15t format to database format
154
+ *
155
+ * @internal
156
+ * @typeParam EntityType - The entity type
157
+ * @param data - The data to transform
158
+ * @param model - The model name
159
+ * @param action - Whether this is a create or update operation
160
+ * @returns Transformed data for database insertion/update
161
+ */
162
+ transformInput<EntityType extends EntityName>(
163
+ data: EntityInput<EntityType>,
164
+ model: EntityType,
165
+ action: 'update' | 'create'
166
+ ): Record<string, unknown> {
167
+ const transformedData: Record<string, unknown> =
168
+ action === 'update'
169
+ ? {}
170
+ : {
171
+ id: options.advanced?.generateId
172
+ ? options.advanced.generateId({
173
+ model,
174
+ })
175
+ : data.id || generateId(schema[model].entityPrefix),
176
+ };
177
+
178
+ const fields = schema[model].fields;
179
+ for (const field in fields) {
180
+ if (Object.hasOwn(fields, field)) {
181
+ const value = data[field as keyof typeof data];
182
+ const fieldInfo = (fields as Record<string, Field>)[field];
183
+ if (value === undefined && !fieldInfo?.defaultValue) {
184
+ continue;
185
+ }
186
+ const fieldName = fieldInfo?.fieldName || field;
187
+ transformedData[fieldName] = applyDefaultValue(
188
+ value as Primitive,
189
+ fieldInfo as Field,
190
+ action
191
+ );
192
+ }
193
+ }
194
+ return transformedData;
195
+ },
196
+
197
+ /**
198
+ * Transforms output data from database format to c15t format
199
+ *
200
+ * @internal
201
+ * @typeParam EntityType - The entity type
202
+ * @param data - The data from the database
203
+ * @param model - The model name
204
+ * @param select - Optional array of fields to select
205
+ * @returns Transformed data for c15t or null if no data
206
+ */
207
+ transformOutput<EntityType extends EntityName>(
208
+ data: Record<string, unknown> | null,
209
+ model: EntityType,
210
+ select: string[] = []
211
+ ): EntityOutput<EntityType> | null {
212
+ if (!data) {
213
+ return null;
214
+ }
215
+
216
+ // Initialize with empty object
217
+ const transformedData: Record<string, unknown> = {};
218
+
219
+ // Handle ID separately
220
+ const hasId = data.id || data._id;
221
+ if (hasId && (select.length === 0 || select.includes('id'))) {
222
+ transformedData.id = data.id;
223
+ }
224
+
225
+ const tableSchema = schema[model].fields;
226
+ for (const key in tableSchema) {
227
+ if (select.length && !select.includes(key)) {
228
+ continue;
229
+ }
230
+ const field = (tableSchema as Record<string, Field>)[key];
231
+ if (field) {
232
+ transformedData[key] = data[field.fieldName || key];
233
+ }
234
+ }
235
+ return transformedData as EntityOutput<EntityType>;
236
+ },
237
+
238
+ /**
239
+ * Filters records based on where conditions
240
+ *
241
+ * @internal
242
+ * @typeParam EntityType - The entity type
243
+ * @param where - Array of where conditions
244
+ * @param table - The table of records to filter
245
+ * @param model - The model name
246
+ * @returns Filtered array of records
247
+ * @throws {Error} When an invalid value is provided for 'in' operator
248
+ */
249
+ convertWhereClause<EntityType extends EntityName>(
250
+ where: WhereCondition<EntityType>[],
251
+ table: Record<string, unknown>[],
252
+ model: EntityType
253
+ ): Record<string, unknown>[] {
254
+ return table.filter((record) => {
255
+ return where.every((clause) => {
256
+ const { field: _field, value, operator = '=' } = clause;
257
+ const field = getField(model, _field);
258
+
259
+ if (operator === 'in') {
260
+ if (!Array.isArray(value)) {
261
+ throw new Error('Value must be an array');
262
+ }
263
+ return value.includes(record[field]);
264
+ }
265
+
266
+ if (operator === 'contains') {
267
+ const fieldValue = record[field];
268
+ return (
269
+ typeof fieldValue === 'string' &&
270
+ fieldValue.includes(value as string)
271
+ );
272
+ }
273
+
274
+ if (operator === 'starts_with') {
275
+ const fieldValue = record[field];
276
+ return (
277
+ typeof fieldValue === 'string' &&
278
+ fieldValue.startsWith(value as string)
279
+ );
280
+ }
281
+
282
+ if (operator === 'ends_with') {
283
+ const fieldValue = record[field];
284
+ return (
285
+ typeof fieldValue === 'string' &&
286
+ fieldValue.endsWith(value as string)
287
+ );
288
+ }
289
+
290
+ if (operator === 'eq') {
291
+ return record[field] === value;
292
+ }
293
+ if (operator === 'ne') {
294
+ return record[field] !== value;
295
+ }
296
+
297
+ // Default case (equals)
298
+ return record[field] === value;
299
+ });
300
+ });
301
+ },
302
+ getField,
303
+ };
304
+ };
305
+
306
+ /**
307
+ * Creates a c15t adapter for in-memory storage
308
+ *
309
+ * This factory function creates an adapter that allows c15t to use in-memory
310
+ * storage for development, testing, or simple production use cases where
311
+ * persistence is not required.
312
+ *
313
+ * @param db - The in-memory database object
314
+ * @returns A c15t adapter factory function
315
+ *
316
+ * @example
317
+ * ```typescript
318
+ * import { c15tInstance } from '@c15t/backend';
319
+ * import { memoryAdapter } from '@c15t/adapters/memory';
320
+ *
321
+ * // Create an empty in-memory database
322
+ * const db = {};
323
+ *
324
+ * // Create the c15t instance with memory adapter
325
+ * const c15t = c15tInstance({
326
+ * storage: memoryAdapter(db),
327
+ * secret: process.env.SECRET_KEY
328
+ * });
329
+ *
330
+ * // The database will be populated as records are created
331
+ * // You can also inspect the database during development
332
+ * console.log(db);
333
+ * ```
334
+ */
335
+ export const memoryAdapter =
336
+ (db: MemoryDB) =>
337
+ (options: C15TOptions): Adapter => {
338
+ const { transformInput, transformOutput, convertWhereClause, getField } =
339
+ createEntityTransformer(options);
340
+
341
+ return {
342
+ id: 'memory',
343
+ /**
344
+ * Creates a new record in the in-memory database
345
+ *
346
+ * @typeParam Model - The model type
347
+ * @typeParam Data - The data type
348
+ * @typeParam Result - The result type
349
+ * @param data - The data for the create operation
350
+ * @returns The created record
351
+ */
352
+ async create<
353
+ Model extends EntityName,
354
+ Data extends Record<string, unknown>,
355
+ Result extends TableFields<Model>,
356
+ >(data: {
357
+ model: Model;
358
+ data: Data;
359
+ select?: (keyof Result)[];
360
+ }): Promise<Result> {
361
+ const { model, data: values, select } = data;
362
+ const transformed = transformInput(
363
+ values as EntityInput<Model>,
364
+ model,
365
+ 'create'
366
+ );
367
+
368
+ // Initialize array if it doesn't exist
369
+ if (!db[model]) {
370
+ db[model] = [];
371
+ }
372
+
373
+ db[model].push(transformed);
374
+ return transformOutput(
375
+ transformed,
376
+ model,
377
+ select as string[]
378
+ ) as Result;
379
+ },
380
+
381
+ /**
382
+ * Finds a single record matching the where conditions
383
+ *
384
+ * @typeParam Model - The model type
385
+ * @typeParam Result - The result type
386
+ * @param data - The data for the find operation
387
+ * @returns The found record or null if not found
388
+ */
389
+ async findOne<
390
+ Model extends EntityName,
391
+ Result extends TableFields<Model>,
392
+ >(data: {
393
+ model: Model;
394
+ where: Where<Model>;
395
+ select?: (keyof Result)[];
396
+ }): Promise<Result | null> {
397
+ const { model, where, select } = data;
398
+ const table = db[model] || [];
399
+ // Convert Where from Adapter type to internal WhereCondition type
400
+ const whereArray = (Array.isArray(where)
401
+ ? where
402
+ : [where]) as unknown as WhereCondition<Model>[];
403
+ const res = convertWhereClause(whereArray, table, model);
404
+ const record = res[0] || null;
405
+ return transformOutput(
406
+ record,
407
+ model,
408
+ select as string[]
409
+ ) as Result | null;
410
+ },
411
+
412
+ /**
413
+ * Finds multiple records matching the where conditions
414
+ *
415
+ * @typeParam Model - The model type
416
+ * @typeParam Result - The result type
417
+ * @param data - The data for the find operation
418
+ * @returns Array of matching records
419
+ */
420
+ async findMany<
421
+ Model extends EntityName,
422
+ Result extends TableFields<Model>,
423
+ >(data: {
424
+ model: Model;
425
+ where?: Where<Model>;
426
+ limit?: number;
427
+ sortBy?: { field: 'id' | keyof Result; direction: 'asc' | 'desc' };
428
+ offset?: number;
429
+ }): Promise<Result[]> {
430
+ const { model, where, sortBy, limit, offset } = data;
431
+ let table = db[model] || [];
432
+
433
+ if (where) {
434
+ // Convert Where from Adapter type to internal WhereCondition type
435
+ const whereArray = (Array.isArray(where)
436
+ ? where
437
+ : [where]) as unknown as WhereCondition<Model>[];
438
+ table = convertWhereClause(whereArray, table, model);
439
+ }
440
+
441
+ if (sortBy) {
442
+ const field = getField(model, sortBy.field as string);
443
+ table = [...table].sort((a, b) => {
444
+ if (sortBy.direction === 'asc') {
445
+ return (a[field] as number) > (b[field] as number) ? 1 : -1;
446
+ }
447
+ return (a[field] as number) < (b[field] as number) ? 1 : -1;
448
+ });
449
+ }
450
+
451
+ let result = table;
452
+ if (offset !== undefined) {
453
+ result = result.slice(offset);
454
+ }
455
+ if (limit !== undefined) {
456
+ result = result.slice(0, limit);
457
+ }
458
+
459
+ return result.map((record) => transformOutput(record, model) as Result);
460
+ },
461
+
462
+ /**
463
+ * Counts records matching the where conditions
464
+ *
465
+ * @typeParam Model - The model type
466
+ * @param data - The data for the count operation
467
+ * @returns The count of matching records
468
+ */
469
+ async count<Model extends EntityName>(data: {
470
+ model: Model;
471
+ where?: Where<Model>;
472
+ }): Promise<number> {
473
+ const { model, where } = data;
474
+ const table = db[model] || [];
475
+
476
+ if (!where) {
477
+ return table.length;
478
+ }
479
+
480
+ // Convert Where from Adapter type to internal WhereCondition type
481
+ const whereArray = (Array.isArray(where)
482
+ ? where
483
+ : [where]) as unknown as WhereCondition<Model>[];
484
+ const filtered = convertWhereClause(whereArray, table, model);
485
+ return filtered.length;
486
+ },
487
+
488
+ /**
489
+ * Updates a single record matching the where conditions
490
+ *
491
+ * @typeParam Model - The model type
492
+ * @typeParam Result - The result type
493
+ * @param data - The data for the update operation
494
+ * @returns The updated record or null if not found
495
+ */
496
+ async update<
497
+ Model extends EntityName,
498
+ Result extends TableFields<Model>,
499
+ >(data: {
500
+ model: Model;
501
+ where: Where<Model>;
502
+ update: EntityInput<Model>;
503
+ }): Promise<Result | null> {
504
+ const { model, where, update: values } = data;
505
+ const table = db[model] || [];
506
+ // Convert Where from Adapter type to internal WhereCondition type
507
+ const whereArray = (Array.isArray(where)
508
+ ? where
509
+ : [where]) as unknown as WhereCondition<Model>[];
510
+ const res = convertWhereClause(whereArray, table, model);
511
+
512
+ for (const record of res) {
513
+ Object.assign(
514
+ record,
515
+ transformInput(values as EntityInput<Model>, model, 'update')
516
+ );
517
+ }
518
+
519
+ return transformOutput(res[0] || null, model) as Result | null;
520
+ },
521
+
522
+ /**
523
+ * Updates multiple records matching the where conditions
524
+ *
525
+ * @typeParam Model - The model type
526
+ * @typeParam Result - The result type
527
+ * @param data - The data for the update operation
528
+ * @returns Array of updated records
529
+ */
530
+ async updateMany<
531
+ Model extends EntityName,
532
+ Result extends TableFields<Model>,
533
+ >(data: {
534
+ model: Model;
535
+ where: Where<Model>;
536
+ update: Partial<EntityInput<Model>>;
537
+ }): Promise<Result[]> {
538
+ const { model, where, update: values } = data;
539
+ const table = db[model] || [];
540
+ // Convert Where from Adapter type to internal WhereCondition type
541
+ const whereArray = (Array.isArray(where)
542
+ ? where
543
+ : [where]) as unknown as WhereCondition<Model>[];
544
+ const res = convertWhereClause(whereArray, table, model);
545
+
546
+ for (const record of res) {
547
+ Object.assign(
548
+ record,
549
+ transformInput(values as EntityInput<Model>, model, 'update')
550
+ );
551
+ }
552
+
553
+ return res.map((record) => transformOutput(record, model) as Result);
554
+ },
555
+
556
+ /**
557
+ * Deletes a single record matching the where conditions
558
+ *
559
+ * @typeParam Model - The model type
560
+ * @param data - The data for the delete operation
561
+ */
562
+ async delete<Model extends EntityName>(data: {
563
+ model: Model;
564
+ where: Where<Model>;
565
+ }): Promise<void> {
566
+ const { model, where } = data;
567
+ const table = db[model] || [];
568
+ // Convert Where from Adapter type to internal WhereCondition type
569
+ const whereArray = (Array.isArray(where)
570
+ ? where
571
+ : [where]) as unknown as WhereCondition<Model>[];
572
+ const res = convertWhereClause(whereArray, table, model);
573
+ db[model] = table.filter((record) => !res.includes(record));
574
+ },
575
+
576
+ /**
577
+ * Deletes multiple records matching the where conditions
578
+ *
579
+ * @typeParam Model - The model type
580
+ * @param data - The data for the delete operation
581
+ * @returns The number of records deleted
582
+ */
583
+ async deleteMany<Model extends EntityName>(data: {
584
+ model: Model;
585
+ where: Where<Model>;
586
+ }): Promise<number> {
587
+ const { model, where } = data;
588
+ const table = db[model] || [];
589
+ // Convert Where from Adapter type to internal WhereCondition type
590
+ const whereArray = (Array.isArray(where)
591
+ ? where
592
+ : [where]) as unknown as WhereCondition<Model>[];
593
+ const res = convertWhereClause(whereArray, table, model);
594
+ let count = 0;
595
+
596
+ db[model] = table.filter((record) => {
597
+ if (res.includes(record)) {
598
+ count++;
599
+ return false;
600
+ }
601
+ return true;
602
+ });
603
+
604
+ return count;
605
+ },
606
+
607
+ /**
608
+ * Executes a function within a memory-based transaction
609
+ *
610
+ * This method provides a simplified transaction mechanism for the in-memory
611
+ * database. It creates a deep copy of the current database state, performs
612
+ * operations on the copy, and then replaces the original database if successful.
613
+ *
614
+ * @typeParam ResultType - The type of data returned by the transaction
615
+ * @param data - The transaction data containing the callback function
616
+ * @returns A promise that resolves with the result of the callback function
617
+ * @throws {Error} If the transaction callback throws an error
618
+ */
619
+ async transaction<ResultType>(data: {
620
+ callback: (transactionAdapter: Adapter) => Promise<ResultType>;
621
+ }): Promise<ResultType> {
622
+ const { callback } = data;
623
+
624
+ // Create a deep copy of the database for transaction isolation
625
+ const tempDb: MemoryDB = {};
626
+ for (const key in db) {
627
+ if (Object.hasOwn(db, key)) {
628
+ tempDb[key] = JSON.parse(JSON.stringify(db[key]));
629
+ }
630
+ }
631
+
632
+ // Create a new adapter instance that uses the temporary database
633
+ const transactionAdapter = memoryAdapter(tempDb)(options);
634
+
635
+ // Execute the callback function with the transaction adapter
636
+ const result = await callback(transactionAdapter);
637
+
638
+ // If successful, commit changes by replacing the original database
639
+ for (const key in tempDb) {
640
+ if (Object.hasOwn(tempDb, key)) {
641
+ db[key] = tempDb[key] as Record<string, unknown>[];
642
+ }
643
+ }
644
+
645
+ return result;
646
+ },
647
+ };
648
+ };
@@ -0,0 +1 @@
1
+ export * from './prisma-adapter';