@beignet/cli 0.0.34 → 0.0.36
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 +29 -0
- package/README.md +27 -0
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/inspect.js +49 -13
- package/dist/inspect.js.map +1 -1
- package/dist/lint.js +10 -3
- package/dist/lint.js.map +1 -1
- package/dist/make/inbox.d.ts.map +1 -1
- package/dist/make/inbox.js +2 -3
- package/dist/make/inbox.js.map +1 -1
- package/dist/make/payments.d.ts.map +1 -1
- package/dist/make/payments.js +3 -5
- package/dist/make/payments.js.map +1 -1
- package/dist/make/tenancy.d.ts.map +1 -1
- package/dist/make/tenancy.js +2 -4
- package/dist/make/tenancy.js.map +1 -1
- package/dist/make.js +4 -5
- package/dist/make.js.map +1 -1
- package/dist/schedule.d.ts.map +1 -1
- package/dist/schedule.js +1 -1
- package/dist/schedule.js.map +1 -1
- package/dist/templates/agents.d.ts.map +1 -1
- package/dist/templates/agents.js +2 -0
- package/dist/templates/agents.js.map +1 -1
- package/dist/templates/index.d.ts.map +1 -1
- package/dist/templates/index.js +1 -0
- package/dist/templates/index.js.map +1 -1
- package/dist/templates/server.d.ts +1 -0
- package/dist/templates/server.d.ts.map +1 -1
- package/dist/templates/server.js +8 -2
- package/dist/templates/server.js.map +1 -1
- package/dist/templates/testing.d.ts.map +1 -1
- package/dist/templates/testing.js +55 -26
- package/dist/templates/testing.js.map +1 -1
- package/dist/templates/todos.d.ts.map +1 -1
- package/dist/templates/todos.js +2 -3
- package/dist/templates/todos.js.map +1 -1
- package/package.json +3 -2
- package/skills/app-structure/SKILL.md +12 -1
- package/src/config.ts +2 -0
- package/src/inspect.ts +82 -15
- package/src/lint.ts +15 -3
- package/src/make/inbox.ts +2 -3
- package/src/make/payments.ts +2 -6
- package/src/make/tenancy.ts +2 -8
- package/src/make.ts +4 -5
- package/src/schedule.ts +4 -3
- package/src/templates/agents.ts +2 -0
- package/src/templates/index.ts +1 -0
- package/src/templates/server.ts +8 -2
- package/src/templates/testing.ts +55 -26
- package/src/templates/todos.ts +2 -3
- package/src/test-helpers/generated-app.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,34 @@
|
|
|
1
1
|
# @beignet/cli
|
|
2
2
|
|
|
3
|
+
## 0.0.36
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [5c7f6bb]
|
|
8
|
+
- @beignet/core@0.0.36
|
|
9
|
+
|
|
10
|
+
## 0.0.35
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- 74aad51: Replace the schedule-specific instrumentation sink with shared provider targets, serve bodyless HEAD responses from GET routes, improve missing JSON content-type diagnostics, and expose the auth error HTTP status.
|
|
15
|
+
- db79263: Align route, listener, auth-provider, and webhook-integration APIs before 1.0. Route declarations now use an app-bound `createRoutes<AppContext>()` builder, listeners put their stable name first, Better Auth exports `createBetterAuthProvider(...)`, and vendor webhook verifiers live in `@beignet/webhooks-*` packages outside provider audits.
|
|
16
|
+
- 40f4155: Refresh package-shipped agent guidance for app-bound route builders, configured route-builder paths, webhook integrations, and operational error responses.
|
|
17
|
+
- c403db2: Isolate use-case observers, authenticate operational routes before context creation, honor configured generated-test roots, correct feature-helper linting, preserve optional OpenAPI descriptions, and keep upload resets stable.
|
|
18
|
+
- Updated dependencies [2101386]
|
|
19
|
+
- Updated dependencies [2290c4a]
|
|
20
|
+
- Updated dependencies [42921da]
|
|
21
|
+
- Updated dependencies [2a5b224]
|
|
22
|
+
- Updated dependencies [74aad51]
|
|
23
|
+
- Updated dependencies [db79263]
|
|
24
|
+
- Updated dependencies [397f106]
|
|
25
|
+
- Updated dependencies [40f4155]
|
|
26
|
+
- Updated dependencies [d1c0efd]
|
|
27
|
+
- Updated dependencies [c403db2]
|
|
28
|
+
- Updated dependencies [4cc5254]
|
|
29
|
+
- Updated dependencies [7d0c795]
|
|
30
|
+
- @beignet/core@0.0.35
|
|
31
|
+
|
|
3
32
|
## 0.0.34
|
|
4
33
|
|
|
5
34
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -187,6 +187,11 @@ bun beignet doctor
|
|
|
187
187
|
beignet create [directory] [options]
|
|
188
188
|
beignet task run <name> [options]
|
|
189
189
|
beignet outbox drain [options]
|
|
190
|
+
beignet outbox list [options]
|
|
191
|
+
beignet outbox show <id> [options]
|
|
192
|
+
beignet outbox requeue <id> [options]
|
|
193
|
+
beignet outbox purge [options]
|
|
194
|
+
beignet outbox prune [options]
|
|
190
195
|
beignet schedule run <name> [options]
|
|
191
196
|
beignet make task <feature>/<name> [options]
|
|
192
197
|
beignet make contract <name> [options]
|
|
@@ -348,6 +353,7 @@ The standard app layout includes the files feature generators expect:
|
|
|
348
353
|
app-context.ts
|
|
349
354
|
infra/app-ports.ts
|
|
350
355
|
ports/index.ts
|
|
356
|
+
lib/routes.ts
|
|
351
357
|
lib/use-case.ts
|
|
352
358
|
```
|
|
353
359
|
|
|
@@ -374,6 +380,7 @@ export default defineConfig({
|
|
|
374
380
|
appContext: "src/app-context.ts",
|
|
375
381
|
contracts: "src/features",
|
|
376
382
|
features: "src/features",
|
|
383
|
+
routesBuilder: "src/lib/routes.ts",
|
|
377
384
|
routes: "src/app/api",
|
|
378
385
|
server: "src/core/server/index.ts",
|
|
379
386
|
listeners: "src/core/server/listeners.ts",
|
|
@@ -390,6 +397,10 @@ config before inspecting or writing files. When `appContext` is moved under a
|
|
|
390
397
|
source root such as `src/app-context.ts`, client setup follows that root at
|
|
391
398
|
`src/client/index.ts`.
|
|
392
399
|
|
|
400
|
+
The generated `lib/beignet-test-runner.ts` also resolves all four supported
|
|
401
|
+
config formats and includes configured test, feature, route, server, port,
|
|
402
|
+
infra-port, route-builder, and use-case-builder roots in test discovery.
|
|
403
|
+
|
|
393
404
|
The same config can declare app-owned names for Beignet operational database
|
|
394
405
|
tables when an app uses names other than the provider defaults:
|
|
395
406
|
|
|
@@ -700,6 +711,8 @@ Task, job, listener, schedule, and notification generators define artifacts
|
|
|
700
711
|
through app-owned context-bound builders in `lib/`. Each generator creates the
|
|
701
712
|
builder file when it is missing:
|
|
702
713
|
|
|
714
|
+
- `lib/routes.ts` exports `defineRoute` and `defineRouteGroup` from
|
|
715
|
+
`createRoutes<AppContext>()` (`@beignet/core/server`) and ships with every app
|
|
703
716
|
- `lib/tasks.ts` exports `defineTask` from `createTasks<AppContext>()`
|
|
704
717
|
(`@beignet/core/tasks`)
|
|
705
718
|
- `lib/jobs.ts` exports `defineJob` from `createJobs<AppContext>()`
|
|
@@ -732,6 +745,20 @@ The runner loads `server/outbox.ts` or `paths.outbox`. That module should export
|
|
|
732
745
|
lifecycle, so the CLI drain uses the same outbox, event bus, jobs,
|
|
733
746
|
instrumentation, actor, and tenant decisions as the scheduled drain route.
|
|
734
747
|
|
|
748
|
+
Inspect and recover failed deliveries through the same app-owned operational
|
|
749
|
+
context:
|
|
750
|
+
|
|
751
|
+
```bash
|
|
752
|
+
beignet outbox list --status deadLettered
|
|
753
|
+
beignet outbox show <id>
|
|
754
|
+
beignet outbox requeue <id> --reset-attempts
|
|
755
|
+
beignet outbox purge --before 2026-06-01T00:00:00Z --dry-run
|
|
756
|
+
beignet outbox prune --before 2026-06-01T00:00:00Z --dry-run
|
|
757
|
+
```
|
|
758
|
+
|
|
759
|
+
`purge` only targets dead-lettered messages; `prune` only targets delivered
|
|
760
|
+
messages. Both support bounded `--limit` runs and `--dry-run` previews.
|
|
761
|
+
|
|
735
762
|
There is intentionally no separate `beignet jobs drain` command. Outbox-backed
|
|
736
763
|
jobs drain through the outbox beside durable events. Direct provider jobs should
|
|
737
764
|
use provider-owned worker entrypoints, such as a BullMQ worker built with
|
package/dist/config.d.ts
CHANGED
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEtC;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACxC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9B,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,gBAAgB,CAAC;IAC5B,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,EAAE;QACR,MAAM,EAAE,qBAAqB,CAAC;QAC9B,aAAa,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
CHANGED
|
@@ -23,6 +23,7 @@ export const defaultBeignetConfig = {
|
|
|
23
23
|
policies: "features",
|
|
24
24
|
useCases: "features",
|
|
25
25
|
useCaseBuilder: "lib/use-case.ts",
|
|
26
|
+
routesBuilder: "lib/routes.ts",
|
|
26
27
|
listenersBuilder: "lib/listeners.ts",
|
|
27
28
|
jobsBuilder: "lib/jobs.ts",
|
|
28
29
|
schedulesBuilder: "lib/schedules.ts",
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/inspect.js
CHANGED
|
@@ -895,6 +895,10 @@ async function inspectCanonicalConformance(targetDir, files, config, convention,
|
|
|
895
895
|
file: config.paths.infrastructurePorts,
|
|
896
896
|
reason: "infra/app-ports.ts should wire concrete app ports for the selected runtime.",
|
|
897
897
|
},
|
|
898
|
+
{
|
|
899
|
+
file: config.paths.routesBuilder,
|
|
900
|
+
reason: "lib/routes.ts should bind route declarations to the shared AppContext type.",
|
|
901
|
+
},
|
|
898
902
|
];
|
|
899
903
|
if (hasClientSurface) {
|
|
900
904
|
requiredFiles.push({
|
|
@@ -992,6 +996,18 @@ async function inspectCanonicalConformance(targetDir, files, config, convention,
|
|
|
992
996
|
});
|
|
993
997
|
}
|
|
994
998
|
}
|
|
999
|
+
if (files.includes(config.paths.routesBuilder)) {
|
|
1000
|
+
const routesBuilderSource = await readCachedSource(targetDir, config.paths.routesBuilder, sourceCache);
|
|
1001
|
+
if (!importsAppContext(routesBuilderSource, config.paths.routesBuilder, config, files) ||
|
|
1002
|
+
!/\bcreateRoutes\s*<\s*AppContext\s*>\s*\(\s*\)/.test(routesBuilderSource)) {
|
|
1003
|
+
diagnostics.push({
|
|
1004
|
+
severity: "warning",
|
|
1005
|
+
code: "BEIGNET_ROUTE_BUILDER_CONTEXT",
|
|
1006
|
+
file: config.paths.routesBuilder,
|
|
1007
|
+
message: `${config.paths.routesBuilder} should import AppContext from ${config.paths.appContext} and export route builders from createRoutes<AppContext>().`,
|
|
1008
|
+
});
|
|
1009
|
+
}
|
|
1010
|
+
}
|
|
995
1011
|
const featureRoutesPath = `${featuresPath}/`;
|
|
996
1012
|
for (const file of files) {
|
|
997
1013
|
if (!file.startsWith(featureRoutesPath) || !file.endsWith("/routes.ts")) {
|
|
@@ -1000,20 +1016,12 @@ async function inspectCanonicalConformance(targetDir, files, config, convention,
|
|
|
1000
1016
|
const source = await readCachedSource(targetDir, file, sourceCache);
|
|
1001
1017
|
if (!source.includes("defineRouteGroup"))
|
|
1002
1018
|
continue;
|
|
1003
|
-
if (!
|
|
1019
|
+
if (!importsNamedFromFile(source, file, config.paths.routesBuilder, "defineRouteGroup", files)) {
|
|
1004
1020
|
diagnostics.push({
|
|
1005
1021
|
severity: "warning",
|
|
1006
|
-
code: "
|
|
1022
|
+
code: "BEIGNET_FEATURE_ROUTE_BUILDER",
|
|
1007
1023
|
file,
|
|
1008
|
-
message: `${file} should import
|
|
1009
|
-
});
|
|
1010
|
-
}
|
|
1011
|
-
if (!/defineRouteGroup\s*<\s*AppContext\s*>\s*\(\s*\)\s*\(/.test(source)) {
|
|
1012
|
-
diagnostics.push({
|
|
1013
|
-
severity: "warning",
|
|
1014
|
-
code: "BEIGNET_FEATURE_ROUTE_GROUP_CONTEXT",
|
|
1015
|
-
file,
|
|
1016
|
-
message: `${file} should call defineRouteGroup<AppContext>()({ ... }) so route groups preserve per-route contract and use-case type checks.`,
|
|
1024
|
+
message: `${file} should import { defineRouteGroup } from ${config.paths.routesBuilder} so route groups use the app-bound context type.`,
|
|
1017
1025
|
});
|
|
1018
1026
|
}
|
|
1019
1027
|
}
|
|
@@ -1059,6 +1067,20 @@ function importsAppContext(source, importerFile, config, files) {
|
|
|
1059
1067
|
}
|
|
1060
1068
|
return false;
|
|
1061
1069
|
}
|
|
1070
|
+
function importsNamedFromFile(source, importerFile, expectedFile, importedName, files) {
|
|
1071
|
+
const importRegex = /import\s+\{([^}]+)\}\s+from\s+["']([^"']+)["']/g;
|
|
1072
|
+
for (const match of source.matchAll(importRegex)) {
|
|
1073
|
+
const sourceFile = sourceFileFromImport(match[2], importerFile, files);
|
|
1074
|
+
if (sourceFile !== expectedFile)
|
|
1075
|
+
continue;
|
|
1076
|
+
for (const member of match[1].split(",")) {
|
|
1077
|
+
const parsed = parseImportMember(member);
|
|
1078
|
+
if (parsed?.importedName === importedName)
|
|
1079
|
+
return true;
|
|
1080
|
+
}
|
|
1081
|
+
}
|
|
1082
|
+
return false;
|
|
1083
|
+
}
|
|
1062
1084
|
async function inspectAuthzAuditDrift(targetDir, files, config, convention, contracts) {
|
|
1063
1085
|
if (!convention.resourceGenerator)
|
|
1064
1086
|
return [];
|
|
@@ -2433,8 +2455,22 @@ async function listenedEventNames(targetDir, files, config) {
|
|
|
2433
2455
|
if (!listenerPattern.test(file) || isWorkflowTestFile(file))
|
|
2434
2456
|
continue;
|
|
2435
2457
|
const source = await readFile(path.join(targetDir, file), "utf8");
|
|
2436
|
-
|
|
2437
|
-
|
|
2458
|
+
const callPattern = /\bdefineListener\s*\(/g;
|
|
2459
|
+
for (const match of source.matchAll(callPattern)) {
|
|
2460
|
+
const openIndex = source.indexOf("(", match.index ?? 0);
|
|
2461
|
+
if (openIndex === -1)
|
|
2462
|
+
continue;
|
|
2463
|
+
const closeIndex = matchingDelimiterIndex(source, openIndex, "(", ")");
|
|
2464
|
+
if (closeIndex === -1)
|
|
2465
|
+
continue;
|
|
2466
|
+
const args = splitTopLevelArguments(source.slice(openIndex + 1, closeIndex));
|
|
2467
|
+
const options = args[1]?.trim();
|
|
2468
|
+
if (!options?.startsWith("{") || !options.endsWith("}"))
|
|
2469
|
+
continue;
|
|
2470
|
+
const eventProperty = splitTopLevelArguments(options.slice(1, -1)).find((property) => /^\s*event\s*:/.test(property));
|
|
2471
|
+
const eventName = /^\s*event\s*:\s*([A-Za-z_$][\w$]*)/.exec(eventProperty ?? "")?.[1];
|
|
2472
|
+
if (eventName)
|
|
2473
|
+
listened.add(eventName);
|
|
2438
2474
|
}
|
|
2439
2475
|
}
|
|
2440
2476
|
return listened;
|