@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.
Files changed (113) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +138 -101
  3. package/dist/choices.d.ts +17 -21
  4. package/dist/choices.d.ts.map +1 -1
  5. package/dist/choices.js +21 -67
  6. package/dist/choices.js.map +1 -1
  7. package/dist/config.d.ts +1 -1
  8. package/dist/config.d.ts.map +1 -1
  9. package/dist/config.js +1 -1
  10. package/dist/config.js.map +1 -1
  11. package/dist/create-prompts.d.ts +5 -6
  12. package/dist/create-prompts.d.ts.map +1 -1
  13. package/dist/create-prompts.js +15 -15
  14. package/dist/create-prompts.js.map +1 -1
  15. package/dist/create.d.ts +11 -2
  16. package/dist/create.d.ts.map +1 -1
  17. package/dist/create.js +38 -28
  18. package/dist/create.js.map +1 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +149 -47
  21. package/dist/index.js.map +1 -1
  22. package/dist/inspect.js +69 -16
  23. package/dist/inspect.js.map +1 -1
  24. package/dist/lib.d.ts +1 -1
  25. package/dist/lib.d.ts.map +1 -1
  26. package/dist/lint.d.ts.map +1 -1
  27. package/dist/lint.js +27 -6
  28. package/dist/lint.js.map +1 -1
  29. package/dist/make/inbox.js +10 -10
  30. package/dist/make/inbox.js.map +1 -1
  31. package/dist/make/payments.d.ts +2 -1
  32. package/dist/make/payments.d.ts.map +1 -1
  33. package/dist/make/payments.js +18 -14
  34. package/dist/make/payments.js.map +1 -1
  35. package/dist/make/shared.d.ts +11 -4
  36. package/dist/make/shared.d.ts.map +1 -1
  37. package/dist/make/shared.js +56 -45
  38. package/dist/make/shared.js.map +1 -1
  39. package/dist/make/tenancy.js +8 -8
  40. package/dist/make/tenancy.js.map +1 -1
  41. package/dist/make.d.ts +3 -2
  42. package/dist/make.d.ts.map +1 -1
  43. package/dist/make.js +481 -200
  44. package/dist/make.js.map +1 -1
  45. package/dist/mcp.d.ts.map +1 -1
  46. package/dist/mcp.js +15 -11
  47. package/dist/mcp.js.map +1 -1
  48. package/dist/operational-error-reporting.d.ts +15 -0
  49. package/dist/operational-error-reporting.d.ts.map +1 -0
  50. package/dist/operational-error-reporting.js +42 -0
  51. package/dist/operational-error-reporting.js.map +1 -0
  52. package/dist/outbox.d.ts.map +1 -1
  53. package/dist/outbox.js +73 -0
  54. package/dist/outbox.js.map +1 -1
  55. package/dist/provider-add.d.ts +21 -3
  56. package/dist/provider-add.d.ts.map +1 -1
  57. package/dist/provider-add.js +117 -81
  58. package/dist/provider-add.js.map +1 -1
  59. package/dist/provider-audit.js +3 -3
  60. package/dist/provider-audit.js.map +1 -1
  61. package/dist/schedule.d.ts.map +1 -1
  62. package/dist/schedule.js +28 -1
  63. package/dist/schedule.js.map +1 -1
  64. package/dist/task.d.ts.map +1 -1
  65. package/dist/task.js +38 -5
  66. package/dist/task.js.map +1 -1
  67. package/dist/templates/base.d.ts +1 -1
  68. package/dist/templates/base.d.ts.map +1 -1
  69. package/dist/templates/base.js +15 -15
  70. package/dist/templates/base.js.map +1 -1
  71. package/dist/templates/index.d.ts +2 -2
  72. package/dist/templates/index.d.ts.map +1 -1
  73. package/dist/templates/index.js +7 -7
  74. package/dist/templates/index.js.map +1 -1
  75. package/dist/templates/server.d.ts +1 -1
  76. package/dist/templates/server.d.ts.map +1 -1
  77. package/dist/templates/server.js +22 -18
  78. package/dist/templates/server.js.map +1 -1
  79. package/dist/templates/shared.d.ts +4 -4
  80. package/dist/templates/shared.d.ts.map +1 -1
  81. package/dist/templates/shared.js +6 -6
  82. package/dist/templates/shared.js.map +1 -1
  83. package/dist/templates/testing.js +1 -1
  84. package/dist/templates/todos.js +6 -6
  85. package/package.json +4 -4
  86. package/skills/app-structure/SKILL.md +13 -8
  87. package/src/choices.ts +38 -88
  88. package/src/config.ts +2 -2
  89. package/src/create-prompts.ts +20 -21
  90. package/src/create.ts +54 -36
  91. package/src/index.ts +193 -65
  92. package/src/inspect.ts +116 -18
  93. package/src/lib.ts +1 -1
  94. package/src/lint.ts +35 -4
  95. package/src/make/inbox.ts +10 -10
  96. package/src/make/payments.ts +26 -18
  97. package/src/make/shared.ts +72 -50
  98. package/src/make/tenancy.ts +8 -8
  99. package/src/make.ts +607 -191
  100. package/src/mcp.ts +20 -13
  101. package/src/operational-error-reporting.ts +60 -0
  102. package/src/outbox.ts +77 -0
  103. package/src/provider-add.ts +179 -95
  104. package/src/provider-audit.ts +3 -3
  105. package/src/schedule.ts +32 -1
  106. package/src/task.ts +42 -5
  107. package/src/templates/base.ts +16 -16
  108. package/src/templates/index.ts +8 -8
  109. package/src/templates/server.ts +22 -18
  110. package/src/templates/shared.ts +10 -10
  111. package/src/templates/testing.ts +1 -1
  112. package/src/templates/todos.ts +6 -6
  113. 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 infrastructurePorts(ctx: TemplateContext): string;
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,CAkD5D;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA0ClD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA6ChE;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"}
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"}
@@ -1,5 +1,5 @@
1
1
  import { databaseLocalUrl } from "../choices.js";
2
- import { databaseDescriptor, hasIntegration, } from "./shared.js";
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
- hasIntegration(ctx, "inngest")
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
- hasIntegration(ctx, "resend")
14
+ hasStarterProvider(ctx, "mail-resend")
15
15
  ? 'import { createResendMailProvider } from "@beignet/provider-mail-resend";'
16
16
  : undefined,
17
- hasIntegration(ctx, "upstash-rate-limit")
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
- hasIntegration(ctx, "inngest")
32
+ hasStarterProvider(ctx, "jobs-inngest")
33
33
  ? "\tcreateInngestJobsProvider(),"
34
34
  : undefined,
35
- hasIntegration(ctx, "resend") ? "\tcreateResendMailProvider()," : undefined,
36
- hasIntegration(ctx, "upstash-rate-limit")
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 = hasIntegration(ctx, "inngest");
54
- const usesResend = hasIntegration(ctx, "resend");
55
- const usesUpstash = hasIntegration(ctx, "upstash-rate-limit");
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 infrastructurePorts(ctx) {
96
+ export function portWiring(ctx) {
95
97
  const deferred = [
96
98
  '\t\t"auth",',
97
99
  '\t\t"idempotency",',
98
- hasIntegration(ctx, "inngest") ? '\t\t"jobs",' : undefined,
100
+ hasStarterProvider(ctx, "jobs-inngest") ? '\t\t"jobs",' : undefined,
99
101
  '\t\t"logger",',
100
- hasIntegration(ctx, "resend") ? '\t\t"mailer",' : undefined,
101
- hasIntegration(ctx, "upstash-rate-limit") ? '\t\t"rateLimit",' : undefined,
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
- * App ports the server boots with.
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 appPorts = definePorts<AppPorts>()({
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 { appPorts } from "@/infra/app-ports";
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: appPorts,
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":"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"}
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, IntegrationName, PackageManager } from "../choices.js";
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
- integrations: IntegrationName[];
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 integrationDeps: Record<IntegrationName, Record<string, string>>;
91
- export declare function hasIntegration(ctx: TemplateContext, integration: IntegrationName): boolean;
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,eAAe,EACf,cAAc,EACf,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,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC;;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,eAAe,EAAE,MAAM,CAClC,eAAe,EACf,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAevB,CAAC;AAEF,wBAAgB,cAAc,CAC5B,GAAG,EAAE,eAAe,EACpB,WAAW,EAAE,eAAe,GAC3B,OAAO,CAET;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE3C"}
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"}
@@ -97,23 +97,23 @@ export function packageRunner(ctx) {
97
97
  return "bun beignet";
98
98
  }
99
99
  }
100
- export const integrationDeps = {
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
- "upstash-rate-limit": {
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 hasIntegration(ctx, integration) {
116
- return ctx.integrations.includes(integration);
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":"AAgCA,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,SAAS;IACnB,GAAG,EAAE,SAAS;IACd,UAAU,EAAE,QAAQ;IACpB,SAAS,EAAE,UAAU;IACrB,UAAU,EAAE,SAAS;IACrB,aAAa,EAAE,SAAS;IACxB,GAAG,EAAE,QAAQ;IACb,kBAAkB,EAAE,UAAU;IAC9B,iBAAiB,EAAE,QAAQ;IAC3B,aAAa,EAAE,SAAS;IACxB,UAAU,EAAE,QAAQ;IACpB,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,UAAU;IACtB,UAAU,EAAE,SAAS;IACrB,OAAO,EAAE,SAAS;IAClB,YAAY,EAAE,SAAS;IACvB,UAAU,EAAE,QAAQ;IACpB,MAAM,EAAE,SAAS;IACjB,EAAE,EAAE,SAAS;IACb,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,SAAS;IACjB,UAAU,EAAE,UAAU;IACtB,MAAM,EAAE,SAAS;IACjB,UAAU,EAAE,QAAQ;IACpB,oBAAoB,EAAE,SAAS;IAC/B,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,QAAQ;IACjB,QAAQ,EAAE,UAAU;IACpB,gBAAgB,EAAE,QAAQ;IAC1B,YAAY,EAAE,QAAQ;CACvB,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAA2B;IACnE,UAAU,EAAE,uBAAuB;IACnC,SAAS,EAAE,oBAAoB;IAC/B,IAAI,EAAE,UAAU;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAA2B;IACpE,UAAU,EAAE,uBAAuB;IACnC,SAAS,EAAE,oBAAoB;IAC/B,IAAI,EAAE,gCAAgC;CACvC,CAAC;AAoCF,MAAM,mBAAmB,GAA6C;IACpE,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE,uBAAuB;QACrC,eAAe,EAAE,6BAA6B;QAC9C,gBAAgB,EAAE,uBAAuB;QACzC,YAAY,EAAE,gBAAgB;QAC9B,SAAS,EAAE,eAAe;QAC1B,iBAAiB,EAAE,QAAQ;QAC3B,kBAAkB,EAAE,QAAQ;KAC7B;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,UAAU;QACnB,QAAQ,EAAE,UAAU;QACpB,YAAY,EAAE,yBAAyB;QACvC,eAAe,EAAE,+BAA+B;QAChD,gBAAgB,EAAE,yBAAyB;QAC3C,YAAY,EAAE,kBAAkB;QAChC,SAAS,EAAE,iBAAiB;QAC5B,iBAAiB,EAAE,YAAY;QAC/B,kBAAkB,EAAE,IAAI;KACzB;IACD,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,OAAO;QACjB,YAAY,EAAE,sBAAsB;QACpC,eAAe,EAAE,4BAA4B;QAC7C,gBAAgB,EAAE,sBAAsB;QACxC,YAAY,EAAE,eAAe;QAC7B,SAAS,EAAE,cAAc;QACzB,iBAAiB,EAAE,OAAO;QAC1B,kBAAkB,EAAE,OAAO;KAC5B;CACF,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,GAAoB;IACrD,OAAO,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAoB;IAChD,QAAQ,GAAG,CAAC,cAAc,EAAE,CAAC;QAC3B,KAAK,KAAK;YACR,OAAO,oBAAoB,CAAC;QAC9B,KAAK,MAAM;YACT,OAAO,cAAc,CAAC;QACxB,KAAK,MAAM;YACT,OAAO,cAAc,CAAC;QACxB;YACE,OAAO,aAAa,CAAC;IACzB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAGxB;IACF,OAAO,EAAE;QACP,gCAAgC,EAAE,EAAE;QACpC,OAAO,EAAE,gBAAgB,CAAC,OAAO;KAClC;IACD,MAAM,EAAE;QACN,+BAA+B,EAAE,EAAE;QACnC,MAAM,EAAE,gBAAgB,CAAC,MAAM;KAChC;IACD,oBAAoB,EAAE;QACpB,sCAAsC,EAAE,EAAE;QAC1C,oBAAoB,EAAE,gBAAgB,CAAC,gBAAgB;QACvD,gBAAgB,EAAE,gBAAgB,CAAC,YAAY;KAChD;CACF,CAAC;AAEF,MAAM,UAAU,cAAc,CAC5B,GAAoB,EACpB,WAA4B;IAE5B,OAAO,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,KAAc;IACjC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;AAClD,CAAC"}
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.infrastructurePorts),
536
+ parentPath(paths.portWiring),
537
537
  parentPath(paths.ports),
538
538
  parentPath(paths.useCaseBuilder),
539
539
  parentPath(paths.routesBuilder),
@@ -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 { appPorts } from "@/infra/app-ports";
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: appPorts,
391
+ base: initialPorts,
392
392
  overrides: {
393
- gate: appPorts.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 { appPorts } from "@/infra/app-ports";
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: appPorts,
510
+ base: initialPorts,
511
511
  overrides: {
512
- gate: appPorts.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.37",
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.37",
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/project --auth --tenant
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
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 provider integrations that can be scaffolded into a new app.
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
- * integrations that add an external service remain selectable.
20
+ * providers that add an external service remain selectable.
21
21
  */
22
- export type IntegrationName = "inngest" | "resend" | "upstash-rate-limit";
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 providers add`.
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
- | "upstash-rate-limit"
40
- | "redis-cache"
41
+ | "error-reporting-sentry"
42
+ | "rate-limit-upstash"
43
+ | "cache-redis"
41
44
  | "event-bus-redis"
42
- | "redis-locks"
43
- | "s3-storage"
44
- | "vercel-blob-storage";
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 scaffold integration choices.
67
+ * Supported providers rendered directly by the starter.
65
68
  */
66
- export const integrationChoices = [
67
- "inngest",
68
- "resend",
69
- "upstash-rate-limit",
70
- ] as const satisfies readonly IntegrationName[];
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
- "upstash-rate-limit",
94
- "redis-cache",
95
+ "error-reporting-sentry",
96
+ "rate-limit-upstash",
97
+ "cache-redis",
95
98
  "event-bus-redis",
96
- "redis-locks",
97
- "s3-storage",
98
- "vercel-blob-storage",
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 --integrations`: the starter template
103
- * integrations plus the full `beignet providers add` preset catalog.
105
+ * Values accepted by `beignet create --providers`.
104
106
  */
105
- export type CreateIntegrationName = IntegrationName | ProviderPresetName;
107
+ export type CreateProviderName = ProviderPresetName;
106
108
 
107
109
  /**
108
- * Supported `beignet create --integrations` choices. Template integrations
109
- * come first; the rest of the provider preset catalog follows.
110
+ * Supported `beignet create --providers` choices.
110
111
  */
111
- export const createIntegrationChoices = [
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 `--integrations` selections into starter template integrations and
146
- * provider presets applied with the `beignet providers add` machinery after
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 splitCreateIntegrations(
151
- values: readonly CreateIntegrationName[],
152
- ): {
153
- integrations: IntegrationName[];
118
+ export function splitCreateProviders(values: readonly CreateProviderName[]): {
119
+ starterProviders: StarterProviderName[];
154
120
  presets: ProviderPresetName[];
155
121
  } {
156
- const integrations = new Set<IntegrationName>();
122
+ const starterProviders = new Set<StarterProviderName>();
157
123
  const presets = new Set<ProviderPresetName>();
158
124
 
159
125
  for (const value of values) {
160
- if ((integrationChoices as readonly string[]).includes(value)) {
161
- integrations.add(value as IntegrationName);
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(preset);
129
+ presets.add(value);
171
130
  }
172
131
  }
173
132
 
174
- return { integrations: [...integrations], presets: [...presets] };
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
- infrastructurePorts: string;
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
- infrastructurePorts: "infra/app-ports.ts",
112
+ portWiring: "infra/port-wiring.ts",
113
113
  features: "features",
114
114
  policies: "features",
115
115
  useCases: "features",