@svadmin/refine-adapter 0.10.15 → 0.11.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/package.json +3 -3
- package/src/index.ts +39 -19
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@svadmin/refine-adapter",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.6",
|
|
4
4
|
"description": "Universal Refine DataProvider adapter for svadmin",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -20,12 +20,12 @@
|
|
|
20
20
|
}
|
|
21
21
|
},
|
|
22
22
|
"peerDependencies": {
|
|
23
|
-
"@svadmin/core": "^0.
|
|
23
|
+
"@svadmin/core": "^0.52.0"
|
|
24
24
|
},
|
|
25
25
|
"license": "MIT",
|
|
26
26
|
"repository": {
|
|
27
27
|
"type": "git",
|
|
28
|
-
"url": "https://github.com/vibeunion/svadmin.git",
|
|
28
|
+
"url": "git+https://github.com/vibeunion/svadmin.git",
|
|
29
29
|
"directory": "packages/refine-adapter"
|
|
30
30
|
},
|
|
31
31
|
"peerDependenciesMeta": {
|
package/src/index.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
+
import { definedOptions } from '@svadmin/core/options';
|
|
1
2
|
import type { DataProvider as SvadminDataProvider } from '@svadmin/core';
|
|
3
|
+
import { withValidatedResponses, type DataTransport } from '@svadmin/core/schema';
|
|
2
4
|
|
|
3
5
|
type RequiredRefineDataProvider = Pick<
|
|
4
|
-
|
|
6
|
+
DataTransport,
|
|
5
7
|
'getList' | 'getOne' | 'create' | 'update' | 'deleteOne'
|
|
6
8
|
>;
|
|
7
9
|
|
|
8
10
|
type OptionalRefineDataProvider = Partial<
|
|
9
|
-
Pick<
|
|
11
|
+
Pick<DataTransport, 'getApiUrl' | 'getMany' | 'createMany' | 'updateMany' | 'deleteMany' | 'custom'>
|
|
10
12
|
>;
|
|
11
13
|
|
|
12
14
|
export type RefineDataProviderLike = RequiredRefineDataProvider & OptionalRefineDataProvider;
|
|
@@ -31,7 +33,7 @@ function isObjectLike(value: unknown): value is Record<PropertyKey, unknown> {
|
|
|
31
33
|
return typeof value === 'object' && value !== null;
|
|
32
34
|
}
|
|
33
35
|
|
|
34
|
-
function
|
|
36
|
+
function requireRefineDataProvider(value: unknown): Record<PropertyKey, unknown> {
|
|
35
37
|
if (!isObjectLike(value)) {
|
|
36
38
|
throw new Error('[svadmin] createRefineAdapter: expected a valid Refine DataProvider object, got ' + String(value));
|
|
37
39
|
}
|
|
@@ -41,6 +43,12 @@ function assertRefineDataProvider(value: unknown): asserts value is RefineDataPr
|
|
|
41
43
|
throw new Error(`[svadmin] createRefineAdapter: missing required Refine DataProvider method "${method}"`);
|
|
42
44
|
}
|
|
43
45
|
}
|
|
46
|
+
for (const method of [...optionalMethods, 'getApiUrl']) {
|
|
47
|
+
if (value[method] !== undefined && typeof value[method] !== 'function') {
|
|
48
|
+
throw new Error(`[svadmin] createRefineAdapter: invalid optional Refine DataProvider method "${method}"`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return value;
|
|
44
52
|
}
|
|
45
53
|
|
|
46
54
|
/**
|
|
@@ -49,29 +57,41 @@ function assertRefineDataProvider(value: unknown): asserts value is RefineDataPr
|
|
|
49
57
|
* definition of @svadmin/core, except for the current page property.
|
|
50
58
|
*/
|
|
51
59
|
export function createRefineAdapter(refineProvider: unknown): SvadminDataProvider {
|
|
52
|
-
|
|
60
|
+
const source = requireRefineDataProvider(refineProvider);
|
|
61
|
+
function method(name: keyof RefineDataProviderLike) {
|
|
62
|
+
const handler = source[name];
|
|
63
|
+
if (typeof handler !== 'function') throw new TypeError(`Refine DataProvider method "${name}" is unavailable`);
|
|
64
|
+
return handler;
|
|
65
|
+
}
|
|
66
|
+
async function call(name: keyof RefineDataProviderLike, params: unknown): Promise<unknown> {
|
|
67
|
+
const result: unknown = await Reflect.apply(method(name), source, [params]);
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
53
70
|
|
|
54
|
-
const
|
|
55
|
-
getApiUrl: () =>
|
|
71
|
+
const transport: DataTransport = {
|
|
72
|
+
getApiUrl: () => {
|
|
73
|
+
if (source['getApiUrl'] === undefined) return '';
|
|
74
|
+
const result: unknown = Reflect.apply(method('getApiUrl'), source, []);
|
|
75
|
+
if (typeof result !== 'string') throw new TypeError('Refine DataProvider getApiUrl must return a string');
|
|
76
|
+
return result;
|
|
77
|
+
},
|
|
56
78
|
getList(params) {
|
|
57
79
|
const pagination = params.pagination?.current === undefined
|
|
58
80
|
? params.pagination
|
|
59
81
|
: { ...params.pagination, currentPage: params.pagination.current };
|
|
60
|
-
return
|
|
82
|
+
return call('getList', definedOptions({ ...params, pagination }));
|
|
61
83
|
},
|
|
62
|
-
getOne:
|
|
63
|
-
create:
|
|
64
|
-
update:
|
|
65
|
-
deleteOne:
|
|
84
|
+
getOne: params => call('getOne', params),
|
|
85
|
+
create: params => call('create', params),
|
|
86
|
+
update: params => call('update', params),
|
|
87
|
+
deleteOne: params => call('deleteOne', params),
|
|
66
88
|
};
|
|
67
89
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
}
|
|
90
|
+
if (source['getMany'] !== undefined) transport.getMany = params => call('getMany', params);
|
|
91
|
+
if (source['createMany'] !== undefined) transport.createMany = params => call('createMany', params);
|
|
92
|
+
if (source['updateMany'] !== undefined) transport.updateMany = params => call('updateMany', params);
|
|
93
|
+
if (source['deleteMany'] !== undefined) transport.deleteMany = params => call('deleteMany', params);
|
|
94
|
+
if (source['custom'] !== undefined) transport.custom = params => call('custom', params);
|
|
75
95
|
|
|
76
|
-
return
|
|
96
|
+
return withValidatedResponses(transport);
|
|
77
97
|
}
|