@svadmin/refine-adapter 0.9.3 → 0.9.4
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/README.md +88 -0
- package/package.json +7 -2
- package/src/index.ts +19 -12
package/README.md
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# @svadmin/refine-adapter
|
|
2
|
+
|
|
3
|
+
> Bridge any [@refinedev](https://github.com/refinedev/refine) data provider to svadmin
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/@svadmin/refine-adapter)
|
|
6
|
+
|
|
7
|
+
## Why?
|
|
8
|
+
|
|
9
|
+
[Refine](https://refine.dev/) has a rich ecosystem of battle-tested data providers for services like Supabase, Appwrite, Hasura, Strapi, Airtable, NestJS, and more. `@svadmin/refine-adapter` lets you use **any** of those providers inside svadmin — zero rewrite required.
|
|
10
|
+
|
|
11
|
+
Since Refine's `DataProvider` interface closely mirrors svadmin's `DataProvider`, the adapter is a thin bridge that binds method calls and forwards optional methods when present.
|
|
12
|
+
|
|
13
|
+
## Installation
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
bun add @svadmin/refine-adapter @svadmin/core
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
If your app is powered by Vite and also uses `@svadmin/ui` or `@svadmin/supabase`, exclude svadmin packages from `optimizeDeps` to avoid dev-time pre-bundling issues:
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
optimizeDeps: {
|
|
23
|
+
exclude: ['@svadmin/core', '@svadmin/ui', '@svadmin/supabase'],
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Then install the Refine data provider you want to use, e.g.:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
bun add @refinedev/supabase
|
|
31
|
+
bun add @refinedev/strapi-v4
|
|
32
|
+
bun add @refinedev/appwrite
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Usage
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
import { createRefineAdapter } from '@svadmin/refine-adapter';
|
|
39
|
+
import { dataProvider as createRefineSupabase } from '@refinedev/supabase';
|
|
40
|
+
import { createClient } from '@supabase/supabase-js';
|
|
41
|
+
|
|
42
|
+
const supabaseClient = createClient(SUPABASE_URL, SUPABASE_KEY);
|
|
43
|
+
const refineProvider = createRefineSupabase(supabaseClient);
|
|
44
|
+
|
|
45
|
+
// Bridge it to svadmin
|
|
46
|
+
const dataProvider = createRefineAdapter(refineProvider);
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Then pass `dataProvider` to `<AdminApp>` or `setDataProvider()` as usual.
|
|
50
|
+
|
|
51
|
+
## Supported Methods
|
|
52
|
+
|
|
53
|
+
| Method | Required | Description |
|
|
54
|
+
|--------|----------|-------------|
|
|
55
|
+
| `getList` | ✅ | List with pagination, sorting, filtering |
|
|
56
|
+
| `getOne` | ✅ | Get single record |
|
|
57
|
+
| `create` | ✅ | Create record |
|
|
58
|
+
| `update` | ✅ | Update record |
|
|
59
|
+
| `deleteOne` | ✅ | Delete record |
|
|
60
|
+
| `getApiUrl` | ✅ | Return API base URL |
|
|
61
|
+
| `getMany` | Optional | Bulk get |
|
|
62
|
+
| `createMany` | Optional | Bulk create |
|
|
63
|
+
| `updateMany` | Optional | Bulk update |
|
|
64
|
+
| `deleteMany` | Optional | Bulk delete |
|
|
65
|
+
| `custom` | Optional | Custom endpoint |
|
|
66
|
+
|
|
67
|
+
Optional methods are only wired if the underlying Refine provider implements them.
|
|
68
|
+
|
|
69
|
+
## Which Svadmin Providers Use This?
|
|
70
|
+
|
|
71
|
+
The following `@svadmin/*` packages internally use `@svadmin/refine-adapter` to bridge their corresponding `@refinedev/*` provider:
|
|
72
|
+
|
|
73
|
+
| svadmin Package | Refine Package |
|
|
74
|
+
|-----------------|---------------|
|
|
75
|
+
| `@svadmin/supabase` | `@refinedev/supabase` |
|
|
76
|
+
| `@svadmin/appwrite` | `@refinedev/appwrite` |
|
|
77
|
+
| `@svadmin/strapi` | `@refinedev/strapi-v4` |
|
|
78
|
+
| `@svadmin/hasura` | `@refinedev/hasura` |
|
|
79
|
+
| `@svadmin/graphql` | `@refinedev/graphql` |
|
|
80
|
+
| `@svadmin/airtable` | `@refinedev/airtable` |
|
|
81
|
+
| `@svadmin/medusa` | `@refinedev/medusa` |
|
|
82
|
+
| `@svadmin/nestjs-query` | `@refinedev/nestjs-query` |
|
|
83
|
+
| `@svadmin/nestjsx-crud` | `@refinedev/nestjsx-crud` |
|
|
84
|
+
| `@svadmin/simple-rest` | `@refinedev/simple-rest` |
|
|
85
|
+
|
|
86
|
+
## License
|
|
87
|
+
|
|
88
|
+
MIT
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@svadmin/refine-adapter",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.4",
|
|
4
4
|
"description": "Universal Refine DataProvider adapter for svadmin",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -16,12 +16,17 @@
|
|
|
16
16
|
}
|
|
17
17
|
},
|
|
18
18
|
"peerDependencies": {
|
|
19
|
-
"@svadmin/core": "^0.
|
|
19
|
+
"@svadmin/core": "^0.23.5"
|
|
20
20
|
},
|
|
21
21
|
"license": "MIT",
|
|
22
22
|
"repository": {
|
|
23
23
|
"type": "git",
|
|
24
24
|
"url": "https://github.com/zuohuadong/svadmin.git",
|
|
25
25
|
"directory": "packages/refine-adapter"
|
|
26
|
+
},
|
|
27
|
+
"peerDependenciesMeta": {
|
|
28
|
+
"@svadmin/core": {
|
|
29
|
+
"optional": true
|
|
30
|
+
}
|
|
26
31
|
}
|
|
27
32
|
}
|
package/src/index.ts
CHANGED
|
@@ -6,17 +6,24 @@ import type { DataProvider as SvadminDataProvider } from '@svadmin/core';
|
|
|
6
6
|
* definition of @svadmin/core.
|
|
7
7
|
*/
|
|
8
8
|
export function createRefineAdapter(refineProvider: any): SvadminDataProvider {
|
|
9
|
-
|
|
9
|
+
if (!refineProvider || typeof refineProvider !== 'object') {
|
|
10
|
+
throw new Error('[svadmin] createRefineAdapter: expected a valid Refine DataProvider object, got ' + String(refineProvider));
|
|
11
|
+
}
|
|
12
|
+
const adapter: SvadminDataProvider = {
|
|
10
13
|
getApiUrl: () => refineProvider.getApiUrl(),
|
|
11
|
-
getList: refineProvider.getList,
|
|
12
|
-
getOne: refineProvider.getOne,
|
|
13
|
-
create: refineProvider.create,
|
|
14
|
-
update: refineProvider.update,
|
|
15
|
-
deleteOne: refineProvider.deleteOne,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
getList: refineProvider.getList.bind(refineProvider),
|
|
15
|
+
getOne: refineProvider.getOne.bind(refineProvider),
|
|
16
|
+
create: refineProvider.create.bind(refineProvider),
|
|
17
|
+
update: refineProvider.update.bind(refineProvider),
|
|
18
|
+
deleteOne: refineProvider.deleteOne.bind(refineProvider),
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
// Only attach optional methods if they actually exist
|
|
22
|
+
if (refineProvider.getMany) adapter.getMany = refineProvider.getMany.bind(refineProvider);
|
|
23
|
+
if (refineProvider.createMany) adapter.createMany = refineProvider.createMany.bind(refineProvider);
|
|
24
|
+
if (refineProvider.updateMany) adapter.updateMany = refineProvider.updateMany.bind(refineProvider);
|
|
25
|
+
if (refineProvider.deleteMany) adapter.deleteMany = refineProvider.deleteMany.bind(refineProvider);
|
|
26
|
+
if (refineProvider.custom) adapter.custom = refineProvider.custom.bind(refineProvider);
|
|
27
|
+
|
|
28
|
+
return adapter;
|
|
22
29
|
}
|