@ps-aux/api-client-angular 0.2.2-rc1 → 0.3.0-rc1
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/AngularApiHttpClient.d.ts +1 -1
- package/{src/index.ts → dist/_index.d.ts} +1 -2
- package/dist/index.esm.js +5 -6
- package/dist/index.js +5 -6
- package/package.json +2 -4
- package/dist/api-client-angular/src/AngularApiHttpClient.d.ts +0 -3
- package/dist/api-client-angular/src/index.d.ts +0 -1
- package/dist/api-client-angular/src/serializeQuery.d.ts +0 -2
- package/dist/api-client-angular/src/types.d.ts +0 -20
- package/dist/api-client-common/src/index.d.ts +0 -1
- package/dist/types.d.ts +0 -19
- package/src/AngularApiHttpClient.ts +0 -87
- package/src/serializeQuery.ts +0 -45
|
@@ -2,4 +2,4 @@ import { HttpClient as AngularHttpClient } from '@angular/common/http';
|
|
|
2
2
|
import { UrlConverter, ObservableHttpClient } from '@ps-aux/api-client-common';
|
|
3
3
|
export declare const qsUrlConverter: () => UrlConverter;
|
|
4
4
|
export declare const springBootUrlConverter: () => UrlConverter;
|
|
5
|
-
export declare const createHttpClient: (client: AngularHttpClient, urlConverter?: UrlConverter) => ObservableHttpClient
|
|
5
|
+
export declare const createHttpClient: (client: AngularHttpClient, urlConverter?: UrlConverter) => ObservableHttpClient<never>;
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export { createHttpClient, springBootUrlConverter, qsUrlConverter
|
|
2
|
-
|
|
1
|
+
export { createHttpClient, springBootUrlConverter, qsUrlConverter } from './AngularApiHttpClient';
|
package/dist/index.esm.js
CHANGED
|
@@ -265,18 +265,17 @@ const getFileNameFromContentDispositionHeader = (contentDispositionHeader) => {
|
|
|
265
265
|
};
|
|
266
266
|
|
|
267
267
|
const ContentType = {
|
|
268
|
-
|
|
269
|
-
FormData: 'multipart/form-data',
|
|
268
|
+
FormData: 'multipart/form-data'
|
|
270
269
|
};
|
|
271
270
|
|
|
272
271
|
const qsUrlConverter = () => ({ query, path }) => {
|
|
273
272
|
return {
|
|
274
|
-
url: path + (query ? `?${serializeQueryWithQs(query)}` : '')
|
|
273
|
+
url: path + (query ? `?${serializeQueryWithQs(query)}` : '')
|
|
275
274
|
};
|
|
276
275
|
};
|
|
277
276
|
const springBootUrlConverter = () => ({ query, path }) => {
|
|
278
277
|
return {
|
|
279
|
-
url: path + (query ? `?${serializeQueryForSpringBoot(query)}` : '')
|
|
278
|
+
url: path + (query ? `?${serializeQueryForSpringBoot(query)}` : '')
|
|
280
279
|
};
|
|
281
280
|
};
|
|
282
281
|
const createHttpClient = (client, urlConverter = qsUrlConverter()) => {
|
|
@@ -288,7 +287,7 @@ const createHttpClient = (client, urlConverter = qsUrlConverter()) => {
|
|
|
288
287
|
params,
|
|
289
288
|
body: prepareBody(req.body, req.type),
|
|
290
289
|
responseType: (isBlob ? 'blob' : 'json'),
|
|
291
|
-
observe: 'response'
|
|
290
|
+
observe: 'response'
|
|
292
291
|
});
|
|
293
292
|
return obs.pipe(map((r) => {
|
|
294
293
|
const { body } = r;
|
|
@@ -300,7 +299,7 @@ const createHttpClient = (client, urlConverter = qsUrlConverter()) => {
|
|
|
300
299
|
type: data.type
|
|
301
300
|
});
|
|
302
301
|
}));
|
|
303
|
-
}
|
|
302
|
+
}
|
|
304
303
|
};
|
|
305
304
|
};
|
|
306
305
|
const prepareBody = (payload, type) => {
|
package/dist/index.js
CHANGED
|
@@ -267,18 +267,17 @@ const getFileNameFromContentDispositionHeader = (contentDispositionHeader) => {
|
|
|
267
267
|
};
|
|
268
268
|
|
|
269
269
|
const ContentType = {
|
|
270
|
-
|
|
271
|
-
FormData: 'multipart/form-data',
|
|
270
|
+
FormData: 'multipart/form-data'
|
|
272
271
|
};
|
|
273
272
|
|
|
274
273
|
const qsUrlConverter = () => ({ query, path }) => {
|
|
275
274
|
return {
|
|
276
|
-
url: path + (query ? `?${serializeQueryWithQs(query)}` : '')
|
|
275
|
+
url: path + (query ? `?${serializeQueryWithQs(query)}` : '')
|
|
277
276
|
};
|
|
278
277
|
};
|
|
279
278
|
const springBootUrlConverter = () => ({ query, path }) => {
|
|
280
279
|
return {
|
|
281
|
-
url: path + (query ? `?${serializeQueryForSpringBoot(query)}` : '')
|
|
280
|
+
url: path + (query ? `?${serializeQueryForSpringBoot(query)}` : '')
|
|
282
281
|
};
|
|
283
282
|
};
|
|
284
283
|
const createHttpClient = (client, urlConverter = qsUrlConverter()) => {
|
|
@@ -290,7 +289,7 @@ const createHttpClient = (client, urlConverter = qsUrlConverter()) => {
|
|
|
290
289
|
params,
|
|
291
290
|
body: prepareBody(req.body, req.type),
|
|
292
291
|
responseType: (isBlob ? 'blob' : 'json'),
|
|
293
|
-
observe: 'response'
|
|
292
|
+
observe: 'response'
|
|
294
293
|
});
|
|
295
294
|
return obs.pipe(rxjs.map((r) => {
|
|
296
295
|
const { body } = r;
|
|
@@ -302,7 +301,7 @@ const createHttpClient = (client, urlConverter = qsUrlConverter()) => {
|
|
|
302
301
|
type: data.type
|
|
303
302
|
});
|
|
304
303
|
}));
|
|
305
|
-
}
|
|
304
|
+
}
|
|
306
305
|
};
|
|
307
306
|
};
|
|
308
307
|
const prepareBody = (payload, type) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ps-aux/api-client-angular",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0-rc1",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"module": "dist/index.esm.js",
|
|
@@ -16,9 +16,7 @@
|
|
|
16
16
|
"qs": "^6.11.2"
|
|
17
17
|
},
|
|
18
18
|
"peerDependencies": {
|
|
19
|
-
"rxjs": "^7.8.1"
|
|
20
|
-
},
|
|
21
|
-
"devDependencies": {
|
|
19
|
+
"rxjs": "^7.8.1",
|
|
22
20
|
"@angular/common": "^16.2.12"
|
|
23
21
|
}
|
|
24
22
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { createHttpClient } from './AngularApiHttpClient';
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { Observable } from 'rxjs';
|
|
2
|
-
export type ContentType = {};
|
|
3
|
-
export type RequestParams = {};
|
|
4
|
-
export declare const ContentType: {
|
|
5
|
-
Json: string;
|
|
6
|
-
FormData: string;
|
|
7
|
-
};
|
|
8
|
-
export type Request = {
|
|
9
|
-
path: string;
|
|
10
|
-
method: 'GET' | 'POST' | 'PUT' | 'DELETE';
|
|
11
|
-
format?: 'json';
|
|
12
|
-
query?: any;
|
|
13
|
-
body?: any;
|
|
14
|
-
type?: string;
|
|
15
|
-
secure?: boolean;
|
|
16
|
-
responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';
|
|
17
|
-
};
|
|
18
|
-
export type HttpClient<Any = any> = {
|
|
19
|
-
request: <Data, A = any>(req: Request) => Observable<Data>;
|
|
20
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const myFun: (f: string) => string;
|
package/dist/types.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { Observable } from 'rxjs';
|
|
2
|
-
export type ContentType = {};
|
|
3
|
-
export type RequestParams = {};
|
|
4
|
-
export declare const ContentType: {
|
|
5
|
-
Json: string;
|
|
6
|
-
FormData: string;
|
|
7
|
-
};
|
|
8
|
-
export type Request = {
|
|
9
|
-
path: string;
|
|
10
|
-
method: 'GET' | 'POST' | 'PUT' | 'DELETE';
|
|
11
|
-
format?: 'json';
|
|
12
|
-
query?: any;
|
|
13
|
-
body?: any;
|
|
14
|
-
type?: string;
|
|
15
|
-
secure?: boolean;
|
|
16
|
-
};
|
|
17
|
-
export type HttpClient<Any = any> = {
|
|
18
|
-
request: <Data, A = any>(req: Request) => Observable<Data>;
|
|
19
|
-
};
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { HttpClient as AngularHttpClient, HttpResponse } from '@angular/common/http'
|
|
2
|
-
import { map, Observable } from 'rxjs'
|
|
3
|
-
import {
|
|
4
|
-
serializeQueryForSpringBoot,
|
|
5
|
-
serializeQueryWithQs,
|
|
6
|
-
UrlConverter,
|
|
7
|
-
ObservableHttpClient,
|
|
8
|
-
Request, ContentType, getFileNameFromContentDispositionHeader,
|
|
9
|
-
} from '@ps-aux/api-client-common'
|
|
10
|
-
|
|
11
|
-
export const qsUrlConverter: () => UrlConverter = () => ({ query, path }) => {
|
|
12
|
-
return {
|
|
13
|
-
url: path + (query ? `?${serializeQueryWithQs(query)}` : ''),
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export const springBootUrlConverter: () => UrlConverter = () => ({ query, path }) => {
|
|
18
|
-
return {
|
|
19
|
-
url: path + (query ? `?${serializeQueryForSpringBoot(query)}` : ''),
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
export const createHttpClient = (client: AngularHttpClient, urlConverter: UrlConverter = qsUrlConverter()): ObservableHttpClient => {
|
|
25
|
-
return {
|
|
26
|
-
request: <D>(req: Request): Observable<D> => {
|
|
27
|
-
const { url, params } = urlConverter(req)
|
|
28
|
-
|
|
29
|
-
const isBlob = req.format === 'document'
|
|
30
|
-
|
|
31
|
-
const obs = client.request<D>(
|
|
32
|
-
req.method,
|
|
33
|
-
url,
|
|
34
|
-
{
|
|
35
|
-
params,
|
|
36
|
-
body: prepareBody(req.body, req.type),
|
|
37
|
-
responseType: (isBlob ? 'blob' : 'json') as any,
|
|
38
|
-
observe: 'response',
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
return obs.pipe(
|
|
42
|
-
map((r: HttpResponse<D>) => {
|
|
43
|
-
const { body } = r
|
|
44
|
-
|
|
45
|
-
if (!isBlob)
|
|
46
|
-
return body as D
|
|
47
|
-
|
|
48
|
-
const data = body as Blob
|
|
49
|
-
|
|
50
|
-
const contDisp = r.headers.get('content-disposition')
|
|
51
|
-
return new File([data], getFileNameFromContentDispositionHeader(contDisp), {
|
|
52
|
-
type: data.type
|
|
53
|
-
}) as D
|
|
54
|
-
}),
|
|
55
|
-
)
|
|
56
|
-
},
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
const prepareBody = (payload: any, type?: string): any => {
|
|
61
|
-
if (type === ContentType.FormData) {
|
|
62
|
-
return convertToFormData(payload)
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
return payload
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const convertToFormData = (payload: Record<string, any>): FormData => {
|
|
69
|
-
const formData = new FormData()
|
|
70
|
-
const addProp = (key: string, val: any) => {
|
|
71
|
-
if (Array.isArray(val) || val instanceof FileList) {
|
|
72
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
73
|
-
// @ts-ignore - seems that FileList is iterable despite the warning
|
|
74
|
-
// TODO change to other iteration method if this is not true
|
|
75
|
-
for (const valItem of val) {
|
|
76
|
-
addProp(key, valItem)
|
|
77
|
-
}
|
|
78
|
-
} else if (typeof val === 'object' && val != null && !(val instanceof File)) {
|
|
79
|
-
throw new Error('Object serialization into FormData not supported')
|
|
80
|
-
} else {
|
|
81
|
-
formData.append(key, val)
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
Object.entries(payload).forEach(([key, val]) => addProp(key, val))
|
|
86
|
-
return formData
|
|
87
|
-
}
|
package/src/serializeQuery.ts
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
|
-
|
|
3
|
-
// TODO improve typings and check implementation
|
|
4
|
-
export const serializeQuery = (obj: any): any => {
|
|
5
|
-
let result = {};
|
|
6
|
-
if (obj) {
|
|
7
|
-
Object.entries(obj).forEach(([key, val]) => {
|
|
8
|
-
if (Array.isArray(val)) {
|
|
9
|
-
val.map(v => {
|
|
10
|
-
if (result[key]) {
|
|
11
|
-
result[key] += `&${key}=${v}`;
|
|
12
|
-
} else {
|
|
13
|
-
result[key] = v;
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
} else if (typeof val === 'object') {
|
|
17
|
-
result = { ...result, ...flattenObject(val) };
|
|
18
|
-
} else {
|
|
19
|
-
result[key] = val;
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
export const flattenObject = (obj: any, prefix?: string): any => {
|
|
27
|
-
let str = {};
|
|
28
|
-
const pfix = prefix ? prefix + '.' : '';
|
|
29
|
-
|
|
30
|
-
for (const p in obj) {
|
|
31
|
-
if (obj.hasOwnProperty(p)) {
|
|
32
|
-
if (Array.isArray(obj[p])) {
|
|
33
|
-
str[pfix + p] = obj[p];
|
|
34
|
-
} else if (obj[p] === null) {
|
|
35
|
-
str[pfix + p] = null;
|
|
36
|
-
} else if (typeof obj[p] === 'object') {
|
|
37
|
-
str = { ...str, ...flattenObject(obj[p], pfix + p) };
|
|
38
|
-
} else if (obj[p] !== undefined) {
|
|
39
|
-
str[pfix + p] = obj[p];
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
return str;
|
|
45
|
-
};
|