@svadmin/refine-adapter 0.9.4 → 0.10.1
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 +7 -3
- package/src/index.ts +61 -13
- package/src/refinedev-optional.d.ts +53 -0
package/package.json
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@svadmin/refine-adapter",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.1",
|
|
4
4
|
"description": "Universal Refine DataProvider adapter for svadmin",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
7
7
|
"files": [
|
|
8
|
-
"src
|
|
8
|
+
"src/**/*.ts",
|
|
9
|
+
"!src/**/*.test.*",
|
|
10
|
+
"!src/**/*.spec.*",
|
|
11
|
+
"!src/**/vitest.config.*",
|
|
12
|
+
"!src/**/setupTest.*"
|
|
9
13
|
],
|
|
10
14
|
"main": "src/index.ts",
|
|
11
15
|
"types": "src/index.ts",
|
|
@@ -16,7 +20,7 @@
|
|
|
16
20
|
}
|
|
17
21
|
},
|
|
18
22
|
"peerDependencies": {
|
|
19
|
-
"@svadmin/core": "^0.
|
|
23
|
+
"@svadmin/core": "^0.34.2"
|
|
20
24
|
},
|
|
21
25
|
"license": "MIT",
|
|
22
26
|
"repository": {
|
package/src/index.ts
CHANGED
|
@@ -1,17 +1,64 @@
|
|
|
1
1
|
import type { DataProvider as SvadminDataProvider } from '@svadmin/core';
|
|
2
2
|
|
|
3
|
+
type RequiredRefineDataProvider = Pick<
|
|
4
|
+
SvadminDataProvider,
|
|
5
|
+
'getList' | 'getOne' | 'create' | 'update' | 'deleteOne'
|
|
6
|
+
>;
|
|
7
|
+
|
|
8
|
+
type OptionalRefineDataProvider = Partial<
|
|
9
|
+
Pick<SvadminDataProvider, 'getApiUrl' | 'getMany' | 'createMany' | 'updateMany' | 'deleteMany' | 'custom'>
|
|
10
|
+
>;
|
|
11
|
+
|
|
12
|
+
export type RefineDataProviderLike = RequiredRefineDataProvider & OptionalRefineDataProvider;
|
|
13
|
+
|
|
14
|
+
const requiredMethods = [
|
|
15
|
+
'getList',
|
|
16
|
+
'getOne',
|
|
17
|
+
'create',
|
|
18
|
+
'update',
|
|
19
|
+
'deleteOne',
|
|
20
|
+
] as const satisfies readonly (keyof RequiredRefineDataProvider)[];
|
|
21
|
+
|
|
22
|
+
const optionalMethods = [
|
|
23
|
+
'getMany',
|
|
24
|
+
'createMany',
|
|
25
|
+
'updateMany',
|
|
26
|
+
'deleteMany',
|
|
27
|
+
'custom',
|
|
28
|
+
] as const satisfies readonly (keyof OptionalRefineDataProvider)[];
|
|
29
|
+
|
|
30
|
+
function isObjectLike(value: unknown): value is Record<PropertyKey, unknown> {
|
|
31
|
+
return typeof value === 'object' && value !== null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function assertRefineDataProvider(value: unknown): asserts value is RefineDataProviderLike {
|
|
35
|
+
if (!isObjectLike(value)) {
|
|
36
|
+
throw new Error('[svadmin] createRefineAdapter: expected a valid Refine DataProvider object, got ' + String(value));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
for (const method of requiredMethods) {
|
|
40
|
+
if (typeof value[method] !== 'function') {
|
|
41
|
+
throw new Error(`[svadmin] createRefineAdapter: missing required Refine DataProvider method "${method}"`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
3
46
|
/**
|
|
4
47
|
* Adapter to consume an official @refinedev/* data provider in SvelteAdmin.
|
|
5
|
-
* Refine's DataProvider interface
|
|
6
|
-
* definition of @svadmin/core.
|
|
48
|
+
* Refine's DataProvider interface mostly matches the core interface
|
|
49
|
+
* definition of @svadmin/core, except for the current page property.
|
|
7
50
|
*/
|
|
8
|
-
export function createRefineAdapter(refineProvider:
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
51
|
+
export function createRefineAdapter(refineProvider: unknown): SvadminDataProvider {
|
|
52
|
+
assertRefineDataProvider(refineProvider);
|
|
53
|
+
|
|
12
54
|
const adapter: SvadminDataProvider = {
|
|
13
|
-
getApiUrl: () => refineProvider.getApiUrl(),
|
|
14
|
-
getList
|
|
55
|
+
getApiUrl: () => refineProvider.getApiUrl?.() ?? '',
|
|
56
|
+
getList(params) {
|
|
57
|
+
const pagination = params.pagination?.current === undefined
|
|
58
|
+
? params.pagination
|
|
59
|
+
: { ...params.pagination, currentPage: params.pagination.current };
|
|
60
|
+
return refineProvider.getList({ ...params, pagination });
|
|
61
|
+
},
|
|
15
62
|
getOne: refineProvider.getOne.bind(refineProvider),
|
|
16
63
|
create: refineProvider.create.bind(refineProvider),
|
|
17
64
|
update: refineProvider.update.bind(refineProvider),
|
|
@@ -19,11 +66,12 @@ export function createRefineAdapter(refineProvider: any): SvadminDataProvider {
|
|
|
19
66
|
};
|
|
20
67
|
|
|
21
68
|
// Only attach optional methods if they actually exist
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
69
|
+
for (const method of optionalMethods) {
|
|
70
|
+
const handler = refineProvider[method];
|
|
71
|
+
if (typeof handler === 'function') {
|
|
72
|
+
adapter[method] = handler.bind(refineProvider) as never;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
27
75
|
|
|
28
76
|
return adapter;
|
|
29
77
|
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
declare module '@refinedev/airtable' {
|
|
2
|
+
export const dataProvider: (...args: unknown[]) => unknown;
|
|
3
|
+
const defaultExport: (...args: unknown[]) => unknown;
|
|
4
|
+
export default defaultExport;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
declare module '@refinedev/appwrite' {
|
|
8
|
+
export const dataProvider: (...args: unknown[]) => unknown;
|
|
9
|
+
const defaultExport: (...args: unknown[]) => unknown;
|
|
10
|
+
export default defaultExport;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
declare module '@refinedev/graphql' {
|
|
14
|
+
export const dataProvider: (...args: unknown[]) => unknown;
|
|
15
|
+
const defaultExport: (...args: unknown[]) => unknown;
|
|
16
|
+
export default defaultExport;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
declare module '@refinedev/hasura' {
|
|
20
|
+
export const dataProvider: (...args: unknown[]) => unknown;
|
|
21
|
+
const defaultExport: (...args: unknown[]) => unknown;
|
|
22
|
+
export default defaultExport;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
declare module '@refinedev/medusa' {
|
|
26
|
+
export const dataProvider: (...args: unknown[]) => unknown;
|
|
27
|
+
const defaultExport: (...args: unknown[]) => unknown;
|
|
28
|
+
export default defaultExport;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
declare module '@refinedev/nestjs-query' {
|
|
32
|
+
export const dataProvider: (...args: unknown[]) => unknown;
|
|
33
|
+
const defaultExport: (...args: unknown[]) => unknown;
|
|
34
|
+
export default defaultExport;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
declare module '@refinedev/nestjsx-crud' {
|
|
38
|
+
export const dataProvider: (...args: unknown[]) => unknown;
|
|
39
|
+
const defaultExport: (...args: unknown[]) => unknown;
|
|
40
|
+
export default defaultExport;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
declare module '@refinedev/strapi-v4' {
|
|
44
|
+
export const dataProvider: (...args: unknown[]) => unknown;
|
|
45
|
+
const defaultExport: (...args: unknown[]) => unknown;
|
|
46
|
+
export default defaultExport;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
declare module '@refinedev/supabase' {
|
|
50
|
+
export const dataProvider: (...args: unknown[]) => unknown;
|
|
51
|
+
const defaultExport: (...args: unknown[]) => unknown;
|
|
52
|
+
export default defaultExport;
|
|
53
|
+
}
|