@svadmin/create 0.31.0 → 0.32.0

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.
@@ -4,6 +4,26 @@ Read `DESIGN.md` before creating, revising, or reviewing any UI. It is the
4
4
  authority for visual language, page hierarchy, feedback ownership, and
5
5
  acceptance checks in this project.
6
6
 
7
+ ## Platform entrypoints
8
+
9
+ Before generating or modifying application code, read these stable files
10
+ instead of scanning the repository:
11
+
12
+ - `svadmin.ai.json` — provider capability matrix, resource fields/operations,
13
+ project commands, and forbidden internal imports.
14
+ - `src/svadmin.config.ts` — the application composition entrypoint. Add resources
15
+ and plugins here; do not reintroduce ad-hoc provider wiring in `App.svelte`.
16
+ - `src/resources.ts` — the generated `ResourceDefinition[]` consumed by the config.
17
+
18
+ Keep `svadmin.ai.json` and `src/svadmin.config.ts` consistent when you add a
19
+ provider or resource. `create-svadmin doctor` fails when the manifest is missing,
20
+ invalid, or declares a provider package that `package.json` does not depend on.
21
+
22
+ Use `npx @svadmin/create add resource <name> --write` to scaffold a
23
+ `src/features/<name>/` module (contract + definition + public `index.ts`). Keep
24
+ business code inside `src/features/<module>/` and expose it through the module's
25
+ `index.ts`; do not add new pages under `src/pages`.
26
+
7
27
  ## Required workflow
8
28
 
9
29
  1. Name the page's single primary workflow and dominant next action.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@svadmin/create",
3
- "version": "0.31.0",
3
+ "version": "0.32.0",
4
4
  "description": "Scaffolding tool for svadmin projects",
5
5
  "type": "module",
6
6
  "bin": {
@@ -27,7 +27,7 @@
27
27
  "@types/node": "^26.4.0",
28
28
  "@types/prompts": "^2.4.9",
29
29
  "typescript": "^7.0.2",
30
- "@svadmin/core": "^0.55.0"
30
+ "@svadmin/core": "^0.56.0"
31
31
  },
32
32
  "keywords": [
33
33
  "svadmin",
@@ -10,9 +10,10 @@
10
10
  "check": "svelte-check --tsconfig ./tsconfig.json"
11
11
  },
12
12
  "dependencies": {
13
- "@svadmin/core": "^0.55.0",
14
- "@svadmin/ai-elements": "^0.10.0",
15
- "@svadmin/ui": "^0.75.0",
13
+ "@svadmin/core": "^0.56.0",
14
+ "@svadmin/app": "^1.0.0",
15
+ "@svadmin/ai-elements": "^0.10.1",
16
+ "@svadmin/ui": "^0.76.0",
16
17
  "@sinclair/typebox": "^0.34.52",
17
18
  "@tanstack/svelte-query": "^6.1.48",
18
19
  "@lucide/svelte": "^1.35.0"
@@ -30,19 +31,77 @@
30
31
  "@refinedev/core": "^5.0.12"
31
32
  },
32
33
  "simple-rest": {
33
- "@svadmin/simple-rest": "^0.11.0",
34
+ "@svadmin/simple-rest": "^0.12.0",
34
35
  "@refinedev/simple-rest": "^6.0.1"
35
36
  },
36
37
  "supabase": {
37
- "@svadmin/supabase": "^0.16.0",
38
+ "@svadmin/supabase": "^0.17.0",
38
39
  "@supabase/supabase-js": "^2.112.4",
39
40
  "@refinedev/supabase": "^6.0.2"
40
41
  },
41
42
  "graphql": {
42
- "@svadmin/graphql": "^0.11.0",
43
+ "@svadmin/graphql": "^0.12.0",
43
44
  "@refinedev/graphql": "^8.0.1",
44
45
  "graphql-request": "^7.4.0",
45
46
  "graphql": "^16.8.0"
47
+ },
48
+ "rest": {
49
+ "@svadmin/rest": "^1.0.0",
50
+ "@refinedev/rest": "^2.1.1",
51
+ "@nestjsx/crud-request": "^5.0.0-alpha.3"
52
+ },
53
+ "airtable": {
54
+ "@svadmin/airtable": "^0.12.0",
55
+ "@refinedev/airtable": "^5.0.1"
56
+ },
57
+ "appwrite": {
58
+ "@svadmin/appwrite": "^0.11.0",
59
+ "appwrite": ">=26.2.0",
60
+ "@refinedev/appwrite": "^8.0.1"
61
+ },
62
+ "directus": {
63
+ "@svadmin/directus": "^0.11.0"
64
+ },
65
+ "drizzle": {
66
+ "@svadmin/drizzle": "^0.13.0",
67
+ "drizzle-orm": "^1.0.0-rc.1",
68
+ "refine-sqlx": "^0.10.3"
69
+ },
70
+ "elysia": {
71
+ "@svadmin/elysia": "^0.14.0",
72
+ "elysia": ">=1.4.30",
73
+ "@elysiajs/eden": ">=1.4.9"
74
+ },
75
+ "firebase": {
76
+ "@svadmin/firebase": "^0.12.0"
77
+ },
78
+ "hasura": {
79
+ "@svadmin/hasura": "^0.12.0",
80
+ "@refinedev/hasura": "^7.0.1",
81
+ "graphql-request": "^7.4.0"
82
+ },
83
+ "medusa": {
84
+ "@svadmin/medusa": "^0.12.0",
85
+ "@refinedev/medusa": "^5.0.0"
86
+ },
87
+ "nestjs-query": {
88
+ "@svadmin/nestjs-query": "^0.12.0",
89
+ "@refinedev/nestjs-query": "^5.0.0"
90
+ },
91
+ "nestjsx-crud": {
92
+ "@svadmin/nestjsx-crud": "^0.12.0",
93
+ "@refinedev/nestjsx-crud": "^6.0.1"
94
+ },
95
+ "pocketbase": {
96
+ "@svadmin/pocketbase": "^0.12.0",
97
+ "pocketbase": ">=0.28.0"
98
+ },
99
+ "sanity": {
100
+ "@svadmin/sanity": "^0.11.0"
101
+ },
102
+ "strapi": {
103
+ "@svadmin/strapi": "^0.12.0",
104
+ "@refinedev/strapi-v4": "^7.0.1"
46
105
  }
47
106
  },
48
107
  "dataProviders": {
@@ -58,6 +117,56 @@
58
117
  "refine-core",
59
118
  "graphql"
60
119
  ],
120
+ "rest": [
121
+ "refine-core",
122
+ "rest"
123
+ ],
124
+ "airtable": [
125
+ "refine-core",
126
+ "airtable"
127
+ ],
128
+ "appwrite": [
129
+ "refine-core",
130
+ "appwrite"
131
+ ],
132
+ "directus": [
133
+ "directus"
134
+ ],
135
+ "drizzle": [
136
+ "drizzle"
137
+ ],
138
+ "elysia": [
139
+ "elysia"
140
+ ],
141
+ "firebase": [
142
+ "firebase"
143
+ ],
144
+ "hasura": [
145
+ "refine-core",
146
+ "hasura"
147
+ ],
148
+ "medusa": [
149
+ "refine-core",
150
+ "medusa"
151
+ ],
152
+ "nestjs-query": [
153
+ "refine-core",
154
+ "nestjs-query"
155
+ ],
156
+ "nestjsx-crud": [
157
+ "refine-core",
158
+ "nestjsx-crud"
159
+ ],
160
+ "pocketbase": [
161
+ "pocketbase"
162
+ ],
163
+ "sanity": [
164
+ "sanity"
165
+ ],
166
+ "strapi": [
167
+ "refine-core",
168
+ "strapi"
169
+ ],
61
170
  "none": []
62
171
  },
63
172
  "authProviders": {
@@ -1,24 +1,21 @@
1
1
  <script lang="ts">
2
- import { AdminApp, DataState } from '@svadmin/ui';
3
- import { createSimpleRestDataProvider } from '@svadmin/simple-rest';
4
- import { resources } from './resources';
5
- import { mockAuthProvider } from './providers/mockAuth';
2
+ import { AdminApp } from '@svadmin/ui';
3
+ import { resolveAdminConfig } from '@svadmin/app';
4
+ import config from './svadmin.config';
6
5
  import Dashboard from './pages/Dashboard.svelte';
7
6
  import Login from './pages/Login.svelte';
8
7
 
9
- function connect() {
10
- return createSimpleRestDataProvider('https://jsonplaceholder.typicode.com');
11
- }
12
- let connection = $state(connect());
8
+ // svadmin.config.ts resolves its providers (including async ones) before this
9
+ // module is evaluated, so the platform snapshot is available synchronously.
10
+ const resolved = resolveAdminConfig(config);
13
11
  </script>
14
12
 
15
- {#await connection}
16
- <DataState state="loading" />
17
- {:then dataProvider}
18
- <AdminApp {dataProvider} {resources} authProvider={mockAuthProvider} title="svadmin Demo" locale="en">
19
- {#snippet dashboard()}<Dashboard />{/snippet}
20
- {#snippet loginPage()}<Login />{/snippet}
21
- </AdminApp>
22
- {:catch}
23
- <DataState state="error" title="Unable to initialize data provider" retry={() => { connection = connect(); }} />
24
- {/await}
13
+ <AdminApp
14
+ providerBundle={resolved.providers}
15
+ resources={[...resolved.resources]}
16
+ title="svadmin Demo"
17
+ locale="en"
18
+ >
19
+ {#snippet dashboard()}<Dashboard />{/snippet}
20
+ {#snippet loginPage()}<Login />{/snippet}
21
+ </AdminApp>