@c15t/backend 1.0.5 → 1.2.0-canary.0

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 (462) hide show
  1. package/.turbo/turbo-build.log +33 -39
  2. package/.turbo/turbo-fmt.log +3 -3
  3. package/.turbo/turbo-test.log +531 -0
  4. package/coverage/coverage-final.json +84 -0
  5. package/coverage/coverage-summary.json +85 -0
  6. package/coverage/html/backend/index.html +116 -0
  7. package/coverage/html/backend/rslib.config.ts.html +415 -0
  8. package/coverage/html/backend/src/contracts/consent/index.html +161 -0
  9. package/coverage/html/backend/src/contracts/consent/index.ts.html +112 -0
  10. package/coverage/html/backend/src/contracts/consent/post.contract.ts.html +559 -0
  11. package/coverage/html/backend/src/contracts/consent/show-banner.contract.ts.html +220 -0
  12. package/coverage/html/backend/src/contracts/consent/verify.contract.ts.html +463 -0
  13. package/coverage/html/backend/src/contracts/index.html +116 -0
  14. package/coverage/html/backend/src/contracts/index.ts.html +139 -0
  15. package/coverage/html/backend/src/contracts/meta/index.html +131 -0
  16. package/coverage/html/backend/src/contracts/meta/index.ts.html +100 -0
  17. package/coverage/html/backend/src/contracts/meta/status.contract.ts.html +196 -0
  18. package/coverage/html/backend/src/contracts/shared/index.html +116 -0
  19. package/coverage/html/backend/src/contracts/shared/jurisdiction.schema.ts.html +175 -0
  20. package/coverage/html/backend/src/core.ts.html +1624 -0
  21. package/coverage/html/backend/src/handlers/consent/index.html +161 -0
  22. package/coverage/html/backend/src/handlers/consent/index.ts.html +112 -0
  23. package/coverage/html/backend/src/handlers/consent/post.handler.ts.html +889 -0
  24. package/coverage/html/backend/src/handlers/consent/show-banner.handler.ts.html +535 -0
  25. package/coverage/html/backend/src/handlers/consent/verify.handler.ts.html +1000 -0
  26. package/coverage/html/backend/src/handlers/meta/index.html +131 -0
  27. package/coverage/html/backend/src/handlers/meta/index.ts.html +100 -0
  28. package/coverage/html/backend/src/handlers/meta/status.handler.ts.html +226 -0
  29. package/coverage/html/backend/src/index.html +161 -0
  30. package/coverage/html/backend/src/init.ts.html +1018 -0
  31. package/coverage/html/backend/src/pkgs/api-router/hooks/index.html +116 -0
  32. package/coverage/html/backend/src/pkgs/api-router/hooks/processor.ts.html +544 -0
  33. package/coverage/html/backend/src/pkgs/api-router/index.html +116 -0
  34. package/coverage/html/backend/src/pkgs/api-router/telemetry.ts.html +334 -0
  35. package/coverage/html/backend/src/pkgs/api-router/utils/cors.ts.html +304 -0
  36. package/coverage/html/backend/src/pkgs/api-router/utils/index.html +131 -0
  37. package/coverage/html/backend/src/pkgs/api-router/utils/ip.ts.html +361 -0
  38. package/coverage/html/backend/src/pkgs/data-model/fields/field-factory.ts.html +709 -0
  39. package/coverage/html/backend/src/pkgs/data-model/fields/id-generator.ts.html +256 -0
  40. package/coverage/html/backend/src/pkgs/data-model/fields/index.html +161 -0
  41. package/coverage/html/backend/src/pkgs/data-model/fields/superjson-utils.ts.html +136 -0
  42. package/coverage/html/backend/src/pkgs/data-model/fields/zod-fields.ts.html +496 -0
  43. package/coverage/html/backend/src/pkgs/data-model/hooks/create-hooks.ts.html +349 -0
  44. package/coverage/html/backend/src/pkgs/data-model/hooks/index.html +176 -0
  45. package/coverage/html/backend/src/pkgs/data-model/hooks/update-hooks.ts.html +358 -0
  46. package/coverage/html/backend/src/pkgs/data-model/hooks/update-many-hooks.ts.html +613 -0
  47. package/coverage/html/backend/src/pkgs/data-model/hooks/utils.ts.html +538 -0
  48. package/coverage/html/backend/src/pkgs/data-model/hooks/with-hooks-factory.ts.html +289 -0
  49. package/coverage/html/backend/src/pkgs/db-adapters/adapter-factory.ts.html +289 -0
  50. package/coverage/html/backend/src/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.ts.html +2203 -0
  51. package/coverage/html/backend/src/pkgs/db-adapters/adapters/drizzle-adapter/index.html +116 -0
  52. package/coverage/html/backend/src/pkgs/db-adapters/adapters/index.html +116 -0
  53. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/dialect.ts.html +670 -0
  54. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/index.html +131 -0
  55. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/kysely-adapter.ts.html +3634 -0
  56. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/tests/index.html +116 -0
  57. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.ts.html +1417 -0
  58. package/coverage/html/backend/src/pkgs/db-adapters/adapters/memory-adapter/index.html +116 -0
  59. package/coverage/html/backend/src/pkgs/db-adapters/adapters/memory-adapter/memory-adapter.ts.html +2071 -0
  60. package/coverage/html/backend/src/pkgs/db-adapters/adapters/prisma-adapter/index.html +116 -0
  61. package/coverage/html/backend/src/pkgs/db-adapters/adapters/prisma-adapter/prisma-adapter.ts.html +1834 -0
  62. package/coverage/html/backend/src/pkgs/db-adapters/adapters/test.ts.html +316 -0
  63. package/coverage/html/backend/src/pkgs/db-adapters/index.html +131 -0
  64. package/coverage/html/backend/src/pkgs/db-adapters/utils.ts.html +238 -0
  65. package/coverage/html/backend/src/pkgs/migrations/get-migration.ts.html +343 -0
  66. package/coverage/html/backend/src/pkgs/migrations/get-schema/get-schema.ts.html +217 -0
  67. package/coverage/html/backend/src/pkgs/migrations/get-schema/index.html +146 -0
  68. package/coverage/html/backend/src/pkgs/migrations/get-schema/process-fields.ts.html +280 -0
  69. package/coverage/html/backend/src/pkgs/migrations/get-schema/process-tables.ts.html +289 -0
  70. package/coverage/html/backend/src/pkgs/migrations/index.html +176 -0
  71. package/coverage/html/backend/src/pkgs/migrations/migration-builders.ts.html +595 -0
  72. package/coverage/html/backend/src/pkgs/migrations/migration-execution.ts.html +301 -0
  73. package/coverage/html/backend/src/pkgs/migrations/schema-comparison.ts.html +694 -0
  74. package/coverage/html/backend/src/pkgs/migrations/type-mapping.ts.html +817 -0
  75. package/coverage/html/backend/src/pkgs/results/core/error-class.ts.html +976 -0
  76. package/coverage/html/backend/src/pkgs/results/core/error-codes.ts.html +703 -0
  77. package/coverage/html/backend/src/pkgs/results/core/index.html +146 -0
  78. package/coverage/html/backend/src/pkgs/results/core/tracing.ts.html +280 -0
  79. package/coverage/html/backend/src/pkgs/results/create-telemetry-options.ts.html +271 -0
  80. package/coverage/html/backend/src/pkgs/results/index.html +131 -0
  81. package/coverage/html/backend/src/pkgs/results/orpc-error-handler.ts.html +496 -0
  82. package/coverage/html/backend/src/pkgs/results/results/index.html +131 -0
  83. package/coverage/html/backend/src/pkgs/results/results/recovery-utils.ts.html +628 -0
  84. package/coverage/html/backend/src/pkgs/results/results/result-helpers.ts.html +1234 -0
  85. package/coverage/html/backend/src/pkgs/utils/env.ts.html +337 -0
  86. package/coverage/html/backend/src/pkgs/utils/index.html +146 -0
  87. package/coverage/html/backend/src/pkgs/utils/logger.ts.html +199 -0
  88. package/coverage/html/backend/src/pkgs/utils/url.ts.html +400 -0
  89. package/coverage/html/backend/src/router.ts.html +109 -0
  90. package/coverage/html/backend/src/schema/audit-log/index.html +146 -0
  91. package/coverage/html/backend/src/schema/audit-log/registry.ts.html +436 -0
  92. package/coverage/html/backend/src/schema/audit-log/schema.ts.html +223 -0
  93. package/coverage/html/backend/src/schema/audit-log/table.ts.html +640 -0
  94. package/coverage/html/backend/src/schema/consent/index.html +146 -0
  95. package/coverage/html/backend/src/schema/consent/registry.ts.html +616 -0
  96. package/coverage/html/backend/src/schema/consent/schema.ts.html +238 -0
  97. package/coverage/html/backend/src/schema/consent/table.ts.html +748 -0
  98. package/coverage/html/backend/src/schema/consent-policy/index.html +146 -0
  99. package/coverage/html/backend/src/schema/consent-policy/registry.ts.html +1063 -0
  100. package/coverage/html/backend/src/schema/consent-policy/schema.ts.html +265 -0
  101. package/coverage/html/backend/src/schema/consent-policy/table.ts.html +535 -0
  102. package/coverage/html/backend/src/schema/consent-purpose/index.html +146 -0
  103. package/coverage/html/backend/src/schema/consent-purpose/registry.ts.html +589 -0
  104. package/coverage/html/backend/src/schema/consent-purpose/schema.ts.html +259 -0
  105. package/coverage/html/backend/src/schema/consent-purpose/table.ts.html +547 -0
  106. package/coverage/html/backend/src/schema/consent-record/index.html +131 -0
  107. package/coverage/html/backend/src/schema/consent-record/schema.ts.html +211 -0
  108. package/coverage/html/backend/src/schema/consent-record/table.ts.html +457 -0
  109. package/coverage/html/backend/src/schema/create-registry.ts.html +148 -0
  110. package/coverage/html/backend/src/schema/definition.ts.html +685 -0
  111. package/coverage/html/backend/src/schema/domain/index.html +146 -0
  112. package/coverage/html/backend/src/schema/domain/registry.ts.html +973 -0
  113. package/coverage/html/backend/src/schema/domain/schema.ts.html +214 -0
  114. package/coverage/html/backend/src/schema/domain/table.ts.html +496 -0
  115. package/coverage/html/backend/src/schema/index.html +146 -0
  116. package/coverage/html/backend/src/schema/schemas.ts.html +166 -0
  117. package/coverage/html/backend/src/schema/subject/index.html +146 -0
  118. package/coverage/html/backend/src/schema/subject/registry.ts.html +973 -0
  119. package/coverage/html/backend/src/schema/subject/schema.ts.html +208 -0
  120. package/coverage/html/backend/src/schema/subject/table.ts.html +499 -0
  121. package/coverage/html/backend/src/server.ts.html +475 -0
  122. package/coverage/html/backend/src/testing/contract-testing.ts.html +1348 -0
  123. package/coverage/html/backend/src/testing/index.html +116 -0
  124. package/coverage/html/base.css +224 -0
  125. package/coverage/html/block-navigation.js +87 -0
  126. package/coverage/html/favicon.png +0 -0
  127. package/coverage/html/index.html +626 -0
  128. package/coverage/html/prettify.css +1 -0
  129. package/coverage/html/prettify.js +2 -0
  130. package/coverage/html/sort-arrow-sprite.png +0 -0
  131. package/coverage/html/sorter.js +196 -0
  132. package/dist/contracts/consent/index.d.ts +401 -0
  133. package/dist/contracts/consent/index.d.ts.map +1 -0
  134. package/dist/contracts/consent/index.test.d.ts +2 -0
  135. package/dist/contracts/consent/index.test.d.ts.map +1 -0
  136. package/dist/contracts/consent/post.contract.d.ts +212 -0
  137. package/dist/contracts/consent/post.contract.d.ts.map +1 -0
  138. package/dist/contracts/consent/post.contract.test.d.ts +2 -0
  139. package/dist/contracts/consent/post.contract.test.d.ts.map +1 -0
  140. package/dist/contracts/consent/show-banner.contract.d.ts +45 -0
  141. package/dist/contracts/consent/show-banner.contract.d.ts.map +1 -0
  142. package/dist/contracts/consent/show-banner.contract.test.d.ts +2 -0
  143. package/dist/contracts/consent/show-banner.contract.test.d.ts.map +1 -0
  144. package/dist/contracts/consent/verify.contract.d.ts +147 -0
  145. package/dist/contracts/consent/verify.contract.d.ts.map +1 -0
  146. package/dist/contracts/consent/verify.contract.test.d.ts +2 -0
  147. package/dist/contracts/consent/verify.contract.test.d.ts.map +1 -0
  148. package/dist/contracts/index.d.ts +963 -0
  149. package/dist/contracts/index.d.ts.map +1 -0
  150. package/dist/contracts/meta/index.d.ts +78 -0
  151. package/dist/contracts/meta/index.d.ts.map +1 -0
  152. package/dist/contracts/meta/index.test.d.ts +2 -0
  153. package/dist/contracts/meta/index.test.d.ts.map +1 -0
  154. package/dist/contracts/meta/status.contract.d.ts +77 -0
  155. package/dist/contracts/meta/status.contract.d.ts.map +1 -0
  156. package/dist/contracts/meta/status.contract.test.d.ts +2 -0
  157. package/dist/contracts/meta/status.contract.test.d.ts.map +1 -0
  158. package/dist/contracts/shared/jurisdiction.schema.d.ts +24 -0
  159. package/dist/contracts/shared/jurisdiction.schema.d.ts.map +1 -0
  160. package/dist/core.cjs +3584 -0
  161. package/dist/core.d.ts +533 -76
  162. package/dist/core.d.ts.map +1 -1
  163. package/dist/{index.js → core.js} +1163 -1286
  164. package/dist/handlers/consent/index.d.ts +401 -0
  165. package/dist/handlers/consent/index.d.ts.map +1 -0
  166. package/dist/handlers/consent/post.handler.d.ts +234 -0
  167. package/dist/handlers/consent/post.handler.d.ts.map +1 -0
  168. package/dist/handlers/consent/show-banner.handler.d.ts +57 -0
  169. package/dist/handlers/consent/show-banner.handler.d.ts.map +1 -0
  170. package/dist/handlers/consent/show-banner.handler.test.d.ts +2 -0
  171. package/dist/handlers/consent/show-banner.handler.test.d.ts.map +1 -0
  172. package/dist/handlers/consent/verify.handler.d.ts +169 -0
  173. package/dist/handlers/consent/verify.handler.d.ts.map +1 -0
  174. package/dist/handlers/meta/index.d.ts +78 -0
  175. package/dist/handlers/meta/index.d.ts.map +1 -0
  176. package/dist/handlers/meta/status.handler.d.ts +76 -0
  177. package/dist/handlers/meta/status.handler.d.ts.map +1 -0
  178. package/dist/init.d.ts.map +1 -1
  179. package/dist/pkgs/api-router/hooks/processor.d.ts.map +1 -1
  180. package/dist/pkgs/api-router/types/router-props.d.ts +1 -1
  181. package/dist/pkgs/api-router/types/router-props.d.ts.map +1 -1
  182. package/dist/pkgs/api-router/utils/cors.d.ts +1 -1
  183. package/dist/pkgs/api-router/utils/cors.d.ts.map +1 -1
  184. package/dist/pkgs/data-model/fields/field-types.d.ts +1 -1
  185. package/dist/pkgs/data-model/fields/zod-fields.d.ts +32 -32
  186. package/dist/pkgs/data-model/index.cjs +1433 -1799
  187. package/dist/pkgs/data-model/index.js +20 -385
  188. package/dist/pkgs/data-model/schema/index.cjs +1402 -1768
  189. package/dist/pkgs/data-model/schema/index.js +20 -385
  190. package/dist/pkgs/db-adapters/adapter-factory.d.ts +2 -2
  191. package/dist/pkgs/db-adapters/adapter-factory.d.ts.map +1 -1
  192. package/dist/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.d.ts +4 -4
  193. package/dist/pkgs/db-adapters/adapters/drizzle-adapter/index.cjs +19 -151
  194. package/dist/pkgs/db-adapters/adapters/drizzle-adapter/index.js +19 -151
  195. package/dist/pkgs/db-adapters/adapters/kysely-adapter/dialect.d.ts +1 -1
  196. package/dist/pkgs/db-adapters/adapters/kysely-adapter/index.cjs +17 -149
  197. package/dist/pkgs/db-adapters/adapters/kysely-adapter/index.js +17 -149
  198. package/dist/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.d.ts +2 -2
  199. package/dist/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.d.ts.map +1 -1
  200. package/dist/pkgs/db-adapters/adapters/memory-adapter/index.cjs +17 -149
  201. package/dist/pkgs/db-adapters/adapters/memory-adapter/index.js +17 -149
  202. package/dist/pkgs/db-adapters/adapters/prisma-adapter/index.cjs +19 -151
  203. package/dist/pkgs/db-adapters/adapters/prisma-adapter/index.js +19 -151
  204. package/dist/pkgs/db-adapters/index.cjs +31 -153
  205. package/dist/pkgs/db-adapters/index.js +31 -153
  206. package/dist/pkgs/migrations/get-schema/get-schema.d.ts +2 -2
  207. package/dist/pkgs/migrations/get-schema/index.d.ts +1 -1
  208. package/dist/pkgs/migrations/index.cjs +30 -153
  209. package/dist/pkgs/migrations/index.js +30 -153
  210. package/dist/pkgs/migrations/schema-comparison.d.ts.map +1 -1
  211. package/dist/pkgs/results/core/error-class.d.ts +23 -21
  212. package/dist/pkgs/results/core/error-class.d.ts.map +1 -1
  213. package/dist/pkgs/results/index.cjs +17 -150
  214. package/dist/pkgs/results/index.d.ts +0 -3
  215. package/dist/pkgs/results/index.d.ts.map +1 -1
  216. package/dist/pkgs/results/index.js +17 -138
  217. package/dist/pkgs/results/orpc-error-handler.d.ts +65 -0
  218. package/dist/pkgs/results/orpc-error-handler.d.ts.map +1 -0
  219. package/dist/pkgs/results/types.d.ts +7 -7
  220. package/dist/pkgs/results/types.d.ts.map +1 -1
  221. package/dist/pkgs/types/context.d.ts +15 -4
  222. package/dist/pkgs/types/context.d.ts.map +1 -1
  223. package/dist/pkgs/types/endpoints.d.ts +3 -4
  224. package/dist/pkgs/types/endpoints.d.ts.map +1 -1
  225. package/dist/pkgs/types/options.d.ts +2 -3
  226. package/dist/pkgs/types/options.d.ts.map +1 -1
  227. package/dist/pkgs/types/plugins.d.ts +2 -3
  228. package/dist/pkgs/types/plugins.d.ts.map +1 -1
  229. package/dist/pkgs/utils/index.d.ts +1 -0
  230. package/dist/pkgs/utils/index.d.ts.map +1 -1
  231. package/dist/pkgs/utils/logger.d.ts +16 -0
  232. package/dist/pkgs/utils/logger.d.ts.map +1 -0
  233. package/dist/router.cjs +1213 -0
  234. package/dist/router.d.ts +480 -0
  235. package/dist/router.d.ts.map +1 -0
  236. package/dist/router.js +1169 -0
  237. package/dist/schema/audit-log/table.d.ts +1 -1
  238. package/dist/schema/consent/table.d.ts +1 -1
  239. package/dist/schema/consent-policy/registry.d.ts +12 -12
  240. package/dist/schema/consent-policy/schema.d.ts +6 -6
  241. package/dist/schema/consent-policy/table.d.ts +7 -7
  242. package/dist/schema/consent-purpose/registry.d.ts +6 -6
  243. package/dist/schema/consent-purpose/schema.d.ts +6 -6
  244. package/dist/schema/consent-purpose/table.d.ts +7 -7
  245. package/dist/schema/consent-record/table.d.ts +1 -1
  246. package/dist/schema/create-registry.d.ts +32 -32
  247. package/dist/schema/definition.d.ts +19 -19
  248. package/dist/schema/domain/registry.d.ts +10 -10
  249. package/dist/schema/domain/schema.d.ts +5 -5
  250. package/dist/schema/domain/table.d.ts +6 -6
  251. package/dist/schema/index.cjs +1409 -1775
  252. package/dist/schema/index.js +20 -385
  253. package/dist/schema/schemas.d.ts +19 -19
  254. package/dist/schema/subject/registry.d.ts +4 -4
  255. package/dist/schema/subject/schema.d.ts +2 -2
  256. package/dist/schema/subject/table.d.ts +3 -3
  257. package/dist/server.d.ts +2 -0
  258. package/dist/server.d.ts.map +1 -0
  259. package/dist/testing/contract-testing.d.ts +37 -0
  260. package/dist/testing/contract-testing.d.ts.map +1 -0
  261. package/dist/types/context.d.ts +1 -1
  262. package/dist/types/index.d.ts +2 -2
  263. package/dist/types/options.d.ts +33 -2
  264. package/dist/types/options.d.ts.map +1 -1
  265. package/dist/types/plugins.d.ts +3 -4
  266. package/dist/types/plugins.d.ts.map +1 -1
  267. package/package.json +22 -30
  268. package/rslib.config.ts +2 -5
  269. package/src/contracts/consent/index.test.ts +5 -0
  270. package/src/contracts/consent/index.ts +9 -0
  271. package/src/contracts/consent/post.contract.test.ts +526 -0
  272. package/src/contracts/consent/post.contract.ts +160 -0
  273. package/src/contracts/consent/show-banner.contract.test.ts +214 -0
  274. package/src/contracts/consent/show-banner.contract.ts +45 -0
  275. package/src/contracts/consent/verify.contract.test.ts +185 -0
  276. package/src/contracts/consent/verify.contract.ts +126 -0
  277. package/src/contracts/index.ts +18 -0
  278. package/src/contracts/meta/index.test.ts +5 -0
  279. package/src/contracts/meta/index.ts +5 -0
  280. package/src/contracts/meta/status.contract.test.ts +338 -0
  281. package/src/contracts/meta/status.contract.ts +37 -0
  282. package/src/contracts/shared/jurisdiction.schema.ts +30 -0
  283. package/src/core.ts +451 -159
  284. package/src/handlers/consent/index.ts +9 -0
  285. package/src/handlers/consent/post.handler.ts +273 -0
  286. package/src/handlers/consent/show-banner.handler.test.ts +148 -0
  287. package/src/handlers/consent/show-banner.handler.ts +150 -0
  288. package/src/handlers/consent/verify.handler.ts +305 -0
  289. package/src/handlers/meta/index.ts +5 -0
  290. package/src/handlers/meta/status.handler.ts +47 -0
  291. package/src/init.ts +8 -5
  292. package/src/pkgs/api-router/hooks/__tests__/processor.test.ts +6 -0
  293. package/src/pkgs/api-router/hooks/processor.ts +2 -0
  294. package/src/pkgs/api-router/types/router-props.ts +1 -1
  295. package/src/pkgs/api-router/utils/cors.ts +1 -1
  296. package/src/pkgs/data-model/fields/field-types.ts +1 -1
  297. package/src/pkgs/data-model/fields/id-generator.ts +1 -1
  298. package/src/pkgs/db-adapters/README.md +3 -3
  299. package/src/pkgs/db-adapters/adapter-factory.ts +8 -4
  300. package/src/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.ts +13 -13
  301. package/src/pkgs/db-adapters/adapters/kysely-adapter/dialect.ts +1 -1
  302. package/src/pkgs/db-adapters/adapters/kysely-adapter/tests/postgres.test.ts +1 -1
  303. package/src/pkgs/db-adapters/adapters/kysely-adapter/tests/sqlite.test.ts +1 -1
  304. package/src/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.ts +2 -2
  305. package/src/pkgs/migrations/get-migration.ts +3 -3
  306. package/src/pkgs/migrations/get-schema/get-schema.ts +2 -2
  307. package/src/pkgs/migrations/get-schema/index.ts +1 -1
  308. package/src/pkgs/migrations/migration-builders.ts +2 -2
  309. package/src/pkgs/migrations/migration-execution.ts +2 -2
  310. package/src/pkgs/migrations/schema-comparison.ts +5 -4
  311. package/src/pkgs/results/__tests__/error-class.test.ts +8 -7
  312. package/src/pkgs/results/core/error-class.ts +31 -43
  313. package/src/pkgs/results/index.ts +0 -10
  314. package/src/pkgs/results/orpc-error-handler.ts +137 -0
  315. package/src/pkgs/results/types.ts +8 -7
  316. package/src/pkgs/types/context.ts +18 -4
  317. package/src/pkgs/types/endpoints.ts +3 -5
  318. package/src/pkgs/types/options.ts +2 -3
  319. package/src/pkgs/types/plugins.ts +2 -3
  320. package/src/pkgs/utils/index.ts +1 -0
  321. package/src/pkgs/utils/logger.ts +38 -0
  322. package/src/router.ts +8 -0
  323. package/src/schema/audit-log/table.ts +1 -1
  324. package/src/schema/consent/table.ts +1 -1
  325. package/src/schema/consent-policy/table.ts +1 -1
  326. package/src/schema/consent-purpose/table.ts +1 -1
  327. package/src/schema/consent-record/table.ts +1 -1
  328. package/src/schema/definition.ts +2 -2
  329. package/src/schema/domain/table.ts +1 -1
  330. package/src/schema/subject/table.ts +1 -1
  331. package/src/server.ts +130 -0
  332. package/src/testing/contract-testing.ts +437 -0
  333. package/src/types/context.ts +1 -1
  334. package/src/types/index.ts +2 -2
  335. package/src/types/options.ts +38 -2
  336. package/src/types/plugins.ts +3 -4
  337. package/dist/index.cjs +0 -3701
  338. package/dist/index.d.ts +0 -11
  339. package/dist/index.d.ts.map +0 -1
  340. package/dist/init.test.d.ts +0 -2
  341. package/dist/init.test.d.ts.map +0 -1
  342. package/dist/integrations/cloudflare.cjs +0 -312
  343. package/dist/integrations/cloudflare.d.ts +0 -32
  344. package/dist/integrations/cloudflare.d.ts.map +0 -1
  345. package/dist/integrations/cloudflare.js +0 -278
  346. package/dist/integrations/next.cjs +0 -276
  347. package/dist/integrations/next.d.ts +0 -68
  348. package/dist/integrations/next.d.ts.map +0 -1
  349. package/dist/integrations/next.js +0 -239
  350. package/dist/integrations/node.cjs +0 -257
  351. package/dist/integrations/node.d.ts +0 -29
  352. package/dist/integrations/node.d.ts.map +0 -1
  353. package/dist/integrations/node.js +0 -223
  354. package/dist/pkgs/api-router/index.d.ts +0 -9
  355. package/dist/pkgs/api-router/index.d.ts.map +0 -1
  356. package/dist/pkgs/api-router/utils/define-route.d.ts +0 -87
  357. package/dist/pkgs/api-router/utils/define-route.d.ts.map +0 -1
  358. package/dist/pkgs/logger/__tests__/console-formatter.test.d.ts +0 -2
  359. package/dist/pkgs/logger/__tests__/console-formatter.test.d.ts.map +0 -1
  360. package/dist/pkgs/logger/__tests__/integration.test.d.ts +0 -2
  361. package/dist/pkgs/logger/__tests__/integration.test.d.ts.map +0 -1
  362. package/dist/pkgs/logger/__tests__/log-levels.test.d.ts +0 -2
  363. package/dist/pkgs/logger/__tests__/log-levels.test.d.ts.map +0 -1
  364. package/dist/pkgs/logger/__tests__/logger-factory.test.d.ts +0 -2
  365. package/dist/pkgs/logger/__tests__/logger-factory.test.d.ts.map +0 -1
  366. package/dist/pkgs/logger/__tests__/result-logging.test.d.ts +0 -2
  367. package/dist/pkgs/logger/__tests__/result-logging.test.d.ts.map +0 -1
  368. package/dist/pkgs/logger/__tests__/types.test.d.ts +0 -2
  369. package/dist/pkgs/logger/__tests__/types.test.d.ts.map +0 -1
  370. package/dist/pkgs/logger/console-formatter.d.ts +0 -56
  371. package/dist/pkgs/logger/console-formatter.d.ts.map +0 -1
  372. package/dist/pkgs/logger/index.cjs +0 -240
  373. package/dist/pkgs/logger/index.d.ts +0 -35
  374. package/dist/pkgs/logger/index.d.ts.map +0 -1
  375. package/dist/pkgs/logger/index.js +0 -185
  376. package/dist/pkgs/logger/log-levels.d.ts +0 -29
  377. package/dist/pkgs/logger/log-levels.d.ts.map +0 -1
  378. package/dist/pkgs/logger/logger-factory.d.ts +0 -42
  379. package/dist/pkgs/logger/logger-factory.d.ts.map +0 -1
  380. package/dist/pkgs/logger/result-logging.d.ts +0 -71
  381. package/dist/pkgs/logger/result-logging.d.ts.map +0 -1
  382. package/dist/pkgs/logger/telemetry.d.ts +0 -14
  383. package/dist/pkgs/logger/telemetry.d.ts.map +0 -1
  384. package/dist/pkgs/logger/types.d.ts +0 -121
  385. package/dist/pkgs/logger/types.d.ts.map +0 -1
  386. package/dist/pkgs/results/__tests__/retrieval-pipeline.test.d.ts +0 -2
  387. package/dist/pkgs/results/__tests__/retrieval-pipeline.test.d.ts.map +0 -1
  388. package/dist/pkgs/results/__tests__/validation-pipeline.test.d.ts +0 -2
  389. package/dist/pkgs/results/__tests__/validation-pipeline.test.d.ts.map +0 -1
  390. package/dist/pkgs/results/h3-integration.d.ts +0 -52
  391. package/dist/pkgs/results/h3-integration.d.ts.map +0 -1
  392. package/dist/pkgs/results/pipeline/retrieval-pipeline.d.ts +0 -101
  393. package/dist/pkgs/results/pipeline/retrieval-pipeline.d.ts.map +0 -1
  394. package/dist/pkgs/results/pipeline/validation-pipeline.d.ts +0 -89
  395. package/dist/pkgs/results/pipeline/validation-pipeline.d.ts.map +0 -1
  396. package/dist/response-types.d.ts +0 -19
  397. package/dist/response-types.d.ts.map +0 -1
  398. package/dist/routes/__test__/index.test.d.ts +0 -17
  399. package/dist/routes/__test__/index.test.d.ts.map +0 -1
  400. package/dist/routes/__test__/set-consent.test.d.ts +0 -2
  401. package/dist/routes/__test__/set-consent.test.d.ts.map +0 -1
  402. package/dist/routes/__test__/show-consent-banner.test.d.ts +0 -2
  403. package/dist/routes/__test__/show-consent-banner.test.d.ts.map +0 -1
  404. package/dist/routes/__test__/status.test.d.ts +0 -2
  405. package/dist/routes/__test__/status.test.d.ts.map +0 -1
  406. package/dist/routes/__test__/verify-consent.test.d.ts +0 -2
  407. package/dist/routes/__test__/verify-consent.test.d.ts.map +0 -1
  408. package/dist/routes/index.d.ts +0 -3
  409. package/dist/routes/index.d.ts.map +0 -1
  410. package/dist/routes/set-consent.d.ts +0 -89
  411. package/dist/routes/set-consent.d.ts.map +0 -1
  412. package/dist/routes/show-consent-banner.d.ts +0 -15
  413. package/dist/routes/show-consent-banner.d.ts.map +0 -1
  414. package/dist/routes/status.d.ts +0 -44
  415. package/dist/routes/status.d.ts.map +0 -1
  416. package/dist/routes/types.d.ts +0 -7
  417. package/dist/routes/types.d.ts.map +0 -1
  418. package/dist/routes/verify-consent.d.ts +0 -38
  419. package/dist/routes/verify-consent.d.ts.map +0 -1
  420. package/src/docs/ADVANCED_JSON_HANDLING.md +0 -99
  421. package/src/docs/neverthrow.md +0 -171
  422. package/src/index.ts +0 -34
  423. package/src/init.test.ts +0 -219
  424. package/src/integrations/cloudflare.ts +0 -269
  425. package/src/integrations/next.ts +0 -204
  426. package/src/integrations/node.ts +0 -141
  427. package/src/pkgs/api-router/index.ts +0 -148
  428. package/src/pkgs/api-router/types/h3.d.ts +0 -42
  429. package/src/pkgs/api-router/utils/define-route.ts +0 -410
  430. package/src/pkgs/logger/README.md +0 -213
  431. package/src/pkgs/logger/__tests__/console-formatter.test.ts +0 -67
  432. package/src/pkgs/logger/__tests__/integration.test.ts +0 -184
  433. package/src/pkgs/logger/__tests__/log-levels.test.ts +0 -77
  434. package/src/pkgs/logger/__tests__/logger-factory.test.ts +0 -156
  435. package/src/pkgs/logger/__tests__/result-logging.test.ts +0 -209
  436. package/src/pkgs/logger/__tests__/types.test.ts +0 -94
  437. package/src/pkgs/logger/console-formatter.ts +0 -75
  438. package/src/pkgs/logger/doc.md +0 -569
  439. package/src/pkgs/logger/index.ts +0 -59
  440. package/src/pkgs/logger/log-levels.ts +0 -46
  441. package/src/pkgs/logger/logger-factory.ts +0 -121
  442. package/src/pkgs/logger/result-logging.ts +0 -134
  443. package/src/pkgs/logger/telemetry.ts +0 -96
  444. package/src/pkgs/logger/types.ts +0 -138
  445. package/src/pkgs/results/__tests__/retrieval-pipeline.test.ts +0 -157
  446. package/src/pkgs/results/__tests__/validation-pipeline.test.ts +0 -151
  447. package/src/pkgs/results/h3-integration.ts +0 -142
  448. package/src/pkgs/results/pipeline/retrieval-pipeline.ts +0 -188
  449. package/src/pkgs/results/pipeline/validation-pipeline.ts +0 -164
  450. package/src/plugins/.keep +0 -0
  451. package/src/response-types.ts +0 -29
  452. package/src/routes/__test__/index.test.ts +0 -112
  453. package/src/routes/__test__/set-consent.test.ts +0 -242
  454. package/src/routes/__test__/show-consent-banner.test.ts +0 -98
  455. package/src/routes/__test__/status.test.ts +0 -64
  456. package/src/routes/__test__/verify-consent.test.ts +0 -266
  457. package/src/routes/index.ts +0 -12
  458. package/src/routes/set-consent.ts +0 -249
  459. package/src/routes/show-consent-banner.ts +0 -131
  460. package/src/routes/status.ts +0 -61
  461. package/src/routes/types.ts +0 -7
  462. package/src/routes/verify-consent.ts +0 -206
@@ -1,121 +0,0 @@
1
- import { formatMessage } from './console-formatter';
2
- import { levels, shouldPublishLog } from './log-levels';
3
- import { withLogSpan } from './telemetry';
4
- import type { LogEntry, LogLevel, Logger, LoggerOptions } from './types';
5
-
6
- /**
7
- * Creates a configured logger instance with methods for each log level.
8
- *
9
- * @param options - Configuration options for the logger or an existing logger instance
10
- * @returns An object with methods for each log level
11
- *
12
- * @example
13
- * ```ts
14
- * // Create a logger that only shows warnings and errors
15
- * const logger = createLogger({ level: 'warn', appName: 'c15t' });
16
- *
17
- * // These will be output
18
- * logger.error('This is an error');
19
- * logger.warn('This is a warning');
20
- *
21
- * // These will be suppressed
22
- * logger.info('This info won\'t be shown');
23
- * logger.debug('This debug message won\'t be shown');
24
- * ```
25
- *
26
- * @public
27
- */
28
- export const createLogger = (options?: LoggerOptions | Logger): Logger => {
29
- // If options is already a Logger instance, return it
30
- if (
31
- options &&
32
- typeof options === 'object' &&
33
- levels.every((level) => typeof (options as Logger)[level] === 'function')
34
- ) {
35
- return options as Logger;
36
- }
37
-
38
- // Otherwise, treat options as LoggerOptions
39
- const loggerOptions = options as LoggerOptions;
40
- const enabled = loggerOptions?.disabled !== true;
41
- const logLevel = loggerOptions?.level ?? 'error';
42
- const appName = loggerOptions?.appName ?? 'c15t';
43
-
44
- /**
45
- * Internal function that handles the actual logging logic.
46
- *
47
- * @param level - The severity level of the log
48
- * @param message - The message to log
49
- * @param args - Additional data to include in the log
50
- *
51
- * @internal
52
- */
53
- const logFunc = async (
54
- level: LogLevel,
55
- message: string,
56
- args: unknown[] = []
57
- ): Promise<void> => {
58
- if (!enabled || !shouldPublishLog(logLevel, level)) {
59
- return;
60
- }
61
-
62
- await withLogSpan(level, message, args, async () => {
63
- const formattedMessage = formatMessage(level, message, appName);
64
-
65
- if (!loggerOptions || typeof loggerOptions.log !== 'function') {
66
- if (level === 'error') {
67
- // biome-ignore lint/suspicious/noConsole: Logger implementation
68
- console.error(formattedMessage, ...args);
69
- } else if (level === 'warn') {
70
- // biome-ignore lint/suspicious/noConsole: Logger implementation
71
- console.warn(formattedMessage, ...args);
72
- } else if (level === 'info') {
73
- // biome-ignore lint/suspicious/noConsole: Logger implementation
74
- // biome-ignore lint/suspicious/noConsoleLog: Logger implementation
75
- console.log(formattedMessage, ...args);
76
- } else if (level === 'debug') {
77
- // biome-ignore lint/suspicious/noConsole: Logger implementation
78
- console.debug(formattedMessage, ...args);
79
- } else if (level === 'success') {
80
- // biome-ignore lint/suspicious/noConsole: Logger implementation
81
- // biome-ignore lint/suspicious/noConsoleLog: Logger implementation
82
- console.log(formattedMessage, ...args);
83
- }
84
- return;
85
- }
86
-
87
- loggerOptions.log(level === 'success' ? 'info' : level, message, ...args);
88
- });
89
- };
90
-
91
- return Object.fromEntries(
92
- levels.map((level) => [
93
- level,
94
- (...[message, ...args]: LogEntry) => {
95
- // Return the promise but don't await it
96
- return logFunc(level, message, args).catch((error) => {
97
- // biome-ignore lint/suspicious/noConsole: <explanation>
98
- console.error('Logger error:', error);
99
- });
100
- },
101
- ])
102
- ) as unknown as Logger;
103
- };
104
-
105
- /**
106
- * Default logger instance with standard configuration.
107
- *
108
- * @remarks
109
- * Ready-to-use logger with default settings (logs errors only).
110
- *
111
- * @example
112
- * ```ts
113
- * import { logger } from '@doubletie/logger';
114
- *
115
- * logger.error('Something went wrong');
116
- * logger.info('This won\'t be shown with default settings');
117
- * ```
118
- *
119
- * @public
120
- */
121
- export const logger = createLogger();
@@ -1,134 +0,0 @@
1
- import { SpanStatusCode } from '@opentelemetry/api';
2
- import type { Result, ResultAsync } from 'neverthrow';
3
- import { getTracer } from './telemetry';
4
- import type { LoggableError } from './types';
5
-
6
- /**
7
- * Logs any errors in a Result without changing the Result.
8
- *
9
- * @remarks
10
- * This utility function allows logging errors from a Result type without
11
- * affecting the Result's flow. It uses the mapErr function to extract
12
- * and log the error if present, then returns the original Result.
13
- *
14
- * @typeParam ValueType - The type of the successful value in the Result
15
- * @typeParam ErrorType - The type of the error in the Result, must extend LoggableError
16
- *
17
- * @param result - The Result that may contain an error
18
- * @param logger - Logger instance with an error method
19
- * @param message - Optional message prefix for the error
20
- * @returns The original Result unchanged
21
- *
22
- * @example
23
- * ```ts
24
- * import { logResult } from '@doubletie/logger';
25
- * import { createLogger } from '@doubletie/logger';
26
- * import { ok, err } from 'neverthrow';
27
- *
28
- * const logger = createLogger();
29
- * const result = err({ message: 'Failed operation', code: 'OP_FAILED' });
30
- *
31
- * // Log the error but continue processing the Result
32
- * const processedResult = logResult(result, logger);
33
- * ```
34
- *
35
- * @public
36
- */
37
- export const logResult = <ValueType, ErrorType extends LoggableError>(
38
- result: Result<ValueType, ErrorType>,
39
- logger: { error: (message: string, ...args: unknown[]) => void },
40
- message = 'Error occurred:'
41
- ): Result<ValueType, ErrorType> => {
42
- const tracer = getTracer();
43
- const span = tracer.startSpan('log_result');
44
-
45
- return result.mapErr((error) => {
46
- span.setAttributes({
47
- 'error.message': error.message,
48
- 'error.code': error.code,
49
- 'error.status': error.status,
50
- 'error.category': error.category,
51
- 'error.has_meta': !!error.meta,
52
- });
53
- span.setStatus({
54
- code: SpanStatusCode.ERROR,
55
- message: error.message,
56
- });
57
-
58
- logger.error(`${message} ${error.message}`, {
59
- code: error.code,
60
- status: error.status,
61
- meta: error.meta,
62
- category: error.category,
63
- stack: error.stack,
64
- });
65
-
66
- span.end();
67
- return error;
68
- });
69
- };
70
-
71
- /**
72
- * Logs any errors in a ResultAsync without changing the ResultAsync.
73
- *
74
- * @remarks
75
- * This utility function allows logging errors from a ResultAsync type without
76
- * affecting the ResultAsync's flow. It uses the mapErr function to extract
77
- * and log the error if present, then returns the original ResultAsync.
78
- *
79
- * @typeParam ValueType - The type of the successful value in the ResultAsync
80
- * @typeParam ErrorType - The type of the error in the ResultAsync, must extend LoggableError
81
- *
82
- * @param resultAsync - The ResultAsync that may contain an error
83
- * @param logger - Logger instance with an error method
84
- * @param message - Optional message prefix for the error
85
- * @returns The original ResultAsync unchanged
86
- *
87
- * @example
88
- * ```ts
89
- * import { logResultAsync } from '@doubletie/logger';
90
- * import { createLogger } from '@doubletie/logger';
91
- * import { okAsync, errAsync } from 'neverthrow';
92
- *
93
- * const logger = createLogger();
94
- * const resultAsync = errAsync({ message: 'Failed async operation', code: 'ASYNC_FAILED' });
95
- *
96
- * // Log the error but continue processing the ResultAsync
97
- * const processedResultAsync = logResultAsync(resultAsync, logger);
98
- * ```
99
- *
100
- * @public
101
- */
102
- export const logResultAsync = <ValueType, ErrorType extends LoggableError>(
103
- resultAsync: ResultAsync<ValueType, ErrorType>,
104
- logger: { error: (message: string, ...args: unknown[]) => void },
105
- message = 'Error occurred:'
106
- ): ResultAsync<ValueType, ErrorType> => {
107
- const tracer = getTracer();
108
- const span = tracer.startSpan('log_result_async');
109
-
110
- return resultAsync.mapErr((error) => {
111
- span.setAttributes({
112
- 'error.message': error.message,
113
- 'error.code': error.code,
114
- 'error.status': error.status,
115
- 'error.category': error.category,
116
- 'error.has_meta': !!error.meta,
117
- });
118
- span.setStatus({
119
- code: SpanStatusCode.ERROR,
120
- message: error.message,
121
- });
122
-
123
- logger.error(`${message} ${error.message}`, {
124
- code: error.code,
125
- status: error.status,
126
- meta: error.meta,
127
- category: error.category,
128
- stack: error.stack,
129
- });
130
-
131
- span.end();
132
- return error;
133
- });
134
- };
@@ -1,96 +0,0 @@
1
- import { SpanStatusCode, trace } from '@opentelemetry/api';
2
- import type { LogLevel, LoggerOptions } from './types';
3
-
4
- const LOGGER_TRACER_NAME = '@doubletie/logger';
5
-
6
- /**
7
- * Maps log levels to OpenTelemetry span status codes
8
- */
9
- const LOG_LEVEL_TO_SPAN_STATUS: Record<LogLevel, SpanStatusCode> = {
10
- error: SpanStatusCode.ERROR,
11
- warn: SpanStatusCode.OK,
12
- info: SpanStatusCode.OK,
13
- success: SpanStatusCode.OK,
14
- debug: SpanStatusCode.OK,
15
- };
16
-
17
- /**
18
- * Gets or creates a tracer for the logger package
19
- */
20
- export const getTracer = (options?: LoggerOptions) => {
21
- if (options?.telemetry?.tracer) {
22
- return options.telemetry.tracer;
23
- }
24
- return trace.getTracer(LOGGER_TRACER_NAME);
25
- };
26
-
27
- /**
28
- * Creates a span for a log entry and sets appropriate attributes
29
- */
30
- export const createLogSpan = (
31
- level: LogLevel,
32
- message: string,
33
- args: unknown[] = [],
34
- options?: LoggerOptions
35
- ) => {
36
- if (options?.telemetry?.disabled) {
37
- return null;
38
- }
39
-
40
- const tracer = getTracer(options);
41
- const span = tracer.startSpan('log_entry', {
42
- attributes: {
43
- 'log.level': level,
44
- 'log.message': message,
45
- 'log.has_args': args.length > 0,
46
- ...(options?.telemetry?.defaultAttributes || {}),
47
- },
48
- });
49
-
50
- // Add any structured data as span attributes
51
- if (args.length > 0 && typeof args[0] === 'object' && args[0] !== null) {
52
- const data = args[0] as Record<string, unknown>;
53
- for (const [key, value] of Object.entries(data)) {
54
- if (value !== undefined && value !== null) {
55
- span.setAttribute(`log.data.${key}`, String(value));
56
- }
57
- }
58
- }
59
-
60
- // Set span status based on log level
61
- span.setStatus({
62
- code: LOG_LEVEL_TO_SPAN_STATUS[level],
63
- message: level === 'error' || level === 'warn' ? message : undefined,
64
- });
65
-
66
- return span;
67
- };
68
-
69
- /**
70
- * Wraps a logging operation in a span
71
- */
72
- export const withLogSpan = async <T>(
73
- level: LogLevel,
74
- message: string,
75
- args: unknown[],
76
- operation: () => T | Promise<T>,
77
- options?: LoggerOptions
78
- ): Promise<T> => {
79
- const span = createLogSpan(level, message, args, options);
80
- if (!span) {
81
- return operation();
82
- }
83
-
84
- try {
85
- const result = await operation();
86
- return result;
87
- } catch (error) {
88
- span.setStatus({
89
- code: SpanStatusCode.ERROR,
90
- message: error instanceof Error ? error.message : String(error),
91
- });
92
- throw error;
93
- } finally {
94
- span.end();
95
- }
96
- };
@@ -1,138 +0,0 @@
1
- import type { Tracer } from '@opentelemetry/api';
2
-
3
- /**
4
- * Represents the available log severity levels.
5
- *
6
- * @remarks
7
- * These levels determine the priority and visibility of log messages.
8
- * The order from highest to lowest severity is:
9
- * error > warn > info > success > debug
10
- *
11
- * @public
12
- */
13
- export type LogLevel = 'info' | 'success' | 'warn' | 'error' | 'debug';
14
-
15
- /**
16
- * Configuration interface for logger instances.
17
- *
18
- * @remarks
19
- * Provides options to customize logger behavior including
20
- * disabling logs, setting log levels, and custom log handlers.
21
- *
22
- * @public
23
- */
24
- export interface LoggerOptions {
25
- /**
26
- * Whether logging is disabled.
27
- *
28
- * @remarks
29
- * When true, no logs will be published regardless of log level.
30
- */
31
- disabled?: boolean;
32
-
33
- /**
34
- * The minimum log level to publish.
35
- *
36
- * @remarks
37
- * Only logs with this level or higher severity will be published.
38
- * Note that 'success' is treated as 'info' when using custom log handlers.
39
- */
40
- level?: Exclude<LogLevel, 'success'>;
41
-
42
- /**
43
- * Custom log handler function.
44
- *
45
- * @remarks
46
- * When provided, this function will be called instead of console methods.
47
- *
48
- * @param level - The severity level of the log message
49
- * @param message - The message to log
50
- * @param args - Additional data to include in the log
51
- */
52
- log?: (level: LogLevel, message: string, ...args: unknown[]) => void;
53
-
54
- /**
55
- * Custom application name to display in log messages.
56
- *
57
- * @remarks
58
- * When provided, this will override the default app name in the log format.
59
- *
60
- * @default '🪢 doubletie'
61
- */
62
- appName?: string;
63
-
64
- /**
65
- * OpenTelemetry configuration options
66
- */
67
- telemetry?: {
68
- /**
69
- * Custom tracer to use for OpenTelemetry integration
70
- */
71
- tracer?: Tracer;
72
-
73
- /**
74
- * Whether to disable OpenTelemetry tracing
75
- */
76
- disabled?: boolean;
77
-
78
- /**
79
- * Additional attributes to add to all spans
80
- */
81
- defaultAttributes?: Record<string, string | number | boolean>;
82
- };
83
- }
84
-
85
- /**
86
- * Type representing the parameters for log handlers.
87
- *
88
- * @remarks
89
- * This utility type extracts parameter types from the Logger.log function,
90
- * excluding the first parameter (log level).
91
- *
92
- * @internal
93
- */
94
- export type LogEntry = Parameters<NonNullable<LoggerOptions['log']>> extends [
95
- LogLevel,
96
- ...infer Rest,
97
- ]
98
- ? Rest
99
- : never;
100
-
101
- /**
102
- * Type representing a logger instance with methods for each log level.
103
- *
104
- * @remarks
105
- * Each method corresponds to a log level and accepts a message and optional arguments.
106
- *
107
- * @public
108
- */
109
- export type Logger = Record<LogLevel, (...params: LogEntry) => void>;
110
-
111
- /**
112
- * Base error interface that must be implemented by errors used with the logger.
113
- *
114
- * @remarks
115
- * This interface defines the minimum properties an error object should have
116
- * to work properly with the logging utilities.
117
- *
118
- * @public
119
- */
120
- export interface LoggableError {
121
- /** The error message */
122
- message: string;
123
-
124
- /** Optional error code */
125
- code?: string | number;
126
-
127
- /** Optional HTTP status code */
128
- status?: number;
129
-
130
- /** Optional additional error metadata */
131
- meta?: Record<string, unknown>;
132
-
133
- /** Optional error category */
134
- category?: string;
135
-
136
- /** Error stack trace */
137
- stack?: string;
138
- }
@@ -1,157 +0,0 @@
1
- import { beforeEach, describe, expect, it, vi } from 'vitest';
2
- import { DoubleTieError } from '../core/error-class';
3
- import { ERROR_CODES } from '../core/error-codes';
4
- import { retrievalPipeline } from '../pipeline/retrieval-pipeline';
5
-
6
- describe('retrievalPipeline', () => {
7
- // Setup test data
8
- const mockUser = { id: '123', name: 'John Doe', email: 'john@example.com' };
9
-
10
- // Mock fetcher and transformer functions
11
- let fetcher: ReturnType<typeof vi.fn>;
12
- let transformer: ReturnType<typeof vi.fn>;
13
-
14
- beforeEach(() => {
15
- fetcher = vi.fn();
16
- transformer = vi.fn().mockImplementation((data) => ({
17
- ...data,
18
- displayName: `${data.name} <${data.email}>`,
19
- }));
20
- });
21
-
22
- it('should return a function that returns a ResultAsync', () => {
23
- fetcher.mockResolvedValue(mockUser);
24
-
25
- const retrieveUser = retrievalPipeline(fetcher, transformer);
26
-
27
- expect(typeof retrieveUser).toBe('function');
28
-
29
- const result = retrieveUser();
30
- expect(result).toHaveProperty('then');
31
- expect(result).toHaveProperty('map');
32
- expect(result).toHaveProperty('mapErr');
33
- });
34
-
35
- it('should transform data successfully when fetcher resolves', async () => {
36
- fetcher.mockResolvedValue(mockUser);
37
-
38
- const retrieveUser = retrievalPipeline(fetcher, transformer);
39
- const result = await retrieveUser();
40
-
41
- expect(result.isOk()).toBe(true);
42
- expect(result._unsafeUnwrap()).toEqual({
43
- id: '123',
44
- name: 'John Doe',
45
- email: 'john@example.com',
46
- displayName: 'John Doe <john@example.com>',
47
- });
48
-
49
- // Verify fetcher and transformer were called correctly
50
- expect(fetcher).toHaveBeenCalledTimes(1);
51
- expect(transformer).toHaveBeenCalledWith(mockUser);
52
- });
53
-
54
- it('should return a not found error when fetcher resolves with null', async () => {
55
- fetcher.mockResolvedValue(null);
56
-
57
- const retrieveUser = retrievalPipeline(fetcher, transformer);
58
- const result = await retrieveUser();
59
-
60
- expect(result.isErr()).toBe(true);
61
- const error = result._unsafeUnwrapErr();
62
-
63
- expect(error).toBeInstanceOf(DoubleTieError);
64
- expect(error.code).toBe(ERROR_CODES.NOT_FOUND);
65
- expect(error.statusCode).toBe(404);
66
- expect(error.message).toBe('Resource not found');
67
-
68
- // Verify fetcher was called but transformer wasn't
69
- expect(fetcher).toHaveBeenCalledTimes(1);
70
- expect(transformer).not.toHaveBeenCalled();
71
- });
72
-
73
- it('should return a not found error when fetcher resolves with undefined', async () => {
74
- fetcher.mockResolvedValue(undefined);
75
-
76
- const retrieveUser = retrievalPipeline(fetcher, transformer);
77
- const result = await retrieveUser();
78
-
79
- expect(result.isErr()).toBe(true);
80
- const error = result._unsafeUnwrapErr();
81
-
82
- expect(error).toBeInstanceOf(DoubleTieError);
83
- expect(error.code).toBe(ERROR_CODES.NOT_FOUND);
84
- expect(error.statusCode).toBe(404);
85
- });
86
-
87
- it('should return a not found error when fetcher rejects with not found message', async () => {
88
- const notFoundError = new Error('Resource not found');
89
- fetcher.mockRejectedValue(notFoundError);
90
-
91
- const retrieveUser = retrievalPipeline(fetcher, transformer);
92
- const result = await retrieveUser();
93
-
94
- expect(result.isErr()).toBe(true);
95
- const error = result._unsafeUnwrapErr();
96
-
97
- expect(error).toBeInstanceOf(DoubleTieError);
98
- expect(error.code).toBe(ERROR_CODES.NOT_FOUND);
99
- expect(error.statusCode).toBe(404);
100
- expect(error.cause).toBe(notFoundError);
101
- });
102
-
103
- it('should return a bad request error when fetcher rejects with other error', async () => {
104
- const connectionError = new Error('Database connection failed');
105
- fetcher.mockRejectedValue(connectionError);
106
-
107
- const retrieveUser = retrievalPipeline(fetcher, transformer);
108
- const result = await retrieveUser();
109
-
110
- expect(result.isErr()).toBe(true);
111
- const error = result._unsafeUnwrapErr();
112
-
113
- expect(error).toBeInstanceOf(DoubleTieError);
114
- expect(error.code).toBe(ERROR_CODES.BAD_REQUEST);
115
- expect(error.statusCode).toBe(400);
116
- expect(error.cause).toBe(connectionError);
117
- });
118
-
119
- it('should use a custom error code when provided', async () => {
120
- const notFoundError = new Error('Record not found');
121
- fetcher.mockRejectedValue(notFoundError);
122
-
123
- const customErrorCode = 'CUSTOM_NOT_FOUND_ERROR';
124
- const retrieveUser = retrievalPipeline(
125
- fetcher,
126
- transformer,
127
- customErrorCode
128
- );
129
- const result = await retrieveUser();
130
-
131
- expect(result.isErr()).toBe(true);
132
- const error = result._unsafeUnwrapErr();
133
-
134
- expect(error).toBeInstanceOf(DoubleTieError);
135
- expect(error.code).toBe(customErrorCode);
136
- });
137
-
138
- it('should return a bad request error when transformer throws', async () => {
139
- fetcher.mockResolvedValue(mockUser);
140
-
141
- const transformerError = new Error('Transformation failed');
142
- transformer.mockImplementation(() => {
143
- throw transformerError;
144
- });
145
-
146
- const retrieveUser = retrievalPipeline(fetcher, transformer);
147
- const result = await retrieveUser();
148
-
149
- expect(result.isErr()).toBe(true);
150
- const error = result._unsafeUnwrapErr();
151
-
152
- expect(error).toBeInstanceOf(DoubleTieError);
153
- expect(error.code).toBe(ERROR_CODES.BAD_REQUEST);
154
- expect(error.statusCode).toBe(400);
155
- expect(error.cause).toBe(transformerError);
156
- });
157
- });