@btst/stack 2.1.0 → 2.3.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.
- package/dist/api/index.cjs +9 -1
- package/dist/api/index.d.cts +4 -4
- package/dist/api/index.d.mts +4 -4
- package/dist/api/index.d.ts +4 -4
- package/dist/api/index.mjs +9 -1
- package/dist/client/index.d.cts +2 -2
- package/dist/client/index.d.mts +2 -2
- package/dist/client/index.d.ts +2 -2
- package/dist/index.d.cts +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/packages/stack/src/plugins/ai-chat/api/getters.cjs +42 -0
- package/dist/packages/stack/src/plugins/ai-chat/api/getters.mjs +39 -0
- package/dist/packages/stack/src/plugins/ai-chat/api/plugin.cjs +5 -0
- package/dist/packages/stack/src/plugins/ai-chat/api/plugin.mjs +5 -0
- package/dist/packages/stack/src/plugins/blog/api/getters.cjs +131 -0
- package/dist/packages/stack/src/plugins/blog/api/getters.mjs +127 -0
- package/dist/packages/stack/src/plugins/blog/api/plugin.cjs +60 -107
- package/dist/packages/stack/src/plugins/blog/api/plugin.mjs +60 -107
- package/dist/packages/stack/src/plugins/blog/api/query-key-defs.cjs +18 -0
- package/dist/packages/stack/src/plugins/blog/api/query-key-defs.mjs +15 -0
- package/dist/packages/stack/src/plugins/blog/api/serializers.cjs +21 -0
- package/dist/packages/stack/src/plugins/blog/api/serializers.mjs +18 -0
- package/dist/packages/stack/src/plugins/blog/client/plugin.cjs +16 -1
- package/dist/packages/stack/src/plugins/blog/client/plugin.mjs +17 -2
- package/dist/packages/stack/src/plugins/cms/api/getters.cjs +156 -0
- package/dist/packages/stack/src/plugins/cms/api/getters.mjs +147 -0
- package/dist/packages/stack/src/plugins/cms/api/plugin.cjs +624 -617
- package/dist/packages/stack/src/plugins/cms/api/plugin.mjs +623 -616
- package/dist/packages/stack/src/plugins/cms/api/query-key-defs.cjs +29 -0
- package/dist/packages/stack/src/plugins/cms/api/query-key-defs.mjs +26 -0
- package/dist/packages/stack/src/plugins/cms/client/components/pages/content-editor-page.internal.cjs +1 -1
- package/dist/packages/stack/src/plugins/cms/client/components/pages/content-editor-page.internal.mjs +1 -1
- package/dist/packages/stack/src/plugins/cms/client/hooks/cms-hooks.cjs +6 -3
- package/dist/packages/stack/src/plugins/cms/client/hooks/cms-hooks.mjs +6 -3
- package/dist/packages/stack/src/plugins/cms/client/plugin.cjs +15 -0
- package/dist/packages/stack/src/plugins/cms/client/plugin.mjs +16 -1
- package/dist/packages/stack/src/plugins/form-builder/api/getters.cjs +120 -0
- package/dist/packages/stack/src/plugins/form-builder/api/getters.mjs +112 -0
- package/dist/packages/stack/src/plugins/form-builder/api/plugin.cjs +75 -86
- package/dist/packages/stack/src/plugins/form-builder/api/plugin.mjs +71 -82
- package/dist/packages/stack/src/plugins/form-builder/api/query-key-defs.cjs +37 -0
- package/dist/packages/stack/src/plugins/form-builder/api/query-key-defs.mjs +33 -0
- package/dist/packages/stack/src/plugins/form-builder/client/components/pages/submissions-page.internal.cjs +1 -1
- package/dist/packages/stack/src/plugins/form-builder/client/components/pages/submissions-page.internal.mjs +1 -1
- package/dist/packages/stack/src/plugins/form-builder/client/plugin.cjs +15 -0
- package/dist/packages/stack/src/plugins/form-builder/client/plugin.mjs +16 -1
- package/dist/packages/stack/src/plugins/kanban/api/getters.cjs +84 -0
- package/dist/packages/stack/src/plugins/kanban/api/getters.mjs +81 -0
- package/dist/packages/stack/src/plugins/kanban/api/plugin.cjs +37 -123
- package/dist/packages/stack/src/plugins/kanban/api/plugin.mjs +37 -123
- package/dist/packages/stack/src/plugins/kanban/api/query-key-defs.cjs +26 -0
- package/dist/packages/stack/src/plugins/kanban/api/query-key-defs.mjs +23 -0
- package/dist/packages/stack/src/plugins/kanban/api/serializers.cjs +30 -0
- package/dist/packages/stack/src/plugins/kanban/api/serializers.mjs +26 -0
- package/dist/packages/stack/src/plugins/kanban/client/plugin.cjs +11 -1
- package/dist/packages/stack/src/plugins/kanban/client/plugin.mjs +12 -2
- package/dist/packages/stack/src/plugins/utils.cjs +6 -0
- package/dist/packages/stack/src/plugins/utils.mjs +6 -1
- package/dist/plugins/ai-chat/api/index.cjs +3 -0
- package/dist/plugins/ai-chat/api/index.d.cts +27 -4
- package/dist/plugins/ai-chat/api/index.d.mts +27 -4
- package/dist/plugins/ai-chat/api/index.d.ts +27 -4
- package/dist/plugins/ai-chat/api/index.mjs +1 -0
- package/dist/plugins/ai-chat/client/hooks/index.d.cts +2 -2
- package/dist/plugins/ai-chat/client/hooks/index.d.mts +2 -2
- package/dist/plugins/ai-chat/client/hooks/index.d.ts +2 -2
- package/dist/plugins/ai-chat/query-keys.d.cts +9 -284
- package/dist/plugins/ai-chat/query-keys.d.mts +9 -284
- package/dist/plugins/ai-chat/query-keys.d.ts +9 -284
- package/dist/plugins/api/index.d.cts +4 -3
- package/dist/plugins/api/index.d.mts +4 -3
- package/dist/plugins/api/index.d.ts +4 -3
- package/dist/plugins/blog/api/index.cjs +9 -0
- package/dist/plugins/blog/api/index.d.cts +20 -4
- package/dist/plugins/blog/api/index.d.mts +20 -4
- package/dist/plugins/blog/api/index.d.ts +20 -4
- package/dist/plugins/blog/api/index.mjs +3 -0
- package/dist/plugins/blog/client/hooks/index.d.cts +5 -5
- package/dist/plugins/blog/client/hooks/index.d.mts +5 -5
- package/dist/plugins/blog/client/hooks/index.d.ts +5 -5
- package/dist/plugins/blog/client/index.d.cts +1 -1
- package/dist/plugins/blog/client/index.d.mts +1 -1
- package/dist/plugins/blog/client/index.d.ts +1 -1
- package/dist/plugins/blog/query-keys.cjs +13 -9
- package/dist/plugins/blog/query-keys.d.cts +8 -333
- package/dist/plugins/blog/query-keys.d.mts +8 -333
- package/dist/plugins/blog/query-keys.d.ts +8 -333
- package/dist/plugins/blog/query-keys.mjs +13 -9
- package/dist/plugins/client/index.cjs +1 -0
- package/dist/plugins/client/index.d.cts +10 -3
- package/dist/plugins/client/index.d.mts +10 -3
- package/dist/plugins/client/index.d.ts +10 -3
- package/dist/plugins/client/index.mjs +1 -1
- package/dist/plugins/cms/api/index.cjs +10 -0
- package/dist/plugins/cms/api/index.d.cts +7 -163
- package/dist/plugins/cms/api/index.d.mts +7 -163
- package/dist/plugins/cms/api/index.d.ts +7 -163
- package/dist/plugins/cms/api/index.mjs +2 -0
- package/dist/plugins/cms/client/hooks/index.d.cts +1 -1
- package/dist/plugins/cms/client/hooks/index.d.mts +1 -1
- package/dist/plugins/cms/client/hooks/index.d.ts +1 -1
- package/dist/plugins/cms/query-keys.cjs +2 -1
- package/dist/plugins/cms/query-keys.d.cts +6 -9
- package/dist/plugins/cms/query-keys.d.mts +6 -9
- package/dist/plugins/cms/query-keys.d.ts +6 -9
- package/dist/plugins/cms/query-keys.mjs +2 -1
- package/dist/plugins/form-builder/api/index.cjs +10 -0
- package/dist/plugins/form-builder/api/index.d.cts +7 -141
- package/dist/plugins/form-builder/api/index.d.mts +7 -141
- package/dist/plugins/form-builder/api/index.d.ts +7 -141
- package/dist/plugins/form-builder/api/index.mjs +2 -0
- package/dist/plugins/form-builder/client/components/index.d.cts +1 -1
- package/dist/plugins/form-builder/client/components/index.d.mts +1 -1
- package/dist/plugins/form-builder/client/components/index.d.ts +1 -1
- package/dist/plugins/form-builder/client/hooks/index.d.cts +1 -1
- package/dist/plugins/form-builder/client/hooks/index.d.mts +1 -1
- package/dist/plugins/form-builder/client/hooks/index.d.ts +1 -1
- package/dist/plugins/form-builder/query-keys.cjs +3 -2
- package/dist/plugins/form-builder/query-keys.d.cts +7 -6
- package/dist/plugins/form-builder/query-keys.d.mts +7 -6
- package/dist/plugins/form-builder/query-keys.d.ts +7 -6
- package/dist/plugins/form-builder/query-keys.mjs +3 -2
- package/dist/plugins/kanban/api/index.cjs +9 -0
- package/dist/plugins/kanban/api/index.d.cts +17 -395
- package/dist/plugins/kanban/api/index.d.mts +17 -395
- package/dist/plugins/kanban/api/index.d.ts +17 -395
- package/dist/plugins/kanban/api/index.mjs +3 -0
- package/dist/plugins/kanban/client/components/index.d.cts +1 -1
- package/dist/plugins/kanban/client/components/index.d.mts +1 -1
- package/dist/plugins/kanban/client/components/index.d.ts +1 -1
- package/dist/plugins/kanban/client/hooks/index.d.cts +1 -1
- package/dist/plugins/kanban/client/hooks/index.d.mts +1 -1
- package/dist/plugins/kanban/client/hooks/index.d.ts +1 -1
- package/dist/plugins/kanban/client/index.d.cts +1 -1
- package/dist/plugins/kanban/client/index.d.mts +1 -1
- package/dist/plugins/kanban/client/index.d.ts +1 -1
- package/dist/plugins/kanban/query-keys.cjs +6 -12
- package/dist/plugins/kanban/query-keys.d.cts +5 -16
- package/dist/plugins/kanban/query-keys.d.mts +5 -16
- package/dist/plugins/kanban/query-keys.d.ts +5 -16
- package/dist/plugins/kanban/query-keys.mjs +6 -12
- package/dist/plugins/open-api/api/index.d.cts +2 -2
- package/dist/plugins/open-api/api/index.d.mts +2 -2
- package/dist/plugins/open-api/api/index.d.ts +2 -2
- package/dist/plugins/route-docs/client/index.d.cts +1 -1
- package/dist/plugins/route-docs/client/index.d.mts +1 -1
- package/dist/plugins/route-docs/client/index.d.ts +1 -1
- package/dist/plugins/ui-builder/index.d.cts +1 -1
- package/dist/plugins/ui-builder/index.d.mts +1 -1
- package/dist/plugins/ui-builder/index.d.ts +1 -1
- package/dist/shared/{stack.BoA0xkJv.d.cts → stack.7n9Y_u7N.d.cts} +33 -7
- package/dist/shared/{stack.BoA0xkJv.d.mts → stack.7n9Y_u7N.d.mts} +33 -7
- package/dist/shared/{stack.BoA0xkJv.d.ts → stack.7n9Y_u7N.d.ts} +33 -7
- package/dist/shared/stack.B1EeBt1b.d.ts +297 -0
- package/dist/shared/stack.BIXEI6v_.d.mts +419 -0
- package/dist/shared/stack.BKfolAyK.d.ts +419 -0
- package/dist/shared/stack.BeSm90va.d.ts +289 -0
- package/dist/shared/stack.BpolpQpf.d.cts +445 -0
- package/dist/shared/stack.C5dtIncc.d.mts +293 -0
- package/dist/shared/stack.CIP6QS9l.d.ts +293 -0
- package/dist/shared/stack.CMh_EdxW.d.cts +289 -0
- package/dist/shared/stack.CP68pFEH.d.mts +297 -0
- package/dist/shared/{stack.BsXokfNh.d.mts → stack.CVDTkMoO.d.cts} +8 -2
- package/dist/shared/{stack.BsXokfNh.d.ts → stack.CVDTkMoO.d.mts} +8 -2
- package/dist/shared/{stack.BsXokfNh.d.cts → stack.CVDTkMoO.d.ts} +8 -2
- package/dist/shared/{stack.DKDMI-QO.d.mts → stack.DJaKVY7v.d.cts} +7 -1
- package/dist/shared/{stack.DKDMI-QO.d.ts → stack.DJaKVY7v.d.mts} +7 -1
- package/dist/shared/{stack.DKDMI-QO.d.cts → stack.DJaKVY7v.d.ts} +7 -1
- package/dist/shared/{stack.DzH_wcvr.d.mts → stack.DdI5W6MB.d.cts} +9 -3
- package/dist/shared/{stack.DzH_wcvr.d.ts → stack.DdI5W6MB.d.mts} +9 -3
- package/dist/shared/{stack.DzH_wcvr.d.cts → stack.DdI5W6MB.d.ts} +9 -3
- package/dist/shared/stack.Dg09R0oB.d.mts +289 -0
- package/dist/shared/stack.Dw0Ly2TM.d.cts +293 -0
- package/dist/shared/stack.IdtKDRka.d.cts +297 -0
- package/dist/shared/stack.TIBF2AOx.d.ts +445 -0
- package/dist/shared/stack.rTy7-wQU.d.mts +445 -0
- package/dist/shared/stack.snB1EDP7.d.cts +419 -0
- package/package.json +3 -3
- package/src/__tests__/stack-api.test.ts +118 -0
- package/src/api/index.ts +15 -1
- package/src/plugins/ai-chat/__tests__/getters.test.ts +109 -0
- package/src/plugins/ai-chat/api/getters.ts +71 -0
- package/src/plugins/ai-chat/api/index.ts +1 -0
- package/src/plugins/ai-chat/api/plugin.ts +8 -0
- package/src/plugins/api/index.ts +3 -1
- package/src/plugins/blog/__tests__/getters.test.ts +540 -0
- package/src/plugins/blog/api/getters.ts +243 -0
- package/src/plugins/blog/api/index.ts +9 -0
- package/src/plugins/blog/api/plugin.ts +98 -141
- package/src/plugins/blog/api/query-key-defs.ts +46 -0
- package/src/plugins/blog/api/serializers.ts +27 -0
- package/src/plugins/blog/client/plugin.tsx +21 -1
- package/src/plugins/blog/query-keys.ts +21 -20
- package/src/plugins/client/index.ts +1 -1
- package/src/plugins/cms/__tests__/getters.test.ts +206 -0
- package/src/plugins/cms/api/getters.ts +268 -0
- package/src/plugins/cms/api/index.ts +15 -1
- package/src/plugins/cms/api/plugin.ts +151 -150
- package/src/plugins/cms/api/query-key-defs.ts +53 -0
- package/src/plugins/cms/api/serializers.ts +12 -0
- package/src/plugins/cms/client/components/pages/content-editor-page.internal.tsx +1 -1
- package/src/plugins/cms/client/hooks/cms-hooks.tsx +3 -0
- package/src/plugins/cms/client/plugin.tsx +19 -0
- package/src/plugins/cms/query-keys.ts +2 -1
- package/src/plugins/cms/types.ts +1 -1
- package/src/plugins/form-builder/__tests__/getters.test.ts +159 -0
- package/src/plugins/form-builder/api/getters.ts +226 -0
- package/src/plugins/form-builder/api/index.ts +15 -1
- package/src/plugins/form-builder/api/plugin.ts +107 -109
- package/src/plugins/form-builder/api/query-key-defs.ts +79 -0
- package/src/plugins/form-builder/api/serializers.ts +12 -0
- package/src/plugins/form-builder/client/components/pages/submissions-page.internal.tsx +1 -1
- package/src/plugins/form-builder/client/plugin.tsx +19 -0
- package/src/plugins/form-builder/query-keys.ts +6 -2
- package/src/plugins/form-builder/types.ts +2 -2
- package/src/plugins/kanban/__tests__/getters.test.ts +172 -0
- package/src/plugins/kanban/api/getters.ts +149 -0
- package/src/plugins/kanban/api/index.ts +4 -0
- package/src/plugins/kanban/api/plugin.ts +65 -146
- package/src/plugins/kanban/api/query-key-defs.ts +54 -0
- package/src/plugins/kanban/api/serializers.ts +49 -0
- package/src/plugins/kanban/client/plugin.tsx +15 -1
- package/src/plugins/kanban/query-keys.ts +10 -14
- package/src/plugins/utils.ts +19 -0
- package/src/types.ts +44 -5
- package/dist/shared/{stack.CbuN2zVV.d.cts → stack.CBON0dWL.d.cts} +7 -7
- package/dist/shared/{stack.CbuN2zVV.d.mts → stack.CBON0dWL.d.mts} +7 -7
- package/dist/shared/{stack.CbuN2zVV.d.ts → stack.CBON0dWL.d.ts} +7 -7
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
import * as _btst_stack_plugins_api from '@btst/stack/plugins/api';
|
|
2
|
+
import * as better_call from 'better-call';
|
|
3
|
+
import { S as SerializedForm, b as SerializedFormSubmissionWithData, F as Form, d as FormSubmission, a as SerializedFormSubmission, e as FormSubmissionWithForm, f as FormBuilderBackendConfig } from './stack.DdI5W6MB.cjs';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import { Adapter } from '@btst/db';
|
|
6
|
+
import { QueryClient } from '@tanstack/react-query';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Serialize a Form for SSR/SSG use (convert dates to strings).
|
|
10
|
+
*/
|
|
11
|
+
declare function serializeForm(form: Form): SerializedForm;
|
|
12
|
+
/**
|
|
13
|
+
* Serialize a FormSubmission for SSR/SSG use (convert dates to strings).
|
|
14
|
+
*/
|
|
15
|
+
declare function serializeFormSubmission(submission: FormSubmission): SerializedFormSubmission;
|
|
16
|
+
/**
|
|
17
|
+
* Serialize a FormSubmission with parsed data and joined Form.
|
|
18
|
+
* If `submission.data` is corrupted JSON, `parsedData` is set to `null` rather
|
|
19
|
+
* than throwing, so one bad row cannot crash the entire list or SSG build.
|
|
20
|
+
*/
|
|
21
|
+
declare function serializeFormSubmissionWithData(submission: FormSubmissionWithForm): SerializedFormSubmissionWithData;
|
|
22
|
+
/**
|
|
23
|
+
* Retrieve all forms with optional status filter and pagination.
|
|
24
|
+
* Pure DB function — no hooks, no HTTP context. Safe for SSG and server-side use.
|
|
25
|
+
*
|
|
26
|
+
* @remarks **Security:** Authorization hooks (e.g. `onBeforeListForms`) are NOT
|
|
27
|
+
* called. The caller is responsible for any access-control checks before
|
|
28
|
+
* invoking this function.
|
|
29
|
+
*
|
|
30
|
+
* @param adapter - The database adapter
|
|
31
|
+
* @param params - Optional filter/pagination parameters
|
|
32
|
+
*/
|
|
33
|
+
declare function getAllForms(adapter: Adapter, params?: {
|
|
34
|
+
status?: string;
|
|
35
|
+
limit?: number;
|
|
36
|
+
offset?: number;
|
|
37
|
+
}): Promise<{
|
|
38
|
+
items: SerializedForm[];
|
|
39
|
+
total: number;
|
|
40
|
+
limit?: number;
|
|
41
|
+
offset?: number;
|
|
42
|
+
}>;
|
|
43
|
+
/**
|
|
44
|
+
* Retrieve a single form by its ID (UUID).
|
|
45
|
+
* Returns null if the form is not found.
|
|
46
|
+
* Pure DB function — no hooks, no HTTP context. Safe for SSG and server-side use.
|
|
47
|
+
*
|
|
48
|
+
* @remarks **Security:** Authorization hooks are NOT called. The caller is
|
|
49
|
+
* responsible for any access-control checks before invoking this function.
|
|
50
|
+
*
|
|
51
|
+
* @param adapter - The database adapter
|
|
52
|
+
* @param id - The form UUID
|
|
53
|
+
*/
|
|
54
|
+
declare function getFormById(adapter: Adapter, id: string): Promise<SerializedForm | null>;
|
|
55
|
+
/**
|
|
56
|
+
* Retrieve a single form by its slug.
|
|
57
|
+
* Returns null if the form is not found.
|
|
58
|
+
* Pure DB function — no hooks, no HTTP context. Safe for SSG and server-side use.
|
|
59
|
+
*
|
|
60
|
+
* @remarks **Security:** Authorization hooks are NOT called. The caller is
|
|
61
|
+
* responsible for any access-control checks before invoking this function.
|
|
62
|
+
*
|
|
63
|
+
* @param adapter - The database adapter
|
|
64
|
+
* @param slug - The form slug
|
|
65
|
+
*/
|
|
66
|
+
declare function getFormBySlug(adapter: Adapter, slug: string): Promise<SerializedForm | null>;
|
|
67
|
+
/**
|
|
68
|
+
* Retrieve submissions for a form by form ID, with optional pagination.
|
|
69
|
+
* Returns an empty result if the form does not exist.
|
|
70
|
+
* Pure DB function — no hooks, no HTTP context. Safe for server-side use.
|
|
71
|
+
*
|
|
72
|
+
* @remarks **Security:** Authorization hooks are NOT called. The caller is
|
|
73
|
+
* responsible for any access-control checks before invoking this function.
|
|
74
|
+
*
|
|
75
|
+
* @param adapter - The database adapter
|
|
76
|
+
* @param formId - The form ID
|
|
77
|
+
* @param params - Optional pagination parameters
|
|
78
|
+
*/
|
|
79
|
+
declare function getFormSubmissions(adapter: Adapter, formId: string, params?: {
|
|
80
|
+
limit?: number;
|
|
81
|
+
offset?: number;
|
|
82
|
+
}): Promise<{
|
|
83
|
+
items: SerializedFormSubmissionWithData[];
|
|
84
|
+
total: number;
|
|
85
|
+
limit?: number;
|
|
86
|
+
offset?: number;
|
|
87
|
+
}>;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Route keys for the Form Builder plugin — matches the keys returned by
|
|
91
|
+
* `stackClient.router.getRoute(path).routeKey`.
|
|
92
|
+
*/
|
|
93
|
+
type FormBuilderRouteKey = "formList" | "newForm" | "editForm" | "submissions";
|
|
94
|
+
interface FormBuilderPrefetchForRoute {
|
|
95
|
+
(key: "formList" | "newForm", qc: QueryClient): Promise<void>;
|
|
96
|
+
(key: "editForm" | "submissions", qc: QueryClient, params: {
|
|
97
|
+
id: string;
|
|
98
|
+
}): Promise<void>;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Form Builder backend plugin
|
|
102
|
+
* Provides API endpoints for managing forms and form submissions
|
|
103
|
+
*
|
|
104
|
+
* @param config - Configuration with optional hooks
|
|
105
|
+
*/
|
|
106
|
+
declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _btst_stack_plugins_api.BackendPlugin<{
|
|
107
|
+
listForms: better_call.StrictEndpoint<"/forms", {
|
|
108
|
+
method: "GET";
|
|
109
|
+
query: z.ZodObject<{
|
|
110
|
+
status: z.ZodOptional<z.ZodEnum<{
|
|
111
|
+
active: "active";
|
|
112
|
+
inactive: "inactive";
|
|
113
|
+
archived: "archived";
|
|
114
|
+
}>>;
|
|
115
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
|
|
116
|
+
offset: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
|
|
117
|
+
}, z.core.$strip>;
|
|
118
|
+
}, {
|
|
119
|
+
items: SerializedForm[];
|
|
120
|
+
total: number;
|
|
121
|
+
limit?: number;
|
|
122
|
+
offset?: number;
|
|
123
|
+
}>;
|
|
124
|
+
getFormBySlug: better_call.StrictEndpoint<"/forms/:slug", {
|
|
125
|
+
method: "GET";
|
|
126
|
+
params: z.ZodObject<{
|
|
127
|
+
slug: z.ZodString;
|
|
128
|
+
}, z.core.$strip>;
|
|
129
|
+
}, SerializedForm>;
|
|
130
|
+
getFormById: better_call.StrictEndpoint<"/forms/id/:id", {
|
|
131
|
+
method: "GET";
|
|
132
|
+
params: z.ZodObject<{
|
|
133
|
+
id: z.ZodString;
|
|
134
|
+
}, z.core.$strip>;
|
|
135
|
+
}, SerializedForm>;
|
|
136
|
+
createForm: better_call.StrictEndpoint<"/forms", {
|
|
137
|
+
method: "POST";
|
|
138
|
+
body: z.ZodObject<{
|
|
139
|
+
name: z.ZodString;
|
|
140
|
+
slug: z.ZodString;
|
|
141
|
+
description: z.ZodOptional<z.ZodString>;
|
|
142
|
+
schema: z.ZodString;
|
|
143
|
+
successMessage: z.ZodOptional<z.ZodString>;
|
|
144
|
+
redirectUrl: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
|
|
145
|
+
status: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
146
|
+
active: "active";
|
|
147
|
+
inactive: "inactive";
|
|
148
|
+
archived: "archived";
|
|
149
|
+
}>>>;
|
|
150
|
+
}, z.core.$strip>;
|
|
151
|
+
}, SerializedForm>;
|
|
152
|
+
updateForm: better_call.StrictEndpoint<"/forms/:id", {
|
|
153
|
+
method: "PUT";
|
|
154
|
+
params: z.ZodObject<{
|
|
155
|
+
id: z.ZodString;
|
|
156
|
+
}, z.core.$strip>;
|
|
157
|
+
body: z.ZodObject<{
|
|
158
|
+
name: z.ZodOptional<z.ZodString>;
|
|
159
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
160
|
+
description: z.ZodOptional<z.ZodString>;
|
|
161
|
+
schema: z.ZodOptional<z.ZodString>;
|
|
162
|
+
successMessage: z.ZodOptional<z.ZodString>;
|
|
163
|
+
redirectUrl: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
|
|
164
|
+
status: z.ZodOptional<z.ZodEnum<{
|
|
165
|
+
active: "active";
|
|
166
|
+
inactive: "inactive";
|
|
167
|
+
archived: "archived";
|
|
168
|
+
}>>;
|
|
169
|
+
}, z.core.$strip>;
|
|
170
|
+
}, SerializedForm>;
|
|
171
|
+
deleteForm: better_call.StrictEndpoint<"/forms/:id", {
|
|
172
|
+
method: "DELETE";
|
|
173
|
+
params: z.ZodObject<{
|
|
174
|
+
id: z.ZodString;
|
|
175
|
+
}, z.core.$strip>;
|
|
176
|
+
}, {
|
|
177
|
+
success: boolean;
|
|
178
|
+
}>;
|
|
179
|
+
submitForm: better_call.StrictEndpoint<"/forms/:slug/submit", {
|
|
180
|
+
method: "POST";
|
|
181
|
+
params: z.ZodObject<{
|
|
182
|
+
slug: z.ZodString;
|
|
183
|
+
}, z.core.$strip>;
|
|
184
|
+
body: z.ZodObject<{
|
|
185
|
+
data: z.ZodObject<{}, z.core.$loose>;
|
|
186
|
+
}, z.core.$strip>;
|
|
187
|
+
}, {
|
|
188
|
+
form: {
|
|
189
|
+
successMessage: string | undefined;
|
|
190
|
+
redirectUrl: string | undefined;
|
|
191
|
+
};
|
|
192
|
+
submittedAt: string;
|
|
193
|
+
id: string;
|
|
194
|
+
formId: string;
|
|
195
|
+
data: string;
|
|
196
|
+
submittedBy?: string | undefined;
|
|
197
|
+
ipAddress?: string | undefined;
|
|
198
|
+
userAgent?: string | undefined;
|
|
199
|
+
}>;
|
|
200
|
+
listSubmissions: better_call.StrictEndpoint<"/forms/:formId/submissions", {
|
|
201
|
+
method: "GET";
|
|
202
|
+
params: z.ZodObject<{
|
|
203
|
+
formId: z.ZodString;
|
|
204
|
+
}, z.core.$strip>;
|
|
205
|
+
query: z.ZodObject<{
|
|
206
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
|
|
207
|
+
offset: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
|
|
208
|
+
}, z.core.$strip>;
|
|
209
|
+
}, {
|
|
210
|
+
items: SerializedFormSubmissionWithData[];
|
|
211
|
+
total: number;
|
|
212
|
+
limit?: number;
|
|
213
|
+
offset?: number;
|
|
214
|
+
}>;
|
|
215
|
+
getSubmission: better_call.StrictEndpoint<"/forms/:formId/submissions/:subId", {
|
|
216
|
+
method: "GET";
|
|
217
|
+
params: z.ZodObject<{
|
|
218
|
+
formId: z.ZodString;
|
|
219
|
+
subId: z.ZodString;
|
|
220
|
+
}, z.core.$strip>;
|
|
221
|
+
}, SerializedFormSubmissionWithData<Record<string, unknown>>>;
|
|
222
|
+
deleteSubmission: better_call.StrictEndpoint<"/forms/:formId/submissions/:subId", {
|
|
223
|
+
method: "DELETE";
|
|
224
|
+
params: z.ZodObject<{
|
|
225
|
+
formId: z.ZodString;
|
|
226
|
+
subId: z.ZodString;
|
|
227
|
+
}, z.core.$strip>;
|
|
228
|
+
}, {
|
|
229
|
+
success: boolean;
|
|
230
|
+
}>;
|
|
231
|
+
}, {
|
|
232
|
+
getAllForms: (params?: Parameters<typeof getAllForms>[1]) => Promise<{
|
|
233
|
+
items: SerializedForm[];
|
|
234
|
+
total: number;
|
|
235
|
+
limit?: number;
|
|
236
|
+
offset?: number;
|
|
237
|
+
}>;
|
|
238
|
+
getFormById: (id: string) => Promise<SerializedForm | null>;
|
|
239
|
+
getFormBySlug: (slug: string) => Promise<SerializedForm | null>;
|
|
240
|
+
getFormSubmissions: (formId: string, params?: Parameters<typeof getFormSubmissions>[2]) => Promise<{
|
|
241
|
+
items: SerializedFormSubmissionWithData[];
|
|
242
|
+
total: number;
|
|
243
|
+
limit?: number;
|
|
244
|
+
offset?: number;
|
|
245
|
+
}>;
|
|
246
|
+
prefetchForRoute: FormBuilderPrefetchForRoute;
|
|
247
|
+
}>;
|
|
248
|
+
type FormBuilderApiRouter = ReturnType<ReturnType<typeof formBuilderBackendPlugin>["routes"]>;
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Internal query key constants for the Form Builder plugin.
|
|
252
|
+
* Shared between query-keys.ts (HTTP path) and prefetchForRoute (DB path)
|
|
253
|
+
* to prevent key drift between SSR loaders and SSG prefetching.
|
|
254
|
+
*/
|
|
255
|
+
interface FormsListDiscriminator {
|
|
256
|
+
status?: "active" | "inactive" | "archived";
|
|
257
|
+
limit: number;
|
|
258
|
+
offset: number;
|
|
259
|
+
}
|
|
260
|
+
interface SubmissionsListDiscriminator {
|
|
261
|
+
formId: string;
|
|
262
|
+
limit: number;
|
|
263
|
+
offset: number;
|
|
264
|
+
}
|
|
265
|
+
/** Full query key builders — use these with queryClient.setQueryData() */
|
|
266
|
+
declare const FORM_QUERY_KEYS: {
|
|
267
|
+
/**
|
|
268
|
+
* Key for forms.list(params) query.
|
|
269
|
+
* Full key: ["forms", "list", "list", { status, limit, offset }]
|
|
270
|
+
*/
|
|
271
|
+
formsList: (params?: {
|
|
272
|
+
status?: "active" | "inactive" | "archived";
|
|
273
|
+
limit?: number;
|
|
274
|
+
offset?: number;
|
|
275
|
+
}) => readonly ["forms", "list", "list", FormsListDiscriminator];
|
|
276
|
+
/**
|
|
277
|
+
* Key for forms.byId(id) query.
|
|
278
|
+
* Full key: ["forms", "byId", "byId", id]
|
|
279
|
+
*/
|
|
280
|
+
formById: (id: string) => readonly ["forms", "byId", "byId", string];
|
|
281
|
+
/**
|
|
282
|
+
* Key for formSubmissions.list(params) query.
|
|
283
|
+
* Full key: ["formSubmissions", "list", { formId, limit, offset }]
|
|
284
|
+
*/
|
|
285
|
+
submissionsList: (params: {
|
|
286
|
+
formId: string;
|
|
287
|
+
limit?: number;
|
|
288
|
+
offset?: number;
|
|
289
|
+
}) => readonly ["formSubmissions", "list", SubmissionsListDiscriminator];
|
|
290
|
+
};
|
|
291
|
+
|
|
292
|
+
export { getFormById as c, getFormBySlug as d, getFormSubmissions as e, formBuilderBackendPlugin as f, getAllForms as g, serializeFormSubmission as h, serializeFormSubmissionWithData as i, FORM_QUERY_KEYS as j, serializeForm as s };
|
|
293
|
+
export type { FormBuilderApiRouter as F, SubmissionsListDiscriminator as S, FormsListDiscriminator as a, FormBuilderRouteKey as b };
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
import * as _btst_stack_plugins_api from '@btst/stack/plugins/api';
|
|
2
|
+
import { a as SerializedContentItemWithType, S as SerializedContentType, b as ContentType, c as ContentItem, d as SerializedContentItem, e as ContentItemWithType, f as CMSBackendConfig, I as InverseRelation } from './stack.CVDTkMoO.cjs';
|
|
3
|
+
import * as better_call from 'better-call';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import { Adapter } from '@btst/db';
|
|
6
|
+
import { QueryClient } from '@tanstack/react-query';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Serialize a ContentType for SSR/SSG use (convert dates to strings).
|
|
10
|
+
* Applies lazy migration for legacy schemas (version 1 → 2).
|
|
11
|
+
*/
|
|
12
|
+
declare function serializeContentType(ct: ContentType): SerializedContentType;
|
|
13
|
+
/**
|
|
14
|
+
* Serialize a ContentItem for SSR/SSG use (convert dates to strings).
|
|
15
|
+
*/
|
|
16
|
+
declare function serializeContentItem(item: ContentItem): SerializedContentItem;
|
|
17
|
+
/**
|
|
18
|
+
* Serialize a ContentItem with parsed data and joined ContentType.
|
|
19
|
+
* Throws a SyntaxError if `item.data` is not valid JSON, so corrupted rows
|
|
20
|
+
* produce a visible, debuggable error rather than silently returning null.
|
|
21
|
+
*/
|
|
22
|
+
declare function serializeContentItemWithType(item: ContentItemWithType): SerializedContentItemWithType;
|
|
23
|
+
/**
|
|
24
|
+
* Retrieve all content types.
|
|
25
|
+
* Pure DB function — no hooks, no HTTP context. Safe for SSG and server-side use.
|
|
26
|
+
*
|
|
27
|
+
* @remarks **Security:** Authorization hooks are NOT called. The caller is
|
|
28
|
+
* responsible for any access-control checks before invoking this function.
|
|
29
|
+
*
|
|
30
|
+
* @param adapter - The database adapter
|
|
31
|
+
*/
|
|
32
|
+
declare function getAllContentTypes(adapter: Adapter): Promise<SerializedContentType[]>;
|
|
33
|
+
/**
|
|
34
|
+
* Retrieve all content items for a given content type, with optional pagination.
|
|
35
|
+
* Pure DB function — no hooks, no HTTP context. Safe for SSG and server-side use.
|
|
36
|
+
*
|
|
37
|
+
* @remarks **Security:** Authorization hooks (e.g. `onBeforeListItems`) are NOT
|
|
38
|
+
* called. The caller is responsible for any access-control checks before
|
|
39
|
+
* invoking this function.
|
|
40
|
+
*
|
|
41
|
+
* @param adapter - The database adapter
|
|
42
|
+
* @param contentTypeSlug - The slug of the content type to query
|
|
43
|
+
* @param params - Optional filter/pagination parameters
|
|
44
|
+
*/
|
|
45
|
+
declare function getAllContentItems(adapter: Adapter, contentTypeSlug: string, params?: {
|
|
46
|
+
slug?: string;
|
|
47
|
+
limit?: number;
|
|
48
|
+
offset?: number;
|
|
49
|
+
}): Promise<{
|
|
50
|
+
items: SerializedContentItemWithType[];
|
|
51
|
+
total: number;
|
|
52
|
+
limit?: number;
|
|
53
|
+
offset?: number;
|
|
54
|
+
}>;
|
|
55
|
+
/**
|
|
56
|
+
* Retrieve a single content item by its ID.
|
|
57
|
+
* Returns null if the item is not found.
|
|
58
|
+
* Pure DB function — no hooks, no HTTP context. Safe for SSG and server-side use.
|
|
59
|
+
*
|
|
60
|
+
* @remarks **Security:** Authorization hooks are NOT called. The caller is
|
|
61
|
+
* responsible for any access-control checks before invoking this function.
|
|
62
|
+
*
|
|
63
|
+
* @param adapter - The database adapter
|
|
64
|
+
* @param id - The content item ID (UUID)
|
|
65
|
+
*/
|
|
66
|
+
declare function getContentItemById(adapter: Adapter, id: string): Promise<SerializedContentItemWithType | null>;
|
|
67
|
+
/**
|
|
68
|
+
* Retrieve a single content item by its slug within a content type.
|
|
69
|
+
* Returns null if the content type or item is not found.
|
|
70
|
+
* Pure DB function — no hooks, no HTTP context. Safe for SSG and server-side use.
|
|
71
|
+
*
|
|
72
|
+
* @remarks **Security:** Authorization hooks are NOT called. The caller is
|
|
73
|
+
* responsible for any access-control checks before invoking this function.
|
|
74
|
+
*
|
|
75
|
+
* @param adapter - The database adapter
|
|
76
|
+
* @param contentTypeSlug - The slug of the content type
|
|
77
|
+
* @param slug - The slug of the content item
|
|
78
|
+
*/
|
|
79
|
+
declare function getContentItemBySlug(adapter: Adapter, contentTypeSlug: string, slug: string): Promise<SerializedContentItemWithType | null>;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Route keys for the CMS plugin — matches the keys returned by
|
|
83
|
+
* `stackClient.router.getRoute(path).routeKey`.
|
|
84
|
+
*/
|
|
85
|
+
type CMSRouteKey = "dashboard" | "contentList" | "newContent" | "editContent";
|
|
86
|
+
interface CMSPrefetchForRoute {
|
|
87
|
+
(key: "dashboard" | "newContent", qc: QueryClient): Promise<void>;
|
|
88
|
+
(key: "contentList", qc: QueryClient, params: {
|
|
89
|
+
typeSlug: string;
|
|
90
|
+
}): Promise<void>;
|
|
91
|
+
(key: "editContent", qc: QueryClient, params: {
|
|
92
|
+
typeSlug: string;
|
|
93
|
+
id: string;
|
|
94
|
+
}): Promise<void>;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* CMS backend plugin
|
|
98
|
+
* Provides API endpoints for managing content types and content items
|
|
99
|
+
*
|
|
100
|
+
* @param config - Configuration with content types and optional hooks
|
|
101
|
+
*/
|
|
102
|
+
declare const cmsBackendPlugin: (config: CMSBackendConfig) => _btst_stack_plugins_api.BackendPlugin<{
|
|
103
|
+
listContentTypes: better_call.StrictEndpoint<"/content-types", {
|
|
104
|
+
method: "GET";
|
|
105
|
+
}, {
|
|
106
|
+
itemCount: number;
|
|
107
|
+
createdAt: string;
|
|
108
|
+
updatedAt: string;
|
|
109
|
+
name: string;
|
|
110
|
+
id: string;
|
|
111
|
+
slug: string;
|
|
112
|
+
description?: string | undefined;
|
|
113
|
+
jsonSchema: string;
|
|
114
|
+
fieldConfig?: string | undefined;
|
|
115
|
+
autoFormVersion?: number | undefined;
|
|
116
|
+
}[]>;
|
|
117
|
+
getContentTypeBySlug: better_call.StrictEndpoint<"/content-types/:slug", {
|
|
118
|
+
method: "GET";
|
|
119
|
+
params: z.ZodObject<{
|
|
120
|
+
slug: z.ZodString;
|
|
121
|
+
}, z.core.$strip>;
|
|
122
|
+
}, SerializedContentType>;
|
|
123
|
+
listContentItems: better_call.StrictEndpoint<"/content/:typeSlug", {
|
|
124
|
+
method: "GET";
|
|
125
|
+
params: z.ZodObject<{
|
|
126
|
+
typeSlug: z.ZodString;
|
|
127
|
+
}, z.core.$strip>;
|
|
128
|
+
query: z.ZodObject<{
|
|
129
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
130
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
|
|
131
|
+
offset: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
|
|
132
|
+
}, z.core.$strip>;
|
|
133
|
+
}, {
|
|
134
|
+
items: SerializedContentItemWithType[];
|
|
135
|
+
total: number;
|
|
136
|
+
limit?: number;
|
|
137
|
+
offset?: number;
|
|
138
|
+
}>;
|
|
139
|
+
getContentItem: better_call.StrictEndpoint<"/content/:typeSlug/:id", {
|
|
140
|
+
method: "GET";
|
|
141
|
+
params: z.ZodObject<{
|
|
142
|
+
typeSlug: z.ZodString;
|
|
143
|
+
id: z.ZodString;
|
|
144
|
+
}, z.core.$strip>;
|
|
145
|
+
}, SerializedContentItemWithType<Record<string, unknown>>>;
|
|
146
|
+
createContentItem: better_call.StrictEndpoint<"/content/:typeSlug", {
|
|
147
|
+
method: "POST";
|
|
148
|
+
params: z.ZodObject<{
|
|
149
|
+
typeSlug: z.ZodString;
|
|
150
|
+
}, z.core.$strip>;
|
|
151
|
+
body: z.ZodObject<{
|
|
152
|
+
slug: z.ZodString;
|
|
153
|
+
data: z.ZodObject<{}, z.core.$loose>;
|
|
154
|
+
}, z.core.$strip>;
|
|
155
|
+
}, {
|
|
156
|
+
parsedData: Record<string, unknown>;
|
|
157
|
+
createdAt: string;
|
|
158
|
+
updatedAt: string;
|
|
159
|
+
id: string;
|
|
160
|
+
slug: string;
|
|
161
|
+
contentTypeId: string;
|
|
162
|
+
data: string;
|
|
163
|
+
authorId?: string | undefined;
|
|
164
|
+
}>;
|
|
165
|
+
updateContentItem: better_call.StrictEndpoint<"/content/:typeSlug/:id", {
|
|
166
|
+
method: "PUT";
|
|
167
|
+
params: z.ZodObject<{
|
|
168
|
+
typeSlug: z.ZodString;
|
|
169
|
+
id: z.ZodString;
|
|
170
|
+
}, z.core.$strip>;
|
|
171
|
+
body: z.ZodObject<{
|
|
172
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
173
|
+
data: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
|
|
174
|
+
}, z.core.$strip>;
|
|
175
|
+
}, SerializedContentItemWithType<Record<string, unknown>>>;
|
|
176
|
+
deleteContentItem: better_call.StrictEndpoint<"/content/:typeSlug/:id", {
|
|
177
|
+
method: "DELETE";
|
|
178
|
+
params: z.ZodObject<{
|
|
179
|
+
typeSlug: z.ZodString;
|
|
180
|
+
id: z.ZodString;
|
|
181
|
+
}, z.core.$strip>;
|
|
182
|
+
}, {
|
|
183
|
+
success: boolean;
|
|
184
|
+
}>;
|
|
185
|
+
getContentItemPopulated: better_call.StrictEndpoint<"/content/:typeSlug/:id/populated", {
|
|
186
|
+
method: "GET";
|
|
187
|
+
params: z.ZodObject<{
|
|
188
|
+
typeSlug: z.ZodString;
|
|
189
|
+
id: z.ZodString;
|
|
190
|
+
}, z.core.$strip>;
|
|
191
|
+
}, {
|
|
192
|
+
_relations: Record<string, SerializedContentItemWithType<Record<string, unknown>>[]>;
|
|
193
|
+
parsedData: Record<string, unknown>;
|
|
194
|
+
contentType?: SerializedContentType;
|
|
195
|
+
createdAt: string;
|
|
196
|
+
updatedAt: string;
|
|
197
|
+
id: string;
|
|
198
|
+
slug: string;
|
|
199
|
+
contentTypeId: string;
|
|
200
|
+
data: string;
|
|
201
|
+
authorId?: string | undefined;
|
|
202
|
+
}>;
|
|
203
|
+
listContentByRelation: better_call.StrictEndpoint<"/content/:typeSlug/by-relation", {
|
|
204
|
+
method: "GET";
|
|
205
|
+
params: z.ZodObject<{
|
|
206
|
+
typeSlug: z.ZodString;
|
|
207
|
+
}, z.core.$strip>;
|
|
208
|
+
query: z.ZodObject<{
|
|
209
|
+
field: z.ZodString;
|
|
210
|
+
targetId: z.ZodString;
|
|
211
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
|
|
212
|
+
offset: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
|
|
213
|
+
}, z.core.$strip>;
|
|
214
|
+
}, {
|
|
215
|
+
items: SerializedContentItemWithType<Record<string, unknown>>[];
|
|
216
|
+
total: number;
|
|
217
|
+
limit: number;
|
|
218
|
+
offset: number;
|
|
219
|
+
}>;
|
|
220
|
+
getInverseRelations: better_call.StrictEndpoint<"/content-types/:slug/inverse-relations", {
|
|
221
|
+
method: "GET";
|
|
222
|
+
params: z.ZodObject<{
|
|
223
|
+
slug: z.ZodString;
|
|
224
|
+
}, z.core.$strip>;
|
|
225
|
+
query: z.ZodObject<{
|
|
226
|
+
itemId: z.ZodOptional<z.ZodString>;
|
|
227
|
+
}, z.core.$strip>;
|
|
228
|
+
}, {
|
|
229
|
+
inverseRelations: InverseRelation[];
|
|
230
|
+
}>;
|
|
231
|
+
listInverseRelationItems: better_call.StrictEndpoint<"/content-types/:slug/inverse-relations/:sourceType", {
|
|
232
|
+
method: "GET";
|
|
233
|
+
params: z.ZodObject<{
|
|
234
|
+
slug: z.ZodString;
|
|
235
|
+
sourceType: z.ZodString;
|
|
236
|
+
}, z.core.$strip>;
|
|
237
|
+
query: z.ZodObject<{
|
|
238
|
+
itemId: z.ZodString;
|
|
239
|
+
fieldName: z.ZodString;
|
|
240
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
|
|
241
|
+
offset: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
|
|
242
|
+
}, z.core.$strip>;
|
|
243
|
+
}, {
|
|
244
|
+
items: SerializedContentItemWithType<Record<string, unknown>>[];
|
|
245
|
+
total: number;
|
|
246
|
+
limit: number;
|
|
247
|
+
offset: number;
|
|
248
|
+
}>;
|
|
249
|
+
}, {
|
|
250
|
+
getAllContentTypes: () => Promise<SerializedContentType[]>;
|
|
251
|
+
getAllContentItems: (contentTypeSlug: string, params?: Parameters<typeof getAllContentItems>[2]) => Promise<{
|
|
252
|
+
items: SerializedContentItemWithType[];
|
|
253
|
+
total: number;
|
|
254
|
+
limit?: number;
|
|
255
|
+
offset?: number;
|
|
256
|
+
}>;
|
|
257
|
+
getContentItemBySlug: (contentTypeSlug: string, slug: string) => Promise<SerializedContentItemWithType<Record<string, unknown>> | null>;
|
|
258
|
+
getContentItemById: (id: string) => Promise<SerializedContentItemWithType<Record<string, unknown>> | null>;
|
|
259
|
+
prefetchForRoute: CMSPrefetchForRoute;
|
|
260
|
+
}>;
|
|
261
|
+
type CMSApiRouter = ReturnType<ReturnType<typeof cmsBackendPlugin>["routes"]>;
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Internal query key constants for the CMS plugin.
|
|
265
|
+
* Shared between query-keys.ts (HTTP path) and prefetchForRoute (DB path)
|
|
266
|
+
* to prevent key drift between SSR loaders and SSG prefetching.
|
|
267
|
+
*/
|
|
268
|
+
interface ContentListDiscriminator {
|
|
269
|
+
typeSlug: string;
|
|
270
|
+
limit: number;
|
|
271
|
+
offset: number;
|
|
272
|
+
}
|
|
273
|
+
/** Full query key builders — use these with queryClient.setQueryData() */
|
|
274
|
+
declare const CMS_QUERY_KEYS: {
|
|
275
|
+
/**
|
|
276
|
+
* Key for the cmsTypes.list() query.
|
|
277
|
+
* Full key: ["cmsTypes", "list", "list"]
|
|
278
|
+
*/
|
|
279
|
+
typesList: () => readonly ["cmsTypes", "list", "list"];
|
|
280
|
+
/**
|
|
281
|
+
* Key for the cmsContent.list({ typeSlug, limit, offset }) query.
|
|
282
|
+
* Full key: ["cmsContent", "list", { typeSlug, limit, offset }]
|
|
283
|
+
*/
|
|
284
|
+
contentList: (params: {
|
|
285
|
+
typeSlug: string;
|
|
286
|
+
limit?: number;
|
|
287
|
+
offset?: number;
|
|
288
|
+
}) => readonly ["cmsContent", "list", ContentListDiscriminator];
|
|
289
|
+
/**
|
|
290
|
+
* Key for the cmsContent.detail(typeSlug, id) query.
|
|
291
|
+
* Full key: ["cmsContent", "detail", typeSlug, id]
|
|
292
|
+
*/
|
|
293
|
+
contentDetail: (typeSlug: string, id: string) => readonly ["cmsContent", "detail", string, string];
|
|
294
|
+
};
|
|
295
|
+
|
|
296
|
+
export { cmsBackendPlugin as c, getAllContentItems as d, getContentItemBySlug as e, getContentItemById as f, getAllContentTypes as g, serializeContentItem as h, serializeContentItemWithType as i, CMS_QUERY_KEYS as j, serializeContentType as s };
|
|
297
|
+
export type { CMSApiRouter as C, ContentListDiscriminator as a, CMSRouteKey as b };
|