gemi 0.71.0 → 0.72.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.
- package/dist/{chunk-ksxes55e.js → chunk-481t5ewt.js} +1 -1
- package/dist/{chunk-ybtwp81a.js → chunk-c8jt128x.js} +1 -1
- package/dist/{chunk-ep1jte2d.js → chunk-fpx20wm3.js} +2 -2
- package/dist/{chunk-ep1jte2d.js.map → chunk-fpx20wm3.js.map} +1 -1
- package/dist/chunks/{ThemeProvider-Bz-y1g2i.js → ThemeProvider-D9v0VAbY.js} +53 -4
- package/dist/chunks/ThemeProvider-D9v0VAbY.js.map +1 -0
- package/dist/client/Mutation.d.ts +8 -1
- package/dist/client/Mutation.d.ts.map +1 -1
- package/dist/client/MutationError.d.ts +109 -0
- package/dist/client/MutationError.d.ts.map +1 -0
- package/dist/client/QueryResource.d.ts +24 -0
- package/dist/client/QueryResource.d.ts.map +1 -1
- package/dist/client/auth/useForgotPassword.d.ts +1 -1
- package/dist/client/auth/useResetPassword.d.ts +1 -1
- package/dist/client/auth/useSignIn.d.ts +1 -1
- package/dist/client/auth/useSignOut.d.ts +1 -1
- package/dist/client/auth/useSignUp.d.ts +1 -1
- package/dist/client/index.d.ts +4 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +284 -16
- package/dist/client/index.js.map +1 -1
- package/dist/client/useInfiniteQuery.d.ts +59 -0
- package/dist/client/useInfiniteQuery.d.ts.map +1 -0
- package/dist/client/useMutate.d.ts +7 -1
- package/dist/client/useMutate.d.ts.map +1 -1
- package/dist/client/useMutation.d.ts +6 -21
- package/dist/client/useMutation.d.ts.map +1 -1
- package/dist/client/useQuery.d.ts +4 -4
- package/dist/client/useQuery.d.ts.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/testing/index.js +1 -1
- package/package.json +1 -1
- package/skills/gemi-react-best-practices/rules/controller-throw-framework-errors.md +3 -3
- package/dist/chunks/ThemeProvider-Bz-y1g2i.js.map +0 -1
- /package/dist/{chunk-ksxes55e.js.map → chunk-481t5ewt.js.map} +0 -0
- /package/dist/{chunk-ybtwp81a.js.map → chunk-c8jt128x.js.map} +0 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { NestedPrettify } from "../utils/type";
|
|
2
|
+
import { type Config, type Data, type GetRPC, type Options } from "./useQuery";
|
|
3
|
+
type Page<T extends keyof GetRPC> = NestedPrettify<Data<T>>;
|
|
4
|
+
/** What a page's `getNextPage` points at: a page number or a cursor. */
|
|
5
|
+
type PageCursor = string | number;
|
|
6
|
+
/** A page that is an array is its own list of items. */
|
|
7
|
+
type DefaultItem<P> = P extends readonly (infer U)[] ? U : never;
|
|
8
|
+
export interface InfiniteQueryConfig<P, Item> extends Omit<Config<P>, "lazy" | "refetchUntil" | "fallbackData"> {
|
|
9
|
+
/**
|
|
10
|
+
* The next page's cursor, read off the pages loaded so far — usually a page
|
|
11
|
+
* number, e.g. `(last, pages) => last.length === 48 ? pages.length + 1 :
|
|
12
|
+
* null`. `null`/`undefined`/`false` means there is no next page, which is
|
|
13
|
+
* what `hasMore` reports.
|
|
14
|
+
*/
|
|
15
|
+
getNextPage: (lastPage: P, pages: P[]) => PageCursor | null | undefined | false;
|
|
16
|
+
/**
|
|
17
|
+
* The search key the cursor is sent under (default `"page"`). The first
|
|
18
|
+
* page is requested *without* it, so it is the same cached variant a plain
|
|
19
|
+
* `useQuery` — and a `Query.prefetch` — with the same `search` reads.
|
|
20
|
+
*/
|
|
21
|
+
pageParam?: string;
|
|
22
|
+
/** A page's rows. Defaults to the page itself when it is an array. */
|
|
23
|
+
getItems?: (page: P) => readonly Item[];
|
|
24
|
+
/**
|
|
25
|
+
* An item's identity. With it, a row that shifts into the next page (an
|
|
26
|
+
* insert or delete between two offset-based fetches) is kept at its first
|
|
27
|
+
* position instead of being rendered twice.
|
|
28
|
+
*/
|
|
29
|
+
getKey?: (item: Item) => unknown;
|
|
30
|
+
}
|
|
31
|
+
export interface InfiniteQueryReturn<P, Item> {
|
|
32
|
+
/** Every loaded page, in order. Empty until the first page has data. */
|
|
33
|
+
pages: P[];
|
|
34
|
+
/** The pages' rows flattened, de-duplicated by `getKey` when given. */
|
|
35
|
+
items: Item[];
|
|
36
|
+
/** Whether `getNextPage` points past the last loaded page. */
|
|
37
|
+
hasMore: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Load the next page. A no-op while one is loading or when there is none;
|
|
40
|
+
* when the last requested page failed, it retries that page.
|
|
41
|
+
*/
|
|
42
|
+
fetchNextPage: () => void;
|
|
43
|
+
isFetchingNextPage: boolean;
|
|
44
|
+
/** The first page's `loading` — see `useQuery`. */
|
|
45
|
+
loading: boolean;
|
|
46
|
+
error: Record<string, unknown> | null;
|
|
47
|
+
/** Refetch every loaded page. */
|
|
48
|
+
refetch: () => void;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* A paged list whose pages live in the query cache: page 1 is a plain
|
|
52
|
+
* `useQuery` (so it suspends, SSR-renders and `Query.prefetch`es exactly like
|
|
53
|
+
* one), and each further page is the same path with `pageParam` added to the
|
|
54
|
+
* search — its own cached variant, which `useMutate` updates and invalidates
|
|
55
|
+
* like any other. Changing `params` or `search` starts over from page 1.
|
|
56
|
+
*/
|
|
57
|
+
export declare function useInfiniteQuery<T extends keyof GetRPC, Item = DefaultItem<Page<T>>>(url: T, options: Options<T> | undefined, config: InfiniteQueryConfig<Page<T>, Item>): InfiniteQueryReturn<Page<T>, Item>;
|
|
58
|
+
export {};
|
|
59
|
+
//# sourceMappingURL=useInfiniteQuery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInfiniteQuery.d.ts","sourceRoot":"","sources":["../../client/useInfiniteQuery.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAOpD,OAAO,EAEL,KAAK,MAAM,EACX,KAAK,IAAI,EACT,KAAK,MAAM,EACX,KAAK,OAAO,EACb,MAAM,YAAY,CAAC;AAEpB,KAAK,IAAI,CAAC,CAAC,SAAS,MAAM,MAAM,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5D,wEAAwE;AACxE,KAAK,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAElC,wDAAwD;AACxD,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;AAEjE,MAAM,WAAW,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAE,SAAQ,IAAI,CACxD,MAAM,CAAC,CAAC,CAAC,EACT,MAAM,GAAG,cAAc,GAAG,cAAc,CACzC;IACC;;;;;OAKG;IACH,WAAW,EAAE,CACX,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE,CAAC,EAAE,KACP,UAAU,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC;IAC3C;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,SAAS,IAAI,EAAE,CAAC;IACxC;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC,EAAE,IAAI;IAC1C,wEAAwE;IACxE,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,uEAAuE;IACvE,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,8DAA8D;IAC9D,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,mDAAmD;IACnD,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACtC,iCAAiC;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAsCD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,CAAC,SAAS,MAAM,MAAM,EACtB,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAE3B,GAAG,EAAE,CAAC,EACN,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,EAC/B,MAAM,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GACzC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAsLpC"}
|
|
@@ -6,10 +6,16 @@ type GetRPC = {
|
|
|
6
6
|
[K in keyof RPC as K extends `GET:${infer P}` ? P : never]: RPC[K];
|
|
7
7
|
};
|
|
8
8
|
type Data<T extends keyof GetRPC> = GetRPC[T] extends ApiRouterHandler<any, infer Data, any> ? UnwrapPromise<Data> : never;
|
|
9
|
+
/**
|
|
10
|
+
* Which cached search variants of the path a call updates: one search object
|
|
11
|
+
* (the variant a `useQuery` with that `search` reads), or a predicate over
|
|
12
|
+
* every variant the cache holds for the path.
|
|
13
|
+
*/
|
|
14
|
+
type SearchTarget = Record<string, any> | ((search: URLSearchParams) => boolean);
|
|
9
15
|
export declare function useMutate(): <T extends keyof GetRPC>(options: {
|
|
10
16
|
path: T;
|
|
11
17
|
params?: UrlParser<`${T & string}`>;
|
|
12
|
-
search?:
|
|
18
|
+
search?: SearchTarget;
|
|
13
19
|
}, fn?: ((data: NestedPrettify<Data<T>>) => NestedPrettify<Data<T>>) | NestedPrettify<Data<T>>) => any;
|
|
14
20
|
export {};
|
|
15
21
|
//# sourceMappingURL=useMutate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMutate.d.ts","sourceRoot":"","sources":["../../client/useMutate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGzC,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,wBAAgB,SAAS,KAEA,CAAC,SAAS,MAAM,MAAM,EAC3C,SAAS;IACP,IAAI,EAAE,CAAC,CAAC;IACR,MAAM,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC;IACpC,MAAM,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"useMutate.d.ts","sourceRoot":"","sources":["../../client/useMutate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGzC,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;;;;GAIG;AACH,KAAK,YAAY,GACb,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACnB,CAAC,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC;AAqC3C,wBAAgB,SAAS,KAEA,CAAC,SAAS,MAAM,MAAM,EAC3C,SAAS;IACP,IAAI,EAAE,CAAC,CAAC;IACR,MAAM,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC;IACpC,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,EACD,KACI,CAAC,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAC5D,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAqC9B"}
|
|
@@ -2,6 +2,7 @@ import type { RPC } from "./rpc";
|
|
|
2
2
|
import type { ApiRouterHandler } from "../http/ApiRouter";
|
|
3
3
|
import type { UnwrapPromise } from "../utils/type";
|
|
4
4
|
import type { UrlParser } from "./types";
|
|
5
|
+
import type { MutationError } from "./MutationError";
|
|
5
6
|
type Methods = {
|
|
6
7
|
POST: {
|
|
7
8
|
[K in keyof RPC as K extends `POST:${infer P}` ? P : never]: RPC[K];
|
|
@@ -24,22 +25,6 @@ type Config<T> = {
|
|
|
24
25
|
};
|
|
25
26
|
type Data<M extends keyof Methods, K extends keyof Methods[M]> = Methods[M][K] extends ApiRouterHandler<any, infer T, any> ? UnwrapPromise<T> : never;
|
|
26
27
|
type Body<M extends keyof Methods, K extends keyof Methods[M]> = Methods[M][K] extends ApiRouterHandler<infer T, any, any> ? T : never;
|
|
27
|
-
type MutationError = {
|
|
28
|
-
kind: "validation_error";
|
|
29
|
-
messages: Record<string, any>;
|
|
30
|
-
} | {
|
|
31
|
-
kind: "form_error";
|
|
32
|
-
message: string;
|
|
33
|
-
} | {
|
|
34
|
-
kind: "server_error";
|
|
35
|
-
message: string;
|
|
36
|
-
} | {
|
|
37
|
-
kind: "not_authorized";
|
|
38
|
-
message: string;
|
|
39
|
-
} | {
|
|
40
|
-
kind: "insufficient_permissions";
|
|
41
|
-
message: string;
|
|
42
|
-
};
|
|
43
28
|
type ParseParams<T> = UrlParser<`${T & string}`>;
|
|
44
29
|
export declare function useMutation<M extends keyof Methods, K extends keyof Methods[M], T = Data<M, K>, U = Body<M, K>>(method: M, url: K, ...args: [
|
|
45
30
|
options?: {
|
|
@@ -49,7 +34,7 @@ export declare function useMutation<M extends keyof Methods, K extends keyof Met
|
|
|
49
34
|
config?: Partial<Config<T>>
|
|
50
35
|
]): {
|
|
51
36
|
data: T;
|
|
52
|
-
error:
|
|
37
|
+
error: MutationError;
|
|
53
38
|
loading: boolean;
|
|
54
39
|
formData: FormData;
|
|
55
40
|
cancel: () => void;
|
|
@@ -65,7 +50,7 @@ export declare function usePost<K extends keyof Methods["POST"], T = Data<"POST"
|
|
|
65
50
|
config?: Partial<Config<T>>
|
|
66
51
|
]): {
|
|
67
52
|
data: Data<"POST", K>;
|
|
68
|
-
error:
|
|
53
|
+
error: MutationError;
|
|
69
54
|
loading: boolean;
|
|
70
55
|
formData: FormData;
|
|
71
56
|
cancel: () => void;
|
|
@@ -81,7 +66,7 @@ export declare function usePut<K extends keyof Methods["PUT"], T = Data<"PUT", K
|
|
|
81
66
|
config?: Partial<Config<T>>
|
|
82
67
|
]): {
|
|
83
68
|
data: Data<"PUT", K>;
|
|
84
|
-
error:
|
|
69
|
+
error: MutationError;
|
|
85
70
|
loading: boolean;
|
|
86
71
|
formData: FormData;
|
|
87
72
|
cancel: () => void;
|
|
@@ -97,7 +82,7 @@ export declare function usePatch<K extends keyof Methods["PATCH"], T = Data<"PAT
|
|
|
97
82
|
config?: Partial<Config<T>>
|
|
98
83
|
]): {
|
|
99
84
|
data: Data<"PATCH", K>;
|
|
100
|
-
error:
|
|
85
|
+
error: MutationError;
|
|
101
86
|
loading: boolean;
|
|
102
87
|
formData: FormData;
|
|
103
88
|
cancel: () => void;
|
|
@@ -113,7 +98,7 @@ export declare function useDelete<K extends keyof Methods["DELETE"], T = Data<"D
|
|
|
113
98
|
config?: Partial<Config<T>>
|
|
114
99
|
]): {
|
|
115
100
|
data: Data<"DELETE", K>;
|
|
116
|
-
error:
|
|
101
|
+
error: MutationError;
|
|
117
102
|
loading: boolean;
|
|
118
103
|
formData: FormData;
|
|
119
104
|
cancel: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMutation.d.ts","sourceRoot":"","sources":["../../client/useMutation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"useMutation.d.ts","sourceRoot":"","sources":["../../client/useMutation.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import type { NestedPrettify } from "../utils/type";
|
|
|
3
3
|
import type { ApiRouterHandler } from "../http/ApiRouter";
|
|
4
4
|
import type { UnwrapPromise } from "../utils/type";
|
|
5
5
|
import type { UrlParser } from "./types";
|
|
6
|
-
interface Config<T> {
|
|
6
|
+
export interface Config<T> {
|
|
7
7
|
fallbackData?: T;
|
|
8
8
|
/**
|
|
9
9
|
* When true (the default), a variant change keeps rendering the previous
|
|
@@ -45,13 +45,13 @@ interface Config<T> {
|
|
|
45
45
|
suspense?: boolean;
|
|
46
46
|
refetchUntil?: (data: T, duration: number) => number;
|
|
47
47
|
}
|
|
48
|
-
type GetRPC = {
|
|
48
|
+
export type GetRPC = {
|
|
49
49
|
[K in keyof RPC as K extends `GET:${infer P}` ? P : never]: RPC[K];
|
|
50
50
|
};
|
|
51
|
-
type Data<T extends keyof GetRPC> = GetRPC[T] extends ApiRouterHandler<any, infer Data, any> ? UnwrapPromise<Data> : never;
|
|
51
|
+
export type Data<T extends keyof GetRPC> = GetRPC[T] extends ApiRouterHandler<any, infer Data, any> ? UnwrapPromise<Data> : never;
|
|
52
52
|
type Error = Record<string, unknown>;
|
|
53
53
|
export type QueryResult<T extends keyof GetRPC> = NestedPrettify<Data<T> & {}>;
|
|
54
|
-
type Options<T extends keyof GetRPC> = {
|
|
54
|
+
export type Options<T extends keyof GetRPC> = {
|
|
55
55
|
search?: Record<string, string | number | boolean | null>;
|
|
56
56
|
params?: Partial<UrlParser<`${T & string}`>>;
|
|
57
57
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useQuery.d.ts","sourceRoot":"","sources":["../../client/useQuery.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAKnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAqBzC,
|
|
1
|
+
{"version":3,"file":"useQuery.d.ts","sourceRoot":"","sources":["../../client/useQuery.ts"],"names":[],"mappings":"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"}
|
package/dist/server/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{wa as Y}from"../chunk-8z37k28d.js";import{xa as L}from"../chunk-ev1pe2ry.js";import{qg as b,sg as C,tg as Q,ug as V,vg as X}from"../chunk-b2bpwb1d.js";import{zg as K}from"../chunk-25a65e4r.js";import"../chunk-ryynt7wx.js";import{Gg as J}from"../chunk-5fxqzs72.js";class Z{app;instrumentation;handleSignals;server;stopping;settings;constructor(z){this.app=new L({kernel:z.kernel}),this.handleSignals=z.handleSignals??!0,this.instrumentation=V(z.instrumentation??((B,$)=>$(B)))}async start(){process.env.ROOT_DIR=K();let z=Bun.env.NODE_ENV==="production";if(z){if(this.handleSignals)X(()=>this.stop());this.settings=C()}if(await this.app.waitForBoot(),z){let{httpProd:B}=await import("../chunk-
|
|
2
|
+
import{wa as Y}from"../chunk-8z37k28d.js";import{xa as L}from"../chunk-ev1pe2ry.js";import{qg as b,sg as C,tg as Q,ug as V,vg as X}from"../chunk-b2bpwb1d.js";import{zg as K}from"../chunk-25a65e4r.js";import"../chunk-ryynt7wx.js";import{Gg as J}from"../chunk-5fxqzs72.js";class Z{app;instrumentation;handleSignals;server;stopping;settings;constructor(z){this.app=new L({kernel:z.kernel}),this.handleSignals=z.handleSignals??!0,this.instrumentation=V(z.instrumentation??((B,$)=>$(B)))}async start(){process.env.ROOT_DIR=K();let z=Bun.env.NODE_ENV==="production";if(z){if(this.handleSignals)X(()=>this.stop());this.settings=C()}if(await this.app.waitForBoot(),z){let{httpProd:B}=await import("../chunk-c8jt128x.js");this.server=await B(this.app,this.instrumentation.bind(this))}else{Y();let{httpDev:B}=await import("../chunk-481t5ewt.js");this.server=await B(this.app,this.instrumentation.bind(this))}return this.server}stop(z={}){return this.stopping??=Q({server:this.server,shutdownProviders:(B)=>this.app.shutdown(B),settings:{...this.settings??C(),...z}}),this.stopping}}export{b as isShuttingDown,Z as Server};
|
|
3
3
|
|
|
4
4
|
//# debugId=C4BB0C9EA167352964756E2164756E21
|
package/dist/testing/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { E as ServerDataContext, F as applyParams, L as QueryManagerContext, M as Action, N as createMemoryHistory, P as toVariantKey, R as QueryManagerProvider, T as I18nProvider, V as Subject, a as m, c as ClientRouterContext, j as ProgressManager, o as RouteTransitionProvider, r as WebSocketContext, t as ThemeProvider } from "../chunks/ThemeProvider-
|
|
1
|
+
import { E as ServerDataContext, F as applyParams, L as QueryManagerContext, M as Action, N as createMemoryHistory, P as toVariantKey, R as QueryManagerProvider, T as I18nProvider, V as Subject, a as m, c as ClientRouterContext, j as ProgressManager, o as RouteTransitionProvider, r as WebSocketContext, t as ThemeProvider } from "../chunks/ThemeProvider-D9v0VAbY.js";
|
|
2
2
|
import { r as RouteStateProvider } from "../chunks/useParams-BN3XXfmG.js";
|
|
3
3
|
import { Suspense, useContext, useMemo, useRef, useState } from "react";
|
|
4
4
|
import { jsx } from "react/jsx-runtime";
|
package/package.json
CHANGED
|
@@ -7,9 +7,9 @@ tags: controller, errors, validation, client-contract
|
|
|
7
7
|
|
|
8
8
|
## Throw the Framework's Errors, Do Not Invent a Response Shape
|
|
9
9
|
|
|
10
|
-
The client's mutation hooks and `<Form>`
|
|
11
|
-
`
|
|
12
|
-
`
|
|
10
|
+
The client's mutation hooks and `<Form>` hand these errors to `onError` as a
|
|
11
|
+
`MutationError`, which apps narrow with `isValidationError`, `isPermissionError` and
|
|
12
|
+
the other guards from `gemi/client`. Returning an ad-hoc `{ error: "…" }` from a controller
|
|
13
13
|
produces a **200 with a body the client reads as success**, so the UI shows nothing
|
|
14
14
|
and the failure disappears.
|
|
15
15
|
|