sveltekit-admin 0.5.3 → 0.8.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 +89 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +2 -1
- package/dist/server/adapters/drizzle/dataAdapter.d.ts +11 -0
- package/dist/server/adapters/drizzle/dataAdapter.js +328 -0
- package/dist/server/adapters/drizzle/filterCompiler.d.ts +8 -0
- package/dist/server/adapters/drizzle/filterCompiler.js +61 -0
- package/dist/server/adapters/drizzle/index.d.ts +22 -0
- package/dist/server/adapters/drizzle/index.js +27 -0
- package/dist/server/adapters/drizzle/inspect.d.ts +23 -0
- package/dist/server/adapters/drizzle/inspect.js +220 -0
- package/dist/server/adapters/drizzle/introspector.d.ts +3 -0
- package/dist/server/adapters/drizzle/introspector.js +3 -0
- package/dist/server/adapters/filter.d.ts +12 -0
- package/dist/server/adapters/filter.js +72 -0
- package/dist/server/adapters/prisma/dataAdapter.d.ts +13 -0
- package/dist/server/adapters/prisma/dataAdapter.js +138 -0
- package/dist/server/adapters/prisma/filterCompiler.d.ts +9 -0
- package/dist/server/adapters/prisma/filterCompiler.js +42 -0
- package/dist/server/adapters/prisma/handler.d.ts +14 -0
- package/dist/server/adapters/prisma/handler.js +37 -0
- package/dist/server/adapters/prisma/index.d.ts +28 -0
- package/dist/server/adapters/prisma/index.js +32 -0
- package/dist/server/adapters/prisma/introspector.d.ts +4 -0
- package/dist/server/adapters/prisma/introspector.js +9 -0
- package/dist/server/adapters/retry.d.ts +27 -0
- package/dist/server/adapters/retry.js +53 -0
- package/dist/server/adapters/types.d.ts +86 -0
- package/dist/server/adapters/types.js +1 -0
- package/dist/server/audit.d.ts +65 -0
- package/dist/server/audit.js +106 -0
- package/dist/server/csrf.d.ts +33 -0
- package/dist/server/csrf.js +55 -0
- package/dist/server/data.d.ts +0 -8
- package/dist/server/data.js +0 -41
- package/dist/server/errors.d.ts +47 -0
- package/dist/server/errors.js +90 -0
- package/dist/server/handler.d.ts +63 -16
- package/dist/server/handler.js +212 -535
- package/dist/server/introspection/parser.d.ts +4 -40
- package/dist/server/introspection/relations.d.ts +1 -1
- package/dist/server/introspection/relations.js +1 -1
- package/dist/server/mutations.d.ts +9 -0
- package/dist/server/mutations.js +295 -0
- package/dist/server/plugin.d.ts +47 -0
- package/dist/server/plugin.js +1 -0
- package/dist/server/pluginAccess.d.ts +7 -0
- package/dist/server/pluginAccess.js +79 -0
- package/dist/server/pluginRegistry.d.ts +12 -0
- package/dist/server/pluginRegistry.js +72 -0
- package/dist/server/query/listQuery.d.ts +6 -12
- package/dist/server/query/listQuery.js +31 -53
- package/dist/server/relationLoaders.d.ts +42 -0
- package/dist/server/relationLoaders.js +188 -0
- package/dist/server/router.d.ts +10 -0
- package/dist/server/router.js +42 -19
- package/dist/server/runtime.d.ts +46 -0
- package/dist/server/runtime.js +210 -0
- package/dist/server/search.d.ts +14 -0
- package/dist/server/search.js +78 -0
- package/dist/server/types/schema.d.ts +40 -0
- package/dist/server/types/schema.js +8 -0
- package/dist/server/views/Form.svelte +27 -3
- package/dist/server/views/Form.svelte.d.ts +2 -1
- package/dist/server/views/Layout.svelte +27 -2
- package/dist/server/views/Layout.svelte.d.ts +2 -0
- package/dist/server/views/List.svelte +28 -3
- package/dist/server/views/List.svelte.d.ts +2 -2
- package/dist/server/views/RelationCheckboxes.svelte +1 -1
- package/dist/server/views/types.d.ts +8 -0
- package/package.json +40 -17
package/dist/server/handler.d.ts
CHANGED
|
@@ -2,11 +2,21 @@
|
|
|
2
2
|
* SvelteKit Admin - Standalone Handler
|
|
3
3
|
* Zero files needed in routes - everything handled via hook
|
|
4
4
|
*/
|
|
5
|
+
import type { DataAdapter, SchemaIntrospector } from './adapters/types.js';
|
|
6
|
+
import type { AuditEvent } from './audit.js';
|
|
7
|
+
import { type CsrfConfig } from './csrf.js';
|
|
8
|
+
import type { AdminPlugin } from './plugin.js';
|
|
5
9
|
export interface AdminHandlerConfig {
|
|
6
|
-
/**
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Explicit `{ introspector, data }` pair, from `createPrismaAdapter`,
|
|
12
|
+
* `createDrizzleAdapter`, or a custom implementation. The `{ prisma,
|
|
13
|
+
* prismaSchemaPath }` shortcut lives on the Prisma wrapper exported by
|
|
14
|
+
* the package root, not here.
|
|
15
|
+
*/
|
|
16
|
+
adapter: {
|
|
17
|
+
introspector: SchemaIntrospector;
|
|
18
|
+
data: DataAdapter;
|
|
19
|
+
};
|
|
10
20
|
/** Base path for admin routes (default: /admin) */
|
|
11
21
|
basePath?: string;
|
|
12
22
|
/** Authentication check - return true if user can access admin */
|
|
@@ -32,12 +42,50 @@ export interface AdminHandlerConfig {
|
|
|
32
42
|
logout?: (event: any) => void | Promise<void>;
|
|
33
43
|
/** Where to redirect after logout (default: '/') */
|
|
34
44
|
logoutRedirectTo?: string;
|
|
45
|
+
/**
|
|
46
|
+
* Cross-site protection for every state-changing admin request (create /
|
|
47
|
+
* update / delete, `_logout`, `_search`). On by default; a missing `Origin`
|
|
48
|
+
* is rejected, as SvelteKit does. `trustedOrigins` allows a second
|
|
49
|
+
* legitimate origin, `csrf: false` opts out entirely.
|
|
50
|
+
*
|
|
51
|
+
* Why this isn't left to `kit.csrf.checkOrigin`, and the same-origin threat
|
|
52
|
+
* it does not cover: see `csrf.ts` and /docs/csrf.
|
|
53
|
+
*/
|
|
54
|
+
csrf?: CsrfConfig;
|
|
55
|
+
/**
|
|
56
|
+
* Audit sink — same "bring your own" philosophy as `authCheck` / `logout`.
|
|
57
|
+
* The library has no log table and no session of its own, so it cannot
|
|
58
|
+
* know where to persist "admin X changed row Y" (your `AuditLog` model,
|
|
59
|
+
* a logger, an HTTP sink…). You provide the side effect; the handler
|
|
60
|
+
* calls it **after a successful create / update / delete** with a
|
|
61
|
+
* redacted `AuditEvent`. No callback means no behaviour change: no
|
|
62
|
+
* extra reads, no calls.
|
|
63
|
+
*
|
|
64
|
+
* The actor is whatever you already put on `event.locals` (the same
|
|
65
|
+
* object `authCheck` sees). Sensitive field names (`password` / `hash` /
|
|
66
|
+
* `secret` / `token`) and per-model `hidden` fields are stripped from
|
|
67
|
+
* `values` / `before` / `after` / `changes` so the sink cannot become a
|
|
68
|
+
* second oracle for secrets. Reads (GET), logout, and `_search` are
|
|
69
|
+
* not audited.
|
|
70
|
+
*
|
|
71
|
+
* Awaited before the 303 so a `prisma.auditLog.create(...)` inside the
|
|
72
|
+
* callback commits before the redirect. If the callback throws, the
|
|
73
|
+
* mutation still redirects — the write is the source of truth, the log
|
|
74
|
+
* is a sidecar (`console.error` with prefix
|
|
75
|
+
* `[sveltekit-admin] audit callback failed:`). There is no way to wrap
|
|
76
|
+
* the adapter write and your sink in one transaction without owning
|
|
77
|
+
* both stores.
|
|
78
|
+
*/
|
|
79
|
+
audit?: (entry: AuditEvent) => void | Promise<void>;
|
|
35
80
|
/** Per-model configuration */
|
|
36
81
|
models?: Record<string, {
|
|
37
82
|
hidden?: string[];
|
|
38
83
|
readonly?: string[];
|
|
39
84
|
listFields?: string[];
|
|
40
85
|
label?: string;
|
|
86
|
+
scope?: (ctx: {
|
|
87
|
+
locals?: any;
|
|
88
|
+
}) => Record<string, unknown> | import('./adapters/types.js').Filter;
|
|
41
89
|
/**
|
|
42
90
|
* Scoping `where` applied to the LIST VIEW ONLY of this model
|
|
43
91
|
* (search, sidebar filters, FK filter, pagination count) — composed
|
|
@@ -129,23 +177,22 @@ export interface AdminHandlerConfig {
|
|
|
129
177
|
linkThreshold?: number;
|
|
130
178
|
autoDetect?: boolean;
|
|
131
179
|
};
|
|
132
|
-
/**
|
|
133
|
-
* Recherche texte libre : configuration globale.
|
|
134
|
-
* `mode`: 'auto' détecte le provider du schéma et n'émet `mode: 'insensitive'`
|
|
135
|
-
* que sur postgresql/cockroachdb/mongodb (les seuls où Prisma le supporte —
|
|
136
|
-
* l'émettre sur sqlite/mysql/sqlserver lève une erreur Prisma). 'insensitive'
|
|
137
|
-
* et 'default' forcent le comportement, pour un provider non détectable
|
|
138
|
-
* (`provider = env(...)`) ou un besoin spécifique (index `citext`, etc.).
|
|
139
|
-
* Voir docs/design/list-search-filters.md §2.5.
|
|
140
|
-
*/
|
|
141
|
-
search?: {
|
|
142
|
-
mode?: 'auto' | 'insensitive' | 'default';
|
|
143
|
-
};
|
|
144
180
|
/** Custom branding */
|
|
145
181
|
branding?: {
|
|
146
182
|
title?: string;
|
|
147
183
|
primaryColor?: string;
|
|
148
184
|
};
|
|
185
|
+
/**
|
|
186
|
+
* Optional admin plugins (new pages + record actions). Omitted or `[]`
|
|
187
|
+
* keeps every builtin view byte-identical to a build without plugins.
|
|
188
|
+
* Plugin routes are matched before builtins, so a registered pattern
|
|
189
|
+
* with a literal token in a `:model`/`:id` position can take over a
|
|
190
|
+
* builtin path when it matches first (e.g. `['user']` shadows the User
|
|
191
|
+
* list); only an identical, token-for-token overlay throws at boot.
|
|
192
|
+
* See `AdminPlugin`. Options like graph `depth` belong on the author's
|
|
193
|
+
* factory, not here.
|
|
194
|
+
*/
|
|
195
|
+
plugins?: AdminPlugin[];
|
|
149
196
|
}
|
|
150
197
|
export declare function createAdminHandler(config: AdminHandlerConfig): ({ event, resolve }: {
|
|
151
198
|
event: any;
|