@openapi-qraft/react 1.0.3 → 1.0.6
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/CHANGELOG.md +20 -0
- package/README.md +11 -0
- package/dist/ServiceOperation.d.ts +48 -40
- package/dist/ServiceOperation.d.ts.map +1 -1
- package/dist/callbacks/getInfiniteQueryData.js +3 -3
- package/dist/callbacks/getInfiniteQueryData.js.map +1 -1
- package/dist/callbacks/getInfiniteQueryKey.d.ts +1 -0
- package/dist/callbacks/getInfiniteQueryKey.d.ts.map +1 -1
- package/dist/callbacks/getInfiniteQueryKey.js +1 -1
- package/dist/callbacks/getInfiniteQueryKey.js.map +1 -1
- package/dist/callbacks/getMutationKey.d.ts +1 -1
- package/dist/callbacks/getMutationKey.d.ts.map +1 -1
- package/dist/callbacks/getQueryData.js +3 -3
- package/dist/callbacks/getQueryData.js.map +1 -1
- package/dist/callbacks/getQueryKey.d.ts +1 -0
- package/dist/callbacks/getQueryKey.d.ts.map +1 -1
- package/dist/callbacks/getQueryKey.js +4 -1
- package/dist/callbacks/getQueryKey.js.map +1 -1
- package/dist/callbacks/queryFn.d.ts +5 -13
- package/dist/callbacks/queryFn.d.ts.map +1 -1
- package/dist/callbacks/queryFn.js +3 -4
- package/dist/callbacks/queryFn.js.map +1 -1
- package/dist/callbacks/setInfiniteQueryData.js +2 -2
- package/dist/callbacks/setInfiniteQueryData.js.map +1 -1
- package/dist/callbacks/setQueryData.js +3 -3
- package/dist/callbacks/setQueryData.js.map +1 -1
- package/dist/callbacks/useInfiniteQuery.d.ts.map +1 -1
- package/dist/callbacks/useInfiniteQuery.js +5 -2
- package/dist/callbacks/useInfiniteQuery.js.map +1 -1
- package/dist/callbacks/useQueries.js +1 -1
- package/dist/callbacks/useQueries.js.map +1 -1
- package/dist/callbacks/useQuery.js +3 -3
- package/dist/callbacks/useQuery.js.map +1 -1
- package/dist/callbacks/useSuspenseInfiniteQuery.d.ts.map +1 -1
- package/dist/callbacks/useSuspenseInfiniteQuery.js +5 -2
- package/dist/callbacks/useSuspenseInfiniteQuery.js.map +1 -1
- package/dist/callbacks/useSuspenseQuery.js +3 -3
- package/dist/callbacks/useSuspenseQuery.js.map +1 -1
- package/dist/qraftAPIClient.d.ts +18 -7
- package/dist/qraftAPIClient.d.ts.map +1 -1
- package/dist/qraftAPIClient.js.map +1 -1
- package/package.json +7 -7
- package/src/ServiceOperation.ts +96 -49
- package/src/callbacks/getInfiniteQueryData.ts +3 -3
- package/src/callbacks/getInfiniteQueryKey.ts +1 -1
- package/src/callbacks/getQueryData.ts +3 -3
- package/src/callbacks/getQueryKey.ts +4 -4
- package/src/callbacks/queryFn.ts +12 -12
- package/src/callbacks/setInfiniteQueryData.ts +2 -2
- package/src/callbacks/setQueryData.ts +3 -3
- package/src/callbacks/useInfiniteQuery.ts +5 -2
- package/src/callbacks/useQueries.ts +1 -1
- package/src/callbacks/useQuery.ts +3 -3
- package/src/callbacks/useSuspenseInfiniteQuery.ts +5 -2
- package/src/callbacks/useSuspenseQuery.ts +3 -3
- package/src/qraftAPIClient.ts +27 -15
- package/src/lib/composeMutationKey.test.ts +0 -43
- package/src/lib/shelfMerge.test.ts +0 -94
- package/src/mocks/handlers.ts +0 -252
- package/src/mocks/node.ts +0 -5
- package/src/qraftAPIClient.test.tsx +0 -996
- package/src/setupTests.ts +0 -17
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { shelfMerge } from './shelfMerge.js';
|
|
2
|
-
|
|
3
|
-
describe('shelfMerge', () => {
|
|
4
|
-
it('merges simple objects', async () => {
|
|
5
|
-
expect(shelfMerge(1, { path: 1 }, { query: 2 }, { header: 3 })).toEqual({
|
|
6
|
-
path: 1,
|
|
7
|
-
query: 2,
|
|
8
|
-
header: 3,
|
|
9
|
-
});
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
it('merges simple objects with overlapping', async () => {
|
|
13
|
-
expect(
|
|
14
|
-
shelfMerge(2, { path: 1 }, { path: { id: 22 } }, { header: 3 })
|
|
15
|
-
).toEqual({
|
|
16
|
-
path: { id: 22 },
|
|
17
|
-
header: 3,
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
it('merges objects with overlapping in child objects', async () => {
|
|
22
|
-
expect(
|
|
23
|
-
shelfMerge(
|
|
24
|
-
2,
|
|
25
|
-
{ query: { id: 11, page: 22 } },
|
|
26
|
-
{ query: { id: 44, limit: 33 } },
|
|
27
|
-
{ header: 3 }
|
|
28
|
-
)
|
|
29
|
-
).toEqual({
|
|
30
|
-
query: { id: 44, page: 22, limit: 33 },
|
|
31
|
-
header: 3,
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
it('merges objects with overlapping in child objects on specific depth (1)', async () => {
|
|
36
|
-
expect(
|
|
37
|
-
shelfMerge(
|
|
38
|
-
1,
|
|
39
|
-
{ query: { id: 11, page: 22 } },
|
|
40
|
-
{ query: { id: 44, limit: 33 } },
|
|
41
|
-
{ header: 3 }
|
|
42
|
-
)
|
|
43
|
-
).toEqual({
|
|
44
|
-
query: { id: 44, limit: 33 },
|
|
45
|
-
header: 3,
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
it('merges objects with overlapping in child objects on specific depth (2)', async () => {
|
|
50
|
-
expect(
|
|
51
|
-
shelfMerge(
|
|
52
|
-
2,
|
|
53
|
-
{ query: { id: 11, page: 22 } },
|
|
54
|
-
{ query: { id: 44, limit: 33 } },
|
|
55
|
-
{ header: 3 }
|
|
56
|
-
)
|
|
57
|
-
).toEqual({
|
|
58
|
-
query: { id: 44, limit: 33, page: 22 },
|
|
59
|
-
header: 3,
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
it('merges arrays without nesting', async () => {
|
|
64
|
-
expect(
|
|
65
|
-
shelfMerge(
|
|
66
|
-
2,
|
|
67
|
-
{ query: [{ id: 11, page: 22 }] },
|
|
68
|
-
{ query: [{ id: 44, limit: 33 }] },
|
|
69
|
-
{ header: 3 }
|
|
70
|
-
)
|
|
71
|
-
).toEqual({
|
|
72
|
-
query: [{ id: 44, limit: 33 }],
|
|
73
|
-
header: 3,
|
|
74
|
-
});
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
it('merges objects with overlapping in child objects and depth', async () => {
|
|
78
|
-
expect(
|
|
79
|
-
shelfMerge(
|
|
80
|
-
3,
|
|
81
|
-
{ query: { one: { id: 11, page: 22 }, two: { ids: [55] } } },
|
|
82
|
-
{ query: { one: { id: 44, limit: 33 }, three: { filter: 66 } } },
|
|
83
|
-
{ header: 3 }
|
|
84
|
-
)
|
|
85
|
-
).toEqual({
|
|
86
|
-
query: {
|
|
87
|
-
one: { id: 44, page: 22, limit: 33 },
|
|
88
|
-
two: { ids: [55] },
|
|
89
|
-
three: { filter: 66 },
|
|
90
|
-
},
|
|
91
|
-
header: 3,
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
});
|
package/src/mocks/handlers.ts
DELETED
|
@@ -1,252 +0,0 @@
|
|
|
1
|
-
import { http, HttpResponse } from 'msw';
|
|
2
|
-
import queryString from 'query-string';
|
|
3
|
-
|
|
4
|
-
import { Services, services } from '../fixtures/api/index.js';
|
|
5
|
-
|
|
6
|
-
export const handlers = [
|
|
7
|
-
http.get<
|
|
8
|
-
ServicePathParameters<
|
|
9
|
-
Services['approvalPolicies']['getApprovalPoliciesId']
|
|
10
|
-
>,
|
|
11
|
-
undefined,
|
|
12
|
-
ServiceResponseParameters<
|
|
13
|
-
Services['approvalPolicies']['getApprovalPoliciesId']
|
|
14
|
-
>
|
|
15
|
-
>(
|
|
16
|
-
openApiToMswPath(
|
|
17
|
-
services.approvalPolicies.getApprovalPoliciesId.schema.url
|
|
18
|
-
),
|
|
19
|
-
({ params: { '0': _, ...path }, request }) => {
|
|
20
|
-
const query = getQueryParameters<
|
|
21
|
-
Services['approvalPolicies']['getApprovalPoliciesId']
|
|
22
|
-
>(request.url);
|
|
23
|
-
|
|
24
|
-
const header = getHeaders<
|
|
25
|
-
Services['approvalPolicies']['getApprovalPoliciesId']
|
|
26
|
-
>(request.headers, 'x-');
|
|
27
|
-
|
|
28
|
-
return HttpResponse.json({
|
|
29
|
-
path,
|
|
30
|
-
query,
|
|
31
|
-
header,
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
),
|
|
35
|
-
|
|
36
|
-
http.post<
|
|
37
|
-
ServicePathParameters<Services['entities']['postEntitiesIdDocuments']>,
|
|
38
|
-
ServiceRequestBodyParameters<
|
|
39
|
-
Services['entities']['postEntitiesIdDocuments']
|
|
40
|
-
>,
|
|
41
|
-
ServiceResponseParameters<Services['entities']['postEntitiesIdDocuments']>
|
|
42
|
-
>(
|
|
43
|
-
openApiToMswPath(services.entities.postEntitiesIdDocuments.schema.url),
|
|
44
|
-
async ({ params: { '0': _, ...path }, request }) => {
|
|
45
|
-
const query = getQueryParameters<
|
|
46
|
-
Services['entities']['postEntitiesIdDocuments']
|
|
47
|
-
>(request.url);
|
|
48
|
-
|
|
49
|
-
const header = getHeaders<
|
|
50
|
-
Services['entities']['postEntitiesIdDocuments']
|
|
51
|
-
>(request.headers, 'x-');
|
|
52
|
-
|
|
53
|
-
const body = await request.json();
|
|
54
|
-
|
|
55
|
-
return HttpResponse.json({
|
|
56
|
-
path,
|
|
57
|
-
query,
|
|
58
|
-
header,
|
|
59
|
-
body,
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
),
|
|
63
|
-
|
|
64
|
-
http.post<
|
|
65
|
-
ServicePathParameters<Services['files']['postFiles']>,
|
|
66
|
-
ServiceRequestBodyParameters<Services['files']['postFiles']>,
|
|
67
|
-
ServiceResponseParameters<Services['files']['postFiles']>
|
|
68
|
-
>(
|
|
69
|
-
openApiToMswPath(services.files.postFiles.schema.url),
|
|
70
|
-
async ({ request }) => {
|
|
71
|
-
const formData = Object.fromEntries(await request.formData()) as Awaited<
|
|
72
|
-
ReturnType<typeof request.json>
|
|
73
|
-
>;
|
|
74
|
-
|
|
75
|
-
const body: Record<string, any> = {};
|
|
76
|
-
|
|
77
|
-
for (const [key, value] of Object.entries(formData)) {
|
|
78
|
-
// some workaround to make it work, since value instanceof (File | Blob) is not working by some reason
|
|
79
|
-
if (
|
|
80
|
-
!value ||
|
|
81
|
-
typeof value === 'string' ||
|
|
82
|
-
value.type !== 'application/octet-stream'
|
|
83
|
-
) {
|
|
84
|
-
body[key] = value;
|
|
85
|
-
continue;
|
|
86
|
-
}
|
|
87
|
-
body[key] = (value as File).name;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
return HttpResponse.json({ body });
|
|
91
|
-
}
|
|
92
|
-
),
|
|
93
|
-
|
|
94
|
-
http.get<
|
|
95
|
-
ServicePathParameters<Services['files']['getFiles']>,
|
|
96
|
-
undefined,
|
|
97
|
-
ServiceResponseParameters<Services['files']['getFiles']>
|
|
98
|
-
>(openApiToMswPath(services.files.getFiles.schema.url), ({ request }) => {
|
|
99
|
-
const query = getQueryParameters<Services['files']['getFiles']>(
|
|
100
|
-
request.url
|
|
101
|
-
);
|
|
102
|
-
|
|
103
|
-
const header = getHeaders<Services['files']['getFiles']>(
|
|
104
|
-
request.headers,
|
|
105
|
-
'x-'
|
|
106
|
-
);
|
|
107
|
-
|
|
108
|
-
return HttpResponse.json({
|
|
109
|
-
query,
|
|
110
|
-
header,
|
|
111
|
-
});
|
|
112
|
-
}),
|
|
113
|
-
];
|
|
114
|
-
|
|
115
|
-
function openApiToMswPath(url: string) {
|
|
116
|
-
return `*${url.replace(
|
|
117
|
-
/{(.*?)}/g,
|
|
118
|
-
(substring: string, group: string) => `:${group}`
|
|
119
|
-
)}`;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
function getQueryParameters<
|
|
123
|
-
T extends
|
|
124
|
-
| {
|
|
125
|
-
getQueryKey: (arg: never) => unknown;
|
|
126
|
-
}
|
|
127
|
-
| {
|
|
128
|
-
getMutationKey: (arg: never) => unknown;
|
|
129
|
-
},
|
|
130
|
-
>(url: string): ServiceQueryParameters<T> {
|
|
131
|
-
return queryString.parse(url.split('?')[1]) as ServiceQueryParameters<T>;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
function getHeaders<
|
|
135
|
-
T extends
|
|
136
|
-
| {
|
|
137
|
-
getQueryKey: (arg: never) => unknown;
|
|
138
|
-
}
|
|
139
|
-
| {
|
|
140
|
-
getMutationKey: (arg: never) => unknown;
|
|
141
|
-
},
|
|
142
|
-
>(headers: Headers, prefix: string): ServiceHeaderParameters<T> {
|
|
143
|
-
return Array.from(headers.entries()).reduce(
|
|
144
|
-
(acc, [headerKey, headerValue]) => {
|
|
145
|
-
if (!headerKey.toLowerCase().startsWith(prefix.toLowerCase())) return acc;
|
|
146
|
-
if (typeof headerValue !== 'string') return acc;
|
|
147
|
-
return {
|
|
148
|
-
...acc,
|
|
149
|
-
[headerKey]: headerValue,
|
|
150
|
-
};
|
|
151
|
-
},
|
|
152
|
-
{} as Record<string, string>
|
|
153
|
-
) as ServiceHeaderParameters<T>;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
type ServiceHeaderParameters<
|
|
157
|
-
T extends
|
|
158
|
-
| {
|
|
159
|
-
getQueryKey: (arg: never) => unknown;
|
|
160
|
-
}
|
|
161
|
-
| {
|
|
162
|
-
getMutationKey: (arg: never) => unknown;
|
|
163
|
-
},
|
|
164
|
-
> = T extends {
|
|
165
|
-
getQueryKey: (arg: infer QueryKey) => unknown;
|
|
166
|
-
}
|
|
167
|
-
? QueryKey extends { header?: infer Parameters }
|
|
168
|
-
? Parameters
|
|
169
|
-
: unknown
|
|
170
|
-
: T extends {
|
|
171
|
-
getMutationKey: (arg: infer MutationKey) => unknown;
|
|
172
|
-
}
|
|
173
|
-
? MutationKey extends { header?: infer Parameters }
|
|
174
|
-
? Parameters
|
|
175
|
-
: unknown
|
|
176
|
-
: never;
|
|
177
|
-
|
|
178
|
-
type ServicePathParameters<
|
|
179
|
-
T extends
|
|
180
|
-
| {
|
|
181
|
-
getQueryKey: (arg: never) => unknown;
|
|
182
|
-
}
|
|
183
|
-
| {
|
|
184
|
-
getMutationKey: (arg: never) => unknown;
|
|
185
|
-
},
|
|
186
|
-
> = T extends {
|
|
187
|
-
getQueryKey: (arg: infer QueryKey) => unknown;
|
|
188
|
-
}
|
|
189
|
-
? QueryKey extends { path?: infer Parameters }
|
|
190
|
-
? Parameters & { 0: string }
|
|
191
|
-
: {}
|
|
192
|
-
: T extends {
|
|
193
|
-
getMutationKey: (arg: infer MutationKey) => unknown;
|
|
194
|
-
}
|
|
195
|
-
? MutationKey extends { path?: infer Parameters }
|
|
196
|
-
? Parameters & { 0: string }
|
|
197
|
-
: {}
|
|
198
|
-
: never;
|
|
199
|
-
|
|
200
|
-
type ServiceQueryParameters<
|
|
201
|
-
T extends
|
|
202
|
-
| {
|
|
203
|
-
getQueryKey: (arg: never) => unknown;
|
|
204
|
-
}
|
|
205
|
-
| {
|
|
206
|
-
getMutationKey: (arg: never) => unknown;
|
|
207
|
-
},
|
|
208
|
-
> = T extends {
|
|
209
|
-
getQueryKey: (arg: infer QueryKey) => unknown;
|
|
210
|
-
}
|
|
211
|
-
? QueryKey extends { query?: infer Parameters }
|
|
212
|
-
? Parameters
|
|
213
|
-
: unknown
|
|
214
|
-
: T extends {
|
|
215
|
-
getMutationKey: (arg: infer MutationKey) => unknown;
|
|
216
|
-
}
|
|
217
|
-
? MutationKey extends { query?: infer Parameters }
|
|
218
|
-
? Parameters
|
|
219
|
-
: unknown
|
|
220
|
-
: never;
|
|
221
|
-
|
|
222
|
-
type ServiceRequestBodyParameters<
|
|
223
|
-
T extends {
|
|
224
|
-
mutationFn: (...args: never[]) => unknown;
|
|
225
|
-
},
|
|
226
|
-
> = T extends {
|
|
227
|
-
mutationFn: (...args: never[]) => unknown;
|
|
228
|
-
}
|
|
229
|
-
? Parameters<T['mutationFn']>[1] extends infer Options
|
|
230
|
-
? Options extends { body: infer Body }
|
|
231
|
-
? Body
|
|
232
|
-
: never
|
|
233
|
-
: never
|
|
234
|
-
: never;
|
|
235
|
-
|
|
236
|
-
type ServiceResponseParameters<
|
|
237
|
-
T extends
|
|
238
|
-
| {
|
|
239
|
-
queryFn: (...args: never[]) => unknown;
|
|
240
|
-
}
|
|
241
|
-
| {
|
|
242
|
-
mutationFn: (...args: never[]) => unknown;
|
|
243
|
-
},
|
|
244
|
-
> = T extends {
|
|
245
|
-
queryFn: (...args: never[]) => unknown;
|
|
246
|
-
}
|
|
247
|
-
? Awaited<ReturnType<T['queryFn']>>
|
|
248
|
-
: T extends {
|
|
249
|
-
mutationFn: (...args: never[]) => unknown;
|
|
250
|
-
}
|
|
251
|
-
? Awaited<ReturnType<T['mutationFn']>>
|
|
252
|
-
: never;
|