@beignet/cli 0.0.26 → 0.0.28
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 +59 -15
- package/dist/check.d.ts +61 -0
- package/dist/check.d.ts.map +1 -0
- package/dist/check.js +164 -0
- package/dist/check.js.map +1 -0
- package/dist/choices.d.ts +8 -0
- package/dist/choices.d.ts.map +1 -1
- package/dist/choices.js +14 -0
- package/dist/choices.js.map +1 -1
- package/dist/db.d.ts +8 -0
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +4 -4
- package/dist/db.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +156 -21
- package/dist/index.js.map +1 -1
- package/dist/inspect.d.ts.map +1 -1
- package/dist/inspect.js +121 -3
- package/dist/inspect.js.map +1 -1
- package/dist/make/inbox.d.ts +63 -0
- package/dist/make/inbox.d.ts.map +1 -0
- package/dist/make/inbox.js +1747 -0
- package/dist/make/inbox.js.map +1 -0
- package/dist/make/payments.d.ts +61 -0
- package/dist/make/payments.d.ts.map +1 -0
- package/dist/make/payments.js +1900 -0
- package/dist/make/payments.js.map +1 -0
- package/dist/make/shared.d.ts +592 -0
- package/dist/make/shared.d.ts.map +1 -0
- package/dist/make/shared.js +2233 -0
- package/dist/make/shared.js.map +1 -0
- package/dist/make/tenancy.d.ts +101 -0
- package/dist/make/tenancy.d.ts.map +1 -0
- package/dist/make/tenancy.js +4409 -0
- package/dist/make/tenancy.js.map +1 -0
- package/dist/make.d.ts +8 -44
- package/dist/make.d.ts.map +1 -1
- package/dist/make.js +57 -3689
- package/dist/make.js.map +1 -1
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +45 -4
- package/dist/mcp.js.map +1 -1
- package/dist/provider-add.d.ts +19 -0
- package/dist/provider-add.d.ts.map +1 -0
- package/dist/provider-add.js +691 -0
- package/dist/provider-add.js.map +1 -0
- package/dist/provider-audit.d.ts.map +1 -1
- package/dist/provider-audit.js +77 -1
- package/dist/provider-audit.js.map +1 -1
- package/dist/registry-edits.d.ts +9 -0
- package/dist/registry-edits.d.ts.map +1 -1
- package/dist/registry-edits.js +32 -0
- package/dist/registry-edits.js.map +1 -1
- package/dist/task.d.ts +2 -0
- package/dist/task.d.ts.map +1 -1
- package/dist/task.js +2 -0
- package/dist/task.js.map +1 -1
- package/dist/templates/agents.d.ts.map +1 -1
- package/dist/templates/agents.js +29 -11
- package/dist/templates/agents.js.map +1 -1
- package/dist/templates/base.d.ts.map +1 -1
- package/dist/templates/base.js +42 -12
- package/dist/templates/base.js.map +1 -1
- package/dist/templates/db/sqlite.d.ts.map +1 -1
- package/dist/templates/db/sqlite.js +7 -1
- package/dist/templates/db/sqlite.js.map +1 -1
- package/dist/templates/server.d.ts.map +1 -1
- package/dist/templates/server.js +44 -37
- package/dist/templates/server.js.map +1 -1
- package/dist/templates/shared.d.ts +5 -0
- package/dist/templates/shared.d.ts.map +1 -1
- package/dist/templates/shared.js +5 -0
- package/dist/templates/shared.js.map +1 -1
- package/package.json +2 -2
- package/skills/app-structure/SKILL.md +1 -1
- package/src/check.ts +246 -0
- package/src/choices.ts +28 -0
- package/src/db.ts +4 -4
- package/src/index.ts +232 -21
- package/src/inspect.ts +168 -2
- package/src/make/inbox.ts +2015 -0
- package/src/make/payments.ts +2182 -0
- package/src/make/shared.ts +3638 -0
- package/src/make/tenancy.ts +4809 -0
- package/src/make.ts +388 -5355
- package/src/mcp.ts +66 -3
- package/src/provider-add.ts +926 -0
- package/src/provider-audit.ts +95 -3
- package/src/registry-edits.ts +47 -0
- package/src/task.ts +8 -10
- package/src/templates/agents.ts +29 -11
- package/src/templates/base.ts +43 -12
- package/src/templates/db/sqlite.ts +7 -1
- package/src/templates/server.ts +44 -37
- package/src/templates/shared.ts +5 -0
- package/src/test-helpers/generated-app.ts +168 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { expect } from "bun:test";
|
|
2
|
+
import { access, mkdir, symlink } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Test helpers for typechecking and running generated apps inside the CLI
|
|
7
|
+
* test suite. Shared by make.test.ts, make-tenancy.test.ts, and
|
|
8
|
+
* make-inbox.test.ts; excluded from the published build.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
const repoRoot = path.resolve(import.meta.dir, "../../../..");
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Symlink the workspace and vendored dependencies a generated app needs for a
|
|
15
|
+
* real `tsc --noEmit` and `bun test` run, without a package-manager install.
|
|
16
|
+
* Pass `shell: true` for full-stack apps so the shadcn shell dependencies
|
|
17
|
+
* (icons, radix, theming) resolve too.
|
|
18
|
+
*/
|
|
19
|
+
export async function linkSmokeDependencies(
|
|
20
|
+
targetDir: string,
|
|
21
|
+
options: { shell?: boolean } = {},
|
|
22
|
+
): Promise<void> {
|
|
23
|
+
const nodeModules = path.join(targetDir, "node_modules");
|
|
24
|
+
const scopeDir = path.join(nodeModules, "@beignet");
|
|
25
|
+
await mkdir(scopeDir, { recursive: true });
|
|
26
|
+
|
|
27
|
+
const beignetPackages = [
|
|
28
|
+
"core",
|
|
29
|
+
"devtools",
|
|
30
|
+
"next",
|
|
31
|
+
"provider-auth-better-auth",
|
|
32
|
+
"provider-db-drizzle",
|
|
33
|
+
"provider-event-bus-memory",
|
|
34
|
+
"provider-logger-pino",
|
|
35
|
+
"provider-mail-resend",
|
|
36
|
+
"provider-storage-local",
|
|
37
|
+
"react-hook-form",
|
|
38
|
+
"react-query",
|
|
39
|
+
"web",
|
|
40
|
+
];
|
|
41
|
+
|
|
42
|
+
for (const packageName of beignetPackages) {
|
|
43
|
+
await linkDependency(
|
|
44
|
+
path.join(repoRoot, "packages", packageName),
|
|
45
|
+
path.join(scopeDir, packageName),
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const externalSource = path.join(
|
|
50
|
+
repoRoot,
|
|
51
|
+
"apps/example-linear-clone/node_modules",
|
|
52
|
+
);
|
|
53
|
+
const externalPackages = [
|
|
54
|
+
"@electric-sql/pglite",
|
|
55
|
+
"@hookform/resolvers",
|
|
56
|
+
"@libsql/client",
|
|
57
|
+
"@tanstack/react-query",
|
|
58
|
+
"better-auth",
|
|
59
|
+
"@types/bun",
|
|
60
|
+
"@types/node",
|
|
61
|
+
"@types/pg",
|
|
62
|
+
"@types/react",
|
|
63
|
+
"@types/react-dom",
|
|
64
|
+
"drizzle-orm",
|
|
65
|
+
"mysql2",
|
|
66
|
+
"next",
|
|
67
|
+
"pg",
|
|
68
|
+
"pino",
|
|
69
|
+
"react",
|
|
70
|
+
"react-dom",
|
|
71
|
+
"react-hook-form",
|
|
72
|
+
"resend",
|
|
73
|
+
"typescript",
|
|
74
|
+
"zod",
|
|
75
|
+
];
|
|
76
|
+
if (options.shell) {
|
|
77
|
+
// Full-stack apps also import the shadcn shell dependencies.
|
|
78
|
+
externalPackages.push(
|
|
79
|
+
"class-variance-authority",
|
|
80
|
+
"clsx",
|
|
81
|
+
"lucide-react",
|
|
82
|
+
"next-themes",
|
|
83
|
+
"radix-ui",
|
|
84
|
+
"tailwind-merge",
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
const externalPackageSources: Record<string, string> = {
|
|
88
|
+
"@electric-sql/pglite": path.join(
|
|
89
|
+
repoRoot,
|
|
90
|
+
"packages/provider-db-drizzle/node_modules/@electric-sql/pglite",
|
|
91
|
+
),
|
|
92
|
+
"@libsql/client": path.join(
|
|
93
|
+
repoRoot,
|
|
94
|
+
"packages/provider-db-drizzle/node_modules/@libsql/client",
|
|
95
|
+
),
|
|
96
|
+
"@types/pg": path.join(
|
|
97
|
+
repoRoot,
|
|
98
|
+
"packages/provider-db-drizzle/node_modules/@types/pg",
|
|
99
|
+
),
|
|
100
|
+
"drizzle-orm": path.join(
|
|
101
|
+
repoRoot,
|
|
102
|
+
"packages/provider-db-drizzle/node_modules/drizzle-orm",
|
|
103
|
+
),
|
|
104
|
+
mysql2: path.join(
|
|
105
|
+
repoRoot,
|
|
106
|
+
"packages/provider-db-drizzle/node_modules/mysql2",
|
|
107
|
+
),
|
|
108
|
+
pg: path.join(repoRoot, "packages/provider-db-drizzle/node_modules/pg"),
|
|
109
|
+
"better-auth": path.join(
|
|
110
|
+
repoRoot,
|
|
111
|
+
"packages/provider-auth-better-auth/node_modules/better-auth",
|
|
112
|
+
),
|
|
113
|
+
resend: path.join(
|
|
114
|
+
repoRoot,
|
|
115
|
+
"packages/provider-mail-resend/node_modules/resend",
|
|
116
|
+
),
|
|
117
|
+
"next-themes": path.join(
|
|
118
|
+
repoRoot,
|
|
119
|
+
"apps/example-ehr/node_modules/next-themes",
|
|
120
|
+
),
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
for (const packageName of externalPackages) {
|
|
124
|
+
await linkDependency(
|
|
125
|
+
externalPackageSources[packageName] ??
|
|
126
|
+
path.join(externalSource, packageName),
|
|
127
|
+
path.join(nodeModules, packageName),
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
await linkDependency(
|
|
132
|
+
path.join(
|
|
133
|
+
repoRoot,
|
|
134
|
+
"node_modules/.bun/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec",
|
|
135
|
+
),
|
|
136
|
+
path.join(nodeModules, "@standard-schema/spec"),
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
async function linkDependency(
|
|
141
|
+
source: string,
|
|
142
|
+
destination: string,
|
|
143
|
+
): Promise<void> {
|
|
144
|
+
await access(source);
|
|
145
|
+
await mkdir(path.dirname(destination), { recursive: true });
|
|
146
|
+
await symlink(source, destination);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Run a command inside a generated app and fail the test with the combined
|
|
151
|
+
* output when it exits non-zero.
|
|
152
|
+
*/
|
|
153
|
+
export async function expectAppCommand(
|
|
154
|
+
cwd: string,
|
|
155
|
+
command: readonly string[],
|
|
156
|
+
): Promise<void> {
|
|
157
|
+
const proc = Bun.spawnSync(command, {
|
|
158
|
+
cwd,
|
|
159
|
+
env: {
|
|
160
|
+
...process.env,
|
|
161
|
+
NEXT_TELEMETRY_DISABLED: "1",
|
|
162
|
+
},
|
|
163
|
+
stderr: "pipe",
|
|
164
|
+
stdout: "pipe",
|
|
165
|
+
});
|
|
166
|
+
const output = `${proc.stdout.toString()}${proc.stderr.toString()}`;
|
|
167
|
+
expect(proc.exitCode, output).toBe(0);
|
|
168
|
+
}
|