gemi 0.51.0-rc.8 → 0.51.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 (230) hide show
  1. package/dist/app/index.js +1 -1
  2. package/dist/auth/AuthController.d.ts +0 -2
  3. package/dist/auth/AuthController.d.ts.map +1 -1
  4. package/dist/auth/UserProvider.d.ts +18 -0
  5. package/dist/auth/UserProvider.d.ts.map +1 -1
  6. package/dist/auth/config.d.ts +53 -0
  7. package/dist/auth/config.d.ts.map +1 -1
  8. package/dist/auth/routes.d.ts +0 -2
  9. package/dist/auth/routes.d.ts.map +1 -1
  10. package/dist/auth/types.d.ts +7 -1
  11. package/dist/auth/types.d.ts.map +1 -1
  12. package/dist/bin/gemi.js +230 -13
  13. package/dist/bin/gemi.js.map +6 -5
  14. package/dist/bin/migrate/index.d.ts.map +1 -1
  15. package/dist/bin/migrate/orm.d.ts +20 -0
  16. package/dist/bin/migrate/orm.d.ts.map +1 -0
  17. package/dist/bin/orm/emit.d.ts +20 -3
  18. package/dist/bin/orm/emit.d.ts.map +1 -1
  19. package/dist/bin/orm-generator.js +57 -23
  20. package/dist/bin/orm-generator.js.map +5 -5
  21. package/dist/broadcasting/index.js +1 -1
  22. package/dist/bun/plugin.js +1 -1
  23. package/dist/bun/preload.js +1 -1
  24. package/dist/{chunk-2z5ryzx2.js → chunk-0k5jhyry.js} +2 -2
  25. package/dist/{chunk-2z5ryzx2.js.map → chunk-0k5jhyry.js.map} +1 -1
  26. package/dist/{chunk-r71za45z.js → chunk-16bnbtyn.js} +2 -2
  27. package/dist/{chunk-r71za45z.js.map → chunk-16bnbtyn.js.map} +1 -1
  28. package/dist/{chunk-kkyzhkgp.js → chunk-1sbm38g3.js} +3 -3
  29. package/dist/{chunk-kkyzhkgp.js.map → chunk-1sbm38g3.js.map} +1 -1
  30. package/dist/{chunk-nnaym0jj.js → chunk-3fcgg506.js} +3 -3
  31. package/dist/{chunk-nnaym0jj.js.map → chunk-3fcgg506.js.map} +1 -1
  32. package/dist/chunk-3z4nwzvp.js +9 -0
  33. package/dist/chunk-3z4nwzvp.js.map +12 -0
  34. package/dist/chunk-45c8sqb7.js +5 -0
  35. package/dist/chunk-45c8sqb7.js.map +14 -0
  36. package/dist/{chunk-r1v5qe5j.js → chunk-53w1njqz.js} +1 -1
  37. package/dist/{chunk-ke0fje4r.js → chunk-5t2c9194.js} +1 -1
  38. package/dist/{chunk-gbhc7ek8.js → chunk-5v36t9j3.js} +3 -3
  39. package/dist/{chunk-gbhc7ek8.js.map → chunk-5v36t9j3.js.map} +1 -1
  40. package/dist/{chunk-jdpme1nd.js → chunk-6fym5bfg.js} +3 -3
  41. package/dist/{chunk-jdpme1nd.js.map → chunk-6fym5bfg.js.map} +1 -1
  42. package/dist/{chunk-2d4ckpjb.js → chunk-6wm9bsz9.js} +2 -2
  43. package/dist/{chunk-2d4ckpjb.js.map → chunk-6wm9bsz9.js.map} +1 -1
  44. package/dist/{chunk-7te6veh7.js → chunk-6x6gb7zg.js} +2 -2
  45. package/dist/{chunk-7te6veh7.js.map → chunk-6x6gb7zg.js.map} +4 -4
  46. package/dist/chunk-8gb1w19q.js +5 -0
  47. package/dist/{chunk-5ngwktak.js.map → chunk-8gb1w19q.js.map} +1 -1
  48. package/dist/chunk-8m3wq94b.js +4 -0
  49. package/dist/{chunk-hmc7wzdk.js.map → chunk-8m3wq94b.js.map} +2 -2
  50. package/dist/{chunk-swkxdq82.js → chunk-8vnbvfmd.js} +2 -2
  51. package/dist/{chunk-swkxdq82.js.map → chunk-8vnbvfmd.js.map} +1 -1
  52. package/dist/{chunk-g426t44w.js → chunk-8zd6d5nd.js} +2 -2
  53. package/dist/{chunk-3ykxxj3p.js.map → chunk-8zd6d5nd.js.map} +1 -1
  54. package/dist/{chunk-rz599b1k.js → chunk-94k8pjmf.js} +3 -3
  55. package/dist/{chunk-rz599b1k.js.map → chunk-94k8pjmf.js.map} +1 -1
  56. package/dist/{chunk-728bsexv.js → chunk-98sj7tkf.js} +3 -3
  57. package/dist/{chunk-728bsexv.js.map → chunk-98sj7tkf.js.map} +1 -1
  58. package/dist/{chunk-zweee4n8.js → chunk-a6w4tpwz.js} +2 -2
  59. package/dist/{chunk-zweee4n8.js.map → chunk-a6w4tpwz.js.map} +1 -1
  60. package/dist/{chunk-zx2nmzwt.js → chunk-an6nq9yd.js} +3 -3
  61. package/dist/{chunk-zx2nmzwt.js.map → chunk-an6nq9yd.js.map} +1 -1
  62. package/dist/{chunk-tvbee7hf.js → chunk-asgfqcwd.js} +2 -2
  63. package/dist/{chunk-tvbee7hf.js.map → chunk-asgfqcwd.js.map} +1 -1
  64. package/dist/{chunk-x0pd91cj.js → chunk-bm6q0q1q.js} +2 -2
  65. package/dist/{chunk-x0pd91cj.js.map → chunk-bm6q0q1q.js.map} +1 -1
  66. package/dist/chunk-c4r1zh9q.js +81 -0
  67. package/dist/{chunk-4tmfjgp8.js.map → chunk-c4r1zh9q.js.map} +4 -4
  68. package/dist/{chunk-1kwqmzgg.js → chunk-d3tf618w.js} +2 -2
  69. package/dist/{chunk-1kwqmzgg.js.map → chunk-d3tf618w.js.map} +1 -1
  70. package/dist/{chunk-0jnbs0pz.js → chunk-dk01r6se.js} +3 -3
  71. package/dist/{chunk-0jnbs0pz.js.map → chunk-dk01r6se.js.map} +1 -1
  72. package/dist/chunk-eby61053.js +9 -0
  73. package/dist/chunk-eby61053.js.map +18 -0
  74. package/dist/{chunk-07r5kadp.js → chunk-eyvtf769.js} +2 -2
  75. package/dist/{chunk-07r5kadp.js.map → chunk-eyvtf769.js.map} +1 -1
  76. package/dist/{chunk-6gs18rp1.js → chunk-fs091xz7.js} +2 -2
  77. package/dist/{chunk-6gs18rp1.js.map → chunk-fs091xz7.js.map} +1 -1
  78. package/dist/{chunk-nfxz92th.js → chunk-g0w87jtw.js} +3 -3
  79. package/dist/{chunk-nfxz92th.js.map → chunk-g0w87jtw.js.map} +1 -1
  80. package/dist/{chunk-0pxd557f.js → chunk-g4gjn481.js} +3 -3
  81. package/dist/{chunk-0pxd557f.js.map → chunk-g4gjn481.js.map} +1 -1
  82. package/dist/chunk-gdegb5t0.js +9 -0
  83. package/dist/chunk-gdegb5t0.js.map +12 -0
  84. package/dist/chunk-gvf1d636.js +4 -0
  85. package/dist/{chunk-5pkt98gq.js.map → chunk-gvf1d636.js.map} +2 -2
  86. package/dist/{chunk-qem8wrcw.js → chunk-hnw1jy86.js} +2 -2
  87. package/dist/{chunk-qem8wrcw.js.map → chunk-hnw1jy86.js.map} +1 -1
  88. package/dist/chunk-hwwp6x2s.js +4 -0
  89. package/dist/{chunk-xra38x4e.js.map → chunk-hwwp6x2s.js.map} +2 -2
  90. package/dist/{chunk-53hv9ceh.js → chunk-j33n723q.js} +3 -3
  91. package/dist/{chunk-53hv9ceh.js.map → chunk-j33n723q.js.map} +1 -1
  92. package/dist/{chunk-cgkafq6b.js → chunk-j4rkk01q.js} +2 -2
  93. package/dist/{chunk-cgkafq6b.js.map → chunk-j4rkk01q.js.map} +1 -1
  94. package/dist/{chunk-h857g5ey.js → chunk-k4mjcvsm.js} +2 -2
  95. package/dist/{chunk-h857g5ey.js.map → chunk-k4mjcvsm.js.map} +1 -1
  96. package/dist/{chunk-karc839d.js → chunk-kv8p4h79.js} +3 -3
  97. package/dist/{chunk-karc839d.js.map → chunk-kv8p4h79.js.map} +1 -1
  98. package/dist/{chunk-hsgfx736.js → chunk-mrf9tjev.js} +2 -2
  99. package/dist/{chunk-hsgfx736.js.map → chunk-mrf9tjev.js.map} +1 -1
  100. package/dist/chunk-nbx9mgmr.js +50 -0
  101. package/dist/chunk-nbx9mgmr.js.map +10 -0
  102. package/dist/{chunk-je4hh59f.js → chunk-ntr81h76.js} +2 -2
  103. package/dist/{chunk-je4hh59f.js.map → chunk-ntr81h76.js.map} +1 -1
  104. package/dist/chunk-p0z35s59.js +4 -0
  105. package/dist/{chunk-89w6dfj9.js.map → chunk-p0z35s59.js.map} +1 -1
  106. package/dist/{chunk-0kj7h7s3.js → chunk-pkzj7c5w.js} +2 -2
  107. package/dist/{chunk-0kj7h7s3.js.map → chunk-pkzj7c5w.js.map} +1 -1
  108. package/dist/{chunk-3g50s2sr.js → chunk-q0xq0pt0.js} +4 -4
  109. package/dist/{chunk-3g50s2sr.js.map → chunk-q0xq0pt0.js.map} +1 -1
  110. package/dist/{chunk-fa46et3w.js → chunk-rxeyhwqz.js} +4 -4
  111. package/dist/{chunk-fa46et3w.js.map → chunk-rxeyhwqz.js.map} +1 -1
  112. package/dist/{chunk-da3wdrnn.js → chunk-w7fpm2pw.js} +2 -2
  113. package/dist/{chunk-da3wdrnn.js.map → chunk-w7fpm2pw.js.map} +1 -1
  114. package/dist/{chunk-yg6pttvd.js → chunk-x80n922n.js} +2 -2
  115. package/dist/{chunk-yg6pttvd.js.map → chunk-x80n922n.js.map} +1 -1
  116. package/dist/chunk-ybqftmjx.js +4 -0
  117. package/dist/{chunk-06aawgwq.js.map → chunk-ybqftmjx.js.map} +2 -2
  118. package/dist/chunk-ygpzyxr6.js +6 -0
  119. package/dist/{chunk-34yzbcrg.js.map → chunk-ygpzyxr6.js.map} +2 -2
  120. package/dist/{chunk-pamswvee.js → chunk-zezdm4ep.js} +3 -3
  121. package/dist/{chunk-pamswvee.js.map → chunk-zezdm4ep.js.map} +1 -1
  122. package/dist/{chunk-3ykxxj3p.js → chunk-zwpx6z5f.js} +2 -2
  123. package/dist/{chunk-g426t44w.js.map → chunk-zwpx6z5f.js.map} +1 -1
  124. package/dist/{chunk-6j0e593s.js → chunk-zznpmnp7.js} +3 -3
  125. package/dist/{chunk-6j0e593s.js.map → chunk-zznpmnp7.js.map} +1 -1
  126. package/dist/client/ClientRouter.d.ts.map +1 -1
  127. package/dist/client/ClientRouterContext.d.ts +2 -0
  128. package/dist/client/ClientRouterContext.d.ts.map +1 -1
  129. package/dist/client/ServerDataProvider.d.ts +2 -0
  130. package/dist/client/ServerDataProvider.d.ts.map +1 -1
  131. package/dist/client/auth/useSignIn.d.ts +0 -3
  132. package/dist/client/auth/useSignIn.d.ts.map +1 -1
  133. package/dist/client/auth/useUser.d.ts +0 -1
  134. package/dist/client/auth/useUser.d.ts.map +1 -1
  135. package/dist/client/index.js +37 -3
  136. package/dist/client/index.js.map +1 -1
  137. package/dist/config/index.js +1 -1
  138. package/dist/container/index.js +2 -2
  139. package/dist/container/index.js.map +1 -1
  140. package/dist/database/index.js +2 -2
  141. package/dist/database/index.js.map +1 -1
  142. package/dist/email/index.js +2 -2
  143. package/dist/email/index.js.map +1 -1
  144. package/dist/facades/index.js +2 -2
  145. package/dist/facades/index.js.map +1 -1
  146. package/dist/foundation/index.js +2 -2
  147. package/dist/foundation/index.js.map +1 -1
  148. package/dist/http/index.js +2 -2
  149. package/dist/http/index.js.map +1 -1
  150. package/dist/i18n/index.js +2 -2
  151. package/dist/i18n/index.js.map +1 -1
  152. package/dist/kernel/index.js +2 -2
  153. package/dist/kernel/index.js.map +1 -1
  154. package/dist/orm/Model.d.ts.map +1 -1
  155. package/dist/orm/compile/fragment.d.ts +19 -0
  156. package/dist/orm/compile/fragment.d.ts.map +1 -1
  157. package/dist/orm/compile/group-by.d.ts +23 -0
  158. package/dist/orm/compile/group-by.d.ts.map +1 -1
  159. package/dist/orm/compile/nested-writes.d.ts +94 -0
  160. package/dist/orm/compile/nested-writes.d.ts.map +1 -1
  161. package/dist/orm/compile/plan-relations.d.ts +21 -9
  162. package/dist/orm/compile/plan-relations.d.ts.map +1 -1
  163. package/dist/orm/compile/where.d.ts +35 -0
  164. package/dist/orm/compile/where.d.ts.map +1 -1
  165. package/dist/orm/compile/write.d.ts.map +1 -1
  166. package/dist/orm/corpus.d.ts.map +1 -1
  167. package/dist/orm/defaults.d.ts +37 -30
  168. package/dist/orm/defaults.d.ts.map +1 -1
  169. package/dist/orm/dialect/index.d.ts +34 -0
  170. package/dist/orm/dialect/index.d.ts.map +1 -1
  171. package/dist/orm/dialect/postgres.d.ts +1 -0
  172. package/dist/orm/dialect/postgres.d.ts.map +1 -1
  173. package/dist/orm/dialect/sqlite.d.ts +1 -0
  174. package/dist/orm/dialect/sqlite.d.ts.map +1 -1
  175. package/dist/orm/errors.d.ts +176 -6
  176. package/dist/orm/errors.d.ts.map +1 -1
  177. package/dist/orm/fixtures.d.ts +118 -0
  178. package/dist/orm/fixtures.d.ts.map +1 -1
  179. package/dist/orm/index.d.ts +4 -3
  180. package/dist/orm/index.d.ts.map +1 -1
  181. package/dist/orm/index.js +4 -4
  182. package/dist/orm/index.js.map +14 -13
  183. package/dist/orm/json-param.d.ts +27 -0
  184. package/dist/orm/json-param.d.ts.map +1 -0
  185. package/dist/orm/page-args.d.ts +108 -0
  186. package/dist/orm/page-args.d.ts.map +1 -0
  187. package/dist/orm/plan.d.ts.map +1 -1
  188. package/dist/orm/policy.d.ts +42 -0
  189. package/dist/orm/policy.d.ts.map +1 -1
  190. package/dist/orm/registration.d.ts.map +1 -1
  191. package/dist/orm/relation-filters.d.ts +23 -0
  192. package/dist/orm/relation-filters.d.ts.map +1 -1
  193. package/dist/orm/schema.d.ts +71 -11
  194. package/dist/orm/schema.d.ts.map +1 -1
  195. package/dist/orm/sql.d.ts +15 -4
  196. package/dist/orm/sql.d.ts.map +1 -1
  197. package/dist/orm/types.d.ts +441 -42
  198. package/dist/orm/types.d.ts.map +1 -1
  199. package/dist/server/httpProd.d.ts.map +1 -1
  200. package/dist/server/index.js +2 -2
  201. package/dist/server/index.js.map +1 -1
  202. package/dist/server/modulePreloads.d.ts +40 -0
  203. package/dist/server/modulePreloads.d.ts.map +1 -0
  204. package/dist/services/index.js +4 -4
  205. package/dist/services/index.js.map +2 -2
  206. package/dist/services/router/ViewRouteDispatcher.d.ts +35 -1
  207. package/dist/services/router/ViewRouteDispatcher.d.ts.map +1 -1
  208. package/dist/support/index.js +2 -2
  209. package/dist/support/index.js.map +1 -1
  210. package/package.json +1 -1
  211. package/dist/chunk-06aawgwq.js +0 -4
  212. package/dist/chunk-34yzbcrg.js +0 -6
  213. package/dist/chunk-4tmfjgp8.js +0 -81
  214. package/dist/chunk-5ngwktak.js +0 -5
  215. package/dist/chunk-5pkt98gq.js +0 -4
  216. package/dist/chunk-5tfyjdad.js +0 -5
  217. package/dist/chunk-5tfyjdad.js.map +0 -13
  218. package/dist/chunk-89w6dfj9.js +0 -4
  219. package/dist/chunk-8seh6182.js +0 -31
  220. package/dist/chunk-8seh6182.js.map +0 -10
  221. package/dist/chunk-ed9a34ey.js +0 -9
  222. package/dist/chunk-ed9a34ey.js.map +0 -18
  223. package/dist/chunk-hmc7wzdk.js +0 -4
  224. package/dist/chunk-q8j8bhv2.js +0 -9
  225. package/dist/chunk-q8j8bhv2.js.map +0 -11
  226. package/dist/chunk-wed7a2t8.js +0 -7
  227. package/dist/chunk-wed7a2t8.js.map +0 -12
  228. package/dist/chunk-xra38x4e.js +0 -4
  229. /package/dist/{chunk-r1v5qe5j.js.map → chunk-53w1njqz.js.map} +0 -0
  230. /package/dist/{chunk-ke0fje4r.js.map → chunk-5t2c9194.js.map} +0 -0
package/dist/app/index.js CHANGED
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{o as a}from"../chunk-ewgv1j8q.js";import"../chunk-3ykxxj3p.js";export{a as App};
2
+ import{o as a}from"../chunk-ewgv1j8q.js";import"../chunk-zwpx6z5f.js";export{a as App};
3
3
 
4
4
  //# debugId=3341D7E6EC94F28A64756E2164756E21
@@ -68,7 +68,6 @@ export declare class AuthController extends Controller {
68
68
  email: string | null;
69
69
  emailVerifiedAt: Date | null;
70
70
  globalRole: number;
71
- organizationId: number | null;
72
71
  accounts: import("./types").Account[];
73
72
  extension: Record<string, any>;
74
73
  }>;
@@ -79,7 +78,6 @@ export declare class AuthController extends Controller {
79
78
  email: string | null;
80
79
  emailVerifiedAt: Date | null;
81
80
  globalRole: number;
82
- organizationId: number | null;
83
81
  accounts: import("./types").Account[];
84
82
  extension: Record<string, any>;
85
83
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"AuthController.d.ts","sourceRoot":"","sources":["../../auth/AuthController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAMlD,OAAO,KAAK,EAAc,IAAI,EAAE,MAAM,SAAS,CAAC;AAGhD,cAAM,aAAc,SAAQ,WAAW,CACrC;IACE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB,EACD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CACvB;IACC,MAAM;;;;;;;;;MASJ;CACH;AAED,cAAM,qBAAsB,SAAQ,WAAW,CAC7C;IACE,KAAK,EAAE,MAAM,CAAC;CACf,EACD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CACvB;IACC,MAAM;;;;;MAKJ;CACH;AAED,cAAM,oBAAqB,SAAQ,WAAW,CAC5C;IACE,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,EACD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CACvB;IACC,MAAM;;;;;MAKJ;CACH;AAED,qBAAa,cAAe,SAAQ,UAAU;IACtC,EAAE;IAUF,WAAW,CAAC,GAAG;eAA4B,MAAM;6BAAK;;;IAmBtD,mBAAmB,CAAC,GAAG,4DAAoB;;;;;;;IAwC3C,eAAe,CACnB,GAAG;eAA4B,MAAM;aAAO,MAAM;6BAAK;IAoCnD,aAAa,CAAC,GAAG;eAA4B,MAAM;aAAO,MAAM;6BAAK;;;IAmCrE,QAAQ,CAAC,GAAG,gBAAsB;;;;;;;;;;;IAgDlC,MAAM,CAAC,GAAG,gBAAsB;;;;;;;;;;;IAgDhC,MAAM;IAmEN,OAAO,CAAC,GAAG,4DAAoB;IAqB/B,cAAc,CAAC,GAAG,wBAA8B;IA6BhD,aAAa,CAAC,GAAG,uBAA6B;IAsD9C,cAAc,CAClB,GAAG;qBAAkC,MAAM;qBAAe,MAAM;6BAAK;IA+BjE,aAAa,CAAC,GAAG,4DAAoB;;;IAcrC,aAAa,CAAC,GAAG,4DAAoB;;;IAoErC,oBAAoB,CAAC,GAAG;eAA4B,MAAM;6BAAK;;;CAetE"}
1
+ {"version":3,"file":"AuthController.d.ts","sourceRoot":"","sources":["../../auth/AuthController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAMlD,OAAO,KAAK,EAAc,IAAI,EAAE,MAAM,SAAS,CAAC;AAGhD,cAAM,aAAc,SAAQ,WAAW,CACrC;IACE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB,EACD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CACvB;IACC,MAAM;;;;;;;;;MASJ;CACH;AAED,cAAM,qBAAsB,SAAQ,WAAW,CAC7C;IACE,KAAK,EAAE,MAAM,CAAC;CACf,EACD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CACvB;IACC,MAAM;;;;;MAKJ;CACH;AAED,cAAM,oBAAqB,SAAQ,WAAW,CAC5C;IACE,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,EACD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CACvB;IACC,MAAM;;;;;MAKJ;CACH;AAED,qBAAa,cAAe,SAAQ,UAAU;IACtC,EAAE;IAUF,WAAW,CAAC,GAAG;eAA4B,MAAM;6BAAK;;;IAmBtD,mBAAmB,CAAC,GAAG,4DAAoB;;;;;;;IAwC3C,eAAe,CACnB,GAAG;eAA4B,MAAM;aAAO,MAAM;6BAAK;IAoCnD,aAAa,CAAC,GAAG;eAA4B,MAAM;aAAO,MAAM;6BAAK;;;IAmCrE,QAAQ,CAAC,GAAG,gBAAsB;;;;;;;;;;IAgDlC,MAAM,CAAC,GAAG,gBAAsB;;;;;;;;;;IAgDhC,MAAM;IA6FN,OAAO,CAAC,GAAG,4DAAoB;IAqB/B,cAAc,CAAC,GAAG,wBAA8B;IA6BhD,aAAa,CAAC,GAAG,uBAA6B;IAsD9C,cAAc,CAClB,GAAG;qBAAkC,MAAM;qBAAe,MAAM;6BAAK;IA+BjE,aAAa,CAAC,GAAG,4DAAoB;;;IAcrC,aAAa,CAAC,GAAG,4DAAoB;;;IAgGrC,oBAAoB,CAAC,GAAG;eAA4B,MAAM;6BAAK;;;CAetE"}
@@ -16,6 +16,24 @@ export declare class UserProvider {
16
16
  * server error. One wrapper, applied uniformly, so no method can forget.
17
17
  */
18
18
  protected run<T>(fn: () => Promise<T>): Promise<T>;
19
+ /**
20
+ * Runs `fn` inside a transaction on the connection the `User` model lives on.
21
+ * Every ORM query in it joins automatically, at any call depth — see
22
+ * `Model.transaction`.
23
+ *
24
+ * Here so that `AuthController` can make a sign-up atomic without importing a
25
+ * model: the controller has none, and reaching for a bare `Model.transaction`
26
+ * would open on the ambient connection rather than the one this provider's
27
+ * models are bound to. Nesting is a savepoint, so an application that already
28
+ * wrapped its own transaction around a sign-up composes instead of breaking.
29
+ *
30
+ * Deliberately **not** wrapped in `run`. `asSystem` is applied per query by
31
+ * the methods below, which keeps it to this class's own reads and writes;
32
+ * hoisting it here would silently suspend policies for `config.onUserCreated`
33
+ * too, and an application's provisioning writes should run under the same
34
+ * policy resolution as the rest of its code.
35
+ */
36
+ transaction<T>(fn: () => Promise<T>): Promise<T>;
19
37
  /**
20
38
  * Note the password is **removed from the returned object**, matching Prisma's
21
39
  * adapter, which uses `omit: { password: true }`.
@@ -1 +1 @@
1
- {"version":3,"file":"UserProvider.d.ts","sourceRoot":"","sources":["../../auth/UserProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EACP,UAAU,EACV,iBAAiB,EACjB,wBAAwB,EACxB,4BAA4B,EAC5B,iBAAiB,EACjB,uBAAuB,EACvB,cAAc,EACd,4BAA4B,EAC5B,iBAAiB,EACjB,0BAA0B,EAC1B,eAAe,EACf,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,IAAI,EACL,MAAM,SAAS,CAAC;AAqHjB,qBAAa,YAAY;IAMX,SAAS,CAAC,MAAM,EAAE,UAAU;IALxC;;;;OAIG;gBACmB,MAAM,GAAE,UAA6B;IAE3D;;;;;;;OAOG;IACH,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIlD;;;;;;;;;;;;;;;;OAgBG;IACG,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/C,kBAAkB,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAa/D,sBAAsB,CAC1B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,IAAI,CAAC;IAaV,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAMhE,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASxC,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC;IAMhE,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC;IASlE,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IA8BnE,aAAa,CACjB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAkB5B,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQrD,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpD,wBAAwB,CAC5B,IAAI,EAAE,4BAA4B,GACjC,OAAO,CAAC,MAAM,CAAC;IAWZ,sBAAsB,CAC1B,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAS/B,wBAAwB,CAC5B,IAAI,EAAE,4BAA4B,GACjC,OAAO,CAAC,MAAM,CAAC;IAMZ,cAAc,CAClB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,UAAU,CAAC;IAQhB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQzD,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAY/D,oBAAoB,CACxB,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAQpC,sBAAsB,CAAC,IAAI,EAAE;QACjC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAgBlB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlD,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,GAAG,CAAC;CAKvE"}
1
+ {"version":3,"file":"UserProvider.d.ts","sourceRoot":"","sources":["../../auth/UserProvider.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,59 @@ export interface AuthConfig {
15
15
  generateEmailVerificationToken?: (email: string) => Promise<string> | string;
16
16
  generateMagicLinkToken?: (email: string) => Promise<string> | string;
17
17
  extendSession?: <T extends User>(user: T) => Promise<any> | any;
18
+ /**
19
+ * **This one is not a notification, whatever the name suggests.** It runs
20
+ * *inside* the transaction that creates the user, after the row is written
21
+ * and before it commits, and a throw rolls the user back. Every other `onXxx`
22
+ * here fires after its work is committed and can only report; this one
23
+ * participates in the write.
24
+ *
25
+ * The past tense is worth distrusting, then, and it is deliberate that this
26
+ * paragraph comes first: an application that mistakes this for `onSignUp`
27
+ * with better timing, and swallows its own errors inside it, gets exactly the
28
+ * orphaned user the hook exists to prevent.
29
+ *
30
+ * That is what it is for: an application that must create rows *alongside*
31
+ * every user — an organization, a workspace, a default settings row — has
32
+ * nowhere else to do it atomically. `onSignUp` fires after the commit on both
33
+ * paths, so provisioning there leaves an orphaned user when the second insert
34
+ * fails, which is a failure that only turns up in production.
35
+ *
36
+ * Fires on all three creation paths — email/password sign-up, invited
37
+ * sign-up, and first OAuth sign-in — and receives the same password-stripped
38
+ * user the endpoint returns, so a hook that logs its argument does not log a
39
+ * credential hash.
40
+ *
41
+ * On the invited path the inviting organization's `Account` row is already
42
+ * written when this runs, so a hook provisioning an own workspace should
43
+ * check before adding a second one.
44
+ *
45
+ * Four constraints come from where this runs:
46
+ *
47
+ * - **Writes to a policied model need `Model.asSystem`.** This runs with no
48
+ * user in scope — a sign-up has not authenticated anybody yet — so a policy
49
+ * whose `scope` or `onCreate` reads `ctx.user` raises `PolicyDeniedError`
50
+ * under deny-by-default, and the rollback takes the user with it. That is
51
+ * the correct behaviour and the reason this hook is *not* wrapped in
52
+ * `UserProvider.run`: suspending policies for application code is a
53
+ * sentence somebody types, never something a framework does quietly. Say it
54
+ * at the call site:
55
+ *
56
+ * await Model.asSystem(() => Organization.create({ data }))
57
+ *
58
+ * - **Errors thrown here reach the client as-is.** A `ValidationError` is a
59
+ * 400 on `POST /sign-up`; anything else is a 500. On the OAuth path there
60
+ * is no form to fail — a throw is a 500 page mid-redirect. Either way no
61
+ * user is created.
62
+ * - **Raw queries do not join the transaction.** ORM calls at any depth do,
63
+ * automatically; a hand-written Prisma or `DB` statement runs outside and
64
+ * survives the rollback.
65
+ * - **`Promise.all` over ORM calls is not safe here.** The transaction holds
66
+ * one reserved connection, so await them in sequence. Keep network and
67
+ * filesystem I/O out entirely — the connection is held for as long as this
68
+ * runs.
69
+ */
70
+ onUserCreated?: (user: User) => Promise<void>;
18
71
  onSignUp?: (user: User, verificationToken: string, search: Record<string, string>) => Promise<void> | void;
19
72
  onSignIn?: (session: any, search: Record<string, string>) => Promise<void> | void;
20
73
  onSignOut?: (session: any) => Promise<void> | void;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../auth/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAI3D,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,6BAA6B,CAAC,EAAE,MAAM,CAAC;IAEvC,aAAa,CAAC,EAAE,UAAU,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAE/C,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,2BAA2B,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9D,8BAA8B,CAAC,EAAE,CAC/B,KAAK,EAAE,MAAM,KACV,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAC9B,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAGrE,aAAa,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAEhE,QAAQ,CAAC,EAAE,CACT,IAAI,EAAE,IAAI,EACV,iBAAiB,EAAE,MAAM,EACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC3B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,CACT,OAAO,EAAE,GAAG,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC3B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACnD,gBAAgB,CAAC,EAAE,CACjB,IAAI,EAAE,GAAG,EACT,iBAAiB,EAAE,MAAM,KACtB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1B,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACzD,kBAAkB,CAAC,EAAE,CACnB,OAAO,EAAE,GAAG,EACZ,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,KAChD,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAE/D;AAID,wBAAgB,kBAAkB,CAChC,MAAM,GAAE,UAAe,GACtB,QAAQ,CAAC,UAAU,CAAC,CA2CtB"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../auth/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAI3D,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,6BAA6B,CAAC,EAAE,MAAM,CAAC;IAEvC,aAAa,CAAC,EAAE,UAAU,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAE/C,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,2BAA2B,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9D,8BAA8B,CAAC,EAAE,CAC/B,KAAK,EAAE,MAAM,KACV,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAC9B,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAGrE,aAAa,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAEhE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmDG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9C,QAAQ,CAAC,EAAE,CACT,IAAI,EAAE,IAAI,EACV,iBAAiB,EAAE,MAAM,EACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC3B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,CACT,OAAO,EAAE,GAAG,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC3B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACnD,gBAAgB,CAAC,EAAE,CACjB,IAAI,EAAE,GAAG,EACT,iBAAiB,EAAE,MAAM,KACtB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1B,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACzD,kBAAkB,CAAC,EAAE,CACnB,OAAO,EAAE,GAAG,EACZ,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,KAChD,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAE/D;AAID,wBAAgB,kBAAkB,CAChC,MAAM,GAAE,UAAe,GACtB,QAAQ,CAAC,UAAU,CAAC,CA8CtB"}
@@ -37,7 +37,6 @@ export declare class AuthApiRouter extends ApiRouter {
37
37
  email: string | null;
38
38
  emailVerifiedAt: Date | null;
39
39
  globalRole: number;
40
- organizationId: number | null;
41
40
  accounts: import("./types").Account[];
42
41
  extension: Record<string, any>;
43
42
  }>, Record<string, string>>;
@@ -51,7 +50,6 @@ export declare class AuthApiRouter extends ApiRouter {
51
50
  email: string | null;
52
51
  emailVerifiedAt: Date | null;
53
52
  globalRole: number;
54
- organizationId: number | null;
55
53
  accounts: import("./types").Account[];
56
54
  extension: Record<string, any>;
57
55
  }>, Record<string, string>>;
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../auth/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,cAAM,eAAgB,SAAQ,UAAU;IACtC,WAAW,WAAqB;IAChC,MAAM;;;;;;;MAMJ;CACH;AAED,qBAAa,cAAe,SAAQ,UAAU;IAC5C,WAAW,WAAqB;IAChC,MAAM;;;;;;;;;MAMJ;CACH;AAED,qBAAa,aAAc,SAAQ,SAAS;IAC1C,WAAW,WAAqB;IAChC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAaJ;CACH"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../auth/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,cAAM,eAAgB,SAAQ,UAAU;IACtC,WAAW,WAAqB;IAChC,MAAM;;;;;;;MAMJ;CACH;AAED,qBAAa,cAAe,SAAQ,UAAU;IAC5C,WAAW,WAAqB;IAChC,MAAM;;;;;;;;;MAMJ;CACH;AAED,qBAAa,aAAc,SAAQ,SAAS;IAC1C,WAAW,WAAqB;IAChC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAaJ;CACH"}
@@ -64,6 +64,13 @@ export type Account = {
64
64
  organizationRole: number;
65
65
  organization: Organization;
66
66
  };
67
+ /**
68
+ * A user's organizations are reached through `accounts`, each of which carries
69
+ * the organization it is a membership in. There is deliberately no
70
+ * `organizationId` here: a user may be in more than one organization, so a
71
+ * single column could not answer the question, and `SESSION_USER` no longer
72
+ * selects one — see the note there.
73
+ */
67
74
  export interface User {
68
75
  id: number;
69
76
  publicId: string;
@@ -72,7 +79,6 @@ export interface User {
72
79
  emailVerifiedAt: Date | null;
73
80
  globalRole: number;
74
81
  password: string | null;
75
- organizationId: number | null;
76
82
  accounts: Account[];
77
83
  extension: Record<string, any>;
78
84
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../auth/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../auth/types.ts"],"names":[],"mappings":"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"}
package/dist/bin/gemi.js CHANGED
@@ -36732,6 +36732,174 @@ var EXTRACTION_TARGETS = {
36732
36732
  };
36733
36733
  var TODO = "// TODO(gemi-migrate):";
36734
36734
 
36735
+ // bin/migrate/orm.ts
36736
+ var P2002_HAZARD = '`"P2002"` stops matching the moment the write it guards moves onto the ORM. ' + "gemi raises `UniqueConstraintError`, which carries `model`, `operation`, " + "`fields` and `constraint` and no `code` anywhere on its prototype chain \u2014 so " + "the check returns false, the recovery branch it exists to run never runs, and " + "nothing reports it: it compiles, it runs, and a test that mocks " + '`{ code: "P2002" }` still passes while the branch it certifies is dead. Use ' + "`isUniqueConstraintError` from `gemi/orm`. While some writes in this app are " + "still on Prisma, keep the old check as a second arm \u2014 " + '`isUniqueConstraintError(e) || (isRecord(e) && e.code === "P2002")` \u2014 and ' + "delete that arm when the last Prisma writer goes. See UPGRADE.md.";
36737
+ var PAGE_ARGUMENT_HAZARD = "`take` and `skip` must be integers \u2014 gemi refuses a fractional one with " + "`InvalidArgumentError` where Prisma truncated it, because SQLite answers " + "`limit 1.5` with an opaque driver error and Postgres rounds it up to 2 rows. " + "This value is not an integer literal, which is usually fine: confirm it is " + "truncated where it enters the app rather than reading this as a bug. " + '`Number(req.search.get("limit"))` is the shape that breaks, and a fractional ' + "`page` is the one to look hardest for \u2014 it never reaches the ORM itself, it " + "reaches it multiplied, as a fractional `skip`. `paginate({ page, perPage })` " + "from `gemi/orm` truncates and clamps in one place and cannot produce a value " + "the ORM refuses.";
36738
+ function annotateOrmPortHazards(source, label, notes) {
36739
+ const spliceable = !JSX_FILE.test(label);
36740
+ let result = source;
36741
+ if (importsModelSurface(result)) {
36742
+ result = runPass(result, prismaErrorCodeLiterals(result), '`"P2002"`', P2002_HAZARD, label, notes, spliceable);
36743
+ }
36744
+ result = runPass(result, nonIntegerPageArguments(result), "`take` / `skip`", PAGE_ARGUMENT_HAZARD, label, notes, spliceable);
36745
+ return result;
36746
+ }
36747
+ var JSX_FILE = /\.[jt]sx$/i;
36748
+ function runPass(src, hits, what, message, label, notes, spliceable) {
36749
+ if (!hits.length)
36750
+ return src;
36751
+ if (!spliceable) {
36752
+ notes.push({
36753
+ file: label,
36754
+ message: `${what} on ${lineList(src, hits)} \u2014 reported rather than annotated: ` + `a \`//\` line inside JSX children is page text, not a comment, so ` + `writing one here would stop the file parsing. ${message}`
36755
+ });
36756
+ return src;
36757
+ }
36758
+ const marked = annotateLines(src, hits, message);
36759
+ if (marked.annotated > 0) {
36760
+ notes.push({
36761
+ file: label,
36762
+ message: `${what} (${occurrences(hits.length)}) \u2014 ${message}`
36763
+ });
36764
+ }
36765
+ return marked.text;
36766
+ }
36767
+ var occurrences = (count) => count === 1 ? "1 occurrence" : `${count} occurrences`;
36768
+ function lineList(src, offsets) {
36769
+ const numbers = [];
36770
+ for (const offset of offsets) {
36771
+ let line = 1;
36772
+ for (let i = 0;i < offset && i < src.length; i++) {
36773
+ if (src[i] === `
36774
+ `)
36775
+ line++;
36776
+ }
36777
+ if (numbers[numbers.length - 1] !== line)
36778
+ numbers.push(line);
36779
+ }
36780
+ return numbers.length === 1 ? `line ${numbers[0]}` : `lines ${numbers.join(", ")}`;
36781
+ }
36782
+ function prismaErrorCodeLiterals(src) {
36783
+ const hits = [];
36784
+ let i = 0;
36785
+ while (i < src.length) {
36786
+ const end = skipAtomic(src, i);
36787
+ if (end === null || end <= i) {
36788
+ i++;
36789
+ continue;
36790
+ }
36791
+ const span = src.slice(i, end);
36792
+ if (/^["'`]/.test(span) && span.slice(1, -1) === "P2002")
36793
+ hits.push(i);
36794
+ i = end;
36795
+ }
36796
+ return hits;
36797
+ }
36798
+ var MODEL_SURFACE = /(^|\/)models(\/|$)/;
36799
+ function importsModelSurface(src) {
36800
+ return parseImports(src).some((decl) => decl.module === "gemi/orm" || MODEL_SURFACE.test(decl.module));
36801
+ }
36802
+ var PAGE_KEYS = ["take", "skip"];
36803
+ function nonIntegerPageArguments(src) {
36804
+ const hits = [];
36805
+ let i = 0;
36806
+ while (i < src.length) {
36807
+ const skipped = skipAtomic(src, i);
36808
+ if (skipped !== null && skipped > i) {
36809
+ i = skipped;
36810
+ continue;
36811
+ }
36812
+ const key = PAGE_KEYS.find((candidate) => src.startsWith(candidate, i));
36813
+ if (!key || /[\w$.]/.test(src[i - 1] ?? "")) {
36814
+ i++;
36815
+ continue;
36816
+ }
36817
+ let after = skipTrivia(src, i + key.length);
36818
+ if (src[after] === "?")
36819
+ after = skipTrivia(src, after + 1);
36820
+ if (src[after] !== ":") {
36821
+ i += key.length;
36822
+ continue;
36823
+ }
36824
+ const valueStart = skipTrivia(src, after + 1);
36825
+ const valueEnd = endOfValue(src, valueStart);
36826
+ if (!isIntegerArgument(src.slice(valueStart, valueEnd).trim())) {
36827
+ hits.push(i);
36828
+ }
36829
+ i = Math.max(valueEnd, i + key.length);
36830
+ }
36831
+ return hits;
36832
+ }
36833
+ var CLOSERS = { "(": ")", "[": "]", "{": "}" };
36834
+ function endOfValue(src, from) {
36835
+ let i = from;
36836
+ while (i < src.length) {
36837
+ const skipped = skipAtomic(src, i);
36838
+ if (skipped !== null && skipped > i) {
36839
+ i = skipped;
36840
+ continue;
36841
+ }
36842
+ const c = src[i];
36843
+ const closer = CLOSERS[c];
36844
+ if (closer) {
36845
+ i = matchDelims(src, i, c, closer);
36846
+ continue;
36847
+ }
36848
+ if (c === "," || c === ")" || c === "]" || c === "}" || c === ";" || c === `
36849
+ `) {
36850
+ return i;
36851
+ }
36852
+ i++;
36853
+ }
36854
+ return src.length;
36855
+ }
36856
+ var INTEGER_LITERAL = /^-?\d+(?:_\d+)*$/;
36857
+ var TRUNCATING_CALL = /^(?:Math\.(?:trunc|floor|ceil|round)|(?:Number\.)?parseInt)\s*(?=\()/;
36858
+ var TYPE_POSITION = /^number(?:\s*\|\s*undefined)?$/;
36859
+ function isIntegerArgument(value) {
36860
+ if (INTEGER_LITERAL.test(value))
36861
+ return true;
36862
+ if (TYPE_POSITION.test(value))
36863
+ return true;
36864
+ const call = TRUNCATING_CALL.exec(value);
36865
+ if (!call)
36866
+ return false;
36867
+ const open = call[0].length;
36868
+ return value[open] === "(" && matchDelims(value, open, "(", ")") === value.length;
36869
+ }
36870
+ function annotateLines(src, offsets, message) {
36871
+ if (!offsets.length)
36872
+ return { text: src, annotated: 0 };
36873
+ const lines = src.split(`
36874
+ `);
36875
+ const targets = new Set;
36876
+ let cursor = 0;
36877
+ let next = 0;
36878
+ for (let index = 0;index < lines.length && next < offsets.length; index++) {
36879
+ const end = cursor + lines[index].length;
36880
+ while (next < offsets.length && offsets[next] <= end) {
36881
+ targets.add(index);
36882
+ next++;
36883
+ }
36884
+ cursor = end + 1;
36885
+ }
36886
+ const out = [];
36887
+ let annotated = 0;
36888
+ for (let index = 0;index < lines.length; index++) {
36889
+ const line = lines[index];
36890
+ if (targets.has(index)) {
36891
+ const previous = out[out.length - 1] ?? "";
36892
+ if (!previous.includes(message)) {
36893
+ out.push(`${/^[ \t]*/.exec(line)[0]}${TODO} ${message}`);
36894
+ annotated++;
36895
+ }
36896
+ }
36897
+ out.push(line);
36898
+ }
36899
+ return { text: out.join(`
36900
+ `), annotated };
36901
+ }
36902
+
36735
36903
  // bin/migrate/index.ts
36736
36904
  var GEMI_MODULES = [
36737
36905
  "gemi/services",
@@ -36835,6 +37003,34 @@ async function runMigrate(options) {
36835
37003
  if (rewritten !== source)
36836
37004
  changes.push({ file, contents: rewritten });
36837
37005
  }
37006
+ const pending = new Map;
37007
+ const removed = new Set;
37008
+ changes.forEach((change, index) => {
37009
+ if (change.contents === null)
37010
+ removed.add(change.file);
37011
+ else
37012
+ pending.set(change.file, index);
37013
+ });
37014
+ const swept = new Set;
37015
+ for (const file of walk(appDir)) {
37016
+ if (removed.has(file))
37017
+ continue;
37018
+ swept.add(file);
37019
+ const index = pending.get(file);
37020
+ const before = index === undefined ? readFileSync(file, "utf8") : changes[index].contents;
37021
+ const after = annotateOrmPortHazards(before, rel(rootDir, file), notes);
37022
+ if (after === before)
37023
+ continue;
37024
+ if (index === undefined)
37025
+ changes.push({ file, contents: after });
37026
+ else
37027
+ changes[index].contents = after;
37028
+ }
37029
+ for (const change of changes) {
37030
+ if (change.contents === null || swept.has(change.file))
37031
+ continue;
37032
+ change.contents = annotateOrmPortHazards(change.contents, rel(rootDir, change.file), notes);
37033
+ }
36838
37034
  for (const change of changes) {
36839
37035
  const label = rel(rootDir, change.file);
36840
37036
  if (change.contents === null) {
@@ -37686,22 +37882,43 @@ function auditModules(orm, files, baseline) {
37686
37882
  orm.registry.register(name, model);
37687
37883
  };
37688
37884
  const findings = [];
37689
- for (const file of files) {
37690
- restore();
37691
- for (const problem of orm.auditModelRegistrations(file.module)) {
37692
- if (problem.carries !== "queried")
37693
- continue;
37694
- findings.push({
37695
- file: file.label,
37696
- specifier: file.specifier,
37697
- className: problem.queried,
37698
- message: problem.message
37699
- });
37885
+ const unreadable = [];
37886
+ try {
37887
+ for (const file of files) {
37888
+ restore();
37889
+ const problems = auditOne(orm, file, unreadable);
37890
+ for (const problem of problems) {
37891
+ if (problem.carries !== "queried")
37892
+ continue;
37893
+ findings.push({
37894
+ file: file.label,
37895
+ specifier: file.specifier,
37896
+ className: problem.queried,
37897
+ message: problem.message
37898
+ });
37899
+ }
37700
37900
  }
37901
+ } finally {
37902
+ restore();
37903
+ }
37904
+ if (unreadable.length > 0) {
37905
+ throw new CheckModelsError(`${unreadable.length === 1 ? "A file" : `${unreadable.length} files`} ` + `could not be checked:
37906
+
37907
+ ${unreadable.join(`
37908
+
37909
+ `)}`);
37701
37910
  }
37702
- restore();
37703
37911
  return findings;
37704
37912
  }
37913
+ function auditOne(orm, file, unreadable) {
37914
+ try {
37915
+ return orm.auditModelRegistrations(file.module);
37916
+ } catch (error) {
37917
+ unreadable.push(`${file.label}:
37918
+ ${error.message}`);
37919
+ return [];
37920
+ }
37921
+ }
37705
37922
 
37706
37923
  class CheckModelsError extends Error {
37707
37924
  }
@@ -38241,5 +38458,5 @@ program.command("app:route-manifest").action(async () => {
38241
38458
  });
38242
38459
  program.parse();
38243
38460
 
38244
- //# debugId=463261AABB9AC4E664756E2164756E21
38461
+ //# debugId=55F098D9978D9B5064756E2164756E21
38245
38462
  //# sourceMappingURL=gemi.js.map