@beignet/cli 0.0.36 → 0.0.38
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 +27 -0
- package/README.md +36 -5
- package/dist/config.d.ts +15 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +30 -1
- package/dist/config.js.map +1 -1
- package/dist/inspect.js +21 -17
- package/dist/inspect.js.map +1 -1
- package/dist/lint.d.ts.map +1 -1
- package/dist/lint.js +27 -6
- package/dist/lint.js.map +1 -1
- package/dist/make/inbox.js +7 -7
- package/dist/make/inbox.js.map +1 -1
- package/dist/make/payments.d.ts +2 -1
- package/dist/make/payments.d.ts.map +1 -1
- package/dist/make/payments.js +15 -11
- package/dist/make/payments.js.map +1 -1
- package/dist/make/shared.d.ts +1 -1
- package/dist/make/shared.d.ts.map +1 -1
- package/dist/make/shared.js +49 -37
- package/dist/make/shared.js.map +1 -1
- package/dist/make/tenancy.js +8 -8
- package/dist/make/tenancy.js.map +1 -1
- package/dist/make.d.ts.map +1 -1
- package/dist/make.js +27 -16
- package/dist/make.js.map +1 -1
- package/dist/operational-error-reporting.d.ts +15 -0
- package/dist/operational-error-reporting.d.ts.map +1 -0
- package/dist/operational-error-reporting.js +42 -0
- package/dist/operational-error-reporting.js.map +1 -0
- package/dist/outbox.d.ts.map +1 -1
- package/dist/outbox.js +73 -0
- package/dist/outbox.js.map +1 -1
- package/dist/provider-add.js +17 -17
- package/dist/provider-add.js.map +1 -1
- package/dist/provider-audit.d.ts.map +1 -1
- package/dist/provider-audit.js +11 -6
- package/dist/provider-audit.js.map +1 -1
- package/dist/schedule.d.ts.map +1 -1
- package/dist/schedule.js +28 -1
- package/dist/schedule.js.map +1 -1
- package/dist/task.d.ts.map +1 -1
- package/dist/task.js +37 -4
- package/dist/task.js.map +1 -1
- package/dist/templates/base.d.ts.map +1 -1
- package/dist/templates/base.js +6 -1
- package/dist/templates/base.js.map +1 -1
- package/dist/templates/db/index.d.ts +1 -0
- package/dist/templates/db/index.d.ts.map +1 -1
- package/dist/templates/db/index.js.map +1 -1
- package/dist/templates/db/mysql.d.ts.map +1 -1
- package/dist/templates/db/mysql.js +16 -0
- package/dist/templates/db/mysql.js.map +1 -1
- package/dist/templates/db/postgres.d.ts.map +1 -1
- package/dist/templates/db/postgres.js +16 -0
- package/dist/templates/db/postgres.js.map +1 -1
- package/dist/templates/db/sqlite.d.ts.map +1 -1
- package/dist/templates/db/sqlite.js +16 -0
- package/dist/templates/db/sqlite.js.map +1 -1
- package/dist/templates/index.d.ts.map +1 -1
- package/dist/templates/index.js +4 -3
- package/dist/templates/index.js.map +1 -1
- package/dist/templates/server.d.ts +2 -2
- package/dist/templates/server.d.ts.map +1 -1
- package/dist/templates/server.js +56 -40
- package/dist/templates/server.js.map +1 -1
- package/dist/templates/shared.js +3 -3
- package/dist/templates/shared.js.map +1 -1
- package/dist/templates/testing.js +1 -1
- package/dist/templates/todos.js +6 -6
- package/package.json +4 -4
- package/src/config.ts +66 -2
- package/src/inspect.ts +31 -19
- package/src/lint.ts +35 -4
- package/src/make/inbox.ts +7 -7
- package/src/make/payments.ts +23 -15
- package/src/make/shared.ts +56 -40
- package/src/make/tenancy.ts +8 -8
- package/src/make.ts +30 -16
- package/src/operational-error-reporting.ts +60 -0
- package/src/outbox.ts +77 -0
- package/src/provider-add.ts +21 -17
- package/src/provider-audit.ts +28 -11
- package/src/schedule.ts +32 -1
- package/src/task.ts +41 -4
- package/src/templates/base.ts +6 -1
- package/src/templates/db/index.ts +1 -0
- package/src/templates/db/mysql.ts +16 -0
- package/src/templates/db/postgres.ts +16 -0
- package/src/templates/db/sqlite.ts +16 -0
- package/src/templates/index.ts +4 -3
- package/src/templates/server.ts +56 -42
- package/src/templates/shared.ts +3 -3
- package/src/templates/testing.ts +1 -1
- package/src/templates/todos.ts +6 -6
package/dist/templates/index.js
CHANGED
|
@@ -2,7 +2,7 @@ export { databaseChoices, integrationChoices } from "../choices.js";
|
|
|
2
2
|
import { agentsMd, mcpJson } from "./agents.js";
|
|
3
3
|
import { baseFiles, envExample, integrationsDoc, packageJson, readme, } from "./base.js";
|
|
4
4
|
import { dbFiles } from "./db/index.js";
|
|
5
|
-
import { betterAuth, env,
|
|
5
|
+
import { betterAuth, env, ports, portWiring, server, serverFiles, serverProviders, } from "./server.js";
|
|
6
6
|
import { shadcnTemplateFiles } from "./shadcn.js";
|
|
7
7
|
import { shellTemplateFiles } from "./shell.js";
|
|
8
8
|
import { testSupportTemplateFiles } from "./testing.js";
|
|
@@ -85,7 +85,8 @@ export function getTemplateFiles(ctx) {
|
|
|
85
85
|
},
|
|
86
86
|
{ path: "ports/index.ts", content: ports(ctx) },
|
|
87
87
|
{ path: "ports/auth.ts", content: serverFiles.authPort },
|
|
88
|
-
{ path: "infra/
|
|
88
|
+
{ path: "infra/port-wiring.ts", content: portWiring(ctx) },
|
|
89
|
+
{ path: "infra/db/client.ts", content: db.dbClient },
|
|
89
90
|
{ path: "infra/db/database-ready.ts", content: db.databaseReady },
|
|
90
91
|
{ path: "infra/db/provider.ts", content: db.dbProvider },
|
|
91
92
|
{ path: "infra/db/repositories.ts", content: db.dbRepositories },
|
|
@@ -113,7 +114,7 @@ export function getTemplateFiles(ctx) {
|
|
|
113
114
|
...testSupportTemplateFiles,
|
|
114
115
|
{ path: "lib/use-case.ts", content: serverFiles.useCaseBuilder },
|
|
115
116
|
{ path: "lib/routes.ts", content: serverFiles.routesBuilder },
|
|
116
|
-
{ path: "server/index.ts", content: server(
|
|
117
|
+
{ path: "server/index.ts", content: server() },
|
|
117
118
|
{ path: "server/context.ts", content: serverFiles.serverContext },
|
|
118
119
|
{ path: "server/routes.ts", content: serverFiles.serverRoutes },
|
|
119
120
|
{ path: "server/providers.ts", content: serverProviders(ctx) },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGpE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,SAAS,EACT,UAAU,EACV,eAAe,EACf,WAAW,EACX,MAAM,GACP,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EACL,UAAU,EACV,GAAG,EACH,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { type TemplateContext } from "./shared.js";
|
|
2
2
|
export declare function serverProviders(ctx: TemplateContext): string;
|
|
3
3
|
export declare function ports(ctx: TemplateContext): string;
|
|
4
|
-
export declare function
|
|
4
|
+
export declare function portWiring(ctx: TemplateContext): string;
|
|
5
5
|
export declare function env(ctx: TemplateContext): string;
|
|
6
6
|
export declare function betterAuth(ctx: TemplateContext): string;
|
|
7
|
-
export declare function server(
|
|
7
|
+
export declare function server(): string;
|
|
8
8
|
declare const files: {
|
|
9
9
|
appContext: string;
|
|
10
10
|
sharedErrors: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/templates/server.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AAErB,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/templates/server.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AAErB,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAkD5D;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA0ClD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA6CvD;AAED,wBAAgB,GAAG,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAuDhD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA0EvD;AAED,wBAAgB,MAAM,IAAI,MAAM,CA8E/B;AAED,QAAA,MAAM,KAAK;;;;;;;;;;;;;;;;;;;CAoXV,CAAC;AAEF,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,CAAC"}
|
package/dist/templates/server.js
CHANGED
|
@@ -18,6 +18,7 @@ export function serverProviders(ctx) {
|
|
|
18
18
|
? 'import { createUpstashRateLimitProvider } from "@beignet/provider-rate-limit-upstash";'
|
|
19
19
|
: undefined,
|
|
20
20
|
'import * as schema from "@/infra/db/schema";',
|
|
21
|
+
'import { databaseClient } from "@/infra/db/client";',
|
|
21
22
|
'import { starterDatabaseProvider } from "@/infra/db/provider";',
|
|
22
23
|
'import { auth } from "@/lib/better-auth";',
|
|
23
24
|
'import type { AuthSessionMetadata, AuthUser } from "@/ports/auth";',
|
|
@@ -38,7 +39,10 @@ export function serverProviders(ctx) {
|
|
|
38
39
|
].filter((entry) => Boolean(entry));
|
|
39
40
|
return `${imports.join("\n")}
|
|
40
41
|
|
|
41
|
-
const ${db.providerInstance} = ${db.providerFactory}({
|
|
42
|
+
const ${db.providerInstance} = ${db.providerFactory}({
|
|
43
|
+
schema,
|
|
44
|
+
client: databaseClient,
|
|
45
|
+
});
|
|
42
46
|
|
|
43
47
|
export const providers = [
|
|
44
48
|
${entries.join("\n")}
|
|
@@ -87,7 +91,7 @@ ${usesResend ? "\tmailer: MailerPort;\n" : ""}${usesUpstash ? "\trateLimit: Rate
|
|
|
87
91
|
};
|
|
88
92
|
`;
|
|
89
93
|
}
|
|
90
|
-
export function
|
|
94
|
+
export function portWiring(ctx) {
|
|
91
95
|
const deferred = [
|
|
92
96
|
'\t\t"auth",',
|
|
93
97
|
'\t\t"idempotency",',
|
|
@@ -115,13 +119,13 @@ const gate = createGate({
|
|
|
115
119
|
});
|
|
116
120
|
|
|
117
121
|
/**
|
|
118
|
-
*
|
|
122
|
+
* Initial port values the server boots with.
|
|
119
123
|
*
|
|
120
124
|
* Bound ports are app-owned. Every deferred key is contributed by a provider
|
|
121
125
|
* in server/providers.ts during startup; createNextServer(...) fails boot if
|
|
122
126
|
* any of them is still unbound after providers have started.
|
|
123
127
|
*/
|
|
124
|
-
export const
|
|
128
|
+
export const initialPorts = definePorts<AppPorts>()({
|
|
125
129
|
bound: {
|
|
126
130
|
errorReporter: createNoopErrorReporter(),
|
|
127
131
|
gate,
|
|
@@ -138,7 +142,8 @@ export function env(ctx) {
|
|
|
138
142
|
\t\tSQLITE_DB_AUTH_TOKEN: z.string().optional(),`
|
|
139
143
|
: `\t\t${databaseDescriptor(ctx).urlEnvVar}: z
|
|
140
144
|
\t\t\t.string()
|
|
141
|
-
\t\t\t.default("${databaseLocalUrl(ctx.database, ctx.name)}")
|
|
145
|
+
\t\t\t.default("${databaseLocalUrl(ctx.database, ctx.name)}"),
|
|
146
|
+
\t\t${ctx.database === "postgres" ? "POSTGRES" : "MYSQL"}_DB_POOL_MAX: z.coerce.number().int().positive().default(5),`;
|
|
142
147
|
return `import { createEnv } from "@beignet/core/config";
|
|
143
148
|
import { z } from "zod";
|
|
144
149
|
|
|
@@ -187,54 +192,45 @@ export const isDevtoolsEnabled =
|
|
|
187
192
|
}
|
|
188
193
|
export function betterAuth(ctx) {
|
|
189
194
|
const connectionByDatabase = {
|
|
190
|
-
sqlite: `import {
|
|
191
|
-
import { betterAuth } from "better-auth";
|
|
195
|
+
sqlite: `import { betterAuth } from "better-auth";
|
|
192
196
|
import { drizzleAdapter } from "better-auth/adapters/drizzle";
|
|
193
197
|
import { drizzle } from "drizzle-orm/libsql";
|
|
198
|
+
import { databaseClient } from "@/infra/db/client";
|
|
194
199
|
import { ensureDatabaseReady } from "@/infra/db/database-ready";
|
|
195
200
|
import * as schema from "@/infra/db/schema";
|
|
196
201
|
import { env } from "@/lib/env";
|
|
197
202
|
|
|
198
|
-
const client = createClient({
|
|
199
|
-
url: env.SQLITE_DB_URL,
|
|
200
|
-
authToken: env.SQLITE_DB_AUTH_TOKEN,
|
|
201
|
-
});
|
|
202
|
-
|
|
203
203
|
// Auth routes can be the first thing to touch the database, before any
|
|
204
204
|
// Beignet provider boots, so readiness is enforced here too.
|
|
205
|
-
await ensureDatabaseReady(
|
|
205
|
+
await ensureDatabaseReady(databaseClient);
|
|
206
206
|
|
|
207
|
-
const db = drizzle(
|
|
207
|
+
const db = drizzle(databaseClient, { schema });`,
|
|
208
208
|
postgres: `import { betterAuth } from "better-auth";
|
|
209
209
|
import { drizzleAdapter } from "better-auth/adapters/drizzle";
|
|
210
210
|
import { drizzle } from "drizzle-orm/node-postgres";
|
|
211
|
-
import
|
|
211
|
+
import { databaseClient } from "@/infra/db/client";
|
|
212
212
|
import { ensureDatabaseReady } from "@/infra/db/database-ready";
|
|
213
213
|
import * as schema from "@/infra/db/schema";
|
|
214
214
|
import { env } from "@/lib/env";
|
|
215
215
|
|
|
216
|
-
const pool = new pg.Pool({ connectionString: env.POSTGRES_DB_URL });
|
|
217
|
-
|
|
218
216
|
// Auth routes can be the first thing to touch the database, before any
|
|
219
217
|
// Beignet provider boots, so readiness is enforced here too.
|
|
220
|
-
await ensureDatabaseReady(
|
|
218
|
+
await ensureDatabaseReady(databaseClient);
|
|
221
219
|
|
|
222
|
-
const db = drizzle(
|
|
220
|
+
const db = drizzle(databaseClient, { schema });`,
|
|
223
221
|
mysql: `import { betterAuth } from "better-auth";
|
|
224
222
|
import { drizzleAdapter } from "better-auth/adapters/drizzle";
|
|
225
223
|
import { drizzle } from "drizzle-orm/mysql2";
|
|
226
|
-
import
|
|
224
|
+
import { databaseClient } from "@/infra/db/client";
|
|
227
225
|
import { ensureDatabaseReady } from "@/infra/db/database-ready";
|
|
228
226
|
import * as schema from "@/infra/db/schema";
|
|
229
227
|
import { env } from "@/lib/env";
|
|
230
228
|
|
|
231
|
-
const pool = mysql.createPool({ uri: env.MYSQL_DB_URL });
|
|
232
|
-
|
|
233
229
|
// Auth routes can be the first thing to touch the database, before any
|
|
234
230
|
// Beignet provider boots, so readiness is enforced here too.
|
|
235
|
-
await ensureDatabaseReady(
|
|
231
|
+
await ensureDatabaseReady(databaseClient);
|
|
236
232
|
|
|
237
|
-
const db = drizzle(
|
|
233
|
+
const db = drizzle(databaseClient, { schema, mode: "default" });`,
|
|
238
234
|
};
|
|
239
235
|
return `${connectionByDatabase[ctx.database]}
|
|
240
236
|
|
|
@@ -268,16 +264,7 @@ export const auth = betterAuth({
|
|
|
268
264
|
});
|
|
269
265
|
`;
|
|
270
266
|
}
|
|
271
|
-
export function server(
|
|
272
|
-
const db = databaseDescriptor(ctx);
|
|
273
|
-
const providerConfigEntries = ctx.database === "sqlite"
|
|
274
|
-
? `\t\t"drizzle-sqlite": {
|
|
275
|
-
\t\t\tDB_URL: env.SQLITE_DB_URL,
|
|
276
|
-
\t\t\tDB_AUTH_TOKEN: env.SQLITE_DB_AUTH_TOKEN,
|
|
277
|
-
\t\t},`
|
|
278
|
-
: `\t\t"${db.providerName}": {
|
|
279
|
-
\t\t\tDB_URL: env.${db.urlEnvVar},
|
|
280
|
-
\t\t},`;
|
|
267
|
+
export function server() {
|
|
281
268
|
return `import "@beignet/core/server-only";
|
|
282
269
|
import { createNextServer, createNextServerLoader } from "@beignet/next";
|
|
283
270
|
import {
|
|
@@ -286,7 +273,8 @@ import {
|
|
|
286
273
|
createSecurityHeadersHooks,
|
|
287
274
|
} from "@beignet/core/server";
|
|
288
275
|
import type { AppContext } from "@/app-context";
|
|
289
|
-
import {
|
|
276
|
+
import { initialPorts } from "@/infra/port-wiring";
|
|
277
|
+
import { closeDatabaseClient } from "@/infra/db/client";
|
|
290
278
|
import { env } from "@/lib/env";
|
|
291
279
|
import { appContext } from "./context";
|
|
292
280
|
import { routes } from "./routes";
|
|
@@ -294,12 +282,9 @@ import { routes } from "./routes";
|
|
|
294
282
|
export const getServer = createNextServerLoader(async () => {
|
|
295
283
|
const { providers } = await import("./providers");
|
|
296
284
|
|
|
297
|
-
|
|
298
|
-
ports:
|
|
285
|
+
const server = await createNextServer({
|
|
286
|
+
ports: initialPorts,
|
|
299
287
|
providers,
|
|
300
|
-
providerConfig: {
|
|
301
|
-
${providerConfigEntries}
|
|
302
|
-
},
|
|
303
288
|
hooks: [
|
|
304
289
|
createSecurityHeadersHooks<AppContext>(),
|
|
305
290
|
createErrorReportingHooks<AppContext>(),
|
|
@@ -324,7 +309,38 @@ ${providerConfigEntries}
|
|
|
324
309
|
};
|
|
325
310
|
},
|
|
326
311
|
});
|
|
312
|
+
let stopPromise: Promise<void> | undefined;
|
|
313
|
+
|
|
314
|
+
return {
|
|
315
|
+
...server,
|
|
316
|
+
stop() {
|
|
317
|
+
stopPromise ??= stopServerAndDatabase(server);
|
|
318
|
+
return stopPromise;
|
|
319
|
+
},
|
|
320
|
+
};
|
|
327
321
|
});
|
|
322
|
+
|
|
323
|
+
async function stopServerAndDatabase(server: {
|
|
324
|
+
stop(): Promise<void>;
|
|
325
|
+
}): Promise<void> {
|
|
326
|
+
const errors: unknown[] = [];
|
|
327
|
+
try {
|
|
328
|
+
await server.stop();
|
|
329
|
+
} catch (error) {
|
|
330
|
+
errors.push(error);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
try {
|
|
334
|
+
await closeDatabaseClient();
|
|
335
|
+
} catch (error) {
|
|
336
|
+
errors.push(error);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
if (errors.length === 1) throw errors[0];
|
|
340
|
+
if (errors.length > 1) {
|
|
341
|
+
throw new AggregateError(errors, "Server and database shutdown failed");
|
|
342
|
+
}
|
|
343
|
+
}
|
|
328
344
|
`;
|
|
329
345
|
}
|
|
330
346
|
const files = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/templates/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EACL,kBAAkB,EAClB,cAAc,GAEf,MAAM,aAAa,CAAC;AAErB,MAAM,UAAU,eAAe,CAAC,GAAoB;IAClD,MAAM,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG;QACd,qCAAqC;QACrC,6DAA6D;QAC7D,gFAAgF;QAChF,YAAY,EAAE,CAAC,eAAe,yCAAyC,EAAE,CAAC,OAAO,IAAI;QACrF,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC;YAC5B,CAAC,CAAC,6EAA6E;YAC/E,CAAC,CAAC,SAAS;QACb,2EAA2E;QAC3E,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC;YAC3B,CAAC,CAAC,2EAA2E;YAC7E,CAAC,CAAC,SAAS;QACb,cAAc,CAAC,GAAG,EAAE,oBAAoB,CAAC;YACvC,CAAC,CAAC,wFAAwF;YAC1F,CAAC,CAAC,SAAS;QACb,8CAA8C;QAC9C,gEAAgE;QAChE,2CAA2C;QAC3C,oEAAoE;KACrE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAElD,MAAM,OAAO,GAAG;QACd,6BAA6B;QAC7B,kEAAkE;QAClE,+BAA+B;QAC/B,KAAK,EAAE,CAAC,gBAAgB,GAAG;QAC3B,4BAA4B;QAC5B,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC;YAC5B,CAAC,CAAC,gCAAgC;YAClC,CAAC,CAAC,SAAS;QACb,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,SAAS;QAC3E,cAAc,CAAC,GAAG,EAAE,oBAAoB,CAAC;YACvC,CAAC,CAAC,qCAAqC;YACvC,CAAC,CAAC,SAAS;KACd,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAErD,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;QAEtB,EAAE,CAAC,gBAAgB,MAAM,EAAE,CAAC,eAAe
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/templates/server.ts"],"names":[],"mappings":"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"}
|
package/dist/templates/shared.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export const externalVersions = {
|
|
2
2
|
biome: "^2.4.14",
|
|
3
|
-
next: "^16.2.
|
|
3
|
+
next: "^16.2.10",
|
|
4
4
|
react: "^19.2.5",
|
|
5
5
|
reactDom: "^19.2.5",
|
|
6
6
|
tsx: "^4.22.4",
|
|
@@ -16,7 +16,7 @@ export const externalVersions = {
|
|
|
16
16
|
bullmq: "^5.0.0",
|
|
17
17
|
drizzleKit: "^0.31.10",
|
|
18
18
|
drizzleOrm: "^0.45.2",
|
|
19
|
-
inngest: "^3.
|
|
19
|
+
inngest: "^3.54.0",
|
|
20
20
|
libsqlClient: "^0.14.0",
|
|
21
21
|
vercelBlob: "^2.5.0",
|
|
22
22
|
mysql2: "^3.12.0",
|
|
@@ -26,7 +26,7 @@ export const externalVersions = {
|
|
|
26
26
|
resend: "^6.14.0",
|
|
27
27
|
sentryNode: "^10.58.0",
|
|
28
28
|
stripe: "^22.2.1",
|
|
29
|
-
nodemailer: "^
|
|
29
|
+
nodemailer: "^9.0.1",
|
|
30
30
|
openFeatureServerSdk: "^1.22.0",
|
|
31
31
|
typesPg: "^8.11.0",
|
|
32
32
|
ioredis: "^5.0.0",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/templates/shared.ts"],"names":[],"mappings":"AAgCA,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/templates/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -533,7 +533,7 @@ async function configuredRoots(cwd: string): Promise<string[]> {
|
|
|
533
533
|
paths.features,
|
|
534
534
|
parentPath(paths.routes),
|
|
535
535
|
parentPath(paths.server),
|
|
536
|
-
parentPath(paths.
|
|
536
|
+
parentPath(paths.portWiring),
|
|
537
537
|
parentPath(paths.ports),
|
|
538
538
|
parentPath(paths.useCaseBuilder),
|
|
539
539
|
parentPath(paths.routesBuilder),
|
package/dist/templates/todos.js
CHANGED
|
@@ -368,7 +368,7 @@ import {
|
|
|
368
368
|
import { createInMemoryDevtools } from "@beignet/devtools";
|
|
369
369
|
import type { AppContext } from "@/app-context";
|
|
370
370
|
import type { TodoRepository } from "@/features/todos/ports";
|
|
371
|
-
import {
|
|
371
|
+
import { initialPorts } from "@/infra/port-wiring";
|
|
372
372
|
import type { AppTransactionPorts } from "@/ports";
|
|
373
373
|
import {
|
|
374
374
|
createTodoUseCase,
|
|
@@ -388,9 +388,9 @@ function createTester(userId: string, todos: TodoRepository) {
|
|
|
388
388
|
session: { id: \`session_\${userId}\` },
|
|
389
389
|
};
|
|
390
390
|
const testFixture = createTestPorts<AppContext["ports"], AppTransactionPorts>({
|
|
391
|
-
base:
|
|
391
|
+
base: initialPorts,
|
|
392
392
|
overrides: {
|
|
393
|
-
gate:
|
|
393
|
+
gate: initialPorts.gate,
|
|
394
394
|
todos,
|
|
395
395
|
devtools: createInMemoryDevtools(),
|
|
396
396
|
},
|
|
@@ -483,7 +483,7 @@ import { createInMemoryDevtools } from "@beignet/devtools";
|
|
|
483
483
|
import { createTestApp, createTestRequester } from "@beignet/web/testing";
|
|
484
484
|
import type { AppContext } from "@/app-context";
|
|
485
485
|
import type { TodoRepository } from "@/features/todos/ports";
|
|
486
|
-
import {
|
|
486
|
+
import { initialPorts } from "@/infra/port-wiring";
|
|
487
487
|
import type { AppPorts, AppTransactionPorts } from "@/ports";
|
|
488
488
|
import type { AuthRequest, AuthSessionMetadata, AuthUser } from "@/ports/auth";
|
|
489
489
|
import { type AppServiceContextInput, appContext } from "@/server/context";
|
|
@@ -507,9 +507,9 @@ async function createTodosTestApp(
|
|
|
507
507
|
) {
|
|
508
508
|
const todos = options.todos ?? createTestTodoRepository();
|
|
509
509
|
const fixture = createTestPorts<AppContext["ports"], AppTransactionPorts>({
|
|
510
|
-
base:
|
|
510
|
+
base: initialPorts,
|
|
511
511
|
overrides: {
|
|
512
|
-
gate:
|
|
512
|
+
gate: initialPorts.gate,
|
|
513
513
|
todos,
|
|
514
514
|
devtools: createInMemoryDevtools(),
|
|
515
515
|
auth: options.auth ?? createSignedOutAuth(),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@beignet/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.38",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "CLI for creating and maintaining Beignet apps.",
|
|
6
6
|
"main": "./dist/lib.js",
|
|
@@ -66,15 +66,15 @@
|
|
|
66
66
|
"@types/bun": "^1.3.13",
|
|
67
67
|
"@types/node": "^20.10.0",
|
|
68
68
|
"next-themes": "^0.4.6",
|
|
69
|
-
"tsx": "^4.22.4"
|
|
70
|
-
"typescript": "^5.3.0"
|
|
69
|
+
"tsx": "^4.22.4"
|
|
71
70
|
},
|
|
72
71
|
"dependencies": {
|
|
73
|
-
"@beignet/core": "^0.0.
|
|
72
|
+
"@beignet/core": "^0.0.38",
|
|
74
73
|
"@clack/prompts": "^1.5.1",
|
|
75
74
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
76
75
|
"@stricli/core": "^1.2.7",
|
|
77
76
|
"jiti": "^2.7.0",
|
|
77
|
+
"typescript": "^5.3.0",
|
|
78
78
|
"zod": "^4.0.0"
|
|
79
79
|
}
|
|
80
80
|
}
|
package/src/config.ts
CHANGED
|
@@ -23,7 +23,7 @@ export type BeignetPaths = {
|
|
|
23
23
|
schedules: string;
|
|
24
24
|
appContext: string;
|
|
25
25
|
ports: string;
|
|
26
|
-
|
|
26
|
+
portWiring: string;
|
|
27
27
|
features: string;
|
|
28
28
|
policies: string;
|
|
29
29
|
useCases: string;
|
|
@@ -56,6 +56,17 @@ export type BeignetDatabaseConfig = {
|
|
|
56
56
|
schemaSources?: string[];
|
|
57
57
|
};
|
|
58
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Explicit exceptions for static provider package requirements.
|
|
61
|
+
*/
|
|
62
|
+
export type BeignetProviderAuditConfig = {
|
|
63
|
+
/**
|
|
64
|
+
* Environment variables supplied through another mechanism, such as an
|
|
65
|
+
* injected platform client, and therefore not required in app env files.
|
|
66
|
+
*/
|
|
67
|
+
ignoreRequiredEnv?: string[];
|
|
68
|
+
};
|
|
69
|
+
|
|
59
70
|
/**
|
|
60
71
|
* User-authored Beignet CLI config.
|
|
61
72
|
*/
|
|
@@ -63,6 +74,7 @@ export type BeignetConfig = {
|
|
|
63
74
|
framework?: BeignetFramework;
|
|
64
75
|
paths?: Partial<BeignetPaths>;
|
|
65
76
|
database?: BeignetDatabaseConfig;
|
|
77
|
+
providerAudit?: BeignetProviderAuditConfig;
|
|
66
78
|
};
|
|
67
79
|
|
|
68
80
|
/**
|
|
@@ -75,6 +87,9 @@ export type ResolvedBeignetConfig = {
|
|
|
75
87
|
tables: BeignetDatabaseTables;
|
|
76
88
|
schemaSources: string[];
|
|
77
89
|
};
|
|
90
|
+
providerAudit: {
|
|
91
|
+
ignoreRequiredEnv: string[];
|
|
92
|
+
};
|
|
78
93
|
configFile?: string;
|
|
79
94
|
};
|
|
80
95
|
|
|
@@ -94,7 +109,7 @@ export const defaultBeignetConfig: ResolvedBeignetConfig = {
|
|
|
94
109
|
schedules: "server/schedules.ts",
|
|
95
110
|
appContext: "app-context.ts",
|
|
96
111
|
ports: "ports/index.ts",
|
|
97
|
-
|
|
112
|
+
portWiring: "infra/port-wiring.ts",
|
|
98
113
|
features: "features",
|
|
99
114
|
policies: "features",
|
|
100
115
|
useCases: "features",
|
|
@@ -116,6 +131,9 @@ export const defaultBeignetConfig: ResolvedBeignetConfig = {
|
|
|
116
131
|
},
|
|
117
132
|
schemaSources: [],
|
|
118
133
|
},
|
|
134
|
+
providerAudit: {
|
|
135
|
+
ignoreRequiredEnv: [],
|
|
136
|
+
},
|
|
119
137
|
};
|
|
120
138
|
|
|
121
139
|
/**
|
|
@@ -145,11 +163,17 @@ export function resolveConfig(
|
|
|
145
163
|
config.database?.schemaSources ??
|
|
146
164
|
defaultBeignetConfig.database.schemaSources,
|
|
147
165
|
};
|
|
166
|
+
const providerAudit = {
|
|
167
|
+
ignoreRequiredEnv:
|
|
168
|
+
config.providerAudit?.ignoreRequiredEnv ??
|
|
169
|
+
defaultBeignetConfig.providerAudit.ignoreRequiredEnv,
|
|
170
|
+
};
|
|
148
171
|
|
|
149
172
|
return {
|
|
150
173
|
framework: config.framework ?? defaultBeignetConfig.framework,
|
|
151
174
|
paths: normalizeConfigPaths(paths),
|
|
152
175
|
database: normalizeDatabaseConfig(database),
|
|
176
|
+
providerAudit: normalizeProviderAuditConfig(providerAudit),
|
|
153
177
|
configFile,
|
|
154
178
|
};
|
|
155
179
|
}
|
|
@@ -298,6 +322,20 @@ function assertConfigObject(
|
|
|
298
322
|
throw new Error(`${configFile} database must be an object.`);
|
|
299
323
|
}
|
|
300
324
|
|
|
325
|
+
if (config.providerAudit !== undefined && !isRecord(config.providerAudit)) {
|
|
326
|
+
throw new Error(`${configFile} providerAudit must be an object.`);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
if (
|
|
330
|
+
config.providerAudit !== undefined &&
|
|
331
|
+
config.providerAudit.ignoreRequiredEnv !== undefined &&
|
|
332
|
+
!Array.isArray(config.providerAudit.ignoreRequiredEnv)
|
|
333
|
+
) {
|
|
334
|
+
throw new Error(
|
|
335
|
+
`${configFile} providerAudit.ignoreRequiredEnv must be an array.`,
|
|
336
|
+
);
|
|
337
|
+
}
|
|
338
|
+
|
|
301
339
|
if (
|
|
302
340
|
config.database !== undefined &&
|
|
303
341
|
config.database.tables !== undefined &&
|
|
@@ -385,6 +423,32 @@ function normalizeDatabaseSchemaSource(index: number, value: string): string {
|
|
|
385
423
|
return value.trim();
|
|
386
424
|
}
|
|
387
425
|
|
|
426
|
+
function normalizeProviderAuditConfig(config: {
|
|
427
|
+
ignoreRequiredEnv: string[];
|
|
428
|
+
}): {
|
|
429
|
+
ignoreRequiredEnv: string[];
|
|
430
|
+
} {
|
|
431
|
+
return {
|
|
432
|
+
ignoreRequiredEnv: [
|
|
433
|
+
...new Set(
|
|
434
|
+
config.ignoreRequiredEnv.map((value, index) =>
|
|
435
|
+
normalizeIgnoredRequiredEnv(index, value),
|
|
436
|
+
),
|
|
437
|
+
),
|
|
438
|
+
],
|
|
439
|
+
};
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
function normalizeIgnoredRequiredEnv(index: number, value: string): string {
|
|
443
|
+
if (typeof value !== "string" || value.trim() === "") {
|
|
444
|
+
throw new Error(
|
|
445
|
+
`Beignet config providerAudit.ignoreRequiredEnv[${index}] must be a string.`,
|
|
446
|
+
);
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
return value.trim();
|
|
450
|
+
}
|
|
451
|
+
|
|
388
452
|
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
389
453
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
390
454
|
}
|