@tstdl/base 0.93.181 → 0.93.183

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 (353) hide show
  1. package/api/server/api-request-token.provider.js +1 -1
  2. package/api/server/gateway.js +8 -3
  3. package/authentication/authentication.api.d.ts +13 -40
  4. package/authentication/authentication.api.js +5 -14
  5. package/authentication/client/authentication.service.d.ts +6 -14
  6. package/authentication/client/authentication.service.js +22 -4
  7. package/authentication/client/module.d.ts +1 -1
  8. package/authentication/client/module.js +4 -4
  9. package/authentication/models/index.d.ts +1 -0
  10. package/authentication/models/index.js +1 -0
  11. package/authentication/models/totp-results.model.d.ts +11 -0
  12. package/authentication/models/totp-results.model.js +37 -0
  13. package/authentication/server/authentication.api-controller.d.ts +3 -3
  14. package/authentication/server/authentication.api-controller.js +31 -4
  15. package/authentication/server/authentication.service.d.ts +5 -14
  16. package/authentication/server/authentication.service.js +6 -4
  17. package/core.d.ts +0 -5
  18. package/core.js +0 -8
  19. package/document-management/api/document-management.api.d.ts +2 -2
  20. package/document-management/service-models/document.service-model.d.ts +1 -1
  21. package/examples/config.d.ts +25 -0
  22. package/examples/config.js +26 -0
  23. package/notification/server/module.d.ts +1 -1
  24. package/notification/server/module.js +1 -1
  25. package/package.json +5 -5
  26. package/signals/api.d.ts +5 -1
  27. package/signals/api.js +3 -1
  28. package/signals/implementation/api.d.ts +13 -5
  29. package/signals/implementation/api.js +7 -1
  30. package/signals/implementation/asserts.d.ts +2 -2
  31. package/signals/implementation/asserts.js +3 -3
  32. package/signals/implementation/computed.d.ts +7 -34
  33. package/signals/implementation/computed.js +14 -83
  34. package/signals/implementation/configure.js +6 -2
  35. package/signals/implementation/effect.d.ts +65 -46
  36. package/signals/implementation/effect.js +97 -62
  37. package/signals/implementation/index.d.ts +2 -4
  38. package/signals/implementation/index.js +2 -4
  39. package/signals/implementation/linked_signal.d.ts +36 -0
  40. package/signals/implementation/linked_signal.js +34 -0
  41. package/signals/implementation/primitive/computed.d.ts +55 -0
  42. package/signals/implementation/primitive/computed.js +107 -0
  43. package/signals/implementation/primitive/effect.d.ts +26 -0
  44. package/signals/implementation/primitive/effect.js +31 -0
  45. package/signals/implementation/{equality.d.ts → primitive/equality.d.ts} +1 -1
  46. package/signals/implementation/{equality.js → primitive/equality.js} +1 -1
  47. package/signals/implementation/primitive/errors.d.ts +10 -0
  48. package/signals/implementation/{errors.js → primitive/errors.js} +3 -4
  49. package/signals/implementation/primitive/formatter.d.ts +19 -0
  50. package/signals/implementation/primitive/formatter.js +136 -0
  51. package/signals/implementation/{graph.d.ts → primitive/graph.d.ts} +68 -36
  52. package/signals/implementation/primitive/graph.js +386 -0
  53. package/signals/implementation/primitive/linked_signal.d.ts +46 -0
  54. package/signals/implementation/primitive/linked_signal.js +110 -0
  55. package/signals/implementation/primitive/signal.d.ts +31 -0
  56. package/signals/implementation/primitive/signal.js +80 -0
  57. package/signals/implementation/primitive/untracked.d.ts +12 -0
  58. package/signals/implementation/primitive/untracked.js +23 -0
  59. package/signals/implementation/{watch.d.ts → primitive/watch.d.ts} +1 -2
  60. package/signals/implementation/{watch.js → primitive/watch.js} +22 -16
  61. package/signals/implementation/resource/api.d.ts +275 -0
  62. package/signals/implementation/resource/api.js +26 -0
  63. package/signals/implementation/resource/debounce.d.ts +13 -0
  64. package/signals/implementation/resource/debounce.js +113 -0
  65. package/signals/implementation/resource/from_snapshots.d.ts +16 -0
  66. package/signals/implementation/resource/from_snapshots.js +44 -0
  67. package/signals/implementation/resource/index.d.ts +11 -0
  68. package/signals/implementation/resource/index.js +11 -0
  69. package/signals/implementation/resource/resource.d.ts +110 -0
  70. package/signals/implementation/resource/resource.js +402 -0
  71. package/signals/implementation/root_effect_scheduler.d.ts +50 -0
  72. package/signals/implementation/root_effect_scheduler.js +66 -0
  73. package/signals/implementation/signal.d.ts +42 -18
  74. package/signals/implementation/signal.js +29 -49
  75. package/signals/implementation/to-observable.d.ts +12 -5
  76. package/signals/implementation/to-observable.js +12 -2
  77. package/signals/implementation/to-signal.d.ts +9 -18
  78. package/signals/implementation/to-signal.js +46 -13
  79. package/signals/implementation/untracked.d.ts +1 -1
  80. package/signals/implementation/untracked.js +3 -11
  81. package/signals/operators/debounce.d.ts +8 -0
  82. package/signals/operators/debounce.js +19 -0
  83. package/signals/operators/derive-async.js +43 -15
  84. package/signals/operators/index.d.ts +2 -0
  85. package/signals/operators/index.js +2 -0
  86. package/signals/operators/throttle.d.ts +8 -0
  87. package/signals/operators/throttle.js +31 -0
  88. package/ai/genkit/tests/multi-region.test.d.ts +0 -2
  89. package/ai/genkit/tests/multi-region.test.js +0 -179
  90. package/ai/genkit/tests/token-limit-fallback.test.d.ts +0 -2
  91. package/ai/genkit/tests/token-limit-fallback.test.js +0 -209
  92. package/ai/prompts/tests/prompt-builder.test.d.ts +0 -1
  93. package/ai/prompts/tests/prompt-builder.test.js +0 -22
  94. package/ai/tests/instructions-formatter.test.d.ts +0 -1
  95. package/ai/tests/instructions-formatter.test.js +0 -116
  96. package/ai/tests/steering.test.d.ts +0 -1
  97. package/ai/tests/steering.test.js +0 -37
  98. package/api/client/tests/api-client.test.d.ts +0 -1
  99. package/api/client/tests/api-client.test.js +0 -194
  100. package/api/server/tests/csrf.middleware.test.d.ts +0 -1
  101. package/api/server/tests/csrf.middleware.test.js +0 -91
  102. package/authentication/tests/authentication-password-requirements.validator.test.d.ts +0 -1
  103. package/authentication/tests/authentication-password-requirements.validator.test.js +0 -29
  104. package/authentication/tests/authentication.api-controller.test.d.ts +0 -1
  105. package/authentication/tests/authentication.api-controller.test.js +0 -156
  106. package/authentication/tests/authentication.api-request-token.provider.test.d.ts +0 -1
  107. package/authentication/tests/authentication.api-request-token.provider.test.js +0 -48
  108. package/authentication/tests/authentication.client-error-handling.test.d.ts +0 -1
  109. package/authentication/tests/authentication.client-error-handling.test.js +0 -123
  110. package/authentication/tests/authentication.client-middleware.test.d.ts +0 -1
  111. package/authentication/tests/authentication.client-middleware.test.js +0 -118
  112. package/authentication/tests/authentication.client-service-methods.test.d.ts +0 -1
  113. package/authentication/tests/authentication.client-service-methods.test.js +0 -177
  114. package/authentication/tests/authentication.client-service-refresh.test.d.ts +0 -1
  115. package/authentication/tests/authentication.client-service-refresh.test.js +0 -153
  116. package/authentication/tests/authentication.client-service.test.d.ts +0 -1
  117. package/authentication/tests/authentication.client-service.test.js +0 -76
  118. package/authentication/tests/authentication.refresh-busy-loop.test.d.ts +0 -1
  119. package/authentication/tests/authentication.refresh-busy-loop.test.js +0 -84
  120. package/authentication/tests/authentication.service.test.d.ts +0 -1
  121. package/authentication/tests/authentication.service.test.js +0 -167
  122. package/authentication/tests/authentication.test-ancillary-service.d.ts +0 -9
  123. package/authentication/tests/authentication.test-ancillary-service.js +0 -27
  124. package/authentication/tests/brute-force-protection.test.d.ts +0 -1
  125. package/authentication/tests/brute-force-protection.test.js +0 -211
  126. package/authentication/tests/helper.test.d.ts +0 -1
  127. package/authentication/tests/helper.test.js +0 -122
  128. package/authentication/tests/password-requirements.error.test.d.ts +0 -1
  129. package/authentication/tests/password-requirements.error.test.js +0 -14
  130. package/authentication/tests/remember.api.test.d.ts +0 -1
  131. package/authentication/tests/remember.api.test.js +0 -117
  132. package/authentication/tests/remember.service.test.d.ts +0 -1
  133. package/authentication/tests/remember.service.test.js +0 -83
  134. package/authentication/tests/subject.service.test.d.ts +0 -1
  135. package/authentication/tests/subject.service.test.js +0 -140
  136. package/authentication/tests/suspended-subject.test.d.ts +0 -1
  137. package/authentication/tests/suspended-subject.test.js +0 -120
  138. package/authentication/tests/totp.enrollment.test.d.ts +0 -1
  139. package/authentication/tests/totp.enrollment.test.js +0 -123
  140. package/authentication/tests/totp.login.test.d.ts +0 -1
  141. package/authentication/tests/totp.login.test.js +0 -213
  142. package/authentication/tests/totp.recovery-codes.test.d.ts +0 -1
  143. package/authentication/tests/totp.recovery-codes.test.js +0 -97
  144. package/authentication/tests/totp.status.test.d.ts +0 -1
  145. package/authentication/tests/totp.status.test.js +0 -72
  146. package/cancellation/tests/coverage.test.d.ts +0 -1
  147. package/cancellation/tests/coverage.test.js +0 -49
  148. package/cancellation/tests/leak.test.d.ts +0 -1
  149. package/cancellation/tests/leak.test.js +0 -35
  150. package/cancellation/tests/token.test.d.ts +0 -1
  151. package/cancellation/tests/token.test.js +0 -136
  152. package/circuit-breaker/tests/circuit-breaker.test.d.ts +0 -1
  153. package/circuit-breaker/tests/circuit-breaker.test.js +0 -116
  154. package/cryptography/tests/cryptography.test.d.ts +0 -1
  155. package/cryptography/tests/cryptography.test.js +0 -175
  156. package/cryptography/tests/jwt.test.d.ts +0 -1
  157. package/cryptography/tests/jwt.test.js +0 -54
  158. package/cryptography/tests/modern.test.d.ts +0 -1
  159. package/cryptography/tests/modern.test.js +0 -105
  160. package/cryptography/tests/module.test.d.ts +0 -1
  161. package/cryptography/tests/module.test.js +0 -100
  162. package/cryptography/tests/totp.test.d.ts +0 -1
  163. package/cryptography/tests/totp.test.js +0 -108
  164. package/document-management/tests/ai-config-hierarchy.test.d.ts +0 -1
  165. package/document-management/tests/ai-config-hierarchy.test.js +0 -59
  166. package/document-management/tests/ai-config-integration.test.d.ts +0 -1
  167. package/document-management/tests/ai-config-integration.test.js +0 -125
  168. package/document-management/tests/ai-config-merge.test.d.ts +0 -1
  169. package/document-management/tests/ai-config-merge.test.js +0 -46
  170. package/document-management/tests/document-management-ai-overrides.test.d.ts +0 -1
  171. package/document-management/tests/document-management-ai-overrides.test.js +0 -63
  172. package/document-management/tests/document-management-core.test.d.ts +0 -1
  173. package/document-management/tests/document-management-core.test.js +0 -157
  174. package/document-management/tests/document-management.api.test.d.ts +0 -1
  175. package/document-management/tests/document-management.api.test.js +0 -101
  176. package/document-management/tests/document-statistics.service.test.d.ts +0 -1
  177. package/document-management/tests/document-statistics.service.test.js +0 -498
  178. package/document-management/tests/document-validation-ai-overrides.test.d.ts +0 -1
  179. package/document-management/tests/document-validation-ai-overrides.test.js +0 -87
  180. package/document-management/tests/document.service.test.d.ts +0 -1
  181. package/document-management/tests/document.service.test.js +0 -143
  182. package/document-management/tests/enum-helpers.test.d.ts +0 -1
  183. package/document-management/tests/enum-helpers.test.js +0 -452
  184. package/document-management/tests/helper.d.ts +0 -24
  185. package/document-management/tests/helper.js +0 -39
  186. package/errors/tests/format.test.d.ts +0 -1
  187. package/errors/tests/format.test.js +0 -84
  188. package/http/tests/server-timing.test.d.ts +0 -1
  189. package/http/tests/server-timing.test.js +0 -42
  190. package/injector/tests/advanced.test.d.ts +0 -1
  191. package/injector/tests/advanced.test.js +0 -116
  192. package/injector/tests/async-init.test.d.ts +0 -1
  193. package/injector/tests/async-init.test.js +0 -77
  194. package/injector/tests/basic.test.d.ts +0 -1
  195. package/injector/tests/basic.test.js +0 -114
  196. package/injector/tests/hierarchical.test.d.ts +0 -1
  197. package/injector/tests/hierarchical.test.js +0 -59
  198. package/injector/tests/leak.test.d.ts +0 -1
  199. package/injector/tests/leak.test.js +0 -45
  200. package/injector/tests/lifecycles.test.d.ts +0 -1
  201. package/injector/tests/lifecycles.test.js +0 -109
  202. package/logger/tests/pretty-print.test.d.ts +0 -1
  203. package/logger/tests/pretty-print.test.js +0 -60
  204. package/notification/tests/notification-api.test.d.ts +0 -1
  205. package/notification/tests/notification-api.test.js +0 -124
  206. package/notification/tests/notification-client.test.d.ts +0 -1
  207. package/notification/tests/notification-client.test.js +0 -101
  208. package/notification/tests/notification-flow.test.d.ts +0 -1
  209. package/notification/tests/notification-flow.test.js +0 -296
  210. package/notification/tests/notification-sse.service.test.d.ts +0 -1
  211. package/notification/tests/notification-sse.service.test.js +0 -43
  212. package/notification/tests/notification-type.service.test.d.ts +0 -1
  213. package/notification/tests/notification-type.service.test.js +0 -41
  214. package/object-storage/s3/tests/s3.object-storage.integration.test.d.ts +0 -1
  215. package/object-storage/s3/tests/s3.object-storage.integration.test.js +0 -303
  216. package/orm/tests/build-jsonb.test.d.ts +0 -1
  217. package/orm/tests/build-jsonb.test.js +0 -39
  218. package/orm/tests/data-types.test.d.ts +0 -1
  219. package/orm/tests/data-types.test.js +0 -39
  220. package/orm/tests/database-extension.test.d.ts +0 -1
  221. package/orm/tests/database-extension.test.js +0 -63
  222. package/orm/tests/database-migration.test.d.ts +0 -1
  223. package/orm/tests/database-migration.test.js +0 -83
  224. package/orm/tests/decorators.test.d.ts +0 -1
  225. package/orm/tests/decorators.test.js +0 -77
  226. package/orm/tests/encryption.test.d.ts +0 -1
  227. package/orm/tests/encryption.test.js +0 -31
  228. package/orm/tests/query-complex.test.d.ts +0 -1
  229. package/orm/tests/query-complex.test.js +0 -172
  230. package/orm/tests/query-converter-complex.test.d.ts +0 -1
  231. package/orm/tests/query-converter-complex.test.js +0 -131
  232. package/orm/tests/query-converter.test.d.ts +0 -1
  233. package/orm/tests/query-converter.test.js +0 -123
  234. package/orm/tests/repository-advanced.test.d.ts +0 -1
  235. package/orm/tests/repository-advanced.test.js +0 -189
  236. package/orm/tests/repository-attributes.test.d.ts +0 -1
  237. package/orm/tests/repository-attributes.test.js +0 -83
  238. package/orm/tests/repository-compound-primary-key.test.d.ts +0 -2
  239. package/orm/tests/repository-compound-primary-key.test.js +0 -226
  240. package/orm/tests/repository-comprehensive.test.d.ts +0 -1
  241. package/orm/tests/repository-comprehensive.test.js +0 -162
  242. package/orm/tests/repository-coverage.test.d.ts +0 -2
  243. package/orm/tests/repository-coverage.test.js +0 -242
  244. package/orm/tests/repository-cti-complex.test.d.ts +0 -1
  245. package/orm/tests/repository-cti-complex.test.js +0 -151
  246. package/orm/tests/repository-cti-embedded.test.d.ts +0 -1
  247. package/orm/tests/repository-cti-embedded.test.js +0 -178
  248. package/orm/tests/repository-cti-extensive.test.d.ts +0 -2
  249. package/orm/tests/repository-cti-extensive.test.js +0 -279
  250. package/orm/tests/repository-cti-mapping.test.d.ts +0 -2
  251. package/orm/tests/repository-cti-mapping.test.js +0 -108
  252. package/orm/tests/repository-cti-search.test.d.ts +0 -1
  253. package/orm/tests/repository-cti-search.test.js +0 -141
  254. package/orm/tests/repository-cti-soft-delete.test.d.ts +0 -2
  255. package/orm/tests/repository-cti-soft-delete.test.js +0 -103
  256. package/orm/tests/repository-cti-transactions.test.d.ts +0 -1
  257. package/orm/tests/repository-cti-transactions.test.js +0 -112
  258. package/orm/tests/repository-cti-upsert-many.test.d.ts +0 -2
  259. package/orm/tests/repository-cti-upsert-many.test.js +0 -115
  260. package/orm/tests/repository-cti.test.d.ts +0 -2
  261. package/orm/tests/repository-cti.test.js +0 -390
  262. package/orm/tests/repository-edge-cases.test.d.ts +0 -1
  263. package/orm/tests/repository-edge-cases.test.js +0 -178
  264. package/orm/tests/repository-expiration.test.d.ts +0 -2
  265. package/orm/tests/repository-expiration.test.js +0 -140
  266. package/orm/tests/repository-extra-coverage.test.d.ts +0 -2
  267. package/orm/tests/repository-extra-coverage.test.js +0 -402
  268. package/orm/tests/repository-mapping.test.d.ts +0 -2
  269. package/orm/tests/repository-mapping.test.js +0 -65
  270. package/orm/tests/repository-regression.test.d.ts +0 -1
  271. package/orm/tests/repository-regression.test.js +0 -288
  272. package/orm/tests/repository-search-coverage.test.d.ts +0 -1
  273. package/orm/tests/repository-search-coverage.test.js +0 -107
  274. package/orm/tests/repository-search.test.d.ts +0 -1
  275. package/orm/tests/repository-search.test.js +0 -105
  276. package/orm/tests/repository-soft-delete.test.d.ts +0 -1
  277. package/orm/tests/repository-soft-delete.test.js +0 -118
  278. package/orm/tests/repository-transactions-nested.test.d.ts +0 -1
  279. package/orm/tests/repository-transactions-nested.test.js +0 -178
  280. package/orm/tests/repository-types.test.d.ts +0 -1
  281. package/orm/tests/repository-types.test.js +0 -184
  282. package/orm/tests/repository-undelete.test.d.ts +0 -2
  283. package/orm/tests/repository-undelete.test.js +0 -201
  284. package/orm/tests/schema-converter.test.d.ts +0 -1
  285. package/orm/tests/schema-converter.test.js +0 -82
  286. package/orm/tests/schema-generation.test.d.ts +0 -2
  287. package/orm/tests/schema-generation.test.js +0 -174
  288. package/orm/tests/sql-helpers.test.d.ts +0 -1
  289. package/orm/tests/sql-helpers.test.js +0 -67
  290. package/orm/tests/transaction-safety.test.d.ts +0 -1
  291. package/orm/tests/transaction-safety.test.js +0 -81
  292. package/orm/tests/transactional.test.d.ts +0 -1
  293. package/orm/tests/transactional.test.js +0 -215
  294. package/orm/tests/utils.test.d.ts +0 -1
  295. package/orm/tests/utils.test.js +0 -70
  296. package/pdf/tests/utils.test.d.ts +0 -1
  297. package/pdf/tests/utils.test.js +0 -187
  298. package/process/tests/spawn.test.d.ts +0 -1
  299. package/process/tests/spawn.test.js +0 -182
  300. package/rate-limit/tests/postgres-rate-limiter.test.d.ts +0 -1
  301. package/rate-limit/tests/postgres-rate-limiter.test.js +0 -84
  302. package/renderer/tests/renderer.test.d.ts +0 -1
  303. package/renderer/tests/renderer.test.js +0 -88
  304. package/rpc/tests/rpc.integration.test.d.ts +0 -1
  305. package/rpc/tests/rpc.integration.test.js +0 -615
  306. package/signals/implementation/errors.d.ts +0 -2
  307. package/signals/implementation/graph.js +0 -312
  308. package/signals/implementation/writable-signal.d.ts +0 -48
  309. package/signals/implementation/writable-signal.js +0 -32
  310. package/task-queue/tests/coverage-branch.test.d.ts +0 -1
  311. package/task-queue/tests/coverage-branch.test.js +0 -395
  312. package/task-queue/tests/coverage-enhancement.test.d.ts +0 -1
  313. package/task-queue/tests/coverage-enhancement.test.js +0 -150
  314. package/task-queue/tests/dag.test.d.ts +0 -1
  315. package/task-queue/tests/dag.test.js +0 -188
  316. package/task-queue/tests/dependencies.test.d.ts +0 -1
  317. package/task-queue/tests/dependencies.test.js +0 -296
  318. package/task-queue/tests/enqueue-batch.test.d.ts +0 -1
  319. package/task-queue/tests/enqueue-batch.test.js +0 -125
  320. package/task-queue/tests/enqueue-item.test.d.ts +0 -1
  321. package/task-queue/tests/enqueue-item.test.js +0 -12
  322. package/task-queue/tests/fan-out-spawning.test.d.ts +0 -1
  323. package/task-queue/tests/fan-out-spawning.test.js +0 -94
  324. package/task-queue/tests/idempotent-replacement.test.d.ts +0 -1
  325. package/task-queue/tests/idempotent-replacement.test.js +0 -114
  326. package/task-queue/tests/missing-idempotent-tasks.test.d.ts +0 -1
  327. package/task-queue/tests/missing-idempotent-tasks.test.js +0 -39
  328. package/task-queue/tests/optimization-edge-cases.test.d.ts +0 -1
  329. package/task-queue/tests/optimization-edge-cases.test.js +0 -124
  330. package/task-queue/tests/queue-generic.test.d.ts +0 -1
  331. package/task-queue/tests/queue-generic.test.js +0 -8
  332. package/task-queue/tests/queue.test.d.ts +0 -1
  333. package/task-queue/tests/queue.test.js +0 -756
  334. package/task-queue/tests/shutdown.test.d.ts +0 -1
  335. package/task-queue/tests/shutdown.test.js +0 -41
  336. package/task-queue/tests/task-context.test.d.ts +0 -1
  337. package/task-queue/tests/task-context.test.js +0 -7
  338. package/task-queue/tests/task-union.test.d.ts +0 -1
  339. package/task-queue/tests/task-union.test.js +0 -18
  340. package/task-queue/tests/transactions.test.d.ts +0 -1
  341. package/task-queue/tests/transactions.test.js +0 -47
  342. package/task-queue/tests/typing.test.d.ts +0 -1
  343. package/task-queue/tests/typing.test.js +0 -9
  344. package/task-queue/tests/worker.test.d.ts +0 -1
  345. package/task-queue/tests/worker.test.js +0 -258
  346. package/task-queue/tests/zombie-parent.test.d.ts +0 -1
  347. package/task-queue/tests/zombie-parent.test.js +0 -45
  348. package/task-queue/tests/zombie-recovery.test.d.ts +0 -1
  349. package/task-queue/tests/zombie-recovery.test.js +0 -51
  350. package/utils/tests/backoff.test.d.ts +0 -1
  351. package/utils/tests/backoff.test.js +0 -41
  352. package/utils/tests/retry-with-backoff.test.d.ts +0 -1
  353. package/utils/tests/retry-with-backoff.test.js +0 -49
@@ -1,402 +0,0 @@
1
- /** biome-ignore-all lint/nursery/noExcessiveClassesPerFile: <explanation> */
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- import { sql } from 'drizzle-orm';
12
- import { beforeAll, beforeEach, describe, expect, test } from 'vitest';
13
- import { NotFoundError } from '../../errors/not-found.error.js';
14
- import { StringProperty } from '../../schema/index.js';
15
- import { dropTables, setupIntegrationTest, truncateTables } from '../../testing/index.js';
16
- import { toArrayAsync } from '../../utils/async-iterable-helpers/to-array.js';
17
- import { ChildEntity, Column, Inheritance, Table } from '../decorators.js';
18
- import { BaseEntity, Entity } from '../entity.js';
19
- import { getRepository } from '../server/repository.js';
20
- describe('ORM Repository Extra Coverage', () => {
21
- let injector;
22
- let database;
23
- let baseItemRepo;
24
- let premiumItemRepo;
25
- let simpleItemRepo;
26
- let plainItemRepo;
27
- const schema = 'test_orm_extra_coverage';
28
- let BaseItem = class BaseItem extends Entity {
29
- type;
30
- name;
31
- };
32
- __decorate([
33
- StringProperty(),
34
- Column({ name: 'type' }),
35
- __metadata("design:type", String)
36
- ], BaseItem.prototype, "type", void 0);
37
- __decorate([
38
- StringProperty(),
39
- Column({ name: 'name' }),
40
- __metadata("design:type", String)
41
- ], BaseItem.prototype, "name", void 0);
42
- BaseItem = __decorate([
43
- Table('items', { schema }),
44
- Inheritance({ strategy: 'joined', discriminatorColumn: 'type' })
45
- ], BaseItem);
46
- let PremiumItem = class PremiumItem extends BaseItem {
47
- code;
48
- };
49
- __decorate([
50
- StringProperty(),
51
- Column({ name: 'code' }),
52
- __metadata("design:type", String)
53
- ], PremiumItem.prototype, "code", void 0);
54
- PremiumItem = __decorate([
55
- Table('premium_items', { schema }),
56
- ChildEntity('premium')
57
- ], PremiumItem);
58
- let SimpleItem = class SimpleItem extends Entity {
59
- label;
60
- };
61
- __decorate([
62
- StringProperty(),
63
- Column({ name: 'label' }),
64
- __metadata("design:type", String)
65
- ], SimpleItem.prototype, "label", void 0);
66
- SimpleItem = __decorate([
67
- Table('simple_items', { schema })
68
- ], SimpleItem);
69
- let PlainItem = class PlainItem extends BaseEntity {
70
- description;
71
- };
72
- __decorate([
73
- StringProperty(),
74
- Column({ name: 'description' }),
75
- __metadata("design:type", String)
76
- ], PlainItem.prototype, "description", void 0);
77
- PlainItem = __decorate([
78
- Table('plain_items', { schema })
79
- ], PlainItem);
80
- beforeAll(async () => {
81
- ({ injector, database } = await setupIntegrationTest({ orm: { schema } }));
82
- baseItemRepo = injector.resolve(getRepository(BaseItem));
83
- premiumItemRepo = injector.resolve(getRepository(PremiumItem));
84
- simpleItemRepo = injector.resolve(getRepository(SimpleItem));
85
- plainItemRepo = injector.resolve(getRepository(PlainItem));
86
- await dropTables(database, schema, ['premium_items', 'items', 'simple_items', 'plain_items']);
87
- await database.execute(sql `
88
- CREATE TABLE ${sql.identifier(schema)}.${sql.identifier('items')} (
89
- id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
90
- type TEXT NOT NULL,
91
- name TEXT NOT NULL,
92
- revision INTEGER NOT NULL,
93
- revision_timestamp TIMESTAMP WITH TIME ZONE NOT NULL,
94
- create_timestamp TIMESTAMP WITH TIME ZONE NOT NULL,
95
- delete_timestamp TIMESTAMP WITH TIME ZONE,
96
- attributes JSONB NOT NULL DEFAULT '{}',
97
- UNIQUE (id, type)
98
- )
99
- `);
100
- await database.execute(sql `
101
- CREATE TABLE ${sql.identifier(schema)}.${sql.identifier('premium_items')} (
102
- id UUID PRIMARY KEY,
103
- type TEXT NOT NULL CHECK (type = 'premium'),
104
- code TEXT NOT NULL,
105
- FOREIGN KEY (id, type) REFERENCES ${sql.identifier(schema)}.${sql.identifier('items')} (id, type) ON DELETE CASCADE
106
- )
107
- `);
108
- await database.execute(sql `
109
- CREATE TABLE ${sql.identifier(schema)}.${sql.identifier('simple_items')} (
110
- id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
111
- label TEXT NOT NULL UNIQUE,
112
- revision INTEGER NOT NULL,
113
- revision_timestamp TIMESTAMP WITH TIME ZONE NOT NULL,
114
- create_timestamp TIMESTAMP WITH TIME ZONE NOT NULL,
115
- delete_timestamp TIMESTAMP WITH TIME ZONE,
116
- attributes JSONB NOT NULL DEFAULT '{}'
117
- )
118
- `);
119
- await database.execute(sql `
120
- CREATE TABLE ${sql.identifier(schema)}.${sql.identifier('plain_items')} (
121
- id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
122
- description TEXT NOT NULL
123
- )
124
- `);
125
- });
126
- beforeEach(async () => {
127
- await truncateTables(database, schema, ['premium_items', 'items', 'simple_items', 'plain_items']);
128
- });
129
- test('loadManyCursor should work', async () => {
130
- const item = await simpleItemRepo.insert(Object.assign(new SimpleItem(), { label: 'Cursor Test' }));
131
- const cursor = simpleItemRepo.loadManyCursor([item.id]);
132
- const results = await toArrayAsync(cursor);
133
- expect(results).toHaveLength(1);
134
- expect(results[0].id).toBe(item.id);
135
- });
136
- test('loadAllCursor should work', async () => {
137
- await simpleItemRepo.insert(Object.assign(new SimpleItem(), { label: 'All Cursor Test' }));
138
- const cursor = simpleItemRepo.loadAllCursor();
139
- const results = await toArrayAsync(cursor);
140
- expect(results.length).toBeGreaterThan(0);
141
- });
142
- test('tryLoadByQuery with order option', async () => {
143
- await simpleItemRepo.insert(Object.assign(new SimpleItem(), { label: 'A' }));
144
- await simpleItemRepo.insert(Object.assign(new SimpleItem(), { label: 'B' }));
145
- const item = await simpleItemRepo.tryLoadByQuery({}, { order: { label: 'desc' } });
146
- expect(item.label).toBe('B');
147
- });
148
- test('insertManyIfNotExists with empty array', async () => {
149
- const results = await simpleItemRepo.insertManyIfNotExists(['label'], []);
150
- expect(results).toHaveLength(0);
151
- });
152
- test('insertManyIfNotExists with items', async () => {
153
- const item = Object.assign(new SimpleItem(), { label: 'Unique' });
154
- const results = await simpleItemRepo.insertManyIfNotExists(['label'], [item]);
155
- expect(results).toHaveLength(1);
156
- const results2 = await simpleItemRepo.insertManyIfNotExists(['label'], [item]);
157
- expect(results2).toHaveLength(0);
158
- });
159
- test('tryInsert returning entity', async () => {
160
- const item = Object.assign(new SimpleItem(), { label: 'TryInsert' });
161
- const inserted = await simpleItemRepo.tryInsert(item);
162
- expect(inserted).toBeDefined();
163
- expect(inserted.label).toBe('TryInsert');
164
- const conflict = await simpleItemRepo.tryInsert(inserted); // Should conflict on ID
165
- expect(conflict).toBeUndefined();
166
- });
167
- test('loadMany with empty array', async () => {
168
- const results = await simpleItemRepo.loadMany([]);
169
- expect(results).toHaveLength(0);
170
- });
171
- test('insertMany for non-CTI with empty array', async () => {
172
- const results = await simpleItemRepo.insertMany([]);
173
- expect(results).toHaveLength(0);
174
- });
175
- test('countByQuery returning count', async () => {
176
- const initialCount = await simpleItemRepo.count();
177
- await simpleItemRepo.insert(Object.assign(new SimpleItem(), { label: 'Count Test' }));
178
- const newCount = await simpleItemRepo.count();
179
- expect(newCount).toBe(initialCount + 1);
180
- });
181
- test('mapManyToColumns and mapManyToInsertColumns', async () => {
182
- const item = Object.assign(new SimpleItem(), { label: 'Map Test' });
183
- const cols = await simpleItemRepo.mapManyToColumns([item]);
184
- expect(cols).toHaveLength(1);
185
- expect(cols[0].label).toBe('Map Test');
186
- const insertCols = await simpleItemRepo.mapManyToInsertColumns([item]);
187
- expect(insertCols).toHaveLength(1);
188
- expect(insertCols[0].label).toBe('Map Test');
189
- });
190
- test('tryUpsert on non-CTI returning undefined when condition fails', async () => {
191
- const item = await simpleItemRepo.insert(Object.assign(new SimpleItem(), { label: 'Upsert Condition' }));
192
- const conflictItem = Object.assign(new SimpleItem(), { id: item.id, label: 'Should Fail' });
193
- const result = await simpleItemRepo.tryUpsert(['id'], conflictItem, undefined, { set: { label: 'Impossible' } });
194
- expect(result).toBeUndefined();
195
- });
196
- test('tryUpdateByQuery on non-CTI', async () => {
197
- await simpleItemRepo.insert(Object.assign(new SimpleItem(), { label: 'UpdateByQuery' }));
198
- const result = await simpleItemRepo.tryUpdateByQuery({ label: 'UpdateByQuery' }, { label: 'UpdatedByQuery' });
199
- expect(result).toBeDefined();
200
- expect(result.label).toBe('UpdatedByQuery');
201
- const result2 = await simpleItemRepo.tryUpdateByQuery({ label: 'Ghost' }, { label: 'Buster' });
202
- expect(result2).toBeUndefined();
203
- });
204
- test('tryDeleteByQuery on CTI', async () => {
205
- const item = await premiumItemRepo.insert(Object.assign(new PremiumItem(), { name: 'DeleteMe', code: 'D1' }));
206
- const result = await premiumItemRepo.tryDeleteByQuery({ name: 'DeleteMe' });
207
- expect(result).toBeDefined();
208
- expect(result.metadata.deleteTimestamp).not.toBeNull();
209
- const result2 = await premiumItemRepo.tryDeleteByQuery({ name: 'Ghost' });
210
- expect(result2).toBeUndefined();
211
- });
212
- test('getIdLimitQuery for update', async () => {
213
- const query = simpleItemRepo.getIdLimitQuery({ label: 'Any' }).for('update');
214
- expect(query).toBeDefined();
215
- });
216
- test('applySelect with distinct and distinctOn', async () => {
217
- const q1 = simpleItemRepo.applySelect(database, true);
218
- expect(q1).toBeDefined();
219
- const q2 = simpleItemRepo.applySelect(database, ['label']);
220
- expect(q2).toBeDefined();
221
- });
222
- test('mapToColumns and mapToInsertColumns', async () => {
223
- const item = Object.assign(new SimpleItem(), { label: 'Map Single' });
224
- const col = await simpleItemRepo.mapToColumns(item);
225
- expect(col.label).toBe('Map Single');
226
- const insertCol = await simpleItemRepo.mapToInsertColumns(item);
227
- expect(insertCol.label).toBe('Map Single');
228
- });
229
- test('hasAll with duplicates and missing IDs', async () => {
230
- const item = await simpleItemRepo.insert(Object.assign(new SimpleItem(), { label: 'HasAll' }));
231
- expect(await simpleItemRepo.hasAll([item.id, item.id])).toBe(true);
232
- expect(await simpleItemRepo.hasAll([item.id, '00000000-0000-0000-0000-000000000000'])).toBe(false);
233
- expect(await simpleItemRepo.hasAll([])).toBe(false);
234
- });
235
- test('loadManyByQueryCursor should work', async () => {
236
- await simpleItemRepo.insert(Object.assign(new SimpleItem(), { label: 'Many Cursor' }));
237
- const cursor = simpleItemRepo.loadManyByQueryCursor({ label: 'Many Cursor' });
238
- const results = await toArrayAsync(cursor);
239
- expect(results).toHaveLength(1);
240
- });
241
- test('upsert (non-CTI) with wheres', async () => {
242
- const item = await simpleItemRepo.insert(Object.assign(new SimpleItem(), { label: 'Upsert' }));
243
- // This should succeed
244
- const upserted = await simpleItemRepo.upsert(['label'], Object.assign(new SimpleItem(), { label: 'Upsert' }), { label: 'Upsert Updated' }, { set: { label: 'Upsert' } });
245
- expect(upserted.label).toBe('Upsert Updated');
246
- // This should fail to return a row due to condition
247
- await expect(simpleItemRepo.upsert(['label'], Object.assign(new SimpleItem(), { label: 'Upsert Updated' }), { label: 'Should Not Happen' }, { set: { label: 'Wrong' } }))
248
- .rejects.toThrow('upsert failed to return a row');
249
- });
250
- test('updateMany (non-CTI) with empty array', async () => {
251
- expect(await simpleItemRepo.updateMany([], { label: 'None' })).toEqual([]);
252
- });
253
- test('hardDeleteByQuery throws NotFoundError', async () => {
254
- await expect(simpleItemRepo.hardDeleteByQuery({ label: 'Ghost' })).rejects.toThrow('SimpleItem not found');
255
- });
256
- test('hardDeleteMany with empty array', async () => {
257
- expect(await simpleItemRepo.hardDeleteMany([])).toEqual([]);
258
- });
259
- test('convertOrderBy with various inputs', async () => {
260
- expect(simpleItemRepo.convertOrderBy('label')).toBeDefined();
261
- expect(simpleItemRepo.convertOrderBy(['label', ['id', 'desc']])).toHaveLength(2);
262
- expect(simpleItemRepo.convertOrderBy(sql `label`)).toHaveLength(1);
263
- });
264
- test('mapManyToEntity and mapToEntity with subclasses', async () => {
265
- const item = await premiumItemRepo.insert(Object.assign(new PremiumItem(), { name: 'P1', code: 'C1' }));
266
- const polymorphic = await baseItemRepo.load(item.id, { includeSubclasses: true });
267
- expect(polymorphic).toBeInstanceOf(PremiumItem);
268
- // We need to manually construct the polymorphic row structure if we want to test mapManyToEntity directly with subclasses
269
- // But loadAll({ includeSubclasses: true }) already does this.
270
- });
271
- test('tryUpdateCTI with no changes', async () => {
272
- const item = await premiumItemRepo.insert(Object.assign(new PremiumItem(), { name: 'NoChange', code: 'NC' }));
273
- const updated = await premiumItemRepo.tryUpdate(item.id, {});
274
- expect(updated.id).toBe(item.id);
275
- });
276
- test('tsvector search with various options', async () => {
277
- await simpleItemRepo.insert(Object.assign(new SimpleItem(), { label: 'Search Item' }));
278
- // score: false
279
- const r1 = await simpleItemRepo.search({
280
- query: { $tsvector: { fields: ['label'], query: 'Search' } },
281
- score: false,
282
- });
283
- expect(r1[0].score).toBeUndefined();
284
- // highlight variants
285
- const r2 = await simpleItemRepo.search({
286
- query: { $tsvector: { fields: ['label'], query: 'Search' } },
287
- highlight: 'label',
288
- });
289
- expect(r2[0].highlight).toBeDefined();
290
- const r3 = await simpleItemRepo.search({
291
- query: { $tsvector: { fields: ['label'], query: 'Search' } },
292
- highlight: { source: sql `label`, minWords: 5, maxWords: 10 },
293
- });
294
- expect(r3[0].highlight).toBeDefined();
295
- // offset and limit
296
- const r4 = await simpleItemRepo.search({
297
- query: { $tsvector: { fields: ['label'], query: 'Search' } },
298
- offset: 0,
299
- limit: 1,
300
- });
301
- expect(r4).toHaveLength(1);
302
- });
303
- test('trigram search with rank: false', async () => {
304
- await simpleItemRepo.insert(Object.assign(new SimpleItem(), { label: 'Trigram' }));
305
- const results = await simpleItemRepo.search({
306
- query: { $trigram: { fields: ['label'], query: 'Trigram' } },
307
- rank: false,
308
- });
309
- expect(results).toHaveLength(1);
310
- });
311
- test('PlainItem (no metadata) operations', async () => {
312
- const item = await plainItemRepo.insert(Object.assign(new PlainItem(), { description: 'Plain' }));
313
- expect(plainItemRepo.hasMetadata).toBe(false);
314
- const deleted = await plainItemRepo.delete(item.id);
315
- expect(deleted.description).toBe('Plain');
316
- const exists = await plainItemRepo.has(item.id);
317
- expect(exists).toBe(false);
318
- });
319
- test('convertOrderBy with object', async () => {
320
- const order = simpleItemRepo.convertOrderBy({ label: 'desc' });
321
- expect(order).toHaveLength(1);
322
- });
323
- test('tryHardDelete returning undefined', async () => {
324
- const result = await simpleItemRepo.tryHardDelete('00000000-0000-0000-0000-000000000000');
325
- expect(result).toBeUndefined();
326
- });
327
- test('tryHardDeleteByQuery returning undefined', async () => {
328
- const result = await simpleItemRepo.tryHardDeleteByQuery({ label: 'Ghost' });
329
- expect(result).toBeUndefined();
330
- });
331
- test('hardDeleteMany with empty array branch', async () => {
332
- const results = await simpleItemRepo.hardDeleteMany([]);
333
- expect(results).toEqual([]);
334
- });
335
- test('hardDeleteManyByQuery works', async () => {
336
- await simpleItemRepo.insert(Object.assign(new SimpleItem(), { label: 'To Hard Delete' }));
337
- const results = await simpleItemRepo.hardDeleteManyByQuery({ label: 'To Hard Delete' });
338
- expect(results).toHaveLength(1);
339
- });
340
- test('applySelect with false (default)', async () => {
341
- const q = simpleItemRepo.applySelect(database, undefined, false);
342
- expect(q).toBeDefined();
343
- });
344
- test('load should throw NotFoundError', async () => {
345
- await expect(simpleItemRepo.load('00000000-0000-0000-0000-000000000000')).rejects.toThrow(NotFoundError);
346
- });
347
- test('tsvector search with rank number', async () => {
348
- await simpleItemRepo.insert(Object.assign(new SimpleItem(), { label: 'Rank' }));
349
- const results = await simpleItemRepo.search({
350
- query: { $tsvector: { fields: ['label'], query: 'Rank' } },
351
- rank: { normalization: 1 }, // normalization
352
- });
353
- expect(results).toHaveLength(1);
354
- });
355
- test('encryptionSecret usage in getTransformContext', async () => {
356
- const context = await simpleItemRepo.getTransformContext();
357
- expect(context.encryptionKey).toBeDefined();
358
- // Call it again to hit the cached branch
359
- const context2 = await simpleItemRepo.getTransformContext();
360
- expect(context2).toBe(context);
361
- });
362
- test('tsvector search with rank true/false', async () => {
363
- await simpleItemRepo.insert(Object.assign(new SimpleItem(), { label: 'Rank' }));
364
- await simpleItemRepo.search({
365
- query: { $tsvector: { fields: ['label'], query: 'Rank' } },
366
- rank: true,
367
- });
368
- await simpleItemRepo.search({
369
- query: { $tsvector: { fields: ['label'], query: 'Rank' } },
370
- rank: false,
371
- });
372
- });
373
- test('trigram search with threshold', async () => {
374
- await simpleItemRepo.insert(Object.assign(new SimpleItem(), { label: 'Trigram Threshold' }));
375
- await database.execute(sql `SET pg_trgm.similarity_threshold = 0.1`);
376
- const results = await simpleItemRepo.search({
377
- query: { $trigram: { fields: ['label'], query: 'Trigram', threshold: 0.1 } },
378
- });
379
- expect(results).toHaveLength(1);
380
- });
381
- test('repository resolution inside transaction', async () => {
382
- await simpleItemRepo.transaction(async (transaction) => {
383
- const repository = injector.resolve(getRepository(SimpleItem)).withTransaction(transaction);
384
- expect(repository).toBeDefined();
385
- });
386
- });
387
- test('updateManyCTI with no matches', async () => {
388
- const results = await premiumItemRepo.updateMany(['00000000-0000-0000-0000-000000000000'], { name: 'Ghost' });
389
- expect(results).toEqual([]);
390
- });
391
- test('upsertMany on CTI with wheres and update object', async () => {
392
- const item = await premiumItemRepo.insert(Object.assign(new PremiumItem(), { name: 'UpsertManyCTI', code: 'U1' }));
393
- const conflictItem = Object.assign(new PremiumItem(), { id: item.id, name: 'UpsertManyCTI', code: 'U1' });
394
- const results = await premiumItemRepo.upsertMany(['id'], [conflictItem], { name: 'UpsertManyCTI Updated', code: 'U2' }, { target: { name: 'UpsertManyCTI' } });
395
- expect(results).toHaveLength(1);
396
- expect(results[0].name).toBe('UpsertManyCTI Updated');
397
- expect(results[0].code).toBe('U2');
398
- });
399
- test('processExpirations with no expiration columns', async () => {
400
- await simpleItemRepo.processExpirations(); // Should just return
401
- });
402
- });
@@ -1,2 +0,0 @@
1
- /** biome-ignore-all lint/nursery/noExcessiveClassesPerFile: <explanation> */
2
- export {};
@@ -1,65 +0,0 @@
1
- /** biome-ignore-all lint/nursery/noExcessiveClassesPerFile: <explanation> */
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- import { describe, expect, test } from 'vitest';
12
- import { StringProperty } from '../../schema/index.js';
13
- import { setupIntegrationTest } from '../../testing/index.js';
14
- import { ChildEntity, Column, Inheritance, Table } from '../decorators.js';
15
- import { Entity } from '../entity.js';
16
- import { getRepository } from '../server/repository.js';
17
- describe('ORM Repository Mapping (CTI)', () => {
18
- test('should flatten joined result when mapping child entity', async () => {
19
- let BaseUser = class BaseUser extends Entity {
20
- type;
21
- name;
22
- };
23
- __decorate([
24
- StringProperty(),
25
- Column({ name: 'type' }),
26
- __metadata("design:type", String)
27
- ], BaseUser.prototype, "type", void 0);
28
- __decorate([
29
- StringProperty(),
30
- Column({ name: 'name' }),
31
- __metadata("design:type", String)
32
- ], BaseUser.prototype, "name", void 0);
33
- BaseUser = __decorate([
34
- Table('users', { schema: 'test' }),
35
- Inheritance({ strategy: 'joined', discriminatorColumn: 'type' })
36
- ], BaseUser);
37
- let Admin = class Admin extends BaseUser {
38
- role;
39
- };
40
- __decorate([
41
- StringProperty(),
42
- Column({ name: 'role' }),
43
- __metadata("design:type", String)
44
- ], Admin.prototype, "role", void 0);
45
- Admin = __decorate([
46
- Table('admins', { schema: 'test' }),
47
- ChildEntity('admin')
48
- ], Admin);
49
- const { injector } = await setupIntegrationTest({ orm: { schema: 'test' } });
50
- const repository = injector.resolve(getRepository(Admin));
51
- // Simulate Drizzle joined result structure
52
- const mockResult = {
53
- users: { id: '123', type: 'admin', name: 'John Doe', revision: 1 },
54
- admins: { id: '123', type: 'admin', role: 'super-admin' },
55
- };
56
- // Access private method for testing (using any cast)
57
- const mappedEntity = await repository._mapToEntity(mockResult, {});
58
- expect(mappedEntity).toBeInstanceOf(Admin);
59
- expect(mappedEntity.id).toBe('123');
60
- expect(mappedEntity.type).toBe('admin');
61
- expect(mappedEntity.name).toBe('John Doe');
62
- expect(mappedEntity.role).toBe('super-admin');
63
- expect(mappedEntity.metadata.revision).toBe(1);
64
- });
65
- });
@@ -1 +0,0 @@
1
- export {};