gemi 0.69.0 → 0.70.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 (181) hide show
  1. package/dist/ai/index.js +2 -2
  2. package/dist/ai/index.js.map +1 -1
  3. package/dist/app/index.js +1 -1
  4. package/dist/auth/AuthManager.d.ts +46 -2
  5. package/dist/auth/AuthManager.d.ts.map +1 -1
  6. package/dist/auth/UserProvider.d.ts +18 -0
  7. package/dist/auth/UserProvider.d.ts.map +1 -1
  8. package/dist/auth/config.d.ts +36 -1
  9. package/dist/auth/config.d.ts.map +1 -1
  10. package/dist/auth/sessionToken.d.ts +23 -1
  11. package/dist/auth/sessionToken.d.ts.map +1 -1
  12. package/dist/broadcasting/index.js +1 -1
  13. package/dist/bun/plugin.js +1 -1
  14. package/dist/bun/preload.js +1 -1
  15. package/dist/{chunk-heq6gzp4.js → chunk-083j4ktb.js} +2 -2
  16. package/dist/{chunk-heq6gzp4.js.map → chunk-083j4ktb.js.map} +1 -1
  17. package/dist/{chunk-pc3rjntj.js → chunk-2qyghpe0.js} +2 -2
  18. package/dist/{chunk-pc3rjntj.js.map → chunk-2qyghpe0.js.map} +1 -1
  19. package/dist/{chunk-5yqdkz6y.js → chunk-2yrgzmpk.js} +2 -2
  20. package/dist/{chunk-5yqdkz6y.js.map → chunk-2yrgzmpk.js.map} +1 -1
  21. package/dist/{chunk-zds05es5.js → chunk-3296fwss.js} +2 -2
  22. package/dist/{chunk-zds05es5.js.map → chunk-3296fwss.js.map} +1 -1
  23. package/dist/{chunk-xgcydqxz.js → chunk-44jp4cb2.js} +2 -2
  24. package/dist/{chunk-xgcydqxz.js.map → chunk-44jp4cb2.js.map} +1 -1
  25. package/dist/{chunk-4hw93e3y.js → chunk-4azcbkxm.js} +1 -1
  26. package/dist/{chunk-9f3d16m8.js → chunk-4j6vrkmj.js} +2 -2
  27. package/dist/{chunk-9f3d16m8.js.map → chunk-4j6vrkmj.js.map} +1 -1
  28. package/dist/chunk-4t9zv1rk.js +19 -0
  29. package/dist/{chunk-rnpc26wd.js.map → chunk-4t9zv1rk.js.map} +6 -6
  30. package/dist/{chunk-ynabq1zf.js → chunk-5fxz3knw.js} +2 -2
  31. package/dist/{chunk-ynabq1zf.js.map → chunk-5fxz3knw.js.map} +1 -1
  32. package/dist/{chunk-dvc9dgtg.js → chunk-5p4ywbsz.js} +2 -2
  33. package/dist/{chunk-dvc9dgtg.js.map → chunk-5p4ywbsz.js.map} +1 -1
  34. package/dist/{chunk-mwm0zfn6.js → chunk-5qnk24jy.js} +2 -2
  35. package/dist/{chunk-mwm0zfn6.js.map → chunk-5qnk24jy.js.map} +1 -1
  36. package/dist/{chunk-e5vt4nq9.js → chunk-63n765wn.js} +2 -2
  37. package/dist/{chunk-e5vt4nq9.js.map → chunk-63n765wn.js.map} +1 -1
  38. package/dist/{chunk-jvktxnxa.js → chunk-7tmqw6a5.js} +2 -2
  39. package/dist/{chunk-jvktxnxa.js.map → chunk-7tmqw6a5.js.map} +1 -1
  40. package/dist/{chunk-gapx8ft1.js → chunk-8nzcqw9n.js} +2 -2
  41. package/dist/{chunk-gapx8ft1.js.map → chunk-8nzcqw9n.js.map} +1 -1
  42. package/dist/{chunk-w8jp1t7b.js → chunk-ah13y0hy.js} +2 -2
  43. package/dist/{chunk-w8jp1t7b.js.map → chunk-ah13y0hy.js.map} +1 -1
  44. package/dist/{chunk-e2ycfg1s.js → chunk-ayja3wqv.js} +2 -2
  45. package/dist/{chunk-e2ycfg1s.js.map → chunk-ayja3wqv.js.map} +1 -1
  46. package/dist/{chunk-k2hjegjw.js → chunk-b004v4jt.js} +2 -2
  47. package/dist/{chunk-k2hjegjw.js.map → chunk-b004v4jt.js.map} +1 -1
  48. package/dist/{chunk-wz67xydv.js → chunk-bq3sc20y.js} +2 -2
  49. package/dist/{chunk-wz67xydv.js.map → chunk-bq3sc20y.js.map} +1 -1
  50. package/dist/{chunk-qz8n10v1.js → chunk-c776vm8q.js} +3 -3
  51. package/dist/{chunk-qz8n10v1.js.map → chunk-c776vm8q.js.map} +1 -1
  52. package/dist/{chunk-17grdzh5.js → chunk-ceemr927.js} +2 -2
  53. package/dist/{chunk-17grdzh5.js.map → chunk-ceemr927.js.map} +1 -1
  54. package/dist/{chunk-mjdt9c94.js → chunk-crp5hsb0.js} +2 -2
  55. package/dist/{chunk-mjdt9c94.js.map → chunk-crp5hsb0.js.map} +1 -1
  56. package/dist/{chunk-8n8efq3e.js → chunk-cw2wjrya.js} +3 -3
  57. package/dist/{chunk-8n8efq3e.js.map → chunk-cw2wjrya.js.map} +1 -1
  58. package/dist/{chunk-43xykgzb.js → chunk-dacq5bw8.js} +2 -2
  59. package/dist/{chunk-43xykgzb.js.map → chunk-dacq5bw8.js.map} +1 -1
  60. package/dist/{chunk-1ethvybg.js → chunk-dmxr0bt8.js} +3 -3
  61. package/dist/{chunk-1ethvybg.js.map → chunk-dmxr0bt8.js.map} +1 -1
  62. package/dist/chunk-ds8d17k6.js +5 -0
  63. package/dist/{chunk-654312qd.js.map → chunk-ds8d17k6.js.map} +1 -1
  64. package/dist/{chunk-m88haz1d.js → chunk-em9kwz08.js} +2 -2
  65. package/dist/{chunk-m88haz1d.js.map → chunk-em9kwz08.js.map} +1 -1
  66. package/dist/{chunk-fqc43fvj.js → chunk-ezd59jpg.js} +1 -1
  67. package/dist/{chunk-0nbrg1hn.js → chunk-f65v7rqq.js} +2 -2
  68. package/dist/{chunk-0nbrg1hn.js.map → chunk-f65v7rqq.js.map} +1 -1
  69. package/dist/{chunk-3f0ncrd4.js → chunk-f8wyyky5.js} +2 -2
  70. package/dist/{chunk-3f0ncrd4.js.map → chunk-f8wyyky5.js.map} +1 -1
  71. package/dist/{chunk-5hyfe7b3.js → chunk-fxdc34cj.js} +2 -2
  72. package/dist/{chunk-5hyfe7b3.js.map → chunk-fxdc34cj.js.map} +1 -1
  73. package/dist/{chunk-36p6nrgf.js → chunk-gj5jjmf8.js} +2 -2
  74. package/dist/{chunk-36p6nrgf.js.map → chunk-gj5jjmf8.js.map} +1 -1
  75. package/dist/{chunk-jecwqesm.js → chunk-k4vj2b98.js} +2 -2
  76. package/dist/{chunk-jecwqesm.js.map → chunk-k4vj2b98.js.map} +1 -1
  77. package/dist/{chunk-9rthn2hy.js → chunk-k7hm7f3t.js} +2 -2
  78. package/dist/{chunk-9rthn2hy.js.map → chunk-k7hm7f3t.js.map} +1 -1
  79. package/dist/{chunk-kqqj907k.js → chunk-kh64a9rh.js} +2 -2
  80. package/dist/{chunk-kqqj907k.js.map → chunk-kh64a9rh.js.map} +1 -1
  81. package/dist/{chunk-8fhzh26j.js → chunk-mpk36kdy.js} +2 -2
  82. package/dist/{chunk-8fhzh26j.js.map → chunk-mpk36kdy.js.map} +1 -1
  83. package/dist/{chunk-8n6saxe6.js → chunk-n6rjtg2q.js} +2 -2
  84. package/dist/{chunk-8n6saxe6.js.map → chunk-n6rjtg2q.js.map} +1 -1
  85. package/dist/{chunk-mkvprcnv.js → chunk-nkfj4qq5.js} +2 -2
  86. package/dist/{chunk-mkvprcnv.js.map → chunk-nkfj4qq5.js.map} +1 -1
  87. package/dist/{chunk-pzhzjx6h.js → chunk-p48th4ps.js} +2 -2
  88. package/dist/{chunk-pzhzjx6h.js.map → chunk-p48th4ps.js.map} +1 -1
  89. package/dist/{chunk-h0mazdqm.js → chunk-p9rg95p6.js} +1 -1
  90. package/dist/{chunk-kwkjpape.js → chunk-paqjyvjm.js} +2 -2
  91. package/dist/{chunk-kwkjpape.js.map → chunk-paqjyvjm.js.map} +1 -1
  92. package/dist/{chunk-mes9ks69.js → chunk-pmze0zcr.js} +2 -2
  93. package/dist/{chunk-mes9ks69.js.map → chunk-pmze0zcr.js.map} +1 -1
  94. package/dist/{chunk-777rbaaz.js → chunk-q8630z08.js} +2 -2
  95. package/dist/{chunk-777rbaaz.js.map → chunk-q8630z08.js.map} +1 -1
  96. package/dist/{chunk-zxbmpn71.js → chunk-qtwmbqzr.js} +2 -2
  97. package/dist/{chunk-zxbmpn71.js.map → chunk-qtwmbqzr.js.map} +1 -1
  98. package/dist/{chunk-xkg2sm12.js → chunk-qxfby5zf.js} +3 -3
  99. package/dist/{chunk-xkg2sm12.js.map → chunk-qxfby5zf.js.map} +1 -1
  100. package/dist/{chunk-yp0ah93s.js → chunk-rm5qa99y.js} +3 -3
  101. package/dist/{chunk-yp0ah93s.js.map → chunk-rm5qa99y.js.map} +1 -1
  102. package/dist/{chunk-0qrnp119.js → chunk-s7v66c70.js} +2 -2
  103. package/dist/{chunk-0qrnp119.js.map → chunk-s7v66c70.js.map} +1 -1
  104. package/dist/{chunk-9nv0nzj0.js → chunk-snheb16b.js} +2 -2
  105. package/dist/{chunk-9nv0nzj0.js.map → chunk-snheb16b.js.map} +1 -1
  106. package/dist/{chunk-wdvv88da.js → chunk-th8drc6f.js} +2 -2
  107. package/dist/{chunk-wdvv88da.js.map → chunk-th8drc6f.js.map} +1 -1
  108. package/dist/{chunk-79hpx0e7.js → chunk-tkrj74c1.js} +2 -2
  109. package/dist/{chunk-79hpx0e7.js.map → chunk-tkrj74c1.js.map} +1 -1
  110. package/dist/{chunk-t29t96a3.js → chunk-vbrbsk9b.js} +3 -3
  111. package/dist/{chunk-t29t96a3.js.map → chunk-vbrbsk9b.js.map} +1 -1
  112. package/dist/{chunk-9x3gr8k7.js → chunk-vpvde0nb.js} +2 -2
  113. package/dist/{chunk-9x3gr8k7.js.map → chunk-vpvde0nb.js.map} +1 -1
  114. package/dist/{chunk-jctjvgat.js → chunk-vxr752md.js} +2 -2
  115. package/dist/{chunk-jctjvgat.js.map → chunk-vxr752md.js.map} +1 -1
  116. package/dist/{chunk-0fmntznb.js → chunk-wbv5kyhe.js} +4 -4
  117. package/dist/{chunk-0fmntznb.js.map → chunk-wbv5kyhe.js.map} +1 -1
  118. package/dist/{chunk-6pfkdsev.js → chunk-wc4jpf86.js} +3 -3
  119. package/dist/{chunk-6pfkdsev.js.map → chunk-wc4jpf86.js.map} +1 -1
  120. package/dist/{chunk-ayvkarte.js → chunk-wqamwrrn.js} +2 -2
  121. package/dist/{chunk-ayvkarte.js.map → chunk-wqamwrrn.js.map} +1 -1
  122. package/dist/{chunk-gcg79mg1.js → chunk-wx3rx7vp.js} +2 -2
  123. package/dist/{chunk-gcg79mg1.js.map → chunk-wx3rx7vp.js.map} +1 -1
  124. package/dist/{chunk-ny5w6a89.js → chunk-x2tqctjm.js} +2 -2
  125. package/dist/{chunk-ny5w6a89.js.map → chunk-x2tqctjm.js.map} +1 -1
  126. package/dist/{chunk-ws6qmce0.js → chunk-xmjzrg41.js} +3 -3
  127. package/dist/{chunk-ws6qmce0.js.map → chunk-xmjzrg41.js.map} +1 -1
  128. package/dist/{chunk-74mm850r.js → chunk-y73tppyk.js} +2 -2
  129. package/dist/{chunk-74mm850r.js.map → chunk-y73tppyk.js.map} +1 -1
  130. package/dist/{chunk-znxsf63g.js → chunk-yffy1k69.js} +2 -2
  131. package/dist/{chunk-znxsf63g.js.map → chunk-yffy1k69.js.map} +1 -1
  132. package/dist/{chunk-y2jz8gqp.js → chunk-ys36n4wv.js} +2 -2
  133. package/dist/{chunk-y2jz8gqp.js.map → chunk-ys36n4wv.js.map} +1 -1
  134. package/dist/{chunk-73xm7k9y.js → chunk-zpjx407m.js} +3 -3
  135. package/dist/{chunk-73xm7k9y.js.map → chunk-zpjx407m.js.map} +1 -1
  136. package/dist/client/Mutation.d.ts +9 -0
  137. package/dist/client/Mutation.d.ts.map +1 -1
  138. package/dist/client/index.js +26 -5
  139. package/dist/client/index.js.map +1 -1
  140. package/dist/config/index.js +1 -1
  141. package/dist/console/run.js +2 -2
  142. package/dist/console/run.js.map +1 -1
  143. package/dist/container/index.js +2 -2
  144. package/dist/container/index.js.map +1 -1
  145. package/dist/database/index.js +2 -2
  146. package/dist/database/index.js.map +1 -1
  147. package/dist/email/index.js +2 -2
  148. package/dist/email/index.js.map +1 -1
  149. package/dist/facades/index.js +2 -2
  150. package/dist/facades/index.js.map +1 -1
  151. package/dist/foundation/index.js +2 -2
  152. package/dist/foundation/index.js.map +1 -1
  153. package/dist/http/index.js +2 -2
  154. package/dist/http/index.js.map +1 -1
  155. package/dist/i18n/dictionaryRuntime.js +2 -2
  156. package/dist/i18n/dictionaryRuntime.js.map +1 -1
  157. package/dist/i18n/index.js +2 -2
  158. package/dist/i18n/index.js.map +1 -1
  159. package/dist/kernel/index.d.ts +1 -1
  160. package/dist/kernel/index.d.ts.map +1 -1
  161. package/dist/kernel/index.js +2 -2
  162. package/dist/kernel/index.js.map +1 -1
  163. package/dist/orm/index.js +2 -2
  164. package/dist/orm/index.js.map +1 -1
  165. package/dist/server/index.js +2 -2
  166. package/dist/server/index.js.map +1 -1
  167. package/dist/services/index.d.ts +2 -1
  168. package/dist/services/index.d.ts.map +1 -1
  169. package/dist/services/index.js +3 -3
  170. package/dist/services/index.js.map +2 -2
  171. package/dist/services/queue/work.js +2 -2
  172. package/dist/services/queue/work.js.map +1 -1
  173. package/dist/support/index.js +2 -2
  174. package/dist/support/index.js.map +1 -1
  175. package/package.json +1 -1
  176. package/skills/gemi-react-best-practices/rules/client-form-vs-mutation-hooks.md +4 -0
  177. package/dist/chunk-654312qd.js +0 -5
  178. package/dist/chunk-rnpc26wd.js +0 -19
  179. /package/dist/{chunk-4hw93e3y.js.map → chunk-4azcbkxm.js.map} +0 -0
  180. /package/dist/{chunk-fqc43fvj.js.map → chunk-ezd59jpg.js.map} +0 -0
  181. /package/dist/{chunk-h0mazdqm.js.map → chunk-p9rg95p6.js.map} +0 -0
@@ -28,6 +28,15 @@ interface FormProps<M extends keyof Methods, K extends keyof Methods[M]> extends
28
28
  action: K;
29
29
  onSuccess?: (result: Methods[M][K], form: HTMLFormElement) => void;
30
30
  onError?: (error: Any, form: HTMLFormElement) => void;
31
+ /**
32
+ * Called when a submit is about to send its request, with the exact
33
+ * `FormData` that will be sent (after `dynamicInputs`). Return `false` to
34
+ * skip the request. Not called for a submit swallowed because one is
35
+ * already in flight.
36
+ */
37
+ onSubmitStart?: (formData: FormData, form: HTMLFormElement) => void | boolean;
38
+ /** Called after `onSuccess` or `onError`, whichever ran. */
39
+ onSettled?: (form: HTMLFormElement) => void;
31
40
  params?: Partial<UrlParser<`${K & string}`>>;
32
41
  search?: Record<string, string>;
33
42
  dynamicInputs?: (formData: FormData) => Record<string, any>;
@@ -1 +1 @@
1
- {"version":3,"file":"Mutation.d.ts","sourceRoot":"","sources":["../../client/Mutation.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Mutation.d.ts","sourceRoot":"","sources":["../../client/Mutation.tsx"],"names":[],"mappings":"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"}
@@ -541,7 +541,7 @@ var MutationContext = createContext({
541
541
  });
542
542
  function Form(props) {
543
543
  const _params = useParams();
544
- const { method = "POST", action, onSuccess = () => {}, onError = () => {}, params, search = {}, className, dynamicInputs = () => ({}), ...formProps } = "params" in props ? {
544
+ const { method = "POST", action, onSuccess = () => {}, onError = () => {}, onSubmitStart, onSettled, onSubmit, ref, params, search = {}, className, dynamicInputs = () => ({}), ...formProps } = "params" in props ? {
545
545
  ...props,
546
546
  params: {
547
547
  ..._params,
@@ -552,6 +552,15 @@ function Form(props) {
552
552
  params: _params
553
553
  };
554
554
  const formRef = useRef(null);
555
+ const setFormRef = useCallback((node) => {
556
+ formRef.current = node;
557
+ const cleanup = assignRef(ref, node);
558
+ return () => {
559
+ formRef.current = null;
560
+ if (typeof cleanup === "function") cleanup();
561
+ else assignRef(ref, null);
562
+ };
563
+ }, [ref]);
555
564
  const { __csrf } = useContext(ServerDataContext);
556
565
  const formDataSubject = useRef(new Subject(new FormData()));
557
566
  const updateFormData = useCallback(() => {
@@ -585,15 +594,23 @@ function Form(props) {
585
594
  params,
586
595
  search
587
596
  }, {
588
- onSuccess: (data) => onSuccess(data, formRef.current),
589
- onError: (error) => onError(error, formRef.current)
597
+ onSuccess: (data) => {
598
+ onSuccess(data, formRef.current);
599
+ onSettled?.(formRef.current);
600
+ },
601
+ onError: (error) => {
602
+ onError(error, formRef.current);
603
+ onSettled?.(formRef.current);
604
+ }
590
605
  });
591
606
  const handleSubmit = async (e) => {
592
607
  e.preventDefault();
608
+ onSubmit?.(e);
593
609
  if (loading) return;
594
610
  if (!formRef.current) return;
595
611
  const formData = new FormData(formRef.current);
596
612
  for (const [key, value] of Object.entries(dynamicInputs(formData))) formData.append(key, value);
613
+ if (onSubmitStart?.(formData, formRef.current) === false) return;
597
614
  trigger(formData);
598
615
  };
599
616
  const validationErrors = error?.kind === "validation_error" ? error.messages : {};
@@ -607,11 +624,11 @@ function Form(props) {
607
624
  formDataSubject
608
625
  },
609
626
  children: /* @__PURE__ */ jsxs("form", {
627
+ ...formProps,
610
628
  className: ["group", className].filter(Boolean).join(" "),
611
629
  "data-loading": loading,
612
- ref: formRef,
630
+ ref: setFormRef,
613
631
  onSubmit: handleSubmit,
614
- ...formProps,
615
632
  children: [/* @__PURE__ */ jsx("input", {
616
633
  type: "hidden",
617
634
  name: "__csrf",
@@ -620,6 +637,10 @@ function Form(props) {
620
637
  })
621
638
  });
622
639
  }
640
+ function assignRef(ref, value) {
641
+ if (typeof ref === "function") return ref(value);
642
+ if (ref) ref.current = value;
643
+ }
623
644
  function useMutationStatus() {
624
645
  const { isPending } = useContext(MutationContext);
625
646
  return { isPending };