bunderstack 0.21.0 → 0.22.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/CHANGELOG.md +38 -0
- package/README.md +24 -8
- package/dist/api/builder.d.ts +2 -2
- package/dist/api/builder.js +1 -1
- package/dist/api/builder.js.map +1 -1
- package/dist/api/context.d.ts +1 -1
- package/dist/api/context.d.ts.map +1 -1
- package/dist/api/context.js.map +1 -1
- package/dist/auth.d.ts +8 -0
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +14 -0
- package/dist/auth.js.map +1 -1
- package/dist/backend-internals.d.ts +32 -0
- package/dist/backend-internals.d.ts.map +1 -0
- package/dist/backend-internals.js +2 -0
- package/dist/backend-internals.js.map +1 -0
- package/dist/backend.d.ts +26 -0
- package/dist/backend.d.ts.map +1 -0
- package/dist/backend.js +53 -0
- package/dist/backend.js.map +1 -0
- package/dist/blueprint-generator.d.ts.map +1 -1
- package/dist/blueprint-generator.js +41 -51
- package/dist/blueprint-generator.js.map +1 -1
- package/dist/config.d.ts +0 -6
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/database/adapter.d.ts +10 -3
- package/dist/database/adapter.d.ts.map +1 -1
- package/dist/database/adapter.js.map +1 -1
- package/dist/database/bun-sql.d.ts.map +1 -1
- package/dist/database/bun-sql.js +1 -3
- package/dist/database/bun-sql.js.map +1 -1
- package/dist/database/bun-sqlite.d.ts +8 -0
- package/dist/database/bun-sqlite.d.ts.map +1 -0
- package/dist/database/bun-sqlite.js +56 -0
- package/dist/database/bun-sqlite.js.map +1 -0
- package/dist/database/libsql.d.ts.map +1 -1
- package/dist/database/libsql.js +25 -3
- package/dist/database/libsql.js.map +1 -1
- package/dist/database/pglite.d.ts.map +1 -1
- package/dist/database/pglite.js +25 -4
- package/dist/database/pglite.js.map +1 -1
- package/dist/database/postgres-js.d.ts.map +1 -1
- package/dist/database/postgres-js.js +1 -3
- package/dist/database/postgres-js.js.map +1 -1
- package/dist/db.d.ts +1 -2
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +5 -3
- package/dist/db.js.map +1 -1
- package/dist/email.d.ts +3 -1
- package/dist/email.d.ts.map +1 -1
- package/dist/email.js +9 -2
- package/dist/email.js.map +1 -1
- package/dist/env.d.ts +1 -1
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +1 -4
- package/dist/env.js.map +1 -1
- package/dist/index.d.ts +3 -108
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -484
- package/dist/index.js.map +1 -1
- package/dist/jobs/define.d.ts +1 -1
- package/dist/jobs/define.d.ts.map +1 -1
- package/dist/jobs/define.js.map +1 -1
- package/dist/jobs/index.js +1 -1
- package/dist/jobs/index.js.map +1 -1
- package/dist/jobs/queue.d.ts +1 -1
- package/dist/jobs/queue.d.ts.map +1 -1
- package/dist/jobs/queue.js +1 -2
- package/dist/jobs/queue.js.map +1 -1
- package/dist/jobs/worker.d.ts +9 -0
- package/dist/jobs/worker.d.ts.map +1 -1
- package/dist/jobs/worker.js +32 -3
- package/dist/jobs/worker.js.map +1 -1
- package/dist/provision-internals.d.ts +1 -1
- package/dist/provision-internals.js +1 -1
- package/dist/provision-internals.js.map +1 -1
- package/dist/provision.d.ts +2 -0
- package/dist/provision.d.ts.map +1 -1
- package/dist/provision.js +24 -3
- package/dist/provision.js.map +1 -1
- package/dist/query/infer.d.ts +1 -1
- package/dist/query/infer.d.ts.map +1 -1
- package/dist/query/infer.js.map +1 -1
- package/dist/runtime.d.ts +149 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +522 -0
- package/dist/runtime.js.map +1 -0
- package/dist/schema-export-pg.js +1 -1
- package/dist/schema-export-pg.js.map +1 -1
- package/dist/start/index.d.ts +3 -3
- package/dist/start/index.d.ts.map +1 -1
- package/dist/start/index.js +3 -3
- package/dist/start/index.js.map +1 -1
- package/dist/storage/background.d.ts +3 -0
- package/dist/storage/background.d.ts.map +1 -0
- package/dist/storage/background.js +3 -0
- package/dist/storage/background.js.map +1 -0
- package/dist/testing/auth.d.ts +57 -0
- package/dist/testing/auth.d.ts.map +1 -0
- package/dist/testing/auth.js +51 -0
- package/dist/testing/auth.js.map +1 -0
- package/dist/testing/client.d.ts +6 -0
- package/dist/testing/client.d.ts.map +1 -0
- package/dist/testing/client.js +9 -0
- package/dist/testing/client.js.map +1 -0
- package/dist/testing/database.d.ts +6 -0
- package/dist/testing/database.d.ts.map +1 -0
- package/dist/testing/database.js +8 -0
- package/dist/testing/database.js.map +1 -0
- package/dist/testing/email.d.ts +15 -0
- package/dist/testing/email.d.ts.map +1 -0
- package/dist/testing/email.js +32 -0
- package/dist/testing/email.js.map +1 -0
- package/dist/testing/fixture.d.ts +33 -0
- package/dist/testing/fixture.d.ts.map +1 -0
- package/dist/testing/fixture.js +125 -0
- package/dist/testing/fixture.js.map +1 -0
- package/dist/testing/jobs.d.ts +32 -0
- package/dist/testing/jobs.d.ts.map +1 -0
- package/dist/testing/jobs.js +67 -0
- package/dist/testing/jobs.js.map +1 -0
- package/dist/testing/storage.d.ts +7 -0
- package/dist/testing/storage.d.ts.map +1 -0
- package/dist/testing/storage.js +29 -0
- package/dist/testing/storage.js.map +1 -0
- package/dist/testing.d.ts +9 -26
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +3 -9
- package/dist/testing.js.map +1 -1
- package/llms.txt +43 -13
- package/package.json +23 -15
- package/skills/creating-bunderstack-apps/references/application-structure.md +16 -12
- package/skills/creating-bunderstack-apps/references/runtime-integrations.md +4 -1
- package/skills/migrating-to-bunderstack/SKILL.md +7 -6
- package/skills/migrating-to-bunderstack/references/audit-checklist.md +4 -4
- package/skills/migrating-to-bunderstack/references/runtime-replacements.md +55 -49
|
@@ -6,13 +6,12 @@ names; do not change the contracts.
|
|
|
6
6
|
## Modular entry
|
|
7
7
|
|
|
8
8
|
A migrated application has enough configuration to justify `src/bunderstack/`
|
|
9
|
-
with `index.ts`, `schema/`, `access.ts`, `auth.ts`, `env.ts`,
|
|
10
|
-
`api/`. The
|
|
9
|
+
with `backend.ts`, `index.ts`, `schema/`, `access.ts`, `auth.ts`, `env.ts`,
|
|
10
|
+
`jobs/`, and `api/`. The declaration is the only place that assembles them:
|
|
11
11
|
|
|
12
12
|
```ts
|
|
13
|
-
import {
|
|
14
|
-
import { libsql } from 'bunderstack/
|
|
15
|
-
import { provision } from 'bunderstack/provision'
|
|
13
|
+
import { bunderstack } from 'bunderstack'
|
|
14
|
+
import { libsql } from 'bunderstack/libsql'
|
|
16
15
|
import { access } from './access'
|
|
17
16
|
import { authConfig } from './auth'
|
|
18
17
|
import { envSchema } from './env'
|
|
@@ -20,33 +19,31 @@ import { defineJobs } from './jobs'
|
|
|
20
19
|
import { schema } from './schema'
|
|
21
20
|
import * as v from 'valibot'
|
|
22
21
|
|
|
23
|
-
export
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
access: { create: 'authenticated', get: 'owner', delete: 'owner' },
|
|
41
|
-
},
|
|
22
|
+
export const backend = bunderstack({
|
|
23
|
+
schema,
|
|
24
|
+
access,
|
|
25
|
+
env: envSchema,
|
|
26
|
+
database: {
|
|
27
|
+
adapter: libsql(),
|
|
28
|
+
url: 'file:./data.db',
|
|
29
|
+
},
|
|
30
|
+
auth: authConfig,
|
|
31
|
+
email: { from: 'App <no-reply@example.com>' },
|
|
32
|
+
storage: {
|
|
33
|
+
local: './uploads',
|
|
34
|
+
defaultBucket: 'files',
|
|
35
|
+
buckets: {
|
|
36
|
+
files: {
|
|
37
|
+
visibility: 'private',
|
|
38
|
+
access: { create: 'authenticated', get: 'owner', delete: 'owner' },
|
|
42
39
|
},
|
|
43
40
|
},
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
41
|
+
},
|
|
42
|
+
realtime: true,
|
|
43
|
+
jobs: defineJobs,
|
|
44
|
+
middleware: [instrumentation],
|
|
45
|
+
api,
|
|
46
|
+
})
|
|
50
47
|
|
|
51
48
|
// api/base.ts — the builder is a module value, so router modules import the
|
|
52
49
|
// bases they need instead of receiving them through the config callback.
|
|
@@ -59,7 +56,11 @@ export async function createApp(options: { databaseUrl?: string } = {}) {
|
|
|
59
56
|
//
|
|
60
57
|
// export const api = { projects: projectsRouter }
|
|
61
58
|
|
|
62
|
-
|
|
59
|
+
// index.ts
|
|
60
|
+
import { provision } from 'bunderstack/provision'
|
|
61
|
+
import { backend } from './backend'
|
|
62
|
+
|
|
63
|
+
export const app = await backend.start()
|
|
63
64
|
export const { db, auth, env } = app
|
|
64
65
|
export type App = typeof app
|
|
65
66
|
|
|
@@ -67,12 +68,9 @@ await provision(app)
|
|
|
67
68
|
```
|
|
68
69
|
|
|
69
70
|
The database adapter is imported explicitly; there is no implicit driver. Keep
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
command imports the entry with `BUNDERSTACK_INTROSPECT=1`, so a module that
|
|
74
|
-
connects to a queue or calls a third-party API at import time breaks
|
|
75
|
-
introspection.
|
|
71
|
+
unrelated external side effects out of the backend import graph. The blueprint
|
|
72
|
+
imports the declaration and reads `backend.manifest`; it never starts the app,
|
|
73
|
+
connects to a queue, or needs a special environment flag.
|
|
76
74
|
|
|
77
75
|
Aggregate every domain, Better Auth, plugin, and internal table in the schema
|
|
78
76
|
object, including `export * from 'bunderstack/schema'`, so migrations cover the
|
|
@@ -116,8 +114,11 @@ Production queue work is its own process:
|
|
|
116
114
|
|
|
117
115
|
```ts
|
|
118
116
|
// src/worker.ts
|
|
119
|
-
import {
|
|
117
|
+
import { backend } from './bunderstack/backend'
|
|
120
118
|
|
|
119
|
+
const app = await backend.start({
|
|
120
|
+
env: { ...process.env, BUNDERSTACK_ROLE: 'web' },
|
|
121
|
+
})
|
|
121
122
|
await app.runWorker()
|
|
122
123
|
```
|
|
123
124
|
|
|
@@ -224,7 +225,7 @@ const url = await app.storage.getUrl(key, { expiresIn: 3600 })
|
|
|
224
225
|
await app.storage.delete(fileId)
|
|
225
226
|
```
|
|
226
227
|
|
|
227
|
-
Buckets are declared in `
|
|
228
|
+
Buckets are declared in `bunderstack()` with their own visibility and
|
|
228
229
|
access rules. Delete the AWS or Tigris wrapper and uninstall the SDK. A custom
|
|
229
230
|
multipart upload route is replaced by the bucket's own upload route unless it
|
|
230
231
|
performs domain work that cannot move into a job.
|
|
@@ -241,7 +242,7 @@ Standard `fetch`, so the `resend` package is uninstalled.
|
|
|
241
242
|
|
|
242
243
|
## Env
|
|
243
244
|
|
|
244
|
-
Pass `envSchema` to `
|
|
245
|
+
Pass `envSchema` to `bunderstack({ env: envSchema })` and read `app.env`
|
|
245
246
|
or `ctx.env`. Remove `@t3-oss/env-core` `createEnv()` calls and `dotenv`; Bun
|
|
246
247
|
loads `.env` itself. Server variables must not use the `PUBLIC_` prefix, and
|
|
247
248
|
browser-safe variables must. Declared env appears in the deployment blueprint,
|
|
@@ -256,7 +257,7 @@ commit migrations before production:
|
|
|
256
257
|
|
|
257
258
|
```json
|
|
258
259
|
{
|
|
259
|
-
"bunderstack": { "entry": "src/bunderstack/
|
|
260
|
+
"bunderstack": { "entry": "src/bunderstack/backend.ts" },
|
|
260
261
|
"scripts": {
|
|
261
262
|
"worker": "bun src/worker.ts",
|
|
262
263
|
"db:generate": "drizzle-kit generate",
|
|
@@ -273,14 +274,19 @@ or build output.
|
|
|
273
274
|
|
|
274
275
|
## Test and script ownership
|
|
275
276
|
|
|
276
|
-
A test or script
|
|
277
|
+
A test or script owns its fixture lexically:
|
|
277
278
|
|
|
278
279
|
```ts
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
280
|
+
await using t = await backend.test({ database: { schema: 'push' } })
|
|
281
|
+
const identity = t.auth.mockSession({
|
|
282
|
+
id: 'user-1',
|
|
283
|
+
email: 'dev@example.com',
|
|
284
|
+
name: 'Developer',
|
|
285
|
+
})
|
|
286
|
+
const client = t.client(identity)
|
|
287
|
+
// ...
|
|
286
288
|
```
|
|
289
|
+
|
|
290
|
+
The fixture isolates database, email, storage, realtime, and queue state and is
|
|
291
|
+
disposed at the end of the block. Keep application-specific organization setup
|
|
292
|
+
in a typed helper layered on top of the base user/session auth helper.
|