@beignet/cli 0.0.37 → 0.0.39
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 +26 -0
- package/README.md +138 -101
- package/dist/choices.d.ts +17 -21
- package/dist/choices.d.ts.map +1 -1
- package/dist/choices.js +21 -67
- package/dist/choices.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/create-prompts.d.ts +5 -6
- package/dist/create-prompts.d.ts.map +1 -1
- package/dist/create-prompts.js +15 -15
- package/dist/create-prompts.js.map +1 -1
- package/dist/create.d.ts +11 -2
- package/dist/create.d.ts.map +1 -1
- package/dist/create.js +38 -28
- package/dist/create.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +149 -47
- package/dist/index.js.map +1 -1
- package/dist/inspect.js +69 -16
- package/dist/inspect.js.map +1 -1
- package/dist/lib.d.ts +1 -1
- package/dist/lib.d.ts.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 +10 -10
- 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 +18 -14
- package/dist/make/payments.js.map +1 -1
- package/dist/make/shared.d.ts +11 -4
- package/dist/make/shared.d.ts.map +1 -1
- package/dist/make/shared.js +56 -45
- 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 +3 -2
- package/dist/make.d.ts.map +1 -1
- package/dist/make.js +481 -200
- package/dist/make.js.map +1 -1
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +15 -11
- package/dist/mcp.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.d.ts +21 -3
- package/dist/provider-add.d.ts.map +1 -1
- package/dist/provider-add.js +117 -81
- package/dist/provider-add.js.map +1 -1
- package/dist/provider-audit.js +3 -3
- 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 +38 -5
- package/dist/task.js.map +1 -1
- package/dist/templates/base.d.ts +1 -1
- package/dist/templates/base.d.ts.map +1 -1
- package/dist/templates/base.js +15 -15
- package/dist/templates/base.js.map +1 -1
- package/dist/templates/index.d.ts +2 -2
- package/dist/templates/index.d.ts.map +1 -1
- package/dist/templates/index.js +7 -7
- package/dist/templates/index.js.map +1 -1
- package/dist/templates/server.d.ts +1 -1
- package/dist/templates/server.d.ts.map +1 -1
- package/dist/templates/server.js +22 -18
- package/dist/templates/server.js.map +1 -1
- package/dist/templates/shared.d.ts +4 -4
- package/dist/templates/shared.d.ts.map +1 -1
- package/dist/templates/shared.js +6 -6
- 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/skills/app-structure/SKILL.md +13 -8
- package/src/choices.ts +38 -88
- package/src/config.ts +2 -2
- package/src/create-prompts.ts +20 -21
- package/src/create.ts +54 -36
- package/src/index.ts +193 -65
- package/src/inspect.ts +116 -18
- package/src/lib.ts +1 -1
- package/src/lint.ts +35 -4
- package/src/make/inbox.ts +10 -10
- package/src/make/payments.ts +26 -18
- package/src/make/shared.ts +72 -50
- package/src/make/tenancy.ts +8 -8
- package/src/make.ts +607 -191
- package/src/mcp.ts +20 -13
- package/src/operational-error-reporting.ts +60 -0
- package/src/outbox.ts +77 -0
- package/src/provider-add.ts +179 -95
- package/src/provider-audit.ts +3 -3
- package/src/schedule.ts +32 -1
- package/src/task.ts +42 -5
- package/src/templates/base.ts +16 -16
- package/src/templates/index.ts +8 -8
- package/src/templates/server.ts +22 -18
- package/src/templates/shared.ts +10 -10
- package/src/templates/testing.ts +1 -1
- package/src/templates/todos.ts +6 -6
- package/src/test-helpers/generated-app.ts +1 -0
|
@@ -1,7 +1,7 @@
|
|
|
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
7
|
export declare function server(): 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,CAoD5D;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA0ClD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA+CvD;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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { databaseLocalUrl } from "../choices.js";
|
|
2
|
-
import { databaseDescriptor,
|
|
2
|
+
import { databaseDescriptor, hasStarterProvider, } from "./shared.js";
|
|
3
3
|
export function serverProviders(ctx) {
|
|
4
4
|
const db = databaseDescriptor(ctx);
|
|
5
5
|
const imports = [
|
|
@@ -7,14 +7,14 @@ export function serverProviders(ctx) {
|
|
|
7
7
|
'import { createDevtoolsProvider } from "@beignet/devtools";',
|
|
8
8
|
'import { createBetterAuthProvider } from "@beignet/provider-auth-better-auth";',
|
|
9
9
|
`import { ${db.providerFactory} } from "@beignet/provider-db-drizzle/${db.subpath}";`,
|
|
10
|
-
|
|
10
|
+
hasStarterProvider(ctx, "jobs-inngest")
|
|
11
11
|
? 'import { createInngestJobsProvider } from "@beignet/provider-jobs-inngest";'
|
|
12
12
|
: undefined,
|
|
13
13
|
'import { createPinoLoggerProvider } from "@beignet/provider-logger-pino";',
|
|
14
|
-
|
|
14
|
+
hasStarterProvider(ctx, "mail-resend")
|
|
15
15
|
? 'import { createResendMailProvider } from "@beignet/provider-mail-resend";'
|
|
16
16
|
: undefined,
|
|
17
|
-
|
|
17
|
+
hasStarterProvider(ctx, "rate-limit-upstash")
|
|
18
18
|
? 'import { createUpstashRateLimitProvider } from "@beignet/provider-rate-limit-upstash";'
|
|
19
19
|
: undefined,
|
|
20
20
|
'import * as schema from "@/infra/db/schema";',
|
|
@@ -29,11 +29,13 @@ export function serverProviders(ctx) {
|
|
|
29
29
|
"\tcreatePinoLoggerProvider(),",
|
|
30
30
|
`\t${db.providerInstance},`,
|
|
31
31
|
"\tstarterDatabaseProvider,",
|
|
32
|
-
|
|
32
|
+
hasStarterProvider(ctx, "jobs-inngest")
|
|
33
33
|
? "\tcreateInngestJobsProvider(),"
|
|
34
34
|
: undefined,
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
hasStarterProvider(ctx, "mail-resend")
|
|
36
|
+
? "\tcreateResendMailProvider(),"
|
|
37
|
+
: undefined,
|
|
38
|
+
hasStarterProvider(ctx, "rate-limit-upstash")
|
|
37
39
|
? "\tcreateUpstashRateLimitProvider(),"
|
|
38
40
|
: undefined,
|
|
39
41
|
].filter((entry) => Boolean(entry));
|
|
@@ -50,9 +52,9 @@ ${entries.join("\n")}
|
|
|
50
52
|
`;
|
|
51
53
|
}
|
|
52
54
|
export function ports(ctx) {
|
|
53
|
-
const usesInngest =
|
|
54
|
-
const usesResend =
|
|
55
|
-
const usesUpstash =
|
|
55
|
+
const usesInngest = hasStarterProvider(ctx, "jobs-inngest");
|
|
56
|
+
const usesResend = hasStarterProvider(ctx, "mail-resend");
|
|
57
|
+
const usesUpstash = hasStarterProvider(ctx, "rate-limit-upstash");
|
|
56
58
|
const coreImports = [
|
|
57
59
|
"\tBoundGate,",
|
|
58
60
|
"\tGatePort,",
|
|
@@ -91,14 +93,16 @@ ${usesResend ? "\tmailer: MailerPort;\n" : ""}${usesUpstash ? "\trateLimit: Rate
|
|
|
91
93
|
};
|
|
92
94
|
`;
|
|
93
95
|
}
|
|
94
|
-
export function
|
|
96
|
+
export function portWiring(ctx) {
|
|
95
97
|
const deferred = [
|
|
96
98
|
'\t\t"auth",',
|
|
97
99
|
'\t\t"idempotency",',
|
|
98
|
-
|
|
100
|
+
hasStarterProvider(ctx, "jobs-inngest") ? '\t\t"jobs",' : undefined,
|
|
99
101
|
'\t\t"logger",',
|
|
100
|
-
|
|
101
|
-
|
|
102
|
+
hasStarterProvider(ctx, "mail-resend") ? '\t\t"mailer",' : undefined,
|
|
103
|
+
hasStarterProvider(ctx, "rate-limit-upstash")
|
|
104
|
+
? '\t\t"rateLimit",'
|
|
105
|
+
: undefined,
|
|
102
106
|
'\t\t"todos",',
|
|
103
107
|
'\t\t"uow",',
|
|
104
108
|
].filter((entry) => Boolean(entry));
|
|
@@ -119,13 +123,13 @@ const gate = createGate({
|
|
|
119
123
|
});
|
|
120
124
|
|
|
121
125
|
/**
|
|
122
|
-
*
|
|
126
|
+
* Initial port values the server boots with.
|
|
123
127
|
*
|
|
124
128
|
* Bound ports are app-owned. Every deferred key is contributed by a provider
|
|
125
129
|
* in server/providers.ts during startup; createNextServer(...) fails boot if
|
|
126
130
|
* any of them is still unbound after providers have started.
|
|
127
131
|
*/
|
|
128
|
-
export const
|
|
132
|
+
export const initialPorts = definePorts<AppPorts>()({
|
|
129
133
|
bound: {
|
|
130
134
|
errorReporter: createNoopErrorReporter(),
|
|
131
135
|
gate,
|
|
@@ -273,7 +277,7 @@ import {
|
|
|
273
277
|
createSecurityHeadersHooks,
|
|
274
278
|
} from "@beignet/core/server";
|
|
275
279
|
import type { AppContext } from "@/app-context";
|
|
276
|
-
import {
|
|
280
|
+
import { initialPorts } from "@/infra/port-wiring";
|
|
277
281
|
import { closeDatabaseClient } from "@/infra/db/client";
|
|
278
282
|
import { env } from "@/lib/env";
|
|
279
283
|
import { appContext } from "./context";
|
|
@@ -283,7 +287,7 @@ export const getServer = createNextServerLoader(async () => {
|
|
|
283
287
|
const { providers } = await import("./providers");
|
|
284
288
|
|
|
285
289
|
const server = await createNextServer({
|
|
286
|
-
ports:
|
|
290
|
+
ports: initialPorts,
|
|
287
291
|
providers,
|
|
288
292
|
hooks: [
|
|
289
293
|
createSecurityHeadersHooks<AppContext>(),
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/templates/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DatabaseName,
|
|
1
|
+
import type { DatabaseName, PackageManager, StarterProviderName } from "../choices.js";
|
|
2
2
|
/**
|
|
3
3
|
* One generated file emitted by the template generator.
|
|
4
4
|
*/
|
|
@@ -17,7 +17,7 @@ export type TemplateContext = {
|
|
|
17
17
|
* When true, scaffold an API-only app without the UI shell.
|
|
18
18
|
*/
|
|
19
19
|
api: boolean;
|
|
20
|
-
|
|
20
|
+
providers: StarterProviderName[];
|
|
21
21
|
/**
|
|
22
22
|
* Database backing the starter's Drizzle persistence layer.
|
|
23
23
|
*/
|
|
@@ -87,7 +87,7 @@ export type DatabaseDescriptor = {
|
|
|
87
87
|
};
|
|
88
88
|
export declare function databaseDescriptor(ctx: TemplateContext): DatabaseDescriptor;
|
|
89
89
|
export declare function packageRunner(ctx: TemplateContext): string;
|
|
90
|
-
export declare const
|
|
91
|
-
export declare function
|
|
90
|
+
export declare const starterProviderDeps: Record<StarterProviderName, Record<string, string>>;
|
|
91
|
+
export declare function hasStarterProvider(ctx: TemplateContext, provider: StarterProviderName): boolean;
|
|
92
92
|
export declare function json(value: unknown): string;
|
|
93
93
|
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/templates/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/templates/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,mBAAmB,EACpB,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmC5B,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIhE,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIjE,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,+DAA+D;IAC/D,OAAO,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IACzC,kGAAkG;IAClG,QAAQ,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IAC1C,qEAAqE;IACrE,YAAY,EACR,uBAAuB,GACvB,yBAAyB,GACzB,sBAAsB,CAAC;IAC3B,2DAA2D;IAC3D,eAAe,EACX,6BAA6B,GAC7B,+BAA+B,GAC/B,4BAA4B,CAAC;IACjC,8DAA8D;IAC9D,gBAAgB,EACZ,uBAAuB,GACvB,yBAAyB,GACzB,sBAAsB,CAAC;IAC3B,8DAA8D;IAC9D,YAAY,EAAE,gBAAgB,GAAG,kBAAkB,GAAG,eAAe,CAAC;IACtE,sEAAsE;IACtE,SAAS,EAAE,eAAe,GAAG,iBAAiB,GAAG,cAAc,CAAC;IAChE,0CAA0C;IAC1C,iBAAiB,EAAE,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;IACrD,mDAAmD;IACnD,kBAAkB,EAAE,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC;CAC/C,CAAC;AAyCF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,eAAe,GAAG,kBAAkB,CAE3E;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAW1D;AAED,eAAO,MAAM,mBAAmB,EAAE,MAAM,CACtC,mBAAmB,EACnB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAevB,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE,mBAAmB,GAC5B,OAAO,CAET;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE3C"}
|
package/dist/templates/shared.js
CHANGED
|
@@ -97,23 +97,23 @@ export function packageRunner(ctx) {
|
|
|
97
97
|
return "bun beignet";
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
|
-
export const
|
|
101
|
-
inngest: {
|
|
100
|
+
export const starterProviderDeps = {
|
|
101
|
+
"jobs-inngest": {
|
|
102
102
|
"@beignet/provider-jobs-inngest": "",
|
|
103
103
|
inngest: externalVersions.inngest,
|
|
104
104
|
},
|
|
105
|
-
resend: {
|
|
105
|
+
"mail-resend": {
|
|
106
106
|
"@beignet/provider-mail-resend": "",
|
|
107
107
|
resend: externalVersions.resend,
|
|
108
108
|
},
|
|
109
|
-
"
|
|
109
|
+
"rate-limit-upstash": {
|
|
110
110
|
"@beignet/provider-rate-limit-upstash": "",
|
|
111
111
|
"@upstash/ratelimit": externalVersions.upstashRateLimit,
|
|
112
112
|
"@upstash/redis": externalVersions.upstashRedis,
|
|
113
113
|
},
|
|
114
114
|
};
|
|
115
|
-
export function
|
|
116
|
-
return ctx.
|
|
115
|
+
export function hasStarterProvider(ctx, provider) {
|
|
116
|
+
return ctx.providers.includes(provider);
|
|
117
117
|
}
|
|
118
118
|
export function json(value) {
|
|
119
119
|
return `${JSON.stringify(value, null, "\t")}\n`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/templates/shared.ts"],"names":[],"mappings":"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
|
|
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.39",
|
|
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.39",
|
|
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
|
}
|
|
@@ -34,19 +34,24 @@ Use:
|
|
|
34
34
|
```bash
|
|
35
35
|
beignet make feature projects
|
|
36
36
|
beignet make feature projects --recipe full-slice
|
|
37
|
-
beignet make resource projects
|
|
38
|
-
beignet make event posts
|
|
39
|
-
beignet make listener posts
|
|
40
|
-
beignet make job billing
|
|
41
|
-
beignet make schedule billing
|
|
42
|
-
beignet make task admin
|
|
43
|
-
beignet make seed demo
|
|
44
|
-
beignet make upload issues
|
|
37
|
+
beignet make resource projects --authorization --tenant-scoped
|
|
38
|
+
beignet make event posts.published
|
|
39
|
+
beignet make listener posts.enqueue-published-email --event posts.published
|
|
40
|
+
beignet make job billing.sync
|
|
41
|
+
beignet make schedule billing.nightly --cron "0 2 * * *"
|
|
42
|
+
beignet make task admin.backfill
|
|
43
|
+
beignet make seed demo.users
|
|
44
|
+
beignet make upload issues.attachment
|
|
45
|
+
beignet make upload issues.attachment --ui
|
|
45
46
|
```
|
|
46
47
|
|
|
47
48
|
Generators place files under the owning feature, update central registries
|
|
48
49
|
when possible, and keep `doctor` clean.
|
|
49
50
|
|
|
51
|
+
Use `make upload --ui` in full-stack apps when the upload should include a
|
|
52
|
+
shared client/server constraint manifest, typed React upload client, uploader,
|
|
53
|
+
and component test. Omit `--ui` for API-only or backend-only workflows.
|
|
54
|
+
|
|
50
55
|
Use the `full-slice` recipe when you need a richer reference feature with
|
|
51
56
|
policy, client helpers, workflow artifacts, events, listener registration,
|
|
52
57
|
jobs, schedules, notifications, uploads, seeds, and outbox wiring. After
|
package/src/choices.ts
CHANGED
|
@@ -14,18 +14,21 @@ export type PackageManager = "bun" | "npm" | "pnpm" | "yarn";
|
|
|
14
14
|
*/
|
|
15
15
|
export type TemplateName = "next";
|
|
16
16
|
/**
|
|
17
|
-
* Optional
|
|
17
|
+
* Optional providers rendered directly by the starter template.
|
|
18
18
|
*
|
|
19
19
|
* Better Auth, Drizzle/libSQL, and pino ship in every starter, so only
|
|
20
|
-
*
|
|
20
|
+
* providers that add an external service remain selectable.
|
|
21
21
|
*/
|
|
22
|
-
export type
|
|
22
|
+
export type StarterProviderName =
|
|
23
|
+
| "jobs-inngest"
|
|
24
|
+
| "mail-resend"
|
|
25
|
+
| "rate-limit-upstash";
|
|
23
26
|
/**
|
|
24
27
|
* Databases supported by the starter's Drizzle persistence layer.
|
|
25
28
|
*/
|
|
26
29
|
export type DatabaseName = "sqlite" | "postgres" | "mysql";
|
|
27
30
|
/**
|
|
28
|
-
* Provider setup presets supported by `beignet
|
|
31
|
+
* Provider setup presets supported by `beignet provider add`.
|
|
29
32
|
*/
|
|
30
33
|
export type ProviderPresetName =
|
|
31
34
|
| "flags-openfeature"
|
|
@@ -35,13 +38,13 @@ export type ProviderPresetName =
|
|
|
35
38
|
| "mail-smtp"
|
|
36
39
|
| "payments-stripe"
|
|
37
40
|
| "search-meilisearch"
|
|
38
|
-
| "sentry"
|
|
39
|
-
| "
|
|
40
|
-
| "redis
|
|
41
|
+
| "error-reporting-sentry"
|
|
42
|
+
| "rate-limit-upstash"
|
|
43
|
+
| "cache-redis"
|
|
41
44
|
| "event-bus-redis"
|
|
42
|
-
| "redis
|
|
43
|
-
| "s3
|
|
44
|
-
| "vercel-blob
|
|
45
|
+
| "locks-redis"
|
|
46
|
+
| "storage-s3"
|
|
47
|
+
| "storage-vercel-blob";
|
|
45
48
|
|
|
46
49
|
/**
|
|
47
50
|
* Supported scaffold template choices.
|
|
@@ -61,13 +64,13 @@ export const packageManagerChoices = [
|
|
|
61
64
|
] as const satisfies readonly PackageManager[];
|
|
62
65
|
|
|
63
66
|
/**
|
|
64
|
-
* Supported
|
|
67
|
+
* Supported providers rendered directly by the starter.
|
|
65
68
|
*/
|
|
66
|
-
export const
|
|
67
|
-
"inngest",
|
|
68
|
-
"resend",
|
|
69
|
-
"
|
|
70
|
-
] as const satisfies readonly
|
|
69
|
+
export const starterProviderChoices = [
|
|
70
|
+
"jobs-inngest",
|
|
71
|
+
"mail-resend",
|
|
72
|
+
"rate-limit-upstash",
|
|
73
|
+
] as const satisfies readonly StarterProviderName[];
|
|
71
74
|
|
|
72
75
|
/**
|
|
73
76
|
* Supported scaffold database choices.
|
|
@@ -89,89 +92,45 @@ export const providerPresetChoices = [
|
|
|
89
92
|
"mail-smtp",
|
|
90
93
|
"payments-stripe",
|
|
91
94
|
"search-meilisearch",
|
|
92
|
-
"sentry",
|
|
93
|
-
"
|
|
94
|
-
"redis
|
|
95
|
+
"error-reporting-sentry",
|
|
96
|
+
"rate-limit-upstash",
|
|
97
|
+
"cache-redis",
|
|
95
98
|
"event-bus-redis",
|
|
96
|
-
"redis
|
|
97
|
-
"s3
|
|
98
|
-
"vercel-blob
|
|
99
|
+
"locks-redis",
|
|
100
|
+
"storage-s3",
|
|
101
|
+
"storage-vercel-blob",
|
|
99
102
|
] as const satisfies readonly ProviderPresetName[];
|
|
100
103
|
|
|
101
104
|
/**
|
|
102
|
-
* Values accepted by `beignet create --
|
|
103
|
-
* integrations plus the full `beignet providers add` preset catalog.
|
|
105
|
+
* Values accepted by `beignet create --providers`.
|
|
104
106
|
*/
|
|
105
|
-
export type
|
|
107
|
+
export type CreateProviderName = ProviderPresetName;
|
|
106
108
|
|
|
107
109
|
/**
|
|
108
|
-
* Supported `beignet create --
|
|
109
|
-
* come first; the rest of the provider preset catalog follows.
|
|
110
|
+
* Supported `beignet create --providers` choices.
|
|
110
111
|
*/
|
|
111
|
-
export const
|
|
112
|
-
"inngest",
|
|
113
|
-
"resend",
|
|
114
|
-
"upstash-rate-limit",
|
|
115
|
-
"flags-openfeature",
|
|
116
|
-
"jobs-bullmq",
|
|
117
|
-
"jobs-inngest",
|
|
118
|
-
"mail-resend",
|
|
119
|
-
"mail-smtp",
|
|
120
|
-
"payments-stripe",
|
|
121
|
-
"redis-cache",
|
|
122
|
-
"event-bus-redis",
|
|
123
|
-
"redis-locks",
|
|
124
|
-
"s3-storage",
|
|
125
|
-
"search-meilisearch",
|
|
126
|
-
"sentry",
|
|
127
|
-
"vercel-blob-storage",
|
|
128
|
-
] as const satisfies readonly CreateIntegrationName[];
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Provider presets whose create-time wiring already ships as a starter
|
|
132
|
-
* template integration. Selecting the preset name at create time scaffolds
|
|
133
|
-
* the equivalent template integration, so preset and integration stay
|
|
134
|
-
* consistent and `beignet providers add` remains a no-op afterwards.
|
|
135
|
-
*/
|
|
136
|
-
const presetTemplateIntegrationAliases: Partial<
|
|
137
|
-
Record<ProviderPresetName, IntegrationName>
|
|
138
|
-
> = {
|
|
139
|
-
"jobs-inngest": "inngest",
|
|
140
|
-
"mail-resend": "resend",
|
|
141
|
-
"upstash-rate-limit": "upstash-rate-limit",
|
|
142
|
-
};
|
|
112
|
+
export const createProviderChoices = providerPresetChoices;
|
|
143
113
|
|
|
144
114
|
/**
|
|
145
|
-
* Split `--
|
|
146
|
-
*
|
|
147
|
-
* the scaffold is written. Preset names with a template equivalent are
|
|
148
|
-
* normalized to the template integration; duplicates collapse.
|
|
115
|
+
* Split `--providers` selections into providers rendered directly by the
|
|
116
|
+
* starter and presets applied after the scaffold is written.
|
|
149
117
|
*/
|
|
150
|
-
export function
|
|
151
|
-
|
|
152
|
-
): {
|
|
153
|
-
integrations: IntegrationName[];
|
|
118
|
+
export function splitCreateProviders(values: readonly CreateProviderName[]): {
|
|
119
|
+
starterProviders: StarterProviderName[];
|
|
154
120
|
presets: ProviderPresetName[];
|
|
155
121
|
} {
|
|
156
|
-
const
|
|
122
|
+
const starterProviders = new Set<StarterProviderName>();
|
|
157
123
|
const presets = new Set<ProviderPresetName>();
|
|
158
124
|
|
|
159
125
|
for (const value of values) {
|
|
160
|
-
if ((
|
|
161
|
-
|
|
162
|
-
continue;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
const preset = value as ProviderPresetName;
|
|
166
|
-
const alias = presetTemplateIntegrationAliases[preset];
|
|
167
|
-
if (alias) {
|
|
168
|
-
integrations.add(alias);
|
|
126
|
+
if ((starterProviderChoices as readonly string[]).includes(value)) {
|
|
127
|
+
starterProviders.add(value as StarterProviderName);
|
|
169
128
|
} else {
|
|
170
|
-
presets.add(
|
|
129
|
+
presets.add(value);
|
|
171
130
|
}
|
|
172
131
|
}
|
|
173
132
|
|
|
174
|
-
return {
|
|
133
|
+
return { starterProviders: [...starterProviders], presets: [...presets] };
|
|
175
134
|
}
|
|
176
135
|
|
|
177
136
|
/**
|
|
@@ -246,24 +205,15 @@ export const completionShellChoices = [
|
|
|
246
205
|
export const makeFeatureAddonChoices = [
|
|
247
206
|
"policy",
|
|
248
207
|
"factory",
|
|
249
|
-
"factories",
|
|
250
208
|
"event",
|
|
251
|
-
"events",
|
|
252
209
|
"job",
|
|
253
|
-
"jobs",
|
|
254
210
|
"listener",
|
|
255
|
-
"listeners",
|
|
256
211
|
"notification",
|
|
257
|
-
"notifications",
|
|
258
212
|
"schedule",
|
|
259
|
-
"schedules",
|
|
260
213
|
"seed",
|
|
261
|
-
"seeds",
|
|
262
214
|
"task",
|
|
263
|
-
"tasks",
|
|
264
215
|
"ui",
|
|
265
216
|
"upload",
|
|
266
|
-
"uploads",
|
|
267
217
|
] as const;
|
|
268
218
|
|
|
269
219
|
/**
|
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;
|
|
@@ -109,7 +109,7 @@ export const defaultBeignetConfig: ResolvedBeignetConfig = {
|
|
|
109
109
|
schedules: "server/schedules.ts",
|
|
110
110
|
appContext: "app-context.ts",
|
|
111
111
|
ports: "ports/index.ts",
|
|
112
|
-
|
|
112
|
+
portWiring: "infra/port-wiring.ts",
|
|
113
113
|
features: "features",
|
|
114
114
|
policies: "features",
|
|
115
115
|
useCases: "features",
|