yosr-seed 0.2.3 → 0.2.5

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 (48) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +2 -1
  3. package/dist/adopt.d.ts +6 -0
  4. package/dist/adopt.js +430 -0
  5. package/dist/adopt.js.map +1 -0
  6. package/dist/create.js +39 -3
  7. package/dist/create.js.map +1 -1
  8. package/dist/doctor.js +42 -2
  9. package/dist/doctor.js.map +1 -1
  10. package/dist/engine/ci/apply.d.ts +4 -0
  11. package/dist/engine/ci/apply.js +8 -1
  12. package/dist/engine/ci/apply.js.map +1 -1
  13. package/dist/engine/ci/content.d.ts +1 -1
  14. package/dist/engine/ci/content.js +20 -0
  15. package/dist/engine/ci/content.js.map +1 -1
  16. package/dist/engine/gate/run.d.ts +61 -1
  17. package/dist/engine/gate/run.js +305 -32
  18. package/dist/engine/gate/run.js.map +1 -1
  19. package/dist/engine/index.d.ts +9 -6
  20. package/dist/engine/index.js +7 -4
  21. package/dist/engine/index.js.map +1 -1
  22. package/dist/engine/render/lockfile.js +1 -0
  23. package/dist/engine/render/lockfile.js.map +1 -1
  24. package/dist/engine/render/package-manager.d.ts +21 -0
  25. package/dist/engine/render/package-manager.js +75 -1
  26. package/dist/engine/render/package-manager.js.map +1 -1
  27. package/dist/engine/render/render.d.ts +1 -1
  28. package/dist/engine/render/render.js +44 -8
  29. package/dist/engine/render/render.js.map +1 -1
  30. package/dist/engine/render/types.d.ts +5 -1
  31. package/dist/gate.js +68 -12
  32. package/dist/gate.js.map +1 -1
  33. package/dist/help.js +24 -2
  34. package/dist/help.js.map +1 -1
  35. package/dist/preflight.d.ts +15 -1
  36. package/dist/preflight.js +43 -5
  37. package/dist/preflight.js.map +1 -1
  38. package/dist/run.js +6 -0
  39. package/dist/run.js.map +1 -1
  40. package/dist/schemas/seed.answers.schema.json +8 -1
  41. package/dist/schemas/seed.template.schema.json +12 -2
  42. package/dist/templates.d.ts +1 -1
  43. package/dist/templates.js +24 -0
  44. package/dist/templates.js.map +1 -1
  45. package/dist/upgrade.d.ts +35 -0
  46. package/dist/upgrade.js +390 -0
  47. package/dist/upgrade.js.map +1 -0
  48. package/package.json +10 -7
package/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # yosr-seed
2
2
 
3
+ ## 0.2.5
4
+
5
+ ### Patch Changes
6
+
7
+ - 63badc9: Add the ASP.NET Core API template (`--template dotnet`, ADR 0026): .NET 10 LTS, minimal API, xUnit + WebApplicationFactory, locked NuGet restore with committed `packages.lock.json` and `global.json`, notes API, database none/Postgres (EF Core + Npgsql), API-key auth, multi-stage non-root Docker. Engine gains `engines.dotnet` / package manager `dotnet` (and the same shape for later `engines.java` / `maven`). Joins the Yosr Seed fixed group.
8
+ - 11f252b: Add Spring Boot template-spring (ADR 0027): Java 25, Maven locked resolve, optional JPA Postgres.
9
+ - Updated dependencies [63badc9]
10
+ - Updated dependencies [11f252b]
11
+ - @yosr-ai/template-dotnet@0.2.5
12
+ - @yosr-ai/template-next-fullstack@0.2.5
13
+ - @yosr-ai/template-fastapi@0.2.5
14
+ - @yosr-ai/template-hono@0.2.5
15
+ - @yosr-ai/template-vite-react@0.2.5
16
+ - @yosr-ai/template-astro-site@0.2.5
17
+ - @yosr-ai/template-spring@0.2.5
18
+
19
+ ## 0.2.4
20
+
21
+ ### Patch Changes
22
+
23
+ - ADR 0025 §2–§3: `yosr-seed upgrade` (report-only) and `yosr-seed adopt` (rulebook + adopted `.seed/` record). Creates write `origin: "created"`. No auto-apply, no architecture assessment.
24
+ - Updated dependencies
25
+ - @yosr-ai/template-next-fullstack@0.2.4
26
+ - @yosr-ai/template-fastapi@0.2.4
27
+ - @yosr-ai/template-hono@0.2.4
28
+ - @yosr-ai/template-vite-react@0.2.4
29
+ - @yosr-ai/template-astro-site@0.2.4
30
+
3
31
  ## 0.2.3
4
32
 
5
33
  ### Patch Changes
package/README.md CHANGED
@@ -7,6 +7,7 @@ Templates:
7
7
  - `next-fullstack` (`@yosr-ai/template-next-fullstack`, the default) — Next.js full-stack
8
8
  - `hono` (`@yosr-ai/template-hono`) — API-only Hono on Node.js 24
9
9
  - `fastapi` (`@yosr-ai/template-fastapi`) — API-only FastAPI on Python 3.12+
10
+ - `dotnet` (`@yosr-ai/template-dotnet`) — API-only ASP.NET Core on .NET 10
10
11
  - `vite-react` (`@yosr-ai/template-vite-react`) — Web app (Vite + React) static SPA
11
12
  - `astro-site` (`@yosr-ai/template-astro-site`) — Website (Astro) content-first static site
12
13
 
@@ -85,7 +86,7 @@ Style presets (Clean / Classic / Minimal) and tweaks shape layout, formatting, a
85
86
  | `create-yosr-seed [dir]` | Same as `yosr-seed create` |
86
87
  | `yosr-seed doctor` | Preflight checks and copy-paste versions |
87
88
  | `yosr-seed info` | Inside a generated project: setup choices, create versions, tracked-file drift |
88
- | `yosr-seed gate [dir] [--e2e] [--image]` | Inside a generated project: run its checks again |
89
+ | `yosr-seed gate [dir] [--e2e] [--image] [--database-url <url>] [--mongodb-uri <uri>]` | Inside a generated project: run its checks again (optional throwaway DB URL instead of Docker) |
89
90
  | `yosr-seed profile` | TTY menu for named profiles; pipe prints usage |
90
91
  | `yosr-seed profile list` | List names; mark the default |
91
92
  | `yosr-seed profile show [name]` | Print a style profile |
@@ -0,0 +1,6 @@
1
+ import type { CliIo } from "./run.js";
2
+ /**
3
+ * Add the Yosr Seed rulebook + adopted `.seed/` record to an existing repo (ADR 0025 §3).
4
+ * Always previews (including one gate run) before writing Yosr Seed files.
5
+ */
6
+ export declare function runAdopt(io: CliIo): Promise<number>;
package/dist/adopt.js ADDED
@@ -0,0 +1,430 @@
1
+ import { createHash } from "node:crypto";
2
+ import { copyFileSync, existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, statSync, writeFileSync, } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import path from "node:path";
5
+ import { buildProfile, copilotInstructions, exitCodes, geminiMd, render, RenderError, runGate, templateSource, validateAnswers, } from "./engine/index.js";
6
+ import { dotnetCheck, javaCheck, liveProbe, packageManagerCheck, pythonCheck, } from "./preflight.js";
7
+ import { isTemplateId, loadTemplateManifest, templateDir, templatePackageVersion, TEMPLATE_IDS, } from "./templates.js";
8
+ const RULEBOOK_PATHS = [
9
+ "AGENTS.md",
10
+ "CLAUDE.md",
11
+ "GEMINI.md",
12
+ ".github/copilot-instructions.md",
13
+ ];
14
+ const USAGE = "Usage: yosr-seed adopt [dir] --template <next-fullstack|fastapi|hono|vite-react|astro-site|dotnet|spring> [--package-manager pnpm|npm|uv|dotnet|maven] [--yes]";
15
+ function sha256Text(content) {
16
+ return createHash("sha256").update(content).digest("hex");
17
+ }
18
+ function parseFlags(args) {
19
+ let dir;
20
+ let template;
21
+ let packageManager;
22
+ let yes = false;
23
+ for (let i = 0; i < args.length; i += 1) {
24
+ const arg = args[i];
25
+ if (arg === "--yes" || arg === "-y") {
26
+ yes = true;
27
+ continue;
28
+ }
29
+ if (arg === "--template") {
30
+ const value = args[i + 1];
31
+ if (value === undefined || value.startsWith("--")) {
32
+ return { error: USAGE };
33
+ }
34
+ template = value;
35
+ i += 1;
36
+ continue;
37
+ }
38
+ if (arg.startsWith("--template=")) {
39
+ template = arg.slice("--template=".length);
40
+ continue;
41
+ }
42
+ if (arg === "--package-manager") {
43
+ const value = args[i + 1];
44
+ if (value === undefined || value.startsWith("--")) {
45
+ return { error: USAGE };
46
+ }
47
+ if (value !== "pnpm" && value !== "npm" && value !== "uv") {
48
+ return { error: `Unknown package manager ${JSON.stringify(value)}.` };
49
+ }
50
+ packageManager = value;
51
+ i += 1;
52
+ continue;
53
+ }
54
+ if (arg.startsWith("--package-manager=")) {
55
+ const value = arg.slice("--package-manager=".length);
56
+ if (value !== "pnpm" && value !== "npm" && value !== "uv") {
57
+ return { error: `Unknown package manager ${JSON.stringify(value)}.` };
58
+ }
59
+ packageManager = value;
60
+ continue;
61
+ }
62
+ if (arg.startsWith("--"))
63
+ return { error: USAGE };
64
+ if (dir !== undefined)
65
+ return { error: USAGE };
66
+ dir = arg;
67
+ }
68
+ return {
69
+ dir: dir ?? ".",
70
+ ...(template !== undefined ? { template } : {}),
71
+ ...(packageManager !== undefined ? { packageManager } : {}),
72
+ yes,
73
+ };
74
+ }
75
+ function defaultPackageManager(template) {
76
+ if (template === "fastapi")
77
+ return "uv";
78
+ if (template === "dotnet")
79
+ return "dotnet";
80
+ if (template === "spring")
81
+ return "maven";
82
+ return "pnpm";
83
+ }
84
+ function lockfileName(pm) {
85
+ if (pm === "pnpm")
86
+ return "pnpm-lock.yaml";
87
+ if (pm === "npm")
88
+ return "package-lock.json";
89
+ if (pm === "uv")
90
+ return "uv.lock";
91
+ if (pm === "dotnet")
92
+ return "packages.lock.json";
93
+ return "pom.xml";
94
+ }
95
+ function foreignLockfiles(root, chosen) {
96
+ const found = [];
97
+ for (const pm of ["pnpm", "npm", "uv", "dotnet", "maven"]) {
98
+ if (pm === chosen)
99
+ continue;
100
+ const name = lockfileName(pm);
101
+ if (existsSync(path.join(root, name)))
102
+ found.push(name);
103
+ }
104
+ return found;
105
+ }
106
+ function claudePointer() {
107
+ return `@AGENTS.md\n\n<!-- Claude Code imports AGENTS.md above. Add Claude-specific notes below. -->\n`;
108
+ }
109
+ async function agentsFromTemplate(templateId, engineVersion, packageManager, projectName) {
110
+ const tempRoot = mkdtempSync(path.join(tmpdir(), "yosr-adopt-agents-"));
111
+ const outDir = path.join(tempRoot, "out");
112
+ try {
113
+ await render({
114
+ templateDir: templateDir(templateId),
115
+ engineVersion,
116
+ answers: { projectName },
117
+ profile: buildProfile({
118
+ preset: "clean",
119
+ now: "2026-11-10T00:00:00.000Z",
120
+ createdWith: "yosr-seed adopt",
121
+ }),
122
+ outDir,
123
+ packageManager,
124
+ });
125
+ const agentsPath = path.join(outDir, "AGENTS.md");
126
+ if (!existsSync(agentsPath)) {
127
+ throw new Error(`Template ${templateId} did not produce AGENTS.md for adopt.`);
128
+ }
129
+ return readFileSync(agentsPath, "utf8");
130
+ }
131
+ finally {
132
+ rmSync(tempRoot, { recursive: true, force: true });
133
+ }
134
+ }
135
+ async function plannedRulebook(templateId, engineVersion, packageManager, projectName) {
136
+ const agents = await agentsFromTemplate(templateId, engineVersion, packageManager, projectName);
137
+ return {
138
+ "AGENTS.md": agents,
139
+ "CLAUDE.md": claudePointer(),
140
+ "GEMINI.md": geminiMd(),
141
+ ".github/copilot-instructions.md": copilotInstructions(),
142
+ };
143
+ }
144
+ function lastLines(text) {
145
+ const lines = text.split("\n").filter((line) => line.trim().length > 0);
146
+ return lines.slice(-15).join("\n");
147
+ }
148
+ function printGateSteps(io, gate) {
149
+ for (const step of gate.steps) {
150
+ const seconds = step.durationSec !== undefined ? ` ${step.durationSec}s` : "";
151
+ const mark = step.result === "passed"
152
+ ? "ok "
153
+ : step.result === "skipped"
154
+ ? "skip"
155
+ : "fail";
156
+ io.stdout(`${mark} ${step.id}${seconds}`);
157
+ }
158
+ }
159
+ async function askYesNo(io, question, defaultYes) {
160
+ if (io.interactive) {
161
+ const answer = await io.interactive.confirm({
162
+ kind: "confirm",
163
+ message: question,
164
+ initialValue: defaultYes,
165
+ });
166
+ if (io.interactive.isCancel(answer))
167
+ return "cancel";
168
+ return answer;
169
+ }
170
+ if (io.prompt) {
171
+ const hint = defaultYes ? "Y/n" : "y/N";
172
+ const answer = String(await io.prompt(`${question} (${hint}) `)).trim();
173
+ if (answer.length === 0)
174
+ return defaultYes;
175
+ return /^(y|yes)$/i.test(answer);
176
+ }
177
+ return defaultYes;
178
+ }
179
+ /**
180
+ * Add the Yosr Seed rulebook + adopted `.seed/` record to an existing repo (ADR 0025 §3).
181
+ * Always previews (including one gate run) before writing Yosr Seed files.
182
+ */
183
+ export async function runAdopt(io) {
184
+ const parsed = parseFlags(io.args.slice(1));
185
+ if ("error" in parsed) {
186
+ io.stderr(parsed.error);
187
+ return exitCodes.failure;
188
+ }
189
+ const root = path.resolve(io.cwd ?? process.cwd(), parsed.dir);
190
+ if (!existsSync(root) || !statSync(root).isDirectory()) {
191
+ io.stderr(`Directory not found: ${root}`);
192
+ return exitCodes.failure;
193
+ }
194
+ if (existsSync(path.join(root, ".seed"))) {
195
+ io.stderr("This folder already has a .seed/ record. Adopt refuses to run when .seed/ exists.");
196
+ return exitCodes.failure;
197
+ }
198
+ let templateId;
199
+ if (parsed.template !== undefined) {
200
+ if (!isTemplateId(parsed.template)) {
201
+ io.stderr(`Unknown template ${JSON.stringify(parsed.template)}. Choose one of: ${TEMPLATE_IDS.join(", ")}.`);
202
+ return exitCodes.failure;
203
+ }
204
+ templateId = parsed.template;
205
+ }
206
+ else if (io.interactive) {
207
+ const picked = await io.interactive.select({
208
+ kind: "select",
209
+ message: "Template to adopt as",
210
+ options: TEMPLATE_IDS.map((id) => ({ value: id, label: id })),
211
+ initialValue: TEMPLATE_IDS[0],
212
+ line: "choices",
213
+ });
214
+ if (io.interactive.isCancel(picked) || !isTemplateId(picked)) {
215
+ io.stderr("Adopt cancelled.");
216
+ return exitCodes.failure;
217
+ }
218
+ templateId = picked;
219
+ }
220
+ else {
221
+ io.stderr("Pass --template <next-fullstack|fastapi|hono|vite-react|astro-site> (adopt does not detect the stack).");
222
+ return exitCodes.failure;
223
+ }
224
+ const packageManager = parsed.packageManager ?? defaultPackageManager(templateId);
225
+ const manifest = loadTemplateManifest(templateId);
226
+ const shippedVersion = templatePackageVersion(templateId);
227
+ const tdir = templateDir(templateId);
228
+ for (const foreign of foreignLockfiles(root, packageManager)) {
229
+ io.stdout(`Warning: found ${foreign} while using ${packageManager}. Pass --package-manager if you meant a different manager.`);
230
+ }
231
+ const probe = io.probe ?? liveProbe();
232
+ const checks = [packageManagerCheck(packageManager, probe)];
233
+ if (manifest.engines.python !== undefined) {
234
+ checks.push(pythonCheck(manifest.engines.python, probe));
235
+ }
236
+ if (manifest.engines.dotnet !== undefined) {
237
+ checks.push(dotnetCheck(manifest.engines.dotnet, probe));
238
+ }
239
+ if (manifest.engines.java !== undefined) {
240
+ checks.push(javaCheck(manifest.engines.java, probe));
241
+ }
242
+ const missing = checks.filter((check) => !check.ok);
243
+ if (missing.length > 0) {
244
+ for (const check of missing)
245
+ io.stderr(check.line);
246
+ return exitCodes.failure;
247
+ }
248
+ io.stdout("Yosr Seed adopt preview");
249
+ io.stdout(`Template ${templateId}@${shippedVersion}`);
250
+ io.stdout(`Package manager ${packageManager}`);
251
+ io.stdout("");
252
+ io.stdout("Rulebook files");
253
+ const projectName = path.basename(root);
254
+ let planned;
255
+ try {
256
+ planned = await plannedRulebook(templateId, io.version, packageManager, projectName);
257
+ }
258
+ catch (error) {
259
+ const message = error instanceof RenderError || error instanceof Error
260
+ ? error.message
261
+ : String(error);
262
+ io.stderr(`Could not build the rulebook from folder name ${JSON.stringify(projectName)}.\n${message}`);
263
+ return exitCodes.failure;
264
+ }
265
+ const existing = [];
266
+ const missingPaths = [];
267
+ for (const rel of RULEBOOK_PATHS) {
268
+ if (existsSync(path.join(root, rel))) {
269
+ existing.push(rel);
270
+ io.stdout(` keep (exists): ${rel}`);
271
+ }
272
+ else {
273
+ missingPaths.push(rel);
274
+ io.stdout(` add: ${rel}`);
275
+ }
276
+ }
277
+ const reportTempDir = mkdtempSync(path.join(tmpdir(), "yosr-adopt-report-"));
278
+ const reportTemp = path.join(reportTempDir, "report.md");
279
+ const ephemeralAnswers = {
280
+ packageManager,
281
+ options: {},
282
+ files: {},
283
+ style: { applied: {} },
284
+ };
285
+ io.stdout("");
286
+ io.stdout("Gate preview (may write node_modules / .venv / caches, and a lockfile if none exists; not .seed/)");
287
+ const gate = await (io.runProjectGate ?? runGate)({
288
+ dir: root,
289
+ templateDir: tdir,
290
+ services: true,
291
+ e2e: false,
292
+ image: false,
293
+ quiet: true,
294
+ answers: ephemeralAnswers,
295
+ persistAnswers: false,
296
+ reportPath: reportTemp,
297
+ lockedInstall: true,
298
+ });
299
+ if (gate.installCommand) {
300
+ io.stdout(`Install command: ${gate.installCommand}`);
301
+ }
302
+ printGateSteps(io, gate);
303
+ if (!gate.green) {
304
+ const failed = gate.steps.find((step) => step.result === "failed" || step.result === "timed-out");
305
+ if (failed?.excerpt)
306
+ io.stderr(lastLines(failed.excerpt));
307
+ for (const problem of gate.problems)
308
+ io.stderr(problem);
309
+ io.stdout("Gate would be red today.");
310
+ }
311
+ else {
312
+ io.stdout(`Tests: ${gate.testCount}`);
313
+ io.stdout("Gate would be green today.");
314
+ }
315
+ io.stdout("Preview writes no Yosr Seed files (.seed/ and rulebook paths untouched).");
316
+ if (!parsed.yes) {
317
+ // TTY only. Pipes and CI must pass --yes (line prompts would hang).
318
+ if (io.interactive) {
319
+ const answer = await askYesNo(io, "Apply adopt (write missing rulebook files + .seed/)?", false);
320
+ if (answer === "cancel" || answer === false) {
321
+ io.stdout("Adopt cancelled. Nothing written.");
322
+ rmSync(reportTempDir, { recursive: true, force: true });
323
+ return exitCodes.ok;
324
+ }
325
+ }
326
+ else {
327
+ io.stdout("Pass --yes to apply. Existing rulebook files are kept.");
328
+ rmSync(reportTempDir, { recursive: true, force: true });
329
+ return exitCodes.ok;
330
+ }
331
+ }
332
+ const overwrite = new Set();
333
+ if (!parsed.yes && io.interactive) {
334
+ for (const rel of existing) {
335
+ const replace = await askYesNo(io, `Overwrite existing ${rel}?`, false);
336
+ if (replace === "cancel") {
337
+ io.stdout("Adopt cancelled. Nothing written.");
338
+ rmSync(reportTempDir, { recursive: true, force: true });
339
+ return exitCodes.ok;
340
+ }
341
+ if (replace)
342
+ overwrite.add(rel);
343
+ }
344
+ }
345
+ const toWrite = [...missingPaths, ...overwrite];
346
+ try {
347
+ const written = {};
348
+ for (const rel of toWrite) {
349
+ written[rel] = {
350
+ owner: "template",
351
+ sha256: sha256Text(planned[rel]),
352
+ };
353
+ }
354
+ const profile = buildProfile({
355
+ preset: "clean",
356
+ now: new Date().toISOString(),
357
+ createdWith: "yosr-seed adopt",
358
+ });
359
+ const profileJson = `${JSON.stringify(profile, null, 2)}\n`;
360
+ written[".seed/profile.json"] = {
361
+ owner: "template",
362
+ sha256: sha256Text(profileJson),
363
+ };
364
+ const reportBody = readFileSync(reportTemp);
365
+ written[".seed/report.md"] = {
366
+ owner: "template",
367
+ sha256: sha256Text(reportBody),
368
+ };
369
+ const answers = {
370
+ lockVersion: 1,
371
+ engine: io.version,
372
+ origin: "adopted",
373
+ template: {
374
+ name: templateId,
375
+ version: shippedVersion,
376
+ source: templateSource(tdir),
377
+ },
378
+ packageManager,
379
+ options: {},
380
+ style: {
381
+ profileVersion: profile.profileVersion,
382
+ snapshot: ".seed/profile.json",
383
+ applied: {},
384
+ },
385
+ features: [],
386
+ files: written,
387
+ gate: {
388
+ status: gate.green ? "green" : "not-green",
389
+ location: "local",
390
+ fixAttempts: 0,
391
+ report: ".seed/report.md",
392
+ steps: gate.steps.map((step) => ({
393
+ id: step.id,
394
+ required: step.required,
395
+ result: step.result,
396
+ ...(step.durationSec !== undefined
397
+ ? { durationSec: step.durationSec }
398
+ : {}),
399
+ })),
400
+ },
401
+ };
402
+ try {
403
+ validateAnswers(answers, ".seed/answers.json");
404
+ }
405
+ catch (error) {
406
+ const message = error instanceof RenderError || error instanceof Error
407
+ ? error.message
408
+ : String(error);
409
+ io.stderr(`Adopt record is invalid; nothing written.\n${message}`);
410
+ return exitCodes.failure;
411
+ }
412
+ for (const rel of toWrite) {
413
+ const dest = path.join(root, rel);
414
+ mkdirSync(path.dirname(dest), { recursive: true });
415
+ writeFileSync(dest, planned[rel]);
416
+ }
417
+ mkdirSync(path.join(root, ".seed"), { recursive: true });
418
+ writeFileSync(path.join(root, ".seed", "profile.json"), profileJson);
419
+ copyFileSync(reportTemp, path.join(root, ".seed", "report.md"));
420
+ writeFileSync(path.join(root, ".seed", "answers.json"), `${JSON.stringify(answers, null, 2)}\n`);
421
+ io.stdout(gate.green
422
+ ? "Adopted. .seed/ written with origin adopted. Gate was green at preview."
423
+ : "Adopted. .seed/ written with origin adopted. Gate was red at preview — fix and re-run yosr-seed gate.");
424
+ return exitCodes.ok;
425
+ }
426
+ finally {
427
+ rmSync(reportTempDir, { recursive: true, force: true });
428
+ }
429
+ }
430
+ //# sourceMappingURL=adopt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adopt.js","sourceRoot":"","sources":["../src/adopt.ts"],"names":[],"mappings":"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"}
package/dist/create.js CHANGED
@@ -4,7 +4,7 @@ import { homedir } from "node:os";
4
4
  import path from "node:path";
5
5
  import { PRESET_TWEAKS, PROFILE_PATH_DEPRECATION, RenderError, buildProfile, defaultProfileName, evalCond, exitCodes, ignoredTweaks, isPresetName, isProfilePathArg, isTweakId, listProfileNames, migrateProfileStore, namedProfileFile, readProfile, render, resolveNamedProfile, runGate, setDefaultProfile, writeProfile, } from "./engine/index.js";
6
6
  import { savedStyleLabels } from "./labels.js";
7
- import { folderCheck, gitCheck, liveProbe, nodeCheck, packageManagerCheck, pythonCheck, } from "./preflight.js";
7
+ import { folderCheck, gitCheck, liveProbe, nodeCheck, dotnetCheck, javaCheck, packageManagerCheck, pythonCheck, } from "./preflight.js";
8
8
  import { TWEAKS, lineQuestion, optionPrompt, presetPrompt, tweakPrompt, } from "./prompts.js";
9
9
  import { renderFromYosrSeed } from "./run.js";
10
10
  import { DEFAULT_TEMPLATE, TEMPLATES, TEMPLATE_IDS, isTemplateId, loadTemplateManifest, templateChoices, templateDir as installedTemplatePath, } from "./templates.js";
@@ -112,6 +112,10 @@ function parseCreateArgs(args, manifest) {
112
112
  parsed.git = false;
113
113
  else if (name === "push")
114
114
  parsed.push = true;
115
+ else if (name === "database-url")
116
+ parsed.databaseUrl = takeValue(inline, rest, name);
117
+ else if (name === "mongodb-uri")
118
+ parsed.mongodbUri = takeValue(inline, rest, name);
115
119
  else if (name === "package-manager") {
116
120
  const value = takeValue(inline, rest, name);
117
121
  const manager = managers.find((item) => item === value);
@@ -148,6 +152,11 @@ function parseCreateArgs(args, manifest) {
148
152
  throw new Error("--push needs a green gate. Omit --no-gate.");
149
153
  if (parsed.noGate && parsed.saveProfile)
150
154
  throw new Error("--save-profile needs a green gate. Omit --no-gate.");
155
+ if (parsed.databaseUrl !== undefined && parsed.mongodbUri !== undefined)
156
+ throw new Error("Pass only one of --database-url or --mongodb-uri.");
157
+ if (parsed.noGate &&
158
+ (parsed.databaseUrl !== undefined || parsed.mongodbUri !== undefined))
159
+ throw new Error("--database-url / --mongodb-uri need the gate. Omit --no-gate.");
151
160
  return parsed;
152
161
  }
153
162
  function parseBooleanAnswer(raw, fallback) {
@@ -426,10 +435,14 @@ export async function runCreate(io) {
426
435
  const now = io.now ?? new Date().toISOString();
427
436
  const probe = io.probe ?? liveProbe();
428
437
  const python = manifest.engines.python;
438
+ const dotnet = manifest.engines.dotnet;
439
+ const java = manifest.engines.java;
429
440
  const preflight = [
430
441
  nodeCheck(io.nodeVersion),
431
442
  packageManagerCheck(flags.packageManager, probe),
432
443
  ...(python !== undefined ? [pythonCheck(python, probe)] : []),
444
+ ...(dotnet !== undefined ? [dotnetCheck(dotnet, probe)] : []),
445
+ ...(java !== undefined ? [javaCheck(java, probe)] : []),
433
446
  gitCheck(flags.git, probe, io.gitIdentity),
434
447
  ];
435
448
  const knownDir = flags.dir ??
@@ -861,7 +874,9 @@ export async function runCreate(io) {
861
874
  ? "npm run dev"
862
875
  : flags.packageManager === "uv"
863
876
  ? "uv run dev"
864
- : "pnpm dev";
877
+ : flags.packageManager === "dotnet"
878
+ ? "dotnet run --project src/App"
879
+ : "pnpm dev";
865
880
  const createdHere = !existsSync(outDir);
866
881
  const finishCancel = () => {
867
882
  if (createdHere && existsSync(outDir)) {
@@ -906,7 +921,9 @@ export async function runCreate(io) {
906
921
  spin?.stop(`Rendered ${secondsSince(renderStarted)}`);
907
922
  const ignored = rendered.ignored ?? [];
908
923
  if (ignored.length > 0) {
909
- const line = manifest.stack?.framework === "hono"
924
+ const line = manifest.stack?.framework === "hono" ||
925
+ manifest.engines.dotnet !== undefined ||
926
+ manifest.engines.java !== undefined
910
927
  ? `Style: ${ignored.length} profile settings this template ignores (for example Next.js-only lint) were skipped.`
911
928
  : `Style: ${ignored.length} profile settings for TypeScript and front-end code do not apply to ${manifest.name}; skipped.`;
912
929
  if (session)
@@ -935,6 +952,15 @@ export async function runCreate(io) {
935
952
  };
936
953
  }
937
954
  else {
955
+ const databaseChoice = typeof flags.answers.database === "string"
956
+ ? flags.answers.database
957
+ : undefined;
958
+ if (flags.databaseUrl !== undefined && databaseChoice !== "postgres") {
959
+ throw new Error("--database-url is only for Postgres projects. Pass --database postgres or omit --database-url.");
960
+ }
961
+ if (flags.mongodbUri !== undefined && databaseChoice !== "mongodb") {
962
+ throw new Error("--mongodb-uri is only for MongoDB projects. Pass --database mongodb or omit --mongodb-uri.");
963
+ }
938
964
  const gateOptions = {
939
965
  dir: outDir,
940
966
  templateDir,
@@ -942,6 +968,12 @@ export async function runCreate(io) {
942
968
  e2e: flags.e2e,
943
969
  quiet: session !== undefined,
944
970
  shouldStop: () => abandoned,
971
+ ...(flags.databaseUrl !== undefined
972
+ ? { databaseUrl: flags.databaseUrl }
973
+ : {}),
974
+ ...(flags.mongodbUri !== undefined
975
+ ? { mongodbUri: flags.mongodbUri }
976
+ : {}),
945
977
  };
946
978
  let liveSteps = false;
947
979
  if (spin) {
@@ -1044,6 +1076,8 @@ export async function runCreate(io) {
1044
1076
  return exitCodes.ok;
1045
1077
  }
1046
1078
  if (!gate.green) {
1079
+ for (const problem of gate.problems)
1080
+ session.log.error(problem);
1047
1081
  session.log.error(gate.banner ?? "NOT GREEN");
1048
1082
  session.outro(`The project was still written. See ${cd}/.seed/report.md`);
1049
1083
  return gate.exitCode;
@@ -1065,6 +1099,8 @@ export async function runCreate(io) {
1065
1099
  if (flags.noGate)
1066
1100
  return exitCodes.ok;
1067
1101
  if (!gate.green) {
1102
+ for (const problem of gate.problems)
1103
+ io.stderr(problem);
1068
1104
  io.stderr(gate.banner ?? "NOT GREEN");
1069
1105
  return gate.exitCode;
1070
1106
  }