@svadmin/rest 0.2.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/README.md ADDED
@@ -0,0 +1,26 @@
1
+ # @svadmin/rest
2
+
3
+ Generic REST data provider for svadmin, bridging the official
4
+ [`@refinedev/rest`](https://www.npmjs.com/package/@refinedev/rest) package.
5
+
6
+ Use it when your API does not follow the Simple REST envelope but you still want
7
+ declarative resource routing.
8
+
9
+ ## Install
10
+
11
+ ```bash
12
+ bun add @svadmin/rest @refinedev/rest @nestjsx/crud-request
13
+ ```
14
+
15
+ ## Usage
16
+
17
+ ```ts
18
+ import { createRestDataProvider } from '@svadmin/rest';
19
+
20
+ const dataProvider = await createRestDataProvider('https://api.example.test');
21
+ ```
22
+
23
+ All arguments are forwarded to `@refinedev/rest`; the result is adapted to the
24
+ svadmin `DataProvider` contract.
25
+
26
+ See `docs/architecture/admin-platform.md` for the platform model.
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@svadmin/rest",
3
+ "version": "0.2.1",
4
+ "description": "Generic REST adapters — bridge @refinedev/rest to a svadmin DataProvider",
5
+ "type": "module",
6
+ "sideEffects": false,
7
+ "files": [
8
+ "src/**/*.ts",
9
+ "!src/**/*.test.*",
10
+ "!src/**/*.spec.*",
11
+ "!src/**/vitest.config.*",
12
+ "!src/**/setupTest.*"
13
+ ],
14
+ "main": "src/index.ts",
15
+ "types": "src/index.ts",
16
+ "exports": {
17
+ ".": {
18
+ "types": "./src/index.ts",
19
+ "default": "./src/index.ts"
20
+ }
21
+ },
22
+ "svadmin": {
23
+ "capabilities": [
24
+ "data",
25
+ "rest",
26
+ "custom-endpoints"
27
+ ],
28
+ "core": "^0.55.0",
29
+ "stability": "experimental",
30
+ "migration": null
31
+ },
32
+ "peerDependencies": {
33
+ "@svadmin/core": "^0.58.0",
34
+ "@refinedev/rest": "^2.1.1",
35
+ "@nestjsx/crud-request": "^5.0.0-alpha.3"
36
+ },
37
+ "license": "MIT",
38
+ "author": "zuohuadong",
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "git+https://github.com/vibeunion/svadmin.git",
42
+ "directory": "packages/rest"
43
+ },
44
+ "homepage": "https://github.com/vibeunion/svadmin#readme",
45
+ "bugs": {
46
+ "url": "https://github.com/vibeunion/svadmin/issues"
47
+ },
48
+ "peerDependenciesMeta": {
49
+ "@svadmin/core": {
50
+ "optional": true
51
+ },
52
+ "@refinedev/rest": {
53
+ "optional": true
54
+ },
55
+ "@nestjsx/crud-request": {
56
+ "optional": true
57
+ }
58
+ },
59
+ "dependencies": {
60
+ "@svadmin/refine-adapter": "^0.12.2"
61
+ },
62
+ "devDependencies": {
63
+ "@refinedev/rest": "^2.1.1"
64
+ }
65
+ }
@@ -0,0 +1,39 @@
1
+ import type { DataProvider } from '@svadmin/core';
2
+ import { createRefineAdapter } from '@svadmin/refine-adapter';
3
+
4
+ /**
5
+ * Creates a data provider from the official `@refinedev/rest` package.
6
+ * Requires `@refinedev/rest` (and its peer `@nestjsx/crud-request`) to be
7
+ * installed. The generic provider is useful for custom REST endpoints that do
8
+ * not match the Simple REST envelope.
9
+ *
10
+ * @param args Arguments required by `@refinedev/rest`
11
+ * @returns A fully compatible svadmin DataProvider
12
+ */
13
+ export async function createRestDataProvider(...args: unknown[]): Promise<DataProvider> {
14
+ const pkg = await import('@refinedev/rest');
15
+ const init = resolveInitializer(pkg);
16
+ const created = init(...args);
17
+ const refineProvider = isProviderBundle(created)
18
+ ? created.dataProvider
19
+ : created;
20
+ return createRefineAdapter(refineProvider);
21
+ }
22
+
23
+ export type RestDataProviderArgs = unknown[];
24
+
25
+ function resolveInitializer(pkg: unknown): (...args: unknown[]) => unknown {
26
+ if (typeof pkg !== 'object' || pkg === null) throw new TypeError('Invalid REST provider module');
27
+ const exports = pkg as Record<string, unknown>;
28
+ for (const key of ['createDataProvider', 'default', 'dataProvider', 'DataProvider']) {
29
+ const candidate = exports[key];
30
+ if (typeof candidate === 'function') return candidate as (...args: unknown[]) => unknown;
31
+ }
32
+ throw new Error('[svadmin] Failed to resolve @refinedev/rest. Ensure the package is installed correctly.');
33
+ }
34
+
35
+ function isProviderBundle(value: unknown): value is { dataProvider: unknown } {
36
+ return typeof value === 'object'
37
+ && value !== null
38
+ && 'dataProvider' in value;
39
+ }
package/src/index.ts ADDED
@@ -0,0 +1,2 @@
1
+ export { createRestDataProvider } from './data-provider';
2
+ export type { RestDataProviderArgs } from './data-provider';