@beignet/cli 0.0.1 → 0.0.4

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 (98) hide show
  1. package/CHANGELOG.md +231 -0
  2. package/README.md +497 -90
  3. package/dist/ansi.d.ts +10 -0
  4. package/dist/ansi.d.ts.map +1 -0
  5. package/dist/ansi.js +20 -0
  6. package/dist/ansi.js.map +1 -0
  7. package/dist/choices.d.ts +72 -0
  8. package/dist/choices.d.ts.map +1 -0
  9. package/dist/choices.js +88 -0
  10. package/dist/choices.js.map +1 -0
  11. package/dist/completion.d.ts +47 -0
  12. package/dist/completion.d.ts.map +1 -0
  13. package/dist/completion.js +123 -0
  14. package/dist/completion.js.map +1 -0
  15. package/dist/config.d.ts +39 -0
  16. package/dist/config.d.ts.map +1 -1
  17. package/dist/config.js +26 -0
  18. package/dist/config.js.map +1 -1
  19. package/dist/create-prompts.d.ts +42 -0
  20. package/dist/create-prompts.d.ts.map +1 -0
  21. package/dist/create-prompts.js +136 -0
  22. package/dist/create-prompts.js.map +1 -0
  23. package/dist/create.d.ts +12 -0
  24. package/dist/create.d.ts.map +1 -1
  25. package/dist/create.js +19 -24
  26. package/dist/create.js.map +1 -1
  27. package/dist/db.d.ts +37 -0
  28. package/dist/db.d.ts.map +1 -0
  29. package/dist/db.js +146 -0
  30. package/dist/db.js.map +1 -0
  31. package/dist/github-annotations.d.ts +18 -0
  32. package/dist/github-annotations.d.ts.map +1 -0
  33. package/dist/github-annotations.js +22 -0
  34. package/dist/github-annotations.js.map +1 -0
  35. package/dist/index.d.ts +1 -7
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +710 -400
  38. package/dist/index.js.map +1 -1
  39. package/dist/inspect.d.ts +45 -2
  40. package/dist/inspect.d.ts.map +1 -1
  41. package/dist/inspect.js +2191 -100
  42. package/dist/inspect.js.map +1 -1
  43. package/dist/lib.d.ts +20 -0
  44. package/dist/lib.d.ts.map +1 -0
  45. package/dist/lib.js +17 -0
  46. package/dist/lib.js.map +1 -0
  47. package/dist/lint.d.ts +22 -1
  48. package/dist/lint.d.ts.map +1 -1
  49. package/dist/lint.js +370 -38
  50. package/dist/lint.js.map +1 -1
  51. package/dist/make.d.ts +109 -1
  52. package/dist/make.d.ts.map +1 -1
  53. package/dist/make.js +2225 -333
  54. package/dist/make.js.map +1 -1
  55. package/dist/outbox.d.ts +24 -0
  56. package/dist/outbox.d.ts.map +1 -0
  57. package/dist/outbox.js +138 -0
  58. package/dist/outbox.js.map +1 -0
  59. package/dist/schedule.d.ts +36 -0
  60. package/dist/schedule.d.ts.map +1 -0
  61. package/dist/schedule.js +155 -0
  62. package/dist/schedule.js.map +1 -0
  63. package/dist/task.d.ts +26 -0
  64. package/dist/task.d.ts.map +1 -0
  65. package/dist/task.js +106 -0
  66. package/dist/task.js.map +1 -0
  67. package/dist/templates.d.ts +12 -8
  68. package/dist/templates.d.ts.map +1 -1
  69. package/dist/templates.js +2144 -385
  70. package/dist/templates.js.map +1 -1
  71. package/dist/version.d.ts +8 -0
  72. package/dist/version.d.ts.map +1 -0
  73. package/dist/version.js +18 -0
  74. package/dist/version.js.map +1 -0
  75. package/package.json +9 -8
  76. package/src/ansi.ts +30 -0
  77. package/src/choices.ts +137 -0
  78. package/src/completion.ts +169 -0
  79. package/src/config.ts +47 -0
  80. package/src/create-prompts.ts +182 -0
  81. package/src/create.ts +32 -28
  82. package/src/db.ts +222 -0
  83. package/src/github-annotations.ts +37 -0
  84. package/src/index.ts +1119 -535
  85. package/src/inspect.ts +3372 -134
  86. package/src/lib.ts +45 -0
  87. package/src/lint.ts +533 -45
  88. package/src/make.ts +3010 -397
  89. package/src/outbox.ts +249 -0
  90. package/src/schedule.ts +272 -0
  91. package/src/task.ts +169 -0
  92. package/src/templates.ts +2282 -462
  93. package/src/version.ts +20 -0
  94. package/dist/create-bin.d.ts +0 -3
  95. package/dist/create-bin.d.ts.map +0 -1
  96. package/dist/create-bin.js +0 -9
  97. package/dist/create-bin.js.map +0 -1
  98. package/src/create-bin.ts +0 -11
package/dist/outbox.js ADDED
@@ -0,0 +1,138 @@
1
+ import { readFile, stat } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { createJiti } from "jiti";
4
+ import { loadBeignetConfig, normalizePath } from "./config.js";
5
+ /**
6
+ * Run one app-owned outbox drain pass from the app's outbox registry.
7
+ */
8
+ export async function runOutboxDrain(options = {}) {
9
+ const cwd = path.resolve(options.cwd ?? process.cwd());
10
+ const config = await loadBeignetConfig(cwd);
11
+ const modulePath = normalizePath(options.modulePath ?? config.paths.outbox);
12
+ const batchSize = options.batchSize;
13
+ if (batchSize !== undefined)
14
+ assertPositiveInteger("batchSize", batchSize);
15
+ const startedAt = performance.now();
16
+ const outboxModule = await loadOutboxModule(cwd, modulePath);
17
+ const registry = assertOutboxRegistry(outboxModule.outboxRegistry, modulePath);
18
+ const contextArgs = { registry, batchSize };
19
+ const rawContext = outboxModule.createOutboxDrainContext
20
+ ? await outboxModule.createOutboxDrainContext(contextArgs)
21
+ : undefined;
22
+ const ctx = assertOutboxDrainContext(rawContext, modulePath);
23
+ try {
24
+ // Loaded lazily so CLI commands that never touch the app runtime, such as
25
+ // `beignet lint`, work without a built @beignet/core.
26
+ const { drainOutbox } = await import("@beignet/core/outbox");
27
+ const result = await drainOutbox({
28
+ outbox: ctx.ports.outbox,
29
+ registry,
30
+ eventBus: ctx.ports.eventBus,
31
+ jobs: ctx.ports.jobs,
32
+ batchSize,
33
+ instrumentation: ctx.ports.instrumentation ?? ctx.ports.devtools,
34
+ instrumentationContext: {
35
+ requestId: ctx.requestId,
36
+ traceId: ctx.traceId,
37
+ },
38
+ onError(error, message) {
39
+ ctx.ports.logger?.error("Outbox delivery failed", {
40
+ error,
41
+ outboxMessageId: message.id,
42
+ kind: message.kind,
43
+ name: message.name,
44
+ attempts: message.attempts,
45
+ });
46
+ },
47
+ });
48
+ await recordOutboxDrain(ctx, result);
49
+ return {
50
+ schemaVersion: 1,
51
+ cwd,
52
+ modulePath,
53
+ result,
54
+ durationMs: Math.round(performance.now() - startedAt),
55
+ };
56
+ }
57
+ finally {
58
+ await outboxModule.stopOutboxDrainContext?.(ctx, contextArgs);
59
+ }
60
+ }
61
+ async function loadOutboxModule(cwd, modulePath) {
62
+ const absolutePath = path.join(cwd, modulePath);
63
+ try {
64
+ await stat(absolutePath);
65
+ }
66
+ catch {
67
+ throw new Error(`Could not find app outbox registry at ${modulePath}. Create server/outbox.ts or configure paths.outbox in beignet.config.ts.`);
68
+ }
69
+ const tsconfigPath = path.join(cwd, "tsconfig.json");
70
+ const jiti = createJiti(absolutePath, {
71
+ tsconfigPaths: (await fileExists(tsconfigPath)) ? tsconfigPath : false,
72
+ });
73
+ return (await jiti.import(absolutePath));
74
+ }
75
+ function assertOutboxRegistry(registry, modulePath) {
76
+ if (!isRecord(registry)) {
77
+ throw new Error(`${modulePath} must export an outboxRegistry.`);
78
+ }
79
+ const events = registry.events;
80
+ const jobs = registry.jobs;
81
+ if (!(events instanceof Map) || !(jobs instanceof Map)) {
82
+ throw new Error(`${modulePath} outboxRegistry must be created with defineOutboxRegistry(...).`);
83
+ }
84
+ return { events, jobs };
85
+ }
86
+ function assertOutboxDrainContext(ctx, modulePath) {
87
+ if (!isRecord(ctx) || !isRecord(ctx.ports)) {
88
+ throw new Error(`${modulePath} must export createOutboxDrainContext that returns an app context with ports.outbox.`);
89
+ }
90
+ if (!isOutboxPort(ctx.ports.outbox)) {
91
+ throw new Error(`${modulePath} createOutboxDrainContext must return ports.outbox.`);
92
+ }
93
+ return ctx;
94
+ }
95
+ function isOutboxPort(value) {
96
+ return (isRecord(value) &&
97
+ typeof value.enqueue === "function" &&
98
+ typeof value.claimBatch === "function" &&
99
+ typeof value.markDelivered === "function" &&
100
+ typeof value.markFailed === "function");
101
+ }
102
+ async function recordOutboxDrain(ctx, result) {
103
+ try {
104
+ await (ctx.ports.instrumentation ?? ctx.ports.devtools)?.record({
105
+ type: "custom",
106
+ watcher: "outbox",
107
+ name: "outbox.drain",
108
+ label: "Outbox drain",
109
+ summary: `${result.delivered} delivered, ${result.retried} retried, ${result.deadLettered} dead-lettered`,
110
+ requestId: ctx.requestId,
111
+ traceId: ctx.traceId,
112
+ details: result,
113
+ });
114
+ }
115
+ catch (error) {
116
+ ctx.ports.logger?.error("Outbox drain instrumentation recording failed", {
117
+ error,
118
+ });
119
+ }
120
+ }
121
+ function assertPositiveInteger(name, value) {
122
+ if (!Number.isInteger(value) || value <= 0) {
123
+ throw new Error(`${name} must be a positive integer.`);
124
+ }
125
+ }
126
+ function isRecord(value) {
127
+ return typeof value === "object" && value !== null;
128
+ }
129
+ async function fileExists(filePath) {
130
+ try {
131
+ await readFile(filePath, "utf8");
132
+ return true;
133
+ }
134
+ catch {
135
+ return false;
136
+ }
137
+ }
138
+ //# sourceMappingURL=outbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outbox.js","sourceRoot":"","sources":["../src/outbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Options for running one app-owned schedule.
3
+ */
4
+ export type RunAppScheduleOptions = {
5
+ name: string;
6
+ cwd?: string;
7
+ modulePath?: string;
8
+ payload?: string | Record<string, unknown>;
9
+ id?: string;
10
+ attempt?: number;
11
+ scheduledAt?: string;
12
+ triggeredAt?: string;
13
+ source?: string;
14
+ };
15
+ /**
16
+ * Result returned by `beignet schedule run`.
17
+ */
18
+ export type RunAppScheduleResult = {
19
+ schemaVersion: 1;
20
+ name: string;
21
+ cwd: string;
22
+ modulePath: string;
23
+ run: {
24
+ id?: string;
25
+ attempt?: number;
26
+ scheduledAt?: string;
27
+ triggeredAt?: string;
28
+ source: string;
29
+ };
30
+ durationMs: number;
31
+ };
32
+ /**
33
+ * Run an app-owned schedule from the app's schedule registry.
34
+ */
35
+ export declare function runAppSchedule(options: RunAppScheduleOptions): Promise<RunAppScheduleResult>;
36
+ //# sourceMappingURL=schedule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../src/schedule.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,EAAE,CAAC,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE;QACH,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AA8BF;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CA0E/B"}
@@ -0,0 +1,155 @@
1
+ import { readFile, stat } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { createJiti } from "jiti";
4
+ import { loadBeignetConfig, normalizePath } from "./config.js";
5
+ /**
6
+ * Run an app-owned schedule from the app's schedule registry.
7
+ */
8
+ export async function runAppSchedule(options) {
9
+ const cwd = path.resolve(options.cwd ?? process.cwd());
10
+ const config = await loadBeignetConfig(cwd);
11
+ const modulePath = normalizePath(options.modulePath ?? config.paths.schedules);
12
+ const runOptions = buildScheduleRunOptions(options);
13
+ const startedAt = performance.now();
14
+ const scheduleModule = await loadScheduleModule(cwd, modulePath);
15
+ const schedule = findSchedule(scheduleModule.schedules, options.name, modulePath);
16
+ const contextArgs = {
17
+ schedule,
18
+ scheduleName: schedule.name,
19
+ run: runOptions,
20
+ };
21
+ const ctx = scheduleModule.createScheduleContext
22
+ ? await scheduleModule.createScheduleContext(contextArgs)
23
+ : {};
24
+ const scheduleContext = toScheduleContext(ctx);
25
+ try {
26
+ // Loaded lazily so CLI commands that never touch the app runtime, such as
27
+ // `beignet lint`, work without a built @beignet/core.
28
+ const { createInlineScheduleRunner } = await import("@beignet/core/schedules");
29
+ const runner = createInlineScheduleRunner({
30
+ ctx,
31
+ instrumentation: scheduleContext.ports?.devtools,
32
+ instrumentationContext: {
33
+ requestId: scheduleContext.requestId,
34
+ traceId: scheduleContext.traceId,
35
+ },
36
+ onError({ error }) {
37
+ scheduleContext.ports?.logger?.error("Schedule failed", {
38
+ error,
39
+ scheduleName: schedule.name,
40
+ });
41
+ },
42
+ onHookError({ error, hook }) {
43
+ scheduleContext.ports?.logger?.warn?.("Schedule lifecycle hook failed", {
44
+ error,
45
+ hook,
46
+ scheduleName: schedule.name,
47
+ });
48
+ },
49
+ });
50
+ await runner.run(schedule, runOptions);
51
+ return {
52
+ schemaVersion: 1,
53
+ name: schedule.name,
54
+ cwd,
55
+ modulePath,
56
+ run: {
57
+ id: runOptions.id,
58
+ attempt: runOptions.attempt,
59
+ scheduledAt: stringifyDateInput(runOptions.scheduledAt),
60
+ triggeredAt: stringifyDateInput(runOptions.triggeredAt),
61
+ source: runOptions.source ?? "beignet-cli",
62
+ },
63
+ durationMs: Math.round(performance.now() - startedAt),
64
+ };
65
+ }
66
+ finally {
67
+ await scheduleModule.stopScheduleContext?.(ctx, contextArgs);
68
+ }
69
+ }
70
+ async function loadScheduleModule(cwd, modulePath) {
71
+ const absolutePath = path.join(cwd, modulePath);
72
+ try {
73
+ await stat(absolutePath);
74
+ }
75
+ catch {
76
+ throw new Error(`Could not find app schedule registry at ${modulePath}. Create server/schedules.ts or configure paths.schedules in beignet.config.ts.`);
77
+ }
78
+ const tsconfigPath = path.join(cwd, "tsconfig.json");
79
+ const jiti = createJiti(absolutePath, {
80
+ tsconfigPaths: (await fileExists(tsconfigPath)) ? tsconfigPath : false,
81
+ });
82
+ return (await jiti.import(absolutePath));
83
+ }
84
+ function buildScheduleRunOptions(options) {
85
+ const runOptions = {
86
+ source: options.source ?? "beignet-cli",
87
+ triggeredAt: options.triggeredAt ?? new Date().toISOString(),
88
+ };
89
+ if (options.payload !== undefined) {
90
+ runOptions.payload = parseSchedulePayloadFlag(options.payload);
91
+ }
92
+ if (options.id !== undefined)
93
+ runOptions.id = options.id;
94
+ if (options.attempt !== undefined)
95
+ runOptions.attempt = options.attempt;
96
+ if (options.scheduledAt !== undefined)
97
+ runOptions.scheduledAt = options.scheduledAt;
98
+ return runOptions;
99
+ }
100
+ function parseSchedulePayloadFlag(input) {
101
+ if (typeof input !== "string")
102
+ return input;
103
+ try {
104
+ return JSON.parse(input);
105
+ }
106
+ catch (error) {
107
+ throw new Error(`Invalid --payload JSON: ${error instanceof Error ? error.message : String(error)}`);
108
+ }
109
+ }
110
+ function findSchedule(schedules, name, modulePath) {
111
+ if (!schedules) {
112
+ throw new Error(`Schedule registry ${modulePath} must export a schedules array.`);
113
+ }
114
+ const schedule = schedules.find((candidate) => typeof candidate === "object" &&
115
+ candidate !== null &&
116
+ candidate.kind === "schedule" &&
117
+ candidate.name === name &&
118
+ typeof candidate.handle === "function");
119
+ if (!schedule) {
120
+ const available = schedules
121
+ .filter((candidate) => typeof candidate === "object" &&
122
+ candidate !== null &&
123
+ candidate.kind === "schedule" &&
124
+ typeof candidate.name === "string")
125
+ .map((candidate) => candidate.name)
126
+ .sort();
127
+ throw new Error(available.length > 0
128
+ ? `Unknown schedule "${name}". Available schedules: ${available.join(", ")}.`
129
+ : `Unknown schedule "${name}". No schedules were registered in ${modulePath}.`);
130
+ }
131
+ return schedule;
132
+ }
133
+ function toScheduleContext(ctx) {
134
+ return isRecord(ctx) ? ctx : {};
135
+ }
136
+ function stringifyDateInput(value) {
137
+ if (value === undefined)
138
+ return undefined;
139
+ if (value instanceof Date)
140
+ return value.toISOString();
141
+ return String(value);
142
+ }
143
+ function isRecord(value) {
144
+ return typeof value === "object" && value !== null;
145
+ }
146
+ async function fileExists(filePath) {
147
+ try {
148
+ await readFile(filePath, "utf8");
149
+ return true;
150
+ }
151
+ catch {
152
+ return false;
153
+ }
154
+ }
155
+ //# sourceMappingURL=schedule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule.js","sourceRoot":"","sources":["../src/schedule.ts"],"names":[],"mappings":"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"}
package/dist/task.d.ts ADDED
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Options for running an app-owned operational task.
3
+ */
4
+ export type RunAppTaskOptions = {
5
+ name: string;
6
+ cwd?: string;
7
+ input?: string | Record<string, unknown>;
8
+ modulePath?: string;
9
+ };
10
+ /**
11
+ * Result returned by `beignet task run`.
12
+ */
13
+ export type RunAppTaskResult = {
14
+ schemaVersion: 1;
15
+ name: string;
16
+ cwd: string;
17
+ modulePath: string;
18
+ input: unknown;
19
+ output: unknown;
20
+ durationMs: number;
21
+ };
22
+ /**
23
+ * Run an app-owned operational task from the app's task registry.
24
+ */
25
+ export declare function runAppTask(options: RunAppTaskOptions): Promise<RunAppTaskResult>;
26
+ //# sourceMappingURL=task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../src/task.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,aAAa,EAAE,CAAC,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAcF;;GAEG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAwC3B"}
package/dist/task.js ADDED
@@ -0,0 +1,106 @@
1
+ import { readFile, stat } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { createJiti } from "jiti";
4
+ import { loadBeignetConfig, normalizePath } from "./config.js";
5
+ /**
6
+ * Run an app-owned operational task from the app's task registry.
7
+ */
8
+ export async function runAppTask(options) {
9
+ const cwd = path.resolve(options.cwd ?? process.cwd());
10
+ const config = await loadBeignetConfig(cwd);
11
+ const modulePath = normalizePath(options.modulePath ?? config.paths.tasks);
12
+ const rawInput = parseTaskInputFlag(options.input);
13
+ const startedAt = performance.now();
14
+ const taskModule = await loadTaskModule(cwd, modulePath);
15
+ const task = findTask(taskModule.tasks, options.name, modulePath);
16
+ // Loaded lazily so CLI commands that never touch the app runtime, such as
17
+ // `beignet lint`, work without a built @beignet/core.
18
+ const { parseTaskInput } = await import("@beignet/core/tasks");
19
+ const parsedInput = await parseTaskInput(task, rawInput);
20
+ const contextArgs = {
21
+ task,
22
+ taskName: task.name,
23
+ input: parsedInput,
24
+ };
25
+ const ctx = taskModule.createTaskContext
26
+ ? await taskModule.createTaskContext(contextArgs)
27
+ : {};
28
+ try {
29
+ const output = await task.handle({
30
+ task,
31
+ input: parsedInput,
32
+ ctx,
33
+ });
34
+ return {
35
+ schemaVersion: 1,
36
+ name: task.name,
37
+ cwd,
38
+ modulePath,
39
+ input: parsedInput,
40
+ output,
41
+ durationMs: Math.round(performance.now() - startedAt),
42
+ };
43
+ }
44
+ finally {
45
+ await taskModule.stopTaskContext?.(ctx, contextArgs);
46
+ }
47
+ }
48
+ function parseTaskInputFlag(input) {
49
+ if (input === undefined)
50
+ return {};
51
+ if (typeof input !== "string")
52
+ return input;
53
+ try {
54
+ return JSON.parse(input);
55
+ }
56
+ catch (error) {
57
+ throw new Error(`Invalid --input JSON: ${error instanceof Error ? error.message : String(error)}`);
58
+ }
59
+ }
60
+ async function loadTaskModule(cwd, modulePath) {
61
+ const absolutePath = path.join(cwd, modulePath);
62
+ try {
63
+ await stat(absolutePath);
64
+ }
65
+ catch {
66
+ throw new Error(`Could not find app task registry at ${modulePath}. Create it with beignet make task <feature>/<name> or configure paths.tasks in beignet.config.ts.`);
67
+ }
68
+ const tsconfigPath = path.join(cwd, "tsconfig.json");
69
+ const jiti = createJiti(absolutePath, {
70
+ tsconfigPaths: (await fileExists(tsconfigPath)) ? tsconfigPath : false,
71
+ });
72
+ return (await jiti.import(absolutePath));
73
+ }
74
+ function findTask(tasks, name, modulePath) {
75
+ if (!tasks) {
76
+ throw new Error(`Task registry ${modulePath} must export a tasks array.`);
77
+ }
78
+ const task = tasks.find((candidate) => typeof candidate === "object" &&
79
+ candidate !== null &&
80
+ candidate.kind === "task" &&
81
+ candidate.name === name &&
82
+ typeof candidate.handle === "function");
83
+ if (!task) {
84
+ const available = tasks
85
+ .filter((candidate) => typeof candidate === "object" &&
86
+ candidate !== null &&
87
+ candidate.kind === "task" &&
88
+ typeof candidate.name === "string")
89
+ .map((candidate) => candidate.name)
90
+ .sort();
91
+ throw new Error(available.length > 0
92
+ ? `Unknown task "${name}". Available tasks: ${available.join(", ")}.`
93
+ : `Unknown task "${name}". No tasks were registered in ${modulePath}.`);
94
+ }
95
+ return task;
96
+ }
97
+ async function fileExists(filePath) {
98
+ try {
99
+ await readFile(filePath, "utf8");
100
+ return true;
101
+ }
102
+ catch {
103
+ return false;
104
+ }
105
+ }
106
+ //# sourceMappingURL=task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../src/task.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,16 @@
1
- export type PackageManager = "bun" | "npm" | "pnpm" | "yarn";
2
- export type PresetName = "minimal" | "standard";
3
- export type TemplateName = "next";
4
- export type FeatureName = "client" | "react-query" | "forms" | "openapi";
5
- export type IntegrationName = "better-auth" | "drizzle-turso" | "inngest" | "pino" | "resend" | "upstash-rate-limit";
1
+ import type { FeatureName, IntegrationName, PackageManager, PresetName } from "./choices.js";
2
+ export type { FeatureName, IntegrationName, PackageManager, PresetName, TemplateName, } from "./choices.js";
3
+ export { featureChoices, integrationChoices, presetChoices, } from "./choices.js";
4
+ /**
5
+ * One generated file emitted by the template generator.
6
+ */
6
7
  export type TemplateFile = {
7
8
  path: string;
8
9
  content: string;
9
10
  };
11
+ /**
12
+ * Inputs used to render app template files.
13
+ */
10
14
  export type TemplateContext = {
11
15
  name: string;
12
16
  packageManager: PackageManager;
@@ -15,8 +19,8 @@ export type TemplateContext = {
15
19
  features: FeatureName[];
16
20
  integrations: IntegrationName[];
17
21
  };
18
- export declare const featureChoices: readonly ["client", "react-query", "forms", "openapi"];
19
- export declare const presetChoices: readonly ["minimal", "standard"];
20
- export declare const integrationChoices: readonly ["better-auth", "drizzle-turso", "inngest", "pino", "resend", "upstash-rate-limit"];
22
+ /**
23
+ * Render all template files for a new Beignet app.
24
+ */
21
25
  export declare function getTemplateFiles(ctx: TemplateContext): TemplateFile[];
22
26
  //# sourceMappingURL=templates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAC7D,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;AAChD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAClC,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC;AACzE,MAAM,MAAM,eAAe,GACvB,aAAa,GACb,eAAe,GACf,SAAS,GACT,MAAM,GACN,QAAQ,GACR,oBAAoB,CAAC;AAEzB,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,EAAE,eAAe,EAAE,CAAC;CACjC,CAAC;AA+CF,eAAO,MAAM,cAAc,wDAKgB,CAAC;AAE5C,eAAO,MAAM,aAAa,kCAGgB,CAAC;AAE3C,eAAO,MAAM,kBAAkB,8FAOgB,CAAC;AA0vEhD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,GAAG,YAAY,EAAE,CAuErE"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,cAAc,EACd,UAAU,EACX,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,WAAW,EACX,eAAe,EACf,cAAc,EACd,UAAU,EACV,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,aAAa,GACd,MAAM,cAAc,CAAC;AAEtB;;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,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,EAAE,eAAe,EAAE,CAAC;CACjC,CAAC;AAgjIF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,GAAG,YAAY,EAAE,CA8FrE"}