@btst/stack 3.0.1 → 3.1.0-rc.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.
Files changed (58) hide show
  1. package/README.md +2 -2
  2. package/dist/context/index.d.cts +3 -1
  3. package/dist/context/index.d.mts +3 -1
  4. package/dist/context/index.d.ts +3 -1
  5. package/dist/packages/stack/src/context/auth.cjs +20 -14
  6. package/dist/packages/stack/src/context/auth.mjs +20 -14
  7. package/dist/packages/stack/src/context/provider.cjs +42 -22
  8. package/dist/packages/stack/src/context/provider.mjs +43 -23
  9. package/dist/packages/stack/src/plugins/blog/client/components/pages/home-page.cjs +32 -28
  10. package/dist/packages/stack/src/plugins/blog/client/components/pages/home-page.mjs +32 -29
  11. package/dist/packages/stack/src/plugins/blog/client/components/pages/post-page.cjs +53 -47
  12. package/dist/packages/stack/src/plugins/blog/client/components/pages/post-page.mjs +53 -48
  13. package/dist/packages/stack/src/plugins/blog/client/components/pages/tag-page.cjs +30 -24
  14. package/dist/packages/stack/src/plugins/blog/client/components/pages/tag-page.mjs +30 -25
  15. package/dist/plugins/blog/client/components/index.d.cts +6 -10
  16. package/dist/plugins/blog/client/components/index.d.mts +6 -10
  17. package/dist/plugins/blog/client/components/index.d.ts +6 -10
  18. package/dist/plugins/blog/client/pages/post.cjs +9 -0
  19. package/dist/plugins/blog/client/pages/post.d.cts +8 -0
  20. package/dist/plugins/blog/client/pages/post.d.mts +8 -0
  21. package/dist/plugins/blog/client/pages/post.d.ts +8 -0
  22. package/dist/plugins/blog/client/pages/post.mjs +7 -0
  23. package/dist/plugins/blog/client/pages/posts.cjs +9 -0
  24. package/dist/plugins/blog/client/pages/posts.d.cts +8 -0
  25. package/dist/plugins/blog/client/pages/posts.d.mts +8 -0
  26. package/dist/plugins/blog/client/pages/posts.d.ts +8 -0
  27. package/dist/plugins/blog/client/pages/posts.mjs +7 -0
  28. package/dist/plugins/blog/client/pages/tag.cjs +9 -0
  29. package/dist/plugins/blog/client/pages/tag.d.cts +8 -0
  30. package/dist/plugins/blog/client/pages/tag.d.mts +8 -0
  31. package/dist/plugins/blog/client/pages/tag.d.ts +8 -0
  32. package/dist/plugins/blog/client/pages/tag.mjs +7 -0
  33. package/dist/plugins/form-builder/api/index.d.cts +1 -1
  34. package/dist/plugins/form-builder/api/index.d.mts +1 -1
  35. package/dist/plugins/form-builder/api/index.d.ts +1 -1
  36. package/dist/plugins/form-builder/client/hooks/index.d.cts +1 -1
  37. package/dist/plugins/form-builder/client/hooks/index.d.mts +1 -1
  38. package/dist/plugins/form-builder/client/hooks/index.d.ts +1 -1
  39. package/dist/plugins/form-builder/query-keys.d.cts +1 -1
  40. package/dist/plugins/form-builder/query-keys.d.mts +1 -1
  41. package/dist/plugins/form-builder/query-keys.d.ts +1 -1
  42. package/package.json +41 -2
  43. package/src/__tests__/generated-static-identity.test.tsx +128 -0
  44. package/src/__tests__/provider-hydration.test.tsx +164 -0
  45. package/src/context/auth.tsx +21 -14
  46. package/src/context/provider.tsx +51 -28
  47. package/src/plugins/blog/__tests__/page-load-error.test.tsx +53 -0
  48. package/src/plugins/blog/__tests__/page-loading.test.tsx +106 -0
  49. package/src/plugins/blog/client/components/pages/home-page.tsx +39 -35
  50. package/src/plugins/blog/client/components/pages/post-page.tsx +62 -54
  51. package/src/plugins/blog/client/components/pages/tag-page.tsx +35 -29
  52. package/src/plugins/blog/client/pages/post.tsx +7 -0
  53. package/src/plugins/blog/client/pages/posts.tsx +7 -0
  54. package/src/plugins/blog/client/pages/tag.tsx +7 -0
  55. package/src/plugins/kanban/__tests__/authorization.test.ts +54 -0
  56. package/dist/shared/{stack.CGmh-Lpe.d.ts → stack.BuxUQqL8.d.ts} +12 -12
  57. package/dist/shared/{stack.zch70Loj.d.cts → stack.CX83YNuS.d.cts} +12 -12
  58. package/dist/shared/{stack.Doy2_wgl.d.mts → stack.Egr3RWhA.d.mts} +12 -12
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { lazy } from "react";
3
+ import { lazy, type ComponentType } from "react";
4
4
  import { usePluginOverrides } from "@btst/stack/context";
5
5
  import type { BlogPluginOverrides } from "../../overrides";
6
6
  import { BLOG_PLUGIN_ID } from "../../constants";
@@ -10,39 +10,43 @@ import { PostsLoading } from "../loading";
10
10
  import { NotFoundPage } from "./404-page";
11
11
  import { blogPermissions } from "../../../permissions";
12
12
 
13
- // Lazy load the internal component with actual page content
14
- const HomePage = lazy(() =>
15
- import("./home-page.internal").then((m) => ({ default: m.HomePage })),
16
- );
13
+ // Share the guarded page between the lazy registry and native route entry.
14
+ export function createHomePage(
15
+ HomePage: ComponentType<{ published: boolean }>,
16
+ ) {
17
+ // Exported wrapped component with error and loading boundaries
18
+ function HomePageComponent({ published = true }: { published?: boolean }) {
19
+ const { onRouteError } =
20
+ usePluginOverrides<BlogPluginOverrides>(BLOG_PLUGIN_ID);
21
+ return (
22
+ <ComposedRoute
23
+ path={published ? "/blog" : "/blog/drafts"}
24
+ PageComponent={HomePage}
25
+ ErrorComponent={DefaultError}
26
+ LoadingComponent={PostsLoading}
27
+ NotFoundComponent={NotFoundPage}
28
+ permission={blogPermissions.post.read({
29
+ scope: published ? "published" : "drafts",
30
+ })}
31
+ props={{ published }}
32
+ onError={(error) => {
33
+ if (onRouteError) {
34
+ onRouteError("posts", error, {
35
+ path: published ? "/blog" : "/blog/drafts",
36
+ isSSR: typeof window === "undefined",
37
+ published,
38
+ });
39
+ }
40
+ }}
41
+ />
42
+ );
43
+ }
17
44
 
18
- // Exported wrapped component with error and loading boundaries
19
- export function HomePageComponent({
20
- published = true,
21
- }: {
22
- published?: boolean;
23
- }) {
24
- const { onRouteError } =
25
- usePluginOverrides<BlogPluginOverrides>(BLOG_PLUGIN_ID);
26
- return (
27
- <ComposedRoute
28
- path={published ? "/blog" : "/blog/drafts"}
29
- PageComponent={HomePage}
30
- ErrorComponent={DefaultError}
31
- LoadingComponent={PostsLoading}
32
- NotFoundComponent={NotFoundPage}
33
- permission={blogPermissions.post.read({
34
- scope: published ? "published" : "drafts",
35
- })}
36
- props={{ published }}
37
- onError={(error) => {
38
- if (onRouteError) {
39
- onRouteError("posts", error, {
40
- path: published ? "/blog" : "/blog/drafts",
41
- isSSR: typeof window === "undefined",
42
- published,
43
- });
44
- }
45
- }}
46
- />
47
- );
45
+ return HomePageComponent;
48
46
  }
47
+
48
+ export const HomePageComponent = createHomePage(
49
+ lazy(() =>
50
+ import("./home-page.internal").then((m) => ({ default: m.HomePage })),
51
+ ),
52
+ );
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { lazy } from "react";
3
+ import { lazy, type ComponentType } from "react";
4
4
  import { usePluginOverrides } from "@btst/stack/context";
5
5
  import type { BlogPluginOverrides } from "../../overrides";
6
6
  import { BLOG_PLUGIN_ID } from "../../constants";
@@ -14,59 +14,67 @@ import { NotFoundPage } from "./404-page";
14
14
  import { useSuspensePost } from "../../hooks/blog-hooks";
15
15
  import { blogPermissions } from "../../../permissions";
16
16
 
17
- // Lazy load the internal component with actual page content
18
- const PostPageContent = lazy(() =>
19
- import("./post-page.internal").then((m) => ({ default: m.PostPage })),
20
- );
17
+ // Share the guarded page between the lazy registry and native route entry.
18
+ export function createPostPage(
19
+ PostPageContent: ComponentType<{ slug: string }>,
20
+ ) {
21
+ function AuthorizedPostPage({ slug }: { slug: string }) {
22
+ const { post } = useSuspensePost(slug);
23
+ const permission = post
24
+ ? blogPermissions.post.read({
25
+ scope: "post",
26
+ slug: post.slug,
27
+ exists: true,
28
+ id: post.id,
29
+ ...(post.authorId ? { authorId: post.authorId } : {}),
30
+ published: post.published,
31
+ })
32
+ : blogPermissions.post.read({
33
+ scope: "post",
34
+ slug,
35
+ exists: false,
36
+ published: false,
37
+ });
38
+ return (
39
+ <PermissionRouteAccess
40
+ permission={permission}
41
+ LoadingComponent={PostLoading}
42
+ >
43
+ <PostPageContent slug={slug} />
44
+ </PermissionRouteAccess>
45
+ );
46
+ }
21
47
 
22
- function AuthorizedPostPage({ slug }: { slug: string }) {
23
- const { post } = useSuspensePost(slug);
24
- const permission = post
25
- ? blogPermissions.post.read({
26
- scope: "post",
27
- slug: post.slug,
28
- exists: true,
29
- id: post.id,
30
- ...(post.authorId ? { authorId: post.authorId } : {}),
31
- published: post.published,
32
- })
33
- : blogPermissions.post.read({
34
- scope: "post",
35
- slug,
36
- exists: false,
37
- published: false,
38
- });
39
- return (
40
- <PermissionRouteAccess
41
- permission={permission}
42
- LoadingComponent={PostLoading}
43
- >
44
- <PostPageContent slug={slug} />
45
- </PermissionRouteAccess>
46
- );
47
- }
48
+ // Exported wrapped component with error and loading boundaries
49
+ function PostPageComponent({ slug }: { slug: string }) {
50
+ const { onRouteError } =
51
+ usePluginOverrides<BlogPluginOverrides>(BLOG_PLUGIN_ID);
52
+ return (
53
+ <ComposedRoute
54
+ path={`/blog/${slug}`}
55
+ PageComponent={AuthorizedPostPage}
56
+ ErrorComponent={DefaultError}
57
+ LoadingComponent={PostLoading}
58
+ NotFoundComponent={NotFoundPage}
59
+ props={{ slug }}
60
+ onError={(error) => {
61
+ if (onRouteError) {
62
+ onRouteError("post", error, {
63
+ path: `/blog/${slug}`,
64
+ isSSR: typeof window === "undefined",
65
+ slug,
66
+ });
67
+ }
68
+ }}
69
+ />
70
+ );
71
+ }
48
72
 
49
- // Exported wrapped component with error and loading boundaries
50
- export function PostPageComponent({ slug }: { slug: string }) {
51
- const { onRouteError } =
52
- usePluginOverrides<BlogPluginOverrides>(BLOG_PLUGIN_ID);
53
- return (
54
- <ComposedRoute
55
- path={`/blog/${slug}`}
56
- PageComponent={AuthorizedPostPage}
57
- ErrorComponent={DefaultError}
58
- LoadingComponent={PostLoading}
59
- NotFoundComponent={NotFoundPage}
60
- props={{ slug }}
61
- onError={(error) => {
62
- if (onRouteError) {
63
- onRouteError("post", error, {
64
- path: `/blog/${slug}`,
65
- isSSR: typeof window === "undefined",
66
- slug,
67
- });
68
- }
69
- }}
70
- />
71
- );
73
+ return PostPageComponent;
72
74
  }
75
+
76
+ export const PostPageComponent = createPostPage(
77
+ lazy(() =>
78
+ import("./post-page.internal").then((m) => ({ default: m.PostPage })),
79
+ ),
80
+ );
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { lazy } from "react";
3
+ import { lazy, type ComponentType } from "react";
4
4
  import { usePluginOverrides } from "@btst/stack/context";
5
5
  import type { BlogPluginOverrides } from "../../overrides";
6
6
  import { BLOG_PLUGIN_ID } from "../../constants";
@@ -10,33 +10,39 @@ import { PostsLoading } from "../loading";
10
10
  import { NotFoundPage } from "./404-page";
11
11
  import { blogPermissions } from "../../../permissions";
12
12
 
13
- // Lazy load the internal component with actual page content
14
- const TagPage = lazy(() =>
15
- import("./tag-page.internal").then((m) => ({ default: m.TagPage })),
16
- );
13
+ // Share the guarded page between the lazy registry and native route entry.
14
+ export function createTagPage(TagPage: ComponentType<{ tagSlug: string }>) {
15
+ // Exported wrapped component with error and loading boundaries
16
+ function TagPageComponent({ tagSlug }: { tagSlug: string }) {
17
+ const { onRouteError } =
18
+ usePluginOverrides<BlogPluginOverrides>(BLOG_PLUGIN_ID);
19
+ return (
20
+ <ComposedRoute
21
+ path={`/blog/tag/${tagSlug}`}
22
+ PageComponent={TagPage}
23
+ ErrorComponent={DefaultError}
24
+ LoadingComponent={PostsLoading}
25
+ NotFoundComponent={NotFoundPage}
26
+ permission={blogPermissions.tag.read()}
27
+ props={{ tagSlug }}
28
+ onError={(error) => {
29
+ if (onRouteError) {
30
+ onRouteError("tag", error, {
31
+ path: `/blog/tag/${tagSlug}`,
32
+ isSSR: typeof window === "undefined",
33
+ tagSlug,
34
+ });
35
+ }
36
+ }}
37
+ />
38
+ );
39
+ }
17
40
 
18
- // Exported wrapped component with error and loading boundaries
19
- export function TagPageComponent({ tagSlug }: { tagSlug: string }) {
20
- const { onRouteError } =
21
- usePluginOverrides<BlogPluginOverrides>(BLOG_PLUGIN_ID);
22
- return (
23
- <ComposedRoute
24
- path={`/blog/tag/${tagSlug}`}
25
- PageComponent={TagPage}
26
- ErrorComponent={DefaultError}
27
- LoadingComponent={PostsLoading}
28
- NotFoundComponent={NotFoundPage}
29
- permission={blogPermissions.tag.read()}
30
- props={{ tagSlug }}
31
- onError={(error) => {
32
- if (onRouteError) {
33
- onRouteError("tag", error, {
34
- path: `/blog/tag/${tagSlug}`,
35
- isSSR: typeof window === "undefined",
36
- tagSlug,
37
- });
38
- }
39
- }}
40
- />
41
- );
41
+ return TagPageComponent;
42
42
  }
43
+
44
+ export const TagPageComponent = createTagPage(
45
+ lazy(() =>
46
+ import("./tag-page.internal").then((m) => ({ default: m.TagPage })),
47
+ ),
48
+ );
@@ -0,0 +1,7 @@
1
+ "use client";
2
+
3
+ import { createPostPage } from "../components/pages/post-page";
4
+ import { PostPage as Content } from "../components/pages/post-page.internal";
5
+
6
+ /** Complete guarded page for a native framework route; contains no lazy page import. */
7
+ export const PostPage = createPostPage(Content);
@@ -0,0 +1,7 @@
1
+ "use client";
2
+
3
+ import { createHomePage } from "../components/pages/home-page";
4
+ import { HomePage as Content } from "../components/pages/home-page.internal";
5
+
6
+ /** Complete guarded page for a native framework route; contains no lazy page import. */
7
+ export const PostListPage = createHomePage(Content);
@@ -0,0 +1,7 @@
1
+ "use client";
2
+
3
+ import { createTagPage } from "../components/pages/tag-page";
4
+ import { TagPage as Content } from "../components/pages/tag-page.internal";
5
+
6
+ /** Complete guarded page for a native framework route; contains no lazy page import. */
7
+ export const TagPage = createTagPage(Content);
@@ -1,3 +1,5 @@
1
+ import { pathToFileURL } from "node:url";
2
+ import { resolve } from "node:path";
1
3
  import { createMemoryAdapter } from "@btst/adapter-memory";
2
4
  import { type DatabaseDefinition, type DBAdapter, defineDb } from "@btst/db";
3
5
  import { QueryClient } from "@tanstack/react-query";
@@ -1380,3 +1382,55 @@ describe("Kanban operation-first authorization", () => {
1380
1382
  });
1381
1383
  });
1382
1384
  });
1385
+
1386
+ describe("Kanban fixture cleanup", () => {
1387
+ it("deleting the owned board also removes columns and tasks from the memory adapter", async () => {
1388
+ let adapter!: DBAdapter;
1389
+ const backend = makeBackend({
1390
+ adapter: (db) => (adapter = rawMemoryAdapter(db)),
1391
+ });
1392
+ const owned = await backend.trusted.kanban.createBoard({
1393
+ name: "Fixture",
1394
+ slug: "fixture-cleanup",
1395
+ });
1396
+ const unrelated = await backend.trusted.kanban.createBoard({
1397
+ name: "Unrelated",
1398
+ slug: "unrelated-cleanup",
1399
+ });
1400
+ const column = await backend.trusted.kanban.createColumn({
1401
+ boardId: owned.id,
1402
+ title: "Fixture",
1403
+ });
1404
+ await backend.trusted.kanban.createTask({
1405
+ columnId: column.id,
1406
+ title: "Fixture",
1407
+ });
1408
+ const { cleanupBoard } = await import(
1409
+ pathToFileURL(
1410
+ resolve(process.cwd(), "../../e2e/product-proof/fixture-cleanup.mjs"),
1411
+ ).href
1412
+ );
1413
+ await cleanupBoard(async (method: string, path: string) => {
1414
+ const response = await backend.handler(
1415
+ request(path.replace("/api/data", ""), { method }),
1416
+ );
1417
+ expect(response.ok).toBe(true);
1418
+ return method === "GET" ? response.json() : undefined;
1419
+ }, owned.id);
1420
+ expect(
1421
+ await adapter.findMany({
1422
+ model: "kanbanColumn",
1423
+ where: [{ field: "boardId", value: owned.id }],
1424
+ }),
1425
+ ).toEqual([]);
1426
+ expect(
1427
+ await adapter.findMany({
1428
+ model: "kanbanTask",
1429
+ where: [{ field: "columnId", value: column.id }],
1430
+ }),
1431
+ ).toEqual([]);
1432
+ expect(
1433
+ await backend.trusted.kanban.getBoard({ id: unrelated.id }),
1434
+ ).toMatchObject({ id: unrelated.id });
1435
+ });
1436
+ });
@@ -127,11 +127,11 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
127
127
  readonly status: Form["status"];
128
128
  readonly createdAt: string;
129
129
  readonly updatedAt: string;
130
- readonly id: string;
131
- readonly name: string;
132
130
  readonly schema: string;
131
+ readonly id: string;
133
132
  readonly description?: string | undefined;
134
133
  readonly slug: string;
134
+ readonly name: string;
135
135
  readonly successMessage?: string | undefined;
136
136
  readonly redirectUrl?: string | undefined;
137
137
  readonly createdBy?: string | undefined;
@@ -151,11 +151,11 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
151
151
  readonly status: Form["status"];
152
152
  readonly createdAt: string;
153
153
  readonly updatedAt: string;
154
- readonly id: string;
155
- readonly name: string;
156
154
  readonly schema: string;
155
+ readonly id: string;
157
156
  readonly description?: string | undefined;
158
157
  readonly slug: string;
158
+ readonly name: string;
159
159
  readonly successMessage?: string | undefined;
160
160
  readonly redirectUrl?: string | undefined;
161
161
  readonly createdBy?: string | undefined;
@@ -171,11 +171,11 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
171
171
  readonly status: Form["status"];
172
172
  readonly createdAt: string;
173
173
  readonly updatedAt: string;
174
- readonly id: string;
175
- readonly name: string;
176
174
  readonly schema: string;
175
+ readonly id: string;
177
176
  readonly description?: string | undefined;
178
177
  readonly slug: string;
178
+ readonly name: string;
179
179
  readonly successMessage?: string | undefined;
180
180
  readonly redirectUrl?: string | undefined;
181
181
  readonly createdBy?: string | undefined;
@@ -191,11 +191,11 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
191
191
  readonly status: Form["status"];
192
192
  readonly createdAt: string;
193
193
  readonly updatedAt: string;
194
- readonly id: string;
195
- readonly name: string;
196
194
  readonly schema: string;
195
+ readonly id: string;
197
196
  readonly description?: string | undefined;
198
197
  readonly slug: string;
198
+ readonly name: string;
199
199
  readonly successMessage?: string | undefined;
200
200
  readonly redirectUrl?: string | undefined;
201
201
  readonly createdBy?: string | undefined;
@@ -225,11 +225,11 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
225
225
  readonly status: Form["status"];
226
226
  readonly createdAt: string;
227
227
  readonly updatedAt: string;
228
- readonly id: string;
229
- readonly name: string;
230
228
  readonly schema: string;
229
+ readonly id: string;
231
230
  readonly description?: string | undefined;
232
231
  readonly slug: string;
232
+ readonly name: string;
233
233
  readonly successMessage?: string | undefined;
234
234
  readonly redirectUrl?: string | undefined;
235
235
  readonly createdBy?: string | undefined;
@@ -259,11 +259,11 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
259
259
  readonly status: Form["status"];
260
260
  readonly createdAt: string;
261
261
  readonly updatedAt: string;
262
- readonly id: string;
263
- readonly name: string;
264
262
  readonly schema: string;
263
+ readonly id: string;
265
264
  readonly description?: string | undefined;
266
265
  readonly slug: string;
266
+ readonly name: string;
267
267
  readonly successMessage?: string | undefined;
268
268
  readonly redirectUrl?: string | undefined;
269
269
  readonly createdBy?: string | undefined;
@@ -127,11 +127,11 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
127
127
  readonly status: Form["status"];
128
128
  readonly createdAt: string;
129
129
  readonly updatedAt: string;
130
- readonly id: string;
131
- readonly name: string;
132
130
  readonly schema: string;
131
+ readonly id: string;
133
132
  readonly description?: string | undefined;
134
133
  readonly slug: string;
134
+ readonly name: string;
135
135
  readonly successMessage?: string | undefined;
136
136
  readonly redirectUrl?: string | undefined;
137
137
  readonly createdBy?: string | undefined;
@@ -151,11 +151,11 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
151
151
  readonly status: Form["status"];
152
152
  readonly createdAt: string;
153
153
  readonly updatedAt: string;
154
- readonly id: string;
155
- readonly name: string;
156
154
  readonly schema: string;
155
+ readonly id: string;
157
156
  readonly description?: string | undefined;
158
157
  readonly slug: string;
158
+ readonly name: string;
159
159
  readonly successMessage?: string | undefined;
160
160
  readonly redirectUrl?: string | undefined;
161
161
  readonly createdBy?: string | undefined;
@@ -171,11 +171,11 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
171
171
  readonly status: Form["status"];
172
172
  readonly createdAt: string;
173
173
  readonly updatedAt: string;
174
- readonly id: string;
175
- readonly name: string;
176
174
  readonly schema: string;
175
+ readonly id: string;
177
176
  readonly description?: string | undefined;
178
177
  readonly slug: string;
178
+ readonly name: string;
179
179
  readonly successMessage?: string | undefined;
180
180
  readonly redirectUrl?: string | undefined;
181
181
  readonly createdBy?: string | undefined;
@@ -191,11 +191,11 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
191
191
  readonly status: Form["status"];
192
192
  readonly createdAt: string;
193
193
  readonly updatedAt: string;
194
- readonly id: string;
195
- readonly name: string;
196
194
  readonly schema: string;
195
+ readonly id: string;
197
196
  readonly description?: string | undefined;
198
197
  readonly slug: string;
198
+ readonly name: string;
199
199
  readonly successMessage?: string | undefined;
200
200
  readonly redirectUrl?: string | undefined;
201
201
  readonly createdBy?: string | undefined;
@@ -225,11 +225,11 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
225
225
  readonly status: Form["status"];
226
226
  readonly createdAt: string;
227
227
  readonly updatedAt: string;
228
- readonly id: string;
229
- readonly name: string;
230
228
  readonly schema: string;
229
+ readonly id: string;
231
230
  readonly description?: string | undefined;
232
231
  readonly slug: string;
232
+ readonly name: string;
233
233
  readonly successMessage?: string | undefined;
234
234
  readonly redirectUrl?: string | undefined;
235
235
  readonly createdBy?: string | undefined;
@@ -259,11 +259,11 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
259
259
  readonly status: Form["status"];
260
260
  readonly createdAt: string;
261
261
  readonly updatedAt: string;
262
- readonly id: string;
263
- readonly name: string;
264
262
  readonly schema: string;
263
+ readonly id: string;
265
264
  readonly description?: string | undefined;
266
265
  readonly slug: string;
266
+ readonly name: string;
267
267
  readonly successMessage?: string | undefined;
268
268
  readonly redirectUrl?: string | undefined;
269
269
  readonly createdBy?: string | undefined;
@@ -127,11 +127,11 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
127
127
  readonly status: Form["status"];
128
128
  readonly createdAt: string;
129
129
  readonly updatedAt: string;
130
- readonly id: string;
131
- readonly name: string;
132
130
  readonly schema: string;
131
+ readonly id: string;
133
132
  readonly description?: string | undefined;
134
133
  readonly slug: string;
134
+ readonly name: string;
135
135
  readonly successMessage?: string | undefined;
136
136
  readonly redirectUrl?: string | undefined;
137
137
  readonly createdBy?: string | undefined;
@@ -151,11 +151,11 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
151
151
  readonly status: Form["status"];
152
152
  readonly createdAt: string;
153
153
  readonly updatedAt: string;
154
- readonly id: string;
155
- readonly name: string;
156
154
  readonly schema: string;
155
+ readonly id: string;
157
156
  readonly description?: string | undefined;
158
157
  readonly slug: string;
158
+ readonly name: string;
159
159
  readonly successMessage?: string | undefined;
160
160
  readonly redirectUrl?: string | undefined;
161
161
  readonly createdBy?: string | undefined;
@@ -171,11 +171,11 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
171
171
  readonly status: Form["status"];
172
172
  readonly createdAt: string;
173
173
  readonly updatedAt: string;
174
- readonly id: string;
175
- readonly name: string;
176
174
  readonly schema: string;
175
+ readonly id: string;
177
176
  readonly description?: string | undefined;
178
177
  readonly slug: string;
178
+ readonly name: string;
179
179
  readonly successMessage?: string | undefined;
180
180
  readonly redirectUrl?: string | undefined;
181
181
  readonly createdBy?: string | undefined;
@@ -191,11 +191,11 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
191
191
  readonly status: Form["status"];
192
192
  readonly createdAt: string;
193
193
  readonly updatedAt: string;
194
- readonly id: string;
195
- readonly name: string;
196
194
  readonly schema: string;
195
+ readonly id: string;
197
196
  readonly description?: string | undefined;
198
197
  readonly slug: string;
198
+ readonly name: string;
199
199
  readonly successMessage?: string | undefined;
200
200
  readonly redirectUrl?: string | undefined;
201
201
  readonly createdBy?: string | undefined;
@@ -225,11 +225,11 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
225
225
  readonly status: Form["status"];
226
226
  readonly createdAt: string;
227
227
  readonly updatedAt: string;
228
- readonly id: string;
229
- readonly name: string;
230
228
  readonly schema: string;
229
+ readonly id: string;
231
230
  readonly description?: string | undefined;
232
231
  readonly slug: string;
232
+ readonly name: string;
233
233
  readonly successMessage?: string | undefined;
234
234
  readonly redirectUrl?: string | undefined;
235
235
  readonly createdBy?: string | undefined;
@@ -259,11 +259,11 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
259
259
  readonly status: Form["status"];
260
260
  readonly createdAt: string;
261
261
  readonly updatedAt: string;
262
- readonly id: string;
263
- readonly name: string;
264
262
  readonly schema: string;
263
+ readonly id: string;
265
264
  readonly description?: string | undefined;
266
265
  readonly slug: string;
266
+ readonly name: string;
267
267
  readonly successMessage?: string | undefined;
268
268
  readonly redirectUrl?: string | undefined;
269
269
  readonly createdBy?: string | undefined;