gemi 0.4.61 → 0.4.63

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 (55) hide show
  1. package/dist/auth/adapters/prisma.d.ts.map +1 -1
  2. package/dist/chunk-00cb9f80352454dd.js +1 -0
  3. package/dist/chunk-03c8e645c994d40a.js +1 -1
  4. package/dist/chunk-0a9ae42aae6f406e.js +2 -0
  5. package/dist/chunk-1084614a350762fb.js +2 -0
  6. package/dist/chunk-132c71db605759c9.js +1 -1
  7. package/dist/chunk-18c32b54097c580e.js +2 -0
  8. package/dist/chunk-1900e90c372bb1d6.js +1 -1
  9. package/dist/chunk-269dd2cd89aa1c32.js +2 -0
  10. package/dist/chunk-293d8be91a9ad4f9.js +2 -0
  11. package/dist/chunk-32f3d5e11b4bc87d.js +2 -0
  12. package/dist/chunk-38fc9d258dbe62fd.js +18 -0
  13. package/dist/chunk-4e9d5acfa5541d1b.js +2 -0
  14. package/dist/chunk-516c6b67d6e3d041.js +18 -0
  15. package/dist/chunk-51e930ef29de215b.js +1 -0
  16. package/dist/chunk-597d5c6772b14a85.js +9 -0
  17. package/dist/chunk-5e13846c554dc272.js +1 -1
  18. package/dist/chunk-5fb9d31b7b4629e9.js +1 -0
  19. package/dist/chunk-5fd67245740e3908.js +1 -1
  20. package/dist/chunk-74802f454b9972eb.js +2 -0
  21. package/dist/chunk-797430f55303e6b5.js +2 -0
  22. package/dist/chunk-7fadaab2fa180ca9.js +6 -0
  23. package/dist/chunk-85d5e5d7ff832255.js +2 -0
  24. package/dist/chunk-897773d66a89947a.js +2 -0
  25. package/dist/chunk-8bf925705fdcef0c.js +2 -0
  26. package/dist/chunk-8ef8222b34d8f63f.js +2 -0
  27. package/dist/chunk-8f986f307ff91bd3.js +2 -0
  28. package/dist/chunk-9c3b4dd1591053c5.js +18 -0
  29. package/dist/chunk-a3f85d0d3261ae44.js +1 -1
  30. package/dist/chunk-b031077f0a783b82.js +2 -0
  31. package/dist/chunk-b9f4c1fce7152fc8.js +1 -1
  32. package/dist/chunk-bfccfb070c1630e9.js +1 -1
  33. package/dist/chunk-c609d06153ed09ce.js +1 -1
  34. package/dist/chunk-d5ddfacbfc84a47d.js +1 -1
  35. package/dist/chunk-def30dbcb4c6aceb.js +2 -0
  36. package/dist/chunk-e53fdd0a1888c5e8.js +1 -1
  37. package/dist/chunk-ed21fb7d8c4b675e.js +3 -0
  38. package/dist/chunk-edeefd833c30a5ed.js +1 -1
  39. package/dist/chunk-f5a4295176f9b1c1.js +1 -1
  40. package/dist/chunk-f900b5868b14827e.js +1 -1
  41. package/dist/chunk-f9e6a0a946ebb032.js +1 -1
  42. package/dist/chunk-fd5ffee329d6f29b.js +2 -0
  43. package/dist/chunk-ff9a2d6d503e6db6.js +18 -0
  44. package/dist/client/Mutation.d.ts +6 -7
  45. package/dist/client/Mutation.d.ts.map +1 -1
  46. package/dist/client/QueryResource.d.ts.map +1 -1
  47. package/dist/client/ServerDataProvider.d.ts +2 -10
  48. package/dist/client/ServerDataProvider.d.ts.map +1 -1
  49. package/dist/client/auth/useUser.d.ts +1 -1
  50. package/dist/client/auth/useUser.d.ts.map +1 -1
  51. package/dist/client/index.js +9 -9
  52. package/dist/client/useQuery.d.ts.map +1 -1
  53. package/dist/kernel/index.js +1 -1
  54. package/dist/storage/index.js +4 -4
  55. package/package.json +1 -1
@@ -1,6 +1,7 @@
1
1
  import { type PropsWithChildren } from "react";
2
2
  import type { Translations } from "./i18n/I18nContext";
3
3
  import type { ComponentTree } from "./types";
4
+ import type { User } from "../auth/adapters/types";
4
5
  type Data = Record<string, any>;
5
6
  export interface ServerDataContextValue {
6
7
  routeManifest: Record<string, string[]>;
@@ -15,16 +16,7 @@ export interface ServerDataContextValue {
15
16
  i18n: Translations;
16
17
  componentTree: ComponentTree;
17
18
  auth: {
18
- user: {
19
- name: string;
20
- email: string;
21
- accounts: Array<{
22
- organizationId: string;
23
- role: string;
24
- }>;
25
- globalRole: string;
26
- id: string;
27
- };
19
+ user: User;
28
20
  };
29
21
  }
30
22
  export declare const ServerDataContext: import("react").Context<ServerDataContextValue>;
@@ -1 +1 @@
1
- {"version":3,"file":"ServerDataProvider.d.ts","sourceRoot":"","sources":["../../client/ServerDataProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEhC,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/C,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,OAAO,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,IAAI,EAAE,YAAY,CAAC;IACnB,aAAa,EAAE,aAAa,CAAC;IAC7B,IAAI,EAAE;QACJ,IAAI,EAAE;YACJ,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;YACd,QAAQ,EAAE,KAAK,CAAC;gBACd,cAAc,EAAE,MAAM,CAAC;gBACvB,IAAI,EAAE,MAAM,CAAC;aACd,CAAC,CAAC;YACH,UAAU,EAAE,MAAM,CAAC;YACnB,EAAE,EAAE,MAAM,CAAC;SACZ,CAAC;KACH,CAAC;CACH;AAED,eAAO,MAAM,iBAAiB,iDAA8C,CAAC;AAE7E,UAAU,uBAAuB;IAC/B,KAAK,CAAC,EAAE,sBAAsB,CAAC;CAChC;AAED,eAAO,MAAM,kBAAkB,UACtB,iBAAiB,CAAC,uBAAuB,CAAC,4CAgBlD,CAAC"}
1
+ {"version":3,"file":"ServerDataProvider.d.ts","sourceRoot":"","sources":["../../client/ServerDataProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAEnD,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEhC,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/C,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,OAAO,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,IAAI,EAAE,YAAY,CAAC;IACnB,aAAa,EAAE,aAAa,CAAC;IAC7B,IAAI,EAAE;QACJ,IAAI,EAAE,IAAI,CAAC;KACZ,CAAC;CACH;AAED,eAAO,MAAM,iBAAiB,iDAA8C,CAAC;AAE7E,UAAU,uBAAuB;IAC/B,KAAK,CAAC,EAAE,sBAAsB,CAAC;CAChC;AAED,eAAO,MAAM,kBAAkB,UACtB,iBAAiB,CAAC,uBAAuB,CAAC,4CAgBlD,CAAC"}
@@ -1,6 +1,6 @@
1
1
  export declare function useUser(): {
2
2
  user: {
3
- user: any;
3
+ user: import("../../auth/adapters/types").User;
4
4
  };
5
5
  loading: boolean;
6
6
  error: {};
@@ -1 +1 @@
1
- {"version":3,"file":"useUser.d.ts","sourceRoot":"","sources":["../../../client/auth/useUser.ts"],"names":[],"mappings":"AAIA,wBAAgB,OAAO;;cAU+B,GAAG;;;;EASxD"}
1
+ {"version":3,"file":"useUser.d.ts","sourceRoot":"","sources":["../../../client/auth/useUser.ts"],"names":[],"mappings":"AAIA,wBAAgB,OAAO;;;;;;EAmBtB"}
@@ -118,14 +118,12 @@ class QueryResource {
118
118
  );
119
119
  }
120
120
  if (response.ok) {
121
- console.log("OK");
122
121
  this.store.next(
123
122
  store.set(variantKey, { loading: false, data, error: null })
124
123
  );
125
124
  this.staleVariants.delete(variantKey);
126
125
  this.lastFetchRecord.set(variantKey, Date.now());
127
126
  } else {
128
- console.log("Not OK");
129
127
  this.store.next(
130
128
  store.set(variantKey, {
131
129
  loading: false,
@@ -175,14 +173,16 @@ function applyParams$1(url, params) {
175
173
  const defaultConfig = {
176
174
  fallbackData: null,
177
175
  keepPreviousData: false,
178
- retryIntervalOnError: Infinity
176
+ retryIntervalOnError: 1e4
179
177
  };
180
178
  const defaultOptions$1 = {
181
179
  params: {},
182
180
  search: {}
183
181
  };
184
182
  function useQuery(url, ...args) {
185
- const [options = defaultOptions$1, config = defaultConfig] = args;
183
+ const [_options = defaultOptions$1, _config = defaultConfig] = args;
184
+ const options = { ...defaultOptions$1, ..._options };
185
+ const config = { ...defaultConfig, ..._config };
186
186
  const params = "params" in options ? options.params ?? {} : {};
187
187
  const search = "search" in options ? options.search ?? {} : {};
188
188
  const { getResource } = useContext(QueryManagerContext);
@@ -202,7 +202,7 @@ function useQuery(url, ...args) {
202
202
  const retryIntervalRef = useRef();
203
203
  const retryingMap = useRef(/* @__PURE__ */ new Map());
204
204
  const [state, setState] = useState(() => resource.getVariant(variantKey));
205
- const retry = useCallback((variantKey2) => {
205
+ const retry = (variantKey2) => {
206
206
  if (!retryingMap.current.get(variantKey2)) {
207
207
  retryingMap.current.set(variantKey2, true);
208
208
  retryIntervalRef.current = setTimeout(() => {
@@ -210,7 +210,7 @@ function useQuery(url, ...args) {
210
210
  retryingMap.current.set(variantKey2, false);
211
211
  }, config.retryIntervalOnError);
212
212
  }
213
- }, []);
213
+ };
214
214
  const handleStateUpdate = useCallback(
215
215
  (nextState) => {
216
216
  if (nextState.error) {
@@ -235,6 +235,7 @@ function useQuery(url, ...args) {
235
235
  });
236
236
  return () => {
237
237
  unsub();
238
+ clearInterval(retryIntervalRef.current);
238
239
  };
239
240
  }, [variantKey]);
240
241
  function mutate(fn, value) {
@@ -371,7 +372,6 @@ function Form(props) {
371
372
  const {
372
373
  method,
373
374
  action,
374
- pathPrefix = "",
375
375
  onSuccess = () => {
376
376
  },
377
377
  onError = () => {
@@ -382,12 +382,12 @@ function Form(props) {
382
382
  } = "params" in props ? props : { ...props, params: {} };
383
383
  const formRef = useRef(null);
384
384
  const { trigger, data, error, loading } = useMutation(
385
- `${method}:${String(action)}`,
385
+ method,
386
+ String(action),
386
387
  {
387
388
  params
388
389
  },
389
390
  {
390
- pathPrefix,
391
391
  onSuccess,
392
392
  onError
393
393
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useQuery.d.ts","sourceRoot":"","sources":["../../client/useQuery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,UAAU,MAAM,CAAC,CAAC;IAChB,YAAY,CAAC,EAAE,CAAC,CAAC;IACjB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAYD,KAAK,MAAM,GAAG;KACX,CAAC,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,OAAO,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;CACnE,CAAC;AAEF,KAAK,IAAI,CAAC,CAAC,SAAS,MAAM,MAAM,IAC9B,MAAM,CAAC,CAAC,CAAC,SAAS,gBAAgB,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,GAAG,CAAC,GACpD,aAAa,CAAC,IAAI,CAAC,GACnB,KAAK,CAAC;AAEZ,KAAK,KAAK,CAAC,CAAC,SAAS,MAAM,MAAM,IAC/B,MAAM,CAAC,CAAC,CAAC,SAAS,gBAAgB,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAMpE,KAAK,KAAK,GAAG,EAAE,CAAC;AAEhB,KAAK,WAAW,CACd,CAAC,SAAS,WAAW,EACrB,CAAC,SAAS,WAAW,IACnB,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC;AAElC,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,QAAQ,GACpC;KACG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,MAAM,GAC5B,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACrC,KAAK;CACV,CAAC,MAAM,CAAC,CAAC,GACV,KAAK,CAAC;AAEV,KAAK,WAAW,CAAC,CAAC,EAAE,IAAI,SAAS,MAAM,IAAI,CAAC,SAAS,QAAQ,GACzD,IAAI,SAAS,MAAM,CAAC,GAClB,CAAC,CAAC,IAAI,CAAC,GACP,IAAI,SAAS,GAAG,MAAM,CAAC,IAAI,MAAM,CAAC,EAAE,GAClC,CAAC,SAAS,MAAM,CAAC,GACf,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GACpB,KAAK,GACP,KAAK,GACT,KAAK,CAAC;AAOV,wBAAgB,QAAQ,CACtB,CAAC,SAAS,MAAM,MAAM,EACtB,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,EAChB,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,EAEjB,GAAG,EAAE,CAAC,EACN,GAAG,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAC7D,CAAC,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GACxD;IACE,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,CAAA;KAAE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;CACxB;UAyGkB,QAAQ,CAAC,MAAM,CAAC;aACV,OAAO;WACX,KAAK;;aA9CV,MAAM,GAAG,IAAI;aACb,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI;SACnC,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,gCACzC,CAAC,SACC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,GAC3B,IAAI;;EA4CR"}
1
+ {"version":3,"file":"useQuery.d.ts","sourceRoot":"","sources":["../../client/useQuery.ts"],"names":[],"mappings":"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"}