@btst/stack 3.0.1 → 3.0.2

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 CHANGED
@@ -52,13 +52,13 @@ Render the generated `<Toaster />` in your root layout and start from a clean co
52
52
  Run the released generator from the application root:
53
53
 
54
54
  ```bash
55
- pnpm dlx @btst/codegen@0.2.0 init \
55
+ pnpm dlx @btst/codegen@0.2.1 init \
56
56
  --framework nextjs \
57
57
  --adapter memory \
58
58
  --plugins blog
59
59
  ```
60
60
 
61
- The generator shows detected-file and conflict prompts before it writes. It installs `@btst/stack@3.0.0`, registers Blog on the backend and client, mounts the API and page routes, adds the plugin CSS, and wires the shared provider.
61
+ The generator shows detected-file and conflict prompts before it writes. It installs `@btst/stack@3.0.2`, `next-themes@0.4.6`, registers Blog on the backend and client, mounts the API and page routes, adds the plugin CSS, and wires the shared provider.
62
62
 
63
63
  Set the trusted local origins in `.env.local`:
64
64
 
@@ -1,4 +1,4 @@
1
- export { k as FORM_QUERY_KEYS, a as FormBuilderApiRouter, c as FormBuilderOperationError, e as FormBuilderOperations, b as FormBuilderRouteKey, g as FormListOperationResult, h as SubmissionDetailOperationResult, i as SubmissionListOperationResult, j as SubmitOperationResult, d as createFormBuilderOperations, f as formBuilderBackendPlugin } from '../../../shared/stack.zch70Loj.cjs';
1
+ export { k as FORM_QUERY_KEYS, a as FormBuilderApiRouter, c as FormBuilderOperationError, e as FormBuilderOperations, b as FormBuilderRouteKey, g as FormListOperationResult, h as SubmissionDetailOperationResult, i as SubmissionListOperationResult, j as SubmitOperationResult, d as createFormBuilderOperations, f as formBuilderBackendPlugin } from '../../../shared/stack.AWSs6TXN.cjs';
2
2
  export { formBuilderPermissions } from '../permissions.cjs';
3
3
  import { S as SerializedForm, d as SerializedFormSubmissionWithData, F as Form, f as FormSubmission, a as SerializedFormSubmission, c as SerializedFormSubmissionSummary, g as FormSubmissionWithForm } from '../../../shared/stack.v2O65JqF.cjs';
4
4
  export { h as FormBuilderBackendConfig, i as FormBuilderBackendHooks, j as FormBuilderHookContext, k as FormBuilderOperationHookContext, l as FormCreateOperationContext, m as FormDeleteOperationContext, o as FormGetForUpdateOperationContext, n as FormGetOperationContext, p as FormListOperationContext, q as FormUpdateOperationContext, r as SubmissionCreateOperationContext, s as SubmissionDeleteOperationContext, t as SubmissionGetOperationContext, v as SubmissionHookContext, b as SubmissionListFormContext, u as SubmissionListOperationContext } from '../../../shared/stack.v2O65JqF.cjs';
@@ -1,4 +1,4 @@
1
- export { k as FORM_QUERY_KEYS, a as FormBuilderApiRouter, c as FormBuilderOperationError, e as FormBuilderOperations, b as FormBuilderRouteKey, g as FormListOperationResult, h as SubmissionDetailOperationResult, i as SubmissionListOperationResult, j as SubmitOperationResult, d as createFormBuilderOperations, f as formBuilderBackendPlugin } from '../../../shared/stack.Doy2_wgl.mjs';
1
+ export { k as FORM_QUERY_KEYS, a as FormBuilderApiRouter, c as FormBuilderOperationError, e as FormBuilderOperations, b as FormBuilderRouteKey, g as FormListOperationResult, h as SubmissionDetailOperationResult, i as SubmissionListOperationResult, j as SubmitOperationResult, d as createFormBuilderOperations, f as formBuilderBackendPlugin } from '../../../shared/stack.HB5uGLpE.mjs';
2
2
  export { formBuilderPermissions } from '../permissions.mjs';
3
3
  import { S as SerializedForm, d as SerializedFormSubmissionWithData, F as Form, f as FormSubmission, a as SerializedFormSubmission, c as SerializedFormSubmissionSummary, g as FormSubmissionWithForm } from '../../../shared/stack.OYT8WU4n.mjs';
4
4
  export { h as FormBuilderBackendConfig, i as FormBuilderBackendHooks, j as FormBuilderHookContext, k as FormBuilderOperationHookContext, l as FormCreateOperationContext, m as FormDeleteOperationContext, o as FormGetForUpdateOperationContext, n as FormGetOperationContext, p as FormListOperationContext, q as FormUpdateOperationContext, r as SubmissionCreateOperationContext, s as SubmissionDeleteOperationContext, t as SubmissionGetOperationContext, v as SubmissionHookContext, b as SubmissionListFormContext, u as SubmissionListOperationContext } from '../../../shared/stack.OYT8WU4n.mjs';
@@ -1,4 +1,4 @@
1
- export { k as FORM_QUERY_KEYS, a as FormBuilderApiRouter, c as FormBuilderOperationError, e as FormBuilderOperations, b as FormBuilderRouteKey, g as FormListOperationResult, h as SubmissionDetailOperationResult, i as SubmissionListOperationResult, j as SubmitOperationResult, d as createFormBuilderOperations, f as formBuilderBackendPlugin } from '../../../shared/stack.CGmh-Lpe.js';
1
+ export { k as FORM_QUERY_KEYS, a as FormBuilderApiRouter, c as FormBuilderOperationError, e as FormBuilderOperations, b as FormBuilderRouteKey, g as FormListOperationResult, h as SubmissionDetailOperationResult, i as SubmissionListOperationResult, j as SubmitOperationResult, d as createFormBuilderOperations, f as formBuilderBackendPlugin } from '../../../shared/stack.D20bOqfr.js';
2
2
  export { formBuilderPermissions } from '../permissions.js';
3
3
  import { S as SerializedForm, d as SerializedFormSubmissionWithData, F as Form, f as FormSubmission, a as SerializedFormSubmission, c as SerializedFormSubmissionSummary, g as FormSubmissionWithForm } from '../../../shared/stack.C3bU9w6L.js';
4
4
  export { h as FormBuilderBackendConfig, i as FormBuilderBackendHooks, j as FormBuilderHookContext, k as FormBuilderOperationHookContext, l as FormCreateOperationContext, m as FormDeleteOperationContext, o as FormGetForUpdateOperationContext, n as FormGetOperationContext, p as FormListOperationContext, q as FormUpdateOperationContext, r as SubmissionCreateOperationContext, s as SubmissionDeleteOperationContext, t as SubmissionGetOperationContext, v as SubmissionHookContext, b as SubmissionListFormContext, u as SubmissionListOperationContext } from '../../../shared/stack.C3bU9w6L.js';
@@ -8,7 +8,7 @@ import '@btst/stack/context';
8
8
  import '../../permissions.cjs';
9
9
  import 'zod';
10
10
  import '@btst/stack/plugins/client';
11
- import '../../../../shared/stack.zch70Loj.cjs';
11
+ import '../../../../shared/stack.AWSs6TXN.cjs';
12
12
  import '@btst/db';
13
13
  import 'zod/v4/core';
14
14
  import 'better-call';
@@ -8,7 +8,7 @@ import '@btst/stack/context';
8
8
  import '../../permissions.mjs';
9
9
  import 'zod';
10
10
  import '@btst/stack/plugins/client';
11
- import '../../../../shared/stack.Doy2_wgl.mjs';
11
+ import '../../../../shared/stack.HB5uGLpE.mjs';
12
12
  import '@btst/db';
13
13
  import 'zod/v4/core';
14
14
  import 'better-call';
@@ -8,7 +8,7 @@ import '@btst/stack/context';
8
8
  import '../../permissions.js';
9
9
  import 'zod';
10
10
  import '@btst/stack/plugins/client';
11
- import '../../../../shared/stack.CGmh-Lpe.js';
11
+ import '../../../../shared/stack.D20bOqfr.js';
12
12
  import '@btst/db';
13
13
  import 'zod/v4/core';
14
14
  import 'better-call';
@@ -1,6 +1,6 @@
1
1
  import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
2
  import { createApiClient } from '@btst/stack/plugins/client';
3
- import { F as FormsListDiscriminator, S as SubmissionsListDiscriminator, a as FormBuilderApiRouter } from '../../shared/stack.zch70Loj.cjs';
3
+ import { F as FormsListDiscriminator, S as SubmissionsListDiscriminator, a as FormBuilderApiRouter } from '../../shared/stack.AWSs6TXN.cjs';
4
4
  import { P as PaginatedForms, S as SerializedForm, a as SerializedFormSubmission, e as PaginatedFormSubmissions, d as SerializedFormSubmissionWithData } from '../../shared/stack.v2O65JqF.cjs';
5
5
  import { StackIdentity } from '@btst/stack/context';
6
6
  import '@btst/stack/plugins/api';
@@ -1,6 +1,6 @@
1
1
  import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
2
  import { createApiClient } from '@btst/stack/plugins/client';
3
- import { F as FormsListDiscriminator, S as SubmissionsListDiscriminator, a as FormBuilderApiRouter } from '../../shared/stack.Doy2_wgl.mjs';
3
+ import { F as FormsListDiscriminator, S as SubmissionsListDiscriminator, a as FormBuilderApiRouter } from '../../shared/stack.HB5uGLpE.mjs';
4
4
  import { P as PaginatedForms, S as SerializedForm, a as SerializedFormSubmission, e as PaginatedFormSubmissions, d as SerializedFormSubmissionWithData } from '../../shared/stack.OYT8WU4n.mjs';
5
5
  import { StackIdentity } from '@btst/stack/context';
6
6
  import '@btst/stack/plugins/api';
@@ -1,6 +1,6 @@
1
1
  import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
2
  import { createApiClient } from '@btst/stack/plugins/client';
3
- import { F as FormsListDiscriminator, S as SubmissionsListDiscriminator, a as FormBuilderApiRouter } from '../../shared/stack.CGmh-Lpe.js';
3
+ import { F as FormsListDiscriminator, S as SubmissionsListDiscriminator, a as FormBuilderApiRouter } from '../../shared/stack.D20bOqfr.js';
4
4
  import { P as PaginatedForms, S as SerializedForm, a as SerializedFormSubmission, e as PaginatedFormSubmissions, d as SerializedFormSubmissionWithData } from '../../shared/stack.C3bU9w6L.js';
5
5
  import { StackIdentity } from '@btst/stack/context';
6
6
  import '@btst/stack/plugins/api';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@btst/stack",
3
- "version": "3.0.1",
3
+ "version": "3.0.2",
4
4
  "description": "A composable, plugin-based library for building full-stack applications.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,128 @@
1
+ // @vitest-environment jsdom
2
+ import * as React from "react";
3
+ import { pathToFileURL } from "node:url";
4
+ import { resolve } from "node:path";
5
+ import { act } from "react";
6
+ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
7
+ import { renderToString } from "react-dom/server";
8
+ import { hydrateRoot } from "react-dom/client";
9
+ import { expect, it, vi } from "vitest";
10
+ import ts from "typescript";
11
+ import { z } from "zod";
12
+ import { defineAuthorization } from "../authorization";
13
+ import { createClientAuth } from "../authorization/client";
14
+ import { createClientStack } from "../client";
15
+ import { StackProvider, useIdentity } from "../context";
16
+ import { blogPermissions } from "../plugins/blog/permissions";
17
+
18
+ (globalThis as any).IS_REACT_ACT_ENVIRONMENT = true;
19
+
20
+ // Execute the shipped templates. Only framework/application imports are injected;
21
+ // identity state, permission evaluation, SSR, effects and hydration are real.
22
+ function compile(source: string, modules: Record<string, unknown>) {
23
+ const { outputText } = ts.transpileModule(source, {
24
+ compilerOptions: {
25
+ module: ts.ModuleKind.CommonJS,
26
+ jsx: ts.JsxEmit.ReactJSX,
27
+ },
28
+ });
29
+ const exports: Record<string, any> = {};
30
+ new Function("require", "exports", outputText)((name: string) => {
31
+ if (!(name in modules)) throw new Error(`Unexpected import: ${name}`);
32
+ return modules[name];
33
+ }, exports);
34
+ return exports;
35
+ }
36
+
37
+ it("generated static Blog layout serves public HTML and resolves the browser session", async () => {
38
+ const authorization = defineAuthorization({
39
+ identity: z.object({ id: z.string() }),
40
+ permissions: [blogPermissions] as const,
41
+ rules: ({ blog }) => [
42
+ blog.post.read.when(({ facts }) => facts.scope === "published"),
43
+ blog.post.create.when(({ identity }) => identity !== null),
44
+ ],
45
+ });
46
+ const getIdentity = vi.fn(() => ({ id: "browser-user" }));
47
+ const clientAuth = createClientAuth({ authorization, getIdentity });
48
+ const queryClient = new QueryClient();
49
+ const stack = createClientStack({
50
+ api: { baseURL: "https://app.example", basePath: "/api/data" },
51
+ site: { baseURL: "https://app.example", basePath: "/pages" },
52
+ queryClient,
53
+ plugins: {},
54
+ });
55
+ const jsxRuntime = await import("react/jsx-runtime");
56
+ const { buildScaffoldPlan } = await import(
57
+ pathToFileURL(resolve(process.cwd(), "../cli/dist/lib.mjs")).href
58
+ );
59
+ const plan = await buildScaffoldPlan({
60
+ framework: "nextjs",
61
+ adapter: "memory",
62
+ plugins: ["blog"],
63
+ alias: "@/",
64
+ cssFile: "app/globals.css",
65
+ });
66
+ const generated = (path: string) =>
67
+ plan.files.find((file: { path: string }) => file.path === path)
68
+ .content as string;
69
+ const modules = {
70
+ react: React,
71
+ "react/jsx-runtime": jsxRuntime,
72
+ "@tanstack/react-query": { QueryClientProvider },
73
+ "@btst/stack/context": {
74
+ StackProvider: (props: React.ComponentProps<typeof StackProvider>) => (
75
+ <StackProvider {...props} auth={clientAuth} />
76
+ ),
77
+ useIdentity,
78
+ },
79
+ "@btst/stack/next": { nextRouter: () => undefined },
80
+ "@/lib/query-client": { getOrCreateQueryClient: () => queryClient },
81
+ "@/lib/stack-client": { getStackClient: () => stack },
82
+ };
83
+ const client = compile(generated("app/pages/client-layout.tsx"), modules);
84
+ const { default: Layout } = compile(
85
+ generated("app/(static)/pages/layout.tsx"),
86
+ {
87
+ "react/jsx-runtime": jsxRuntime,
88
+ "../../pages/client-layout": client,
89
+ "@/lib/stack-client.server": { getServerClientOrigins: () => ({}) },
90
+ },
91
+ );
92
+ const ui = (
93
+ <Layout>
94
+ <clientAuth.CanAccess
95
+ permission={blogPermissions.post.read({ scope: "published" })}
96
+ loading={<span>Loading posts</span>}
97
+ >
98
+ <h1>Published posts</h1>
99
+ </clientAuth.CanAccess>
100
+ <clientAuth.CanAccess
101
+ permission={blogPermissions.post.create({ publish: "draft" })}
102
+ >
103
+ <button type="button">Write a post</button>
104
+ </clientAuth.CanAccess>
105
+ </Layout>
106
+ );
107
+ const html = renderToString(ui);
108
+ expect(html).toContain("<h1>Published posts</h1>");
109
+ expect(html).not.toContain("Loading posts");
110
+ expect(html).not.toContain("Write a post");
111
+ expect(getIdentity).not.toHaveBeenCalled();
112
+ const container = document.createElement("div");
113
+ container.innerHTML = html;
114
+ const onRecoverableError = vi.fn();
115
+ let root: ReturnType<typeof hydrateRoot> | undefined;
116
+ try {
117
+ await act(async () => {
118
+ root = hydrateRoot(container, ui, { onRecoverableError });
119
+ });
120
+ expect(container.querySelector("h1")?.textContent).toBe("Published posts");
121
+ expect(container.querySelector("button")?.textContent).toBe("Write a post");
122
+ expect(getIdentity).toHaveBeenCalledOnce();
123
+ expect(onRecoverableError).not.toHaveBeenCalled();
124
+ } finally {
125
+ await act(async () => root?.unmount());
126
+ queryClient.clear();
127
+ }
128
+ });
@@ -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 slug: string;
130
131
  readonly id: string;
131
132
  readonly name: string;
132
- readonly schema: string;
133
133
  readonly description?: string | undefined;
134
- readonly slug: string;
134
+ readonly schema: 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 slug: string;
154
155
  readonly id: string;
155
156
  readonly name: string;
156
- readonly schema: string;
157
157
  readonly description?: string | undefined;
158
- readonly slug: string;
158
+ readonly schema: 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 slug: string;
174
175
  readonly id: string;
175
176
  readonly name: string;
176
- readonly schema: string;
177
177
  readonly description?: string | undefined;
178
- readonly slug: string;
178
+ readonly schema: 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 slug: string;
194
195
  readonly id: string;
195
196
  readonly name: string;
196
- readonly schema: string;
197
197
  readonly description?: string | undefined;
198
- readonly slug: string;
198
+ readonly schema: 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 slug: string;
228
229
  readonly id: string;
229
230
  readonly name: string;
230
- readonly schema: string;
231
231
  readonly description?: string | undefined;
232
- readonly slug: string;
232
+ readonly schema: 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 slug: string;
262
263
  readonly id: string;
263
264
  readonly name: string;
264
- readonly schema: string;
265
265
  readonly description?: string | undefined;
266
- readonly slug: string;
266
+ readonly schema: string;
267
267
  readonly successMessage?: string | undefined;
268
268
  readonly redirectUrl?: string | undefined;
269
269
  readonly createdBy?: string | undefined;
@@ -291,10 +291,10 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
291
291
  readonly redirectUrl?: string | undefined;
292
292
  };
293
293
  readonly submittedAt: string;
294
+ readonly data: string;
294
295
  readonly id: string;
295
296
  readonly formId: string;
296
297
  readonly submittedBy?: string | undefined;
297
- readonly data: string;
298
298
  readonly ipAddress?: string | undefined;
299
299
  readonly userAgent?: string | undefined;
300
300
  }>;
@@ -335,10 +335,10 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
335
335
  readonly [x: string]: any;
336
336
  } | null;
337
337
  readonly submittedAt: string;
338
+ readonly data: string;
338
339
  readonly id: string;
339
340
  readonly formId: string;
340
341
  readonly submittedBy?: string | undefined;
341
- readonly data: string;
342
342
  readonly ipAddress?: string | undefined;
343
343
  readonly userAgent?: string | undefined;
344
344
  }>;
@@ -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 slug: string;
130
131
  readonly id: string;
131
132
  readonly name: string;
132
- readonly schema: string;
133
133
  readonly description?: string | undefined;
134
- readonly slug: string;
134
+ readonly schema: 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 slug: string;
154
155
  readonly id: string;
155
156
  readonly name: string;
156
- readonly schema: string;
157
157
  readonly description?: string | undefined;
158
- readonly slug: string;
158
+ readonly schema: 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 slug: string;
174
175
  readonly id: string;
175
176
  readonly name: string;
176
- readonly schema: string;
177
177
  readonly description?: string | undefined;
178
- readonly slug: string;
178
+ readonly schema: 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 slug: string;
194
195
  readonly id: string;
195
196
  readonly name: string;
196
- readonly schema: string;
197
197
  readonly description?: string | undefined;
198
- readonly slug: string;
198
+ readonly schema: 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 slug: string;
228
229
  readonly id: string;
229
230
  readonly name: string;
230
- readonly schema: string;
231
231
  readonly description?: string | undefined;
232
- readonly slug: string;
232
+ readonly schema: 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 slug: string;
262
263
  readonly id: string;
263
264
  readonly name: string;
264
- readonly schema: string;
265
265
  readonly description?: string | undefined;
266
- readonly slug: string;
266
+ readonly schema: string;
267
267
  readonly successMessage?: string | undefined;
268
268
  readonly redirectUrl?: string | undefined;
269
269
  readonly createdBy?: string | undefined;
@@ -291,10 +291,10 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
291
291
  readonly redirectUrl?: string | undefined;
292
292
  };
293
293
  readonly submittedAt: string;
294
+ readonly data: string;
294
295
  readonly id: string;
295
296
  readonly formId: string;
296
297
  readonly submittedBy?: string | undefined;
297
- readonly data: string;
298
298
  readonly ipAddress?: string | undefined;
299
299
  readonly userAgent?: string | undefined;
300
300
  }>;
@@ -335,10 +335,10 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
335
335
  readonly [x: string]: any;
336
336
  } | null;
337
337
  readonly submittedAt: string;
338
+ readonly data: string;
338
339
  readonly id: string;
339
340
  readonly formId: string;
340
341
  readonly submittedBy?: string | undefined;
341
- readonly data: string;
342
342
  readonly ipAddress?: string | undefined;
343
343
  readonly userAgent?: string | undefined;
344
344
  }>;
@@ -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 slug: string;
130
131
  readonly id: string;
131
132
  readonly name: string;
132
- readonly schema: string;
133
133
  readonly description?: string | undefined;
134
- readonly slug: string;
134
+ readonly schema: 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 slug: string;
154
155
  readonly id: string;
155
156
  readonly name: string;
156
- readonly schema: string;
157
157
  readonly description?: string | undefined;
158
- readonly slug: string;
158
+ readonly schema: 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 slug: string;
174
175
  readonly id: string;
175
176
  readonly name: string;
176
- readonly schema: string;
177
177
  readonly description?: string | undefined;
178
- readonly slug: string;
178
+ readonly schema: 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 slug: string;
194
195
  readonly id: string;
195
196
  readonly name: string;
196
- readonly schema: string;
197
197
  readonly description?: string | undefined;
198
- readonly slug: string;
198
+ readonly schema: 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 slug: string;
228
229
  readonly id: string;
229
230
  readonly name: string;
230
- readonly schema: string;
231
231
  readonly description?: string | undefined;
232
- readonly slug: string;
232
+ readonly schema: 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 slug: string;
262
263
  readonly id: string;
263
264
  readonly name: string;
264
- readonly schema: string;
265
265
  readonly description?: string | undefined;
266
- readonly slug: string;
266
+ readonly schema: string;
267
267
  readonly successMessage?: string | undefined;
268
268
  readonly redirectUrl?: string | undefined;
269
269
  readonly createdBy?: string | undefined;
@@ -291,10 +291,10 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
291
291
  readonly redirectUrl?: string | undefined;
292
292
  };
293
293
  readonly submittedAt: string;
294
+ readonly data: string;
294
295
  readonly id: string;
295
296
  readonly formId: string;
296
297
  readonly submittedBy?: string | undefined;
297
- readonly data: string;
298
298
  readonly ipAddress?: string | undefined;
299
299
  readonly userAgent?: string | undefined;
300
300
  }>;
@@ -335,10 +335,10 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
335
335
  readonly [x: string]: any;
336
336
  } | null;
337
337
  readonly submittedAt: string;
338
+ readonly data: string;
338
339
  readonly id: string;
339
340
  readonly formId: string;
340
341
  readonly submittedBy?: string | undefined;
341
- readonly data: string;
342
342
  readonly ipAddress?: string | undefined;
343
343
  readonly userAgent?: string | undefined;
344
344
  }>;