@hachej/boring-core 0.1.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.
Files changed (52) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +83 -0
  3. package/dist/CoreFront-CDeLdfb0.d.ts +19 -0
  4. package/dist/app/front/index.d.ts +18 -0
  5. package/dist/app/front/index.js +162 -0
  6. package/dist/app/front/styles.css +6 -0
  7. package/dist/app/server/index.d.ts +96 -0
  8. package/dist/app/server/index.js +507 -0
  9. package/dist/app/vite/index.d.ts +10 -0
  10. package/dist/app/vite/index.js +33 -0
  11. package/dist/authHook-vsRhOvnh.d.ts +38 -0
  12. package/dist/chunk-CZ4HIXII.js +2869 -0
  13. package/dist/chunk-H5KU6R6Y.js +68 -0
  14. package/dist/chunk-HSRBZLKT.js +1684 -0
  15. package/dist/chunk-HYNKZSTF.js +18 -0
  16. package/dist/chunk-MLKGABMK.js +9 -0
  17. package/dist/chunk-VTOS4C7B.js +3443 -0
  18. package/dist/connection-CE7z-wBp.d.ts +145 -0
  19. package/dist/front/index.d.ts +458 -0
  20. package/dist/front/index.js +126 -0
  21. package/dist/front/theme.css +168 -0
  22. package/dist/front/top-bar-slot.d.ts +10 -0
  23. package/dist/front/top-bar-slot.js +9 -0
  24. package/dist/index-COZa03RP.d.ts +266 -0
  25. package/dist/migrate-D49JsATX.d.ts +8 -0
  26. package/dist/server/db/index.d.ts +209 -0
  27. package/dist/server/db/index.js +18 -0
  28. package/dist/server/index.d.ts +395 -0
  29. package/dist/server/index.js +136 -0
  30. package/dist/shared/index.d.ts +1 -0
  31. package/dist/shared/index.js +13 -0
  32. package/drizzle/.gitkeep +0 -0
  33. package/drizzle/0000_easy_meggan.sql +53 -0
  34. package/drizzle/0001_groovy_smiling_tiger.sql +14 -0
  35. package/drizzle/0002_busy_iron_man.sql +16 -0
  36. package/drizzle/0003_aspiring_richard_fisk.sql +12 -0
  37. package/drizzle/0004_heavy_lenny_balinger.sql +9 -0
  38. package/drizzle/0005_flimsy_mastermind.sql +17 -0
  39. package/drizzle/0006_happy_callisto.sql +13 -0
  40. package/drizzle/0007_v7_substrate.sql +54 -0
  41. package/drizzle/0008_workspace_sandbox_handles.sql +32 -0
  42. package/drizzle/0009_workspace_runtime_resources.sql +39 -0
  43. package/drizzle/meta/0000_snapshot.json +380 -0
  44. package/drizzle/meta/0001_snapshot.json +471 -0
  45. package/drizzle/meta/0002_snapshot.json +599 -0
  46. package/drizzle/meta/0003_snapshot.json +693 -0
  47. package/drizzle/meta/0004_snapshot.json +753 -0
  48. package/drizzle/meta/0005_snapshot.json +886 -0
  49. package/drizzle/meta/0006_snapshot.json +968 -0
  50. package/drizzle/meta/_journal.json +76 -0
  51. package/drizzle/schema.ts +110 -0
  52. package/package.json +127 -0
@@ -0,0 +1,126 @@
1
+ import {
2
+ AppErrorBoundary,
3
+ AuthGate,
4
+ AuthProvider,
5
+ ConfigProvider,
6
+ CoreFront,
7
+ ForgotPasswordPage,
8
+ InviteAcceptPage,
9
+ InvitesPage,
10
+ MembersPage,
11
+ ResetPasswordPage,
12
+ SignInPage,
13
+ SignUpPage,
14
+ ThemeProvider,
15
+ ThemeToggle,
16
+ UserIdentityProvider,
17
+ UserMenu,
18
+ UserSettingsPage,
19
+ VerifyEmailPage,
20
+ WorkspaceAuthProvider,
21
+ WorkspaceSettingsPage,
22
+ WorkspaceSwitcher,
23
+ apiFetch,
24
+ apiFetchJson,
25
+ buildApiUrl,
26
+ buildWsUrl,
27
+ debounce,
28
+ getApiBase,
29
+ getAuthClient,
30
+ getHttpErrorDetail,
31
+ getWorkspaceCommands,
32
+ getWsBase,
33
+ openWebSocket,
34
+ routeHref,
35
+ routes,
36
+ sanitizeMarkdown,
37
+ sanitizeToolOutput,
38
+ setApiBase,
39
+ useBlobUrl,
40
+ useCapabilities,
41
+ useChangePassword,
42
+ useConfig,
43
+ useConfigLoaded,
44
+ useCoreCommands,
45
+ useCurrentWorkspace,
46
+ useKeyboardShortcuts,
47
+ useReducedMotion,
48
+ useSendVerificationEmail,
49
+ useSession,
50
+ useSignIn,
51
+ useSignOut,
52
+ useSignUp,
53
+ useTheme,
54
+ useUser,
55
+ useVerifyEmail,
56
+ useViewportBreakpoint,
57
+ useWorkspaceMembers,
58
+ useWorkspaceRole
59
+ } from "../chunk-VTOS4C7B.js";
60
+ import {
61
+ TopBarSlotProvider,
62
+ useTopBarSlot
63
+ } from "../chunk-HYNKZSTF.js";
64
+ import "../chunk-H5KU6R6Y.js";
65
+ import "../chunk-MLKGABMK.js";
66
+ export {
67
+ AppErrorBoundary,
68
+ AuthGate,
69
+ AuthProvider,
70
+ ConfigProvider,
71
+ CoreFront,
72
+ ForgotPasswordPage,
73
+ InviteAcceptPage,
74
+ InvitesPage,
75
+ MembersPage,
76
+ ResetPasswordPage,
77
+ SignInPage,
78
+ SignUpPage,
79
+ ThemeProvider,
80
+ ThemeToggle,
81
+ TopBarSlotProvider,
82
+ UserIdentityProvider,
83
+ UserMenu,
84
+ UserSettingsPage,
85
+ VerifyEmailPage,
86
+ WorkspaceAuthProvider,
87
+ WorkspaceSettingsPage,
88
+ WorkspaceSwitcher,
89
+ apiFetch,
90
+ apiFetchJson,
91
+ buildApiUrl,
92
+ buildWsUrl,
93
+ debounce,
94
+ getApiBase,
95
+ getAuthClient,
96
+ getHttpErrorDetail,
97
+ getWorkspaceCommands,
98
+ getWsBase,
99
+ openWebSocket,
100
+ routeHref,
101
+ routes,
102
+ sanitizeMarkdown,
103
+ sanitizeToolOutput,
104
+ setApiBase,
105
+ useBlobUrl,
106
+ useCapabilities,
107
+ useChangePassword,
108
+ useConfig,
109
+ useConfigLoaded,
110
+ useCoreCommands,
111
+ useCurrentWorkspace,
112
+ useKeyboardShortcuts,
113
+ useReducedMotion,
114
+ useSendVerificationEmail,
115
+ useSession,
116
+ useSignIn,
117
+ useSignOut,
118
+ useSignUp,
119
+ useTheme,
120
+ useTopBarSlot,
121
+ useUser,
122
+ useVerifyEmail,
123
+ useViewportBreakpoint,
124
+ useWorkspaceMembers,
125
+ useWorkspaceRole
126
+ };
@@ -0,0 +1,168 @@
1
+ /* @boring/core theme token bridge
2
+ Provides shadcn token values keyed by [data-theme] attribute.
3
+ ThemeProvider sets data-theme on <html>; these selectors respond. */
4
+
5
+ :root {
6
+ --background: oklch(0.995 0.0015 72);
7
+ --foreground: oklch(0.18 0.004 72);
8
+ --card: oklch(1 0 0);
9
+ --card-foreground: oklch(0.18 0.004 72);
10
+ --popover: oklch(1 0 0);
11
+ --popover-foreground: oklch(0.18 0.004 72);
12
+ --primary: oklch(0.22 0.006 72);
13
+ --primary-foreground: oklch(0.985 0.002 72);
14
+ --secondary: oklch(0.965 0.003 72);
15
+ --secondary-foreground: oklch(0.22 0.006 72);
16
+ --muted: oklch(0.965 0.003 72);
17
+ --muted-foreground: oklch(0.52 0.008 72);
18
+ --destructive: oklch(0.577 0.245 27.325);
19
+ --border: oklch(0.915 0.004 72);
20
+ --input: oklch(0.915 0.004 72);
21
+ --accent: oklch(0.62 0.14 65);
22
+ --accent-foreground: oklch(0.995 0 0);
23
+ --ring: oklch(0.62 0.14 65);
24
+ --radius: 0.625rem;
25
+ }
26
+
27
+ [data-theme="dark"] {
28
+ --background: oklch(0.145 0.004 285.823);
29
+ --foreground: oklch(0.985 0 0);
30
+ --card: oklch(0.145 0.004 285.823);
31
+ --card-foreground: oklch(0.985 0 0);
32
+ --popover: oklch(0.145 0.004 285.823);
33
+ --popover-foreground: oklch(0.985 0 0);
34
+ --primary: oklch(0.985 0 0);
35
+ --primary-foreground: oklch(0.205 0.006 285.885);
36
+ --secondary: oklch(0.269 0.006 285.885);
37
+ --secondary-foreground: oklch(0.985 0 0);
38
+ --muted: oklch(0.269 0.006 285.885);
39
+ --muted-foreground: oklch(0.708 0.01 286.073);
40
+ --accent: oklch(0.269 0.006 285.885);
41
+ --accent-foreground: oklch(0.985 0 0);
42
+ --destructive: oklch(0.396 0.141 25.768);
43
+ --border: oklch(0.269 0.006 285.885);
44
+ --input: oklch(0.269 0.006 285.885);
45
+ --ring: oklch(0.439 0.01 286.029);
46
+ }
47
+
48
+ .boring-settings-shell {
49
+ height: 100vh;
50
+ min-height: 0;
51
+ display: flex;
52
+ flex-direction: column;
53
+ overflow: hidden;
54
+ background: var(--canvas, var(--background));
55
+ color: var(--foreground);
56
+ }
57
+
58
+ .boring-settings-scroll {
59
+ min-height: 0;
60
+ flex: 1 1 auto;
61
+ overflow-y: auto;
62
+ }
63
+
64
+ .boring-settings-layout {
65
+ box-sizing: border-box;
66
+ width: 100%;
67
+ max-width: 70rem;
68
+ margin: 0 auto;
69
+ display: flex;
70
+ flex-direction: column;
71
+ gap: 1.5rem;
72
+ padding: 1.25rem 1rem 2rem;
73
+ }
74
+
75
+ .boring-settings-sidebar {
76
+ min-width: 0;
77
+ }
78
+
79
+ .boring-settings-content {
80
+ min-width: 0;
81
+ }
82
+
83
+ .boring-settings-page-header {
84
+ display: flex;
85
+ flex-direction: column;
86
+ gap: 0.75rem;
87
+ padding-bottom: 0.5rem;
88
+ }
89
+
90
+ .boring-settings-context {
91
+ display: flex;
92
+ min-width: 0;
93
+ align-items: center;
94
+ gap: 0.75rem;
95
+ border: 1px solid color-mix(in oklch, var(--border) 70%, transparent);
96
+ border-radius: 0.5rem;
97
+ background: color-mix(in oklch, var(--muted) 28%, transparent);
98
+ padding: 0.75rem;
99
+ }
100
+
101
+ .boring-settings-nav {
102
+ display: grid;
103
+ gap: 0.25rem;
104
+ }
105
+
106
+ .boring-settings-nav-label {
107
+ padding: 0 0.5rem 0.375rem;
108
+ font-size: 0.6875rem;
109
+ font-weight: 500;
110
+ line-height: 1rem;
111
+ color: color-mix(in oklch, var(--muted-foreground) 82%, transparent);
112
+ }
113
+
114
+ .boring-settings-nav-item {
115
+ display: flex;
116
+ min-height: 2.25rem;
117
+ align-items: center;
118
+ justify-content: space-between;
119
+ gap: 0.75rem;
120
+ border-radius: 0.375rem;
121
+ padding: 0.5rem;
122
+ color: var(--muted-foreground);
123
+ text-decoration: none;
124
+ transition: background-color 150ms ease, color 150ms ease;
125
+ }
126
+
127
+ .boring-settings-nav-item:hover {
128
+ background: color-mix(in oklch, var(--muted) 34%, transparent);
129
+ color: var(--foreground);
130
+ }
131
+
132
+ .boring-settings-action-row {
133
+ display: flex;
134
+ min-width: 0;
135
+ flex-direction: column;
136
+ gap: 0.75rem;
137
+ border: 1px solid color-mix(in oklch, var(--border) 70%, transparent);
138
+ border-radius: 0.5rem;
139
+ background: color-mix(in oklch, var(--muted) 22%, transparent);
140
+ padding: 0.75rem;
141
+ }
142
+
143
+ @media (min-width: 1024px) {
144
+ .boring-settings-layout {
145
+ flex-direction: row;
146
+ align-items: flex-start;
147
+ gap: 2.5rem;
148
+ padding: 2rem 1.5rem 3rem;
149
+ }
150
+
151
+ .boring-settings-sidebar {
152
+ position: sticky;
153
+ top: 2rem;
154
+ width: 13rem;
155
+ flex: 0 0 13rem;
156
+ }
157
+
158
+ .boring-settings-content {
159
+ flex: 1 1 auto;
160
+ max-width: 50rem;
161
+ }
162
+
163
+ .boring-settings-action-row {
164
+ flex-direction: row;
165
+ align-items: center;
166
+ justify-content: space-between;
167
+ }
168
+ }
@@ -0,0 +1,10 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+
4
+ declare function TopBarSlotProvider({ children, slot, }: {
5
+ children: ReactNode;
6
+ slot: ReactNode;
7
+ }): react_jsx_runtime.JSX.Element;
8
+ declare function useTopBarSlot(): ReactNode | null;
9
+
10
+ export { TopBarSlotProvider, useTopBarSlot };
@@ -0,0 +1,9 @@
1
+ import {
2
+ TopBarSlotProvider,
3
+ useTopBarSlot
4
+ } from "../chunk-HYNKZSTF.js";
5
+ import "../chunk-MLKGABMK.js";
6
+ export {
7
+ TopBarSlotProvider,
8
+ useTopBarSlot
9
+ };
@@ -0,0 +1,266 @@
1
+ declare const ERROR_CODES: {
2
+ readonly UNAUTHORIZED: "unauthorized";
3
+ readonly FORBIDDEN: "forbidden";
4
+ readonly WEAK_PASSWORD: "weak_password";
5
+ readonly EMAIL_IN_USE: "email_in_use";
6
+ readonly NOT_MEMBER: "not_member";
7
+ readonly LAST_OWNER: "last_owner";
8
+ readonly INVITE_NOT_FOUND: "invite_not_found";
9
+ readonly INVITE_EXPIRED: "invite_expired";
10
+ readonly INVITE_ALREADY_ACCEPTED: "invite_already_accepted";
11
+ readonly INVITE_EMAIL_MISMATCH: "invite_email_mismatch";
12
+ readonly INVITE_LOCKED: "invite_locked";
13
+ readonly PROVISION_FAILED: "provision_failed";
14
+ readonly DESTROY_FAILED: "destroy_failed";
15
+ readonly RUNTIME_UNMANAGED: "runtime_unmanaged";
16
+ readonly INVALID_RETRY_STATE: "invalid_retry_state";
17
+ readonly NOT_FOUND: "not_found";
18
+ readonly VALIDATION_FAILED: "validation_failed";
19
+ readonly CONFIG_VALIDATION_FAILED: "config_validation_failed";
20
+ readonly CONFIG_FETCH_FAILED: "config_fetch_failed";
21
+ readonly RATE_LIMITED: "rate_limited";
22
+ readonly MAIL_DISABLED: "mail_disabled";
23
+ readonly DB_UNAVAILABLE: "db_unavailable";
24
+ readonly INTERNAL_ERROR: "internal_error";
25
+ };
26
+ type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];
27
+ declare class HttpError extends Error {
28
+ readonly status: number;
29
+ readonly code: ErrorCode;
30
+ readonly requestId?: string;
31
+ constructor(init: {
32
+ status: number;
33
+ code: ErrorCode;
34
+ message: string;
35
+ requestId?: string;
36
+ });
37
+ }
38
+ declare class ConfigFetchError extends Error {
39
+ readonly requestId?: string;
40
+ constructor(message: string, requestId?: string);
41
+ }
42
+ declare class ConfigValidationError extends Error {
43
+ readonly issues: Array<{
44
+ message: string;
45
+ path: Array<string | number>;
46
+ }>;
47
+ constructor(issues: Array<{
48
+ message: string;
49
+ path: Array<string | number>;
50
+ }>);
51
+ }
52
+
53
+ type MemberRole = 'owner' | 'editor' | 'viewer';
54
+ type User = {
55
+ id: string;
56
+ email: string;
57
+ name: string | null;
58
+ emailVerified: boolean;
59
+ image: string | null;
60
+ createdAt: string;
61
+ updatedAt: string;
62
+ };
63
+ type Workspace = {
64
+ id: string;
65
+ appId: string;
66
+ name: string;
67
+ createdBy: string;
68
+ createdAt: string;
69
+ deletedAt: string | null;
70
+ isDefault: boolean;
71
+ };
72
+ type WorkspaceMember = {
73
+ workspaceId: string;
74
+ userId: string;
75
+ role: MemberRole;
76
+ createdAt: string;
77
+ };
78
+ type WorkspaceInvite = {
79
+ id: string;
80
+ workspaceId: string;
81
+ email: string;
82
+ tokenHash: string;
83
+ role: MemberRole;
84
+ expiresAt: string;
85
+ acceptedAt: string | null;
86
+ createdBy: string | null;
87
+ createdAt: string;
88
+ failedAttempts: number;
89
+ lockedUntil: string | null;
90
+ };
91
+ type WorkspaceRuntime = {
92
+ workspaceId: string;
93
+ spriteUrl: string | null;
94
+ spriteName: string | null;
95
+ state: 'pending' | 'ready' | 'error';
96
+ lastError: string | null;
97
+ volumePath: string | null;
98
+ lastErrorOp: string | null;
99
+ sandboxProvider?: string | null;
100
+ sandboxId?: string | null;
101
+ sandboxStatus?: string | null;
102
+ sandboxSnapshotId?: string | null;
103
+ sandboxCreatedAt?: string | null;
104
+ sandboxLastUsedAt?: string | null;
105
+ sandboxLastSeenAt?: string | null;
106
+ sandboxExpiresAt?: string | null;
107
+ provisioningStep: string | null;
108
+ stepStartedAt: string | null;
109
+ updatedAt: string;
110
+ };
111
+ type WorkspaceRuntimeResource = {
112
+ id: string;
113
+ workspaceId: string;
114
+ kind: string;
115
+ purpose: string;
116
+ provider: string;
117
+ handleKind: string;
118
+ stableKey: string | null;
119
+ providerResourceId: string | null;
120
+ parentResourceId: string | null;
121
+ state: string;
122
+ persistenceMode: string;
123
+ config: Record<string, unknown>;
124
+ providerMeta: Record<string, unknown>;
125
+ lastError: string | null;
126
+ lastErrorCode: string | null;
127
+ createdAt: string;
128
+ updatedAt: string;
129
+ lastSeenAt: string | null;
130
+ lastUsedAt: string | null;
131
+ expiresAt: string | null;
132
+ generation: number;
133
+ };
134
+ type WorkspaceRuntimeResourceSelector = {
135
+ kind: string;
136
+ purpose: string;
137
+ provider: string;
138
+ };
139
+ type WorkspaceRuntimeResourceInput = WorkspaceRuntimeResourceSelector & {
140
+ id?: string;
141
+ handleKind: string;
142
+ stableKey?: string | null;
143
+ providerResourceId?: string | null;
144
+ parentResourceId?: string | null;
145
+ state: string;
146
+ persistenceMode: string;
147
+ config?: Record<string, unknown>;
148
+ providerMeta?: Record<string, unknown>;
149
+ lastError?: string | null;
150
+ lastErrorCode?: string | null;
151
+ lastSeenAt?: string | null;
152
+ lastUsedAt?: string | null;
153
+ expiresAt?: string | null;
154
+ generation?: number;
155
+ };
156
+ type SessionPayload = {
157
+ userId: string;
158
+ email: string;
159
+ issuedAt: number;
160
+ expiresAt: number;
161
+ };
162
+ type SessionState = {
163
+ data: {
164
+ user: User;
165
+ expiresAt: string;
166
+ } | null;
167
+ isPending: boolean;
168
+ error: {
169
+ status: number;
170
+ code: ErrorCode;
171
+ message: string;
172
+ } | null;
173
+ };
174
+ type RateLimitEndpointOverride = {
175
+ max: number;
176
+ window: string;
177
+ };
178
+ interface CoreConfig {
179
+ appId: string;
180
+ appName: string;
181
+ appLogo: string | null;
182
+ port: number;
183
+ host: string;
184
+ staticDir: string | null;
185
+ databaseUrl: string | null;
186
+ stores: 'postgres' | 'local';
187
+ cors: {
188
+ origins: string[];
189
+ credentials: true;
190
+ };
191
+ bodyLimit: number;
192
+ logLevel: 'fatal' | 'error' | 'warn' | 'info' | 'debug' | 'trace';
193
+ rateLimit?: Record<string, RateLimitEndpointOverride>;
194
+ security?: {
195
+ csp: {
196
+ enabled: boolean;
197
+ upgradeInsecureRequests?: boolean;
198
+ };
199
+ };
200
+ encryption: {
201
+ workspaceSettingsKey: string;
202
+ };
203
+ auth: {
204
+ secret: string;
205
+ url: string;
206
+ github?: {
207
+ clientId: string;
208
+ clientSecret: string;
209
+ };
210
+ mail?: {
211
+ from: string;
212
+ transportUrl: string;
213
+ };
214
+ sessionTtlSeconds: number;
215
+ sessionCookieSecure: boolean;
216
+ };
217
+ features: {
218
+ githubOauth: boolean;
219
+ invitesEnabled: boolean;
220
+ sendWelcomeEmail: boolean;
221
+ inviteTtlDays: number;
222
+ };
223
+ }
224
+ interface RuntimeConfig {
225
+ appId: string;
226
+ appName: string;
227
+ appLogo: string | null;
228
+ apiBase: string;
229
+ features: {
230
+ githubOauth: boolean;
231
+ invitesEnabled: boolean;
232
+ sendWelcomeEmail: boolean;
233
+ };
234
+ }
235
+ type JsonValue = string | number | boolean | null | JsonValue[] | {
236
+ [k: string]: JsonValue;
237
+ };
238
+ type CoreCapabilities = {
239
+ version: string;
240
+ features: {
241
+ invitesEnabled: boolean;
242
+ githubOauth: boolean;
243
+ emailFlows: boolean;
244
+ };
245
+ auth: {
246
+ emailPassword: boolean;
247
+ github: boolean;
248
+ emailVerification: boolean;
249
+ passwordReset: boolean;
250
+ magicLink: boolean;
251
+ };
252
+ };
253
+ type CapabilitiesResponse = {
254
+ core: CoreCapabilities;
255
+ agent?: {
256
+ runtimeMode: 'direct' | 'local' | 'vercel-sandbox';
257
+ tools: string[];
258
+ modelProviders: string[];
259
+ };
260
+ workspace?: {
261
+ panels: string[];
262
+ };
263
+ [contributorName: string]: JsonValue | CoreCapabilities | undefined;
264
+ };
265
+
266
+ export { type CoreConfig as C, ERROR_CODES as E, HttpError as H, type JsonValue as J, type MemberRole as M, type RuntimeConfig as R, type SessionState as S, type User as U, type Workspace as W, type WorkspaceMember as a, type WorkspaceInvite as b, type WorkspaceRuntime as c, type WorkspaceRuntimeResourceSelector as d, type WorkspaceRuntimeResource as e, type WorkspaceRuntimeResourceInput as f, type CapabilitiesResponse as g, ConfigFetchError as h, ConfigValidationError as i, type CoreCapabilities as j, type ErrorCode as k, type RateLimitEndpointOverride as l, type SessionPayload as m };
@@ -0,0 +1,8 @@
1
+ import { C as CoreConfig } from './index-COZa03RP.js';
2
+
3
+ interface RunMigrationsOptions {
4
+ migrationsFolder?: string;
5
+ }
6
+ declare function runMigrations(config: CoreConfig, options?: RunMigrationsOptions): Promise<void>;
7
+
8
+ export { type RunMigrationsOptions as R, runMigrations as r };