yosr-seed 0.0.1 → 0.1.0-alpha.1
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 +16 -0
- package/README.md +2 -2
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +31 -0
- package/dist/cli.js.map +1 -0
- package/dist/create.d.ts +4 -0
- package/dist/create.js +452 -0
- package/dist/create.js.map +1 -0
- package/dist/engine/delta/bounds.d.ts +14 -0
- package/dist/engine/delta/bounds.js +101 -0
- package/dist/engine/delta/bounds.js.map +1 -0
- package/dist/engine/delta/loop.d.ts +32 -0
- package/dist/engine/delta/loop.js +51 -0
- package/dist/engine/delta/loop.js.map +1 -0
- package/dist/engine/delta/provider.d.ts +3 -0
- package/dist/engine/delta/provider.js +15 -0
- package/dist/engine/delta/provider.js.map +1 -0
- package/dist/engine/delta/types.d.ts +34 -0
- package/dist/engine/delta/types.js +2 -0
- package/dist/engine/delta/types.js.map +1 -0
- package/dist/engine/exit-codes.d.ts +7 -0
- package/dist/engine/exit-codes.js +7 -0
- package/dist/engine/exit-codes.js.map +1 -0
- package/dist/engine/gate/matrix.d.ts +1 -0
- package/dist/engine/gate/matrix.js +184 -0
- package/dist/engine/gate/matrix.js.map +1 -0
- package/dist/engine/gate/run.d.ts +50 -0
- package/dist/engine/gate/run.js +312 -0
- package/dist/engine/gate/run.js.map +1 -0
- package/dist/engine/index.d.ts +14 -0
- package/dist/engine/index.js +13 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/node-version.d.ts +2 -0
- package/dist/engine/node-version.js +9 -0
- package/dist/engine/node-version.js.map +1 -0
- package/dist/engine/profile/hash.d.ts +8 -0
- package/dist/engine/profile/hash.js +6 -0
- package/dist/engine/profile/hash.js.map +1 -0
- package/dist/engine/profile/presets.d.ts +17 -0
- package/dist/engine/profile/presets.js +171 -0
- package/dist/engine/profile/presets.js.map +1 -0
- package/dist/engine/profile/store.d.ts +26 -0
- package/dist/engine/profile/store.js +128 -0
- package/dist/engine/profile/store.js.map +1 -0
- package/dist/engine/render/codemods.d.ts +6 -0
- package/dist/engine/render/codemods.js +172 -0
- package/dist/engine/render/codemods.js.map +1 -0
- package/dist/engine/render/conditions.d.ts +8 -0
- package/dist/engine/render/conditions.js +29 -0
- package/dist/engine/render/conditions.js.map +1 -0
- package/dist/engine/render/constraints.d.ts +3 -0
- package/dist/engine/render/constraints.js +10 -0
- package/dist/engine/render/constraints.js.map +1 -0
- package/dist/engine/render/enforcement.d.ts +8 -0
- package/dist/engine/render/enforcement.js +125 -0
- package/dist/engine/render/enforcement.js.map +1 -0
- package/dist/engine/render/engines.d.ts +2 -0
- package/dist/engine/render/engines.js +75 -0
- package/dist/engine/render/engines.js.map +1 -0
- package/dist/engine/render/errors.d.ts +3 -0
- package/dist/engine/render/errors.js +6 -0
- package/dist/engine/render/errors.js.map +1 -0
- package/dist/engine/render/features.d.ts +4 -0
- package/dist/engine/render/features.js +19 -0
- package/dist/engine/render/features.js.map +1 -0
- package/dist/engine/render/format.d.ts +3 -0
- package/dist/engine/render/format.js +16 -0
- package/dist/engine/render/format.js.map +1 -0
- package/dist/engine/render/json-merge.d.ts +12 -0
- package/dist/engine/render/json-merge.js +66 -0
- package/dist/engine/render/json-merge.js.map +1 -0
- package/dist/engine/render/lockfile.d.ts +23 -0
- package/dist/engine/render/lockfile.js +76 -0
- package/dist/engine/render/lockfile.js.map +1 -0
- package/dist/engine/render/options.d.ts +3 -0
- package/dist/engine/render/options.js +41 -0
- package/dist/engine/render/options.js.map +1 -0
- package/dist/engine/render/package-manager.d.ts +3 -0
- package/dist/engine/render/package-manager.js +13 -0
- package/dist/engine/render/package-manager.js.map +1 -0
- package/dist/engine/render/render.d.ts +22 -0
- package/dist/engine/render/render.js +132 -0
- package/dist/engine/render/render.js.map +1 -0
- package/dist/engine/render/rules.d.ts +5 -0
- package/dist/engine/render/rules.js +149 -0
- package/dist/engine/render/rules.js.map +1 -0
- package/dist/engine/render/style.d.ts +21 -0
- package/dist/engine/render/style.js +160 -0
- package/dist/engine/render/style.js.map +1 -0
- package/dist/engine/render/tokens.d.ts +4 -0
- package/dist/engine/render/tokens.js +35 -0
- package/dist/engine/render/tokens.js.map +1 -0
- package/dist/engine/render/tree-ops.d.ts +7 -0
- package/dist/engine/render/tree-ops.js +133 -0
- package/dist/engine/render/tree-ops.js.map +1 -0
- package/dist/engine/render/types.d.ts +253 -0
- package/dist/engine/render/types.js +3 -0
- package/dist/engine/render/types.js.map +1 -0
- package/dist/engine/render/util.d.ts +13 -0
- package/dist/engine/render/util.js +74 -0
- package/dist/engine/render/util.js.map +1 -0
- package/dist/engine/render/validate.d.ts +3 -0
- package/dist/engine/render/validate.js +25 -0
- package/dist/engine/render/validate.js.map +1 -0
- package/dist/interactive.d.ts +2 -0
- package/dist/interactive.js +60 -0
- package/dist/interactive.js.map +1 -0
- package/dist/profile.d.ts +12 -0
- package/dist/profile.js +126 -0
- package/dist/profile.js.map +1 -0
- package/dist/prompt.d.ts +6 -0
- package/dist/prompt.js +32 -0
- package/dist/prompt.js.map +1 -0
- package/dist/prompts.d.ts +66 -0
- package/dist/prompts.js +105 -0
- package/dist/prompts.js.map +1 -0
- package/dist/run.d.ts +33 -0
- package/dist/run.js +89 -0
- package/dist/run.js.map +1 -0
- package/dist/schemas/seed.answers.schema.json +283 -0
- package/dist/schemas/seed.profile.schema.json +289 -0
- package/dist/schemas/seed.template.schema.json +1469 -0
- package/package.json +33 -6
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# yosr-seed
|
|
2
|
+
|
|
3
|
+
## 0.1.0-alpha.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- An interactive Yosr Seed run closes with the next command when the gate is green, and points at `.seed/report.md` when the project was still written. On a terminal, the written folder, git, and the gate stay inside the prompt rail. The published Yosr Seed package rewrites every bundled `@yosr-ai/engine` import.
|
|
8
|
+
- Generated Yosr Seed projects record the choices made at setup and ask before departing from them. Flat aliases and unit-test paths match the layout, the home page follows the database choice, and standalone output is only for the Docker image build.
|
|
9
|
+
- Generated Yosr Seed projects pass every `ts.typeDefinitions` setting. Flat layout names `src/lib/server/` as the server-infrastructure area, with one level for `db/` and `auth/`.
|
|
10
|
+
- Yosr Seed depends on `@yosr-ai/template-next-fullstack` 0.1.0-alpha.1.
|
|
11
|
+
|
|
12
|
+
## 0.1.0-alpha.0
|
|
13
|
+
|
|
14
|
+
### Major Changes
|
|
15
|
+
|
|
16
|
+
- First alpha of the Yosr Seed command-line interface.
|
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# yosr-seed
|
|
2
2
|
|
|
3
|
-
Yosr Seed
|
|
3
|
+
The Yosr Seed command-line interface. Binary: `yosr-seed`. License: MIT. Node.js: `>=24`.
|
|
4
4
|
|
|
5
|
-
https://
|
|
5
|
+
Commands, flags, exit codes, and the profile path are in the [repository README](https://github.com/getyosr/yosr-seed#readme).
|
package/dist/cli.d.ts
ADDED
package/dist/cli.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { clackPrompts } from "./interactive.js";
|
|
3
|
+
import { openPrompts } from "./prompt.js";
|
|
4
|
+
import { readOwnPackageVersion, runYosrSeed } from "./run.js";
|
|
5
|
+
const tty = process.stdin.isTTY === true;
|
|
6
|
+
const lines = tty ? undefined : openPrompts();
|
|
7
|
+
void runYosrSeed({
|
|
8
|
+
nodeVersion: process.versions.node,
|
|
9
|
+
args: process.argv.slice(2),
|
|
10
|
+
version: readOwnPackageVersion(),
|
|
11
|
+
stdout: (line) => {
|
|
12
|
+
console.log(line);
|
|
13
|
+
},
|
|
14
|
+
stderr: (line) => {
|
|
15
|
+
console.error(line);
|
|
16
|
+
},
|
|
17
|
+
...(lines !== undefined
|
|
18
|
+
? { prompt: (question) => lines.ask(question) }
|
|
19
|
+
: {}),
|
|
20
|
+
...(tty ? { interactive: clackPrompts() } : {}),
|
|
21
|
+
})
|
|
22
|
+
.then((code) => {
|
|
23
|
+
lines?.close();
|
|
24
|
+
process.exit(code);
|
|
25
|
+
})
|
|
26
|
+
.catch((error) => {
|
|
27
|
+
lines?.close();
|
|
28
|
+
console.error(error instanceof Error ? error.message : error);
|
|
29
|
+
process.exit(1);
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE9D,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC;AACzC,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAE9C,KAAK,WAAW,CAAC;IACf,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;IAClC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3B,OAAO,EAAE,qBAAqB,EAAE;IAChC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACf,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IACD,GAAG,CAAC,KAAK,KAAK,SAAS;QACrB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;QACvD,CAAC,CAAC,EAAE,CAAC;IACP,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CAChD,CAAC;KACC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;IACb,KAAK,EAAE,KAAK,EAAE,CAAC;IACf,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC,CAAC;KACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IACxB,KAAK,EAAE,KAAK,EAAE,CAAC;IACf,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/create.d.ts
ADDED
package/dist/create.js
ADDED
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { PRESET_TWEAKS, RenderError, buildProfile, evalCond, exitCodes, isPresetName, profileFile, readProfile, render, runGate, writeProfile, } from "./engine/index.js";
|
|
7
|
+
import { TWEAKS, lineQuestion, optionPrompt, presetPrompt, tweakPrompt, } from "./prompts.js";
|
|
8
|
+
import { renderFromYosrSeed } from "./run.js";
|
|
9
|
+
/** Directory of the installed `@yosr-ai/template-next-fullstack` package. */
|
|
10
|
+
export function installedTemplateDir() {
|
|
11
|
+
return path.dirname(fileURLToPath(import.meta.resolve("@yosr-ai/template-next-fullstack/package.json")));
|
|
12
|
+
}
|
|
13
|
+
function flagName(option) {
|
|
14
|
+
if (option.flag)
|
|
15
|
+
return option.flag;
|
|
16
|
+
return option.id.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);
|
|
17
|
+
}
|
|
18
|
+
function splitFlag(token) {
|
|
19
|
+
const body = token.slice(2);
|
|
20
|
+
const eq = body.indexOf("=");
|
|
21
|
+
if (eq === -1)
|
|
22
|
+
return { name: body };
|
|
23
|
+
return { name: body.slice(0, eq), inline: body.slice(eq + 1) };
|
|
24
|
+
}
|
|
25
|
+
function takeValue(inline, rest, name) {
|
|
26
|
+
if (inline !== undefined)
|
|
27
|
+
return inline;
|
|
28
|
+
const next = rest[0];
|
|
29
|
+
if (next === undefined || next.startsWith("--"))
|
|
30
|
+
throw new Error(`Missing value for --${name}.`);
|
|
31
|
+
rest.shift();
|
|
32
|
+
return next;
|
|
33
|
+
}
|
|
34
|
+
function takeBoolean(inline, rest) {
|
|
35
|
+
let raw = inline;
|
|
36
|
+
if (raw === undefined && rest[0] !== undefined && !rest[0].startsWith("--"))
|
|
37
|
+
raw = rest.shift();
|
|
38
|
+
if (raw === undefined || raw === "true")
|
|
39
|
+
return true;
|
|
40
|
+
if (raw === "false")
|
|
41
|
+
return false;
|
|
42
|
+
throw new Error(`Expected true or false, got ${raw}.`);
|
|
43
|
+
}
|
|
44
|
+
function styleScalar(raw) {
|
|
45
|
+
if (raw === "true")
|
|
46
|
+
return true;
|
|
47
|
+
if (raw === "false")
|
|
48
|
+
return false;
|
|
49
|
+
if (/^-?\d+$/.test(raw))
|
|
50
|
+
return Number(raw);
|
|
51
|
+
return raw;
|
|
52
|
+
}
|
|
53
|
+
function parseCreateArgs(args, manifest) {
|
|
54
|
+
const byFlag = new Map(manifest.options.map((option) => [flagName(option), option]));
|
|
55
|
+
const rest = [...args];
|
|
56
|
+
const parsed = {
|
|
57
|
+
nonInteractive: false,
|
|
58
|
+
packageManager: "pnpm",
|
|
59
|
+
e2e: false,
|
|
60
|
+
saveProfile: false,
|
|
61
|
+
git: true,
|
|
62
|
+
push: false,
|
|
63
|
+
style: {},
|
|
64
|
+
answers: {},
|
|
65
|
+
};
|
|
66
|
+
while (rest.length > 0) {
|
|
67
|
+
const token = rest.shift();
|
|
68
|
+
if (token === undefined)
|
|
69
|
+
break;
|
|
70
|
+
if (!token.startsWith("--")) {
|
|
71
|
+
if (parsed.dir !== undefined)
|
|
72
|
+
throw new Error("Only one directory can be given.");
|
|
73
|
+
parsed.dir = token;
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
const { name, inline } = splitFlag(token);
|
|
77
|
+
if (name === "non-interactive")
|
|
78
|
+
parsed.nonInteractive = true;
|
|
79
|
+
else if (name === "e2e")
|
|
80
|
+
parsed.e2e = true;
|
|
81
|
+
else if (name === "save-profile")
|
|
82
|
+
parsed.saveProfile = true;
|
|
83
|
+
else if (name === "no-git")
|
|
84
|
+
parsed.git = false;
|
|
85
|
+
else if (name === "push")
|
|
86
|
+
parsed.push = true;
|
|
87
|
+
else if (name === "package-manager") {
|
|
88
|
+
const value = takeValue(inline, rest, name);
|
|
89
|
+
if (value !== "pnpm" && value !== "npm")
|
|
90
|
+
throw new Error("Package manager must be pnpm or npm.");
|
|
91
|
+
parsed.packageManager = value;
|
|
92
|
+
}
|
|
93
|
+
else if (name === "profile")
|
|
94
|
+
parsed.profilePath = takeValue(inline, rest, name);
|
|
95
|
+
else if (name === "style") {
|
|
96
|
+
const value = takeValue(inline, rest, name);
|
|
97
|
+
const eq = value.indexOf("=");
|
|
98
|
+
if (eq <= 0)
|
|
99
|
+
throw new Error("Expected --style <dimension>=<value>.");
|
|
100
|
+
parsed.style[value.slice(0, eq)] = styleScalar(value.slice(eq + 1));
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
const option = byFlag.get(name);
|
|
104
|
+
if (option === undefined)
|
|
105
|
+
throw new Error(`Unknown flag --${name}.`);
|
|
106
|
+
if (option.type === "boolean")
|
|
107
|
+
parsed.answers[option.id] = takeBoolean(inline, rest);
|
|
108
|
+
else
|
|
109
|
+
parsed.answers[option.id] = takeValue(inline, rest, name);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (parsed.push && !parsed.git)
|
|
113
|
+
throw new Error("--push needs git. Omit --no-git.");
|
|
114
|
+
return parsed;
|
|
115
|
+
}
|
|
116
|
+
function parseBooleanAnswer(raw, fallback) {
|
|
117
|
+
if (raw === "") {
|
|
118
|
+
if (fallback === undefined)
|
|
119
|
+
throw new Error("Expected yes or no. Choose Yes / No.");
|
|
120
|
+
return fallback;
|
|
121
|
+
}
|
|
122
|
+
const word = raw.toLowerCase();
|
|
123
|
+
if (word === "true" || word === "yes" || word === "y")
|
|
124
|
+
return true;
|
|
125
|
+
if (word === "false" || word === "no" || word === "n")
|
|
126
|
+
return false;
|
|
127
|
+
throw new Error(`Expected yes or no, got ${raw}. Choose Yes / No.`);
|
|
128
|
+
}
|
|
129
|
+
async function ask(io, text) {
|
|
130
|
+
if (!io.prompt)
|
|
131
|
+
throw new Error("This create run needs answers. Pass --non-interactive or answer the prompts.");
|
|
132
|
+
return (await io.prompt(`${text}\n> `)).trim();
|
|
133
|
+
}
|
|
134
|
+
function runGit(dir, args) {
|
|
135
|
+
const result = spawnSync("git", args, { cwd: dir, encoding: "utf8" });
|
|
136
|
+
if (result.status !== 0)
|
|
137
|
+
throw new Error((result.stderr || result.stdout || `git ${args[0] ?? ""} failed`).trim());
|
|
138
|
+
}
|
|
139
|
+
function commitProject(dir, message, identity) {
|
|
140
|
+
runGit(dir, ["init"]);
|
|
141
|
+
if (identity) {
|
|
142
|
+
runGit(dir, ["config", "--local", "user.name", identity.name]);
|
|
143
|
+
runGit(dir, ["config", "--local", "user.email", identity.email]);
|
|
144
|
+
}
|
|
145
|
+
runGit(dir, ["add", "-A"]);
|
|
146
|
+
runGit(dir, ["commit", "-m", message]);
|
|
147
|
+
}
|
|
148
|
+
function defaultGh(args, cwd) {
|
|
149
|
+
const result = spawnSync("gh", [...args], { cwd, stdio: "inherit" });
|
|
150
|
+
if (result.status !== 0)
|
|
151
|
+
throw new Error("gh exited non-zero.");
|
|
152
|
+
}
|
|
153
|
+
export async function runCreate(io) {
|
|
154
|
+
let session;
|
|
155
|
+
try {
|
|
156
|
+
const templateDir = installedTemplateDir();
|
|
157
|
+
const manifest = JSON.parse(readFileSync(path.join(templateDir, "seed.template.json"), "utf8"));
|
|
158
|
+
const flags = parseCreateArgs(io.args.slice(1), manifest);
|
|
159
|
+
const cwd = io.cwd ?? process.cwd();
|
|
160
|
+
const store = profileFile({
|
|
161
|
+
env: io.env ?? process.env,
|
|
162
|
+
platform: io.platform ?? process.platform,
|
|
163
|
+
homedir: io.homedir ?? homedir(),
|
|
164
|
+
});
|
|
165
|
+
session = flags.nonInteractive ? undefined : io.interactive;
|
|
166
|
+
if (!flags.nonInteractive &&
|
|
167
|
+
flags.answers.projectName === undefined &&
|
|
168
|
+
!io.prompt &&
|
|
169
|
+
session === undefined) {
|
|
170
|
+
throw new Error("This create run needs answers. Pass --non-interactive or answer the prompts.");
|
|
171
|
+
}
|
|
172
|
+
if (flags.nonInteractive && flags.answers.projectName === undefined) {
|
|
173
|
+
io.stderr("projectName has no default and no flag. Pass --project-name.");
|
|
174
|
+
return exitCodes.failure;
|
|
175
|
+
}
|
|
176
|
+
if (session)
|
|
177
|
+
session.intro(`Yosr Seed ${io.version}`);
|
|
178
|
+
const cancelled = () => {
|
|
179
|
+
session?.cancel("Cancelled");
|
|
180
|
+
return exitCodes.failure;
|
|
181
|
+
};
|
|
182
|
+
async function askSelect(spec) {
|
|
183
|
+
if (session) {
|
|
184
|
+
const value = await session.select(spec);
|
|
185
|
+
if (session.isCancel(value))
|
|
186
|
+
return undefined;
|
|
187
|
+
return value;
|
|
188
|
+
}
|
|
189
|
+
if (spec.line === "preset") {
|
|
190
|
+
let name;
|
|
191
|
+
while (name === undefined) {
|
|
192
|
+
const answer = (await ask(io, lineQuestion(spec))).toLowerCase();
|
|
193
|
+
if (isPresetName(answer))
|
|
194
|
+
name = answer;
|
|
195
|
+
else
|
|
196
|
+
io.stderr("Choose Clean, Classic, or Minimal.");
|
|
197
|
+
}
|
|
198
|
+
return name;
|
|
199
|
+
}
|
|
200
|
+
let matched;
|
|
201
|
+
while (matched === undefined) {
|
|
202
|
+
const answer = await ask(io, lineQuestion(spec));
|
|
203
|
+
const raw = answer === "" ? spec.initialValue : answer;
|
|
204
|
+
matched = spec.options.find((choice) => choice.value.toLowerCase() === raw.toLowerCase() ||
|
|
205
|
+
choice.label.toLowerCase() === raw.toLowerCase())?.value;
|
|
206
|
+
if (matched === undefined) {
|
|
207
|
+
io.stderr(`"${raw}" is not a choice for ${spec.message}. Choose ${spec.options.map((choice) => choice.label).join(" / ")}.`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return matched;
|
|
211
|
+
}
|
|
212
|
+
async function askConfirm(spec) {
|
|
213
|
+
if (session) {
|
|
214
|
+
const value = await session.confirm(spec);
|
|
215
|
+
if (session.isCancel(value))
|
|
216
|
+
return undefined;
|
|
217
|
+
return value;
|
|
218
|
+
}
|
|
219
|
+
let accepted;
|
|
220
|
+
while (accepted === undefined) {
|
|
221
|
+
const raw = await ask(io, lineQuestion(spec));
|
|
222
|
+
try {
|
|
223
|
+
accepted = parseBooleanAnswer(raw, spec.initialValue);
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
io.stderr(error instanceof Error ? error.message : String(error));
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return accepted;
|
|
230
|
+
}
|
|
231
|
+
async function askText(spec) {
|
|
232
|
+
if (session) {
|
|
233
|
+
const value = await session.text(spec);
|
|
234
|
+
if (session.isCancel(value))
|
|
235
|
+
return undefined;
|
|
236
|
+
return value === "" ? spec.initialValue : value;
|
|
237
|
+
}
|
|
238
|
+
let accepted;
|
|
239
|
+
while (accepted === undefined) {
|
|
240
|
+
const raw = await ask(io, lineQuestion(spec));
|
|
241
|
+
const value = raw === "" ? spec.initialValue : raw;
|
|
242
|
+
const error = spec.validate(value);
|
|
243
|
+
if (error === undefined)
|
|
244
|
+
accepted = value;
|
|
245
|
+
else
|
|
246
|
+
io.stderr(error);
|
|
247
|
+
}
|
|
248
|
+
return accepted;
|
|
249
|
+
}
|
|
250
|
+
let profile;
|
|
251
|
+
let writeNewProfile = false;
|
|
252
|
+
if (flags.profilePath !== undefined)
|
|
253
|
+
profile = readProfile(flags.profilePath);
|
|
254
|
+
else if (existsSync(store))
|
|
255
|
+
profile = readProfile(store);
|
|
256
|
+
else if (flags.nonInteractive) {
|
|
257
|
+
profile = buildProfile({
|
|
258
|
+
preset: "clean",
|
|
259
|
+
now: io.now ?? new Date().toISOString(),
|
|
260
|
+
createdWith: io.version,
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
const presetName = await askSelect(presetPrompt());
|
|
265
|
+
if (presetName === undefined)
|
|
266
|
+
return cancelled();
|
|
267
|
+
if (!isPresetName(presetName))
|
|
268
|
+
return exitCodes.failure;
|
|
269
|
+
const tweaks = {};
|
|
270
|
+
const defaults = PRESET_TWEAKS[presetName];
|
|
271
|
+
for (const tweak of TWEAKS) {
|
|
272
|
+
const value = await askSelect(tweakPrompt(tweak.id, tweak.question, defaults[tweak.id]));
|
|
273
|
+
if (value === undefined)
|
|
274
|
+
return cancelled();
|
|
275
|
+
tweaks[tweak.id] = value;
|
|
276
|
+
}
|
|
277
|
+
profile = buildProfile({
|
|
278
|
+
preset: presetName,
|
|
279
|
+
tweaks,
|
|
280
|
+
now: io.now ?? new Date().toISOString(),
|
|
281
|
+
createdWith: io.version,
|
|
282
|
+
});
|
|
283
|
+
writeNewProfile = true;
|
|
284
|
+
}
|
|
285
|
+
const extra = { packageManager: flags.packageManager };
|
|
286
|
+
for (const option of manifest.options) {
|
|
287
|
+
const applicable = option.when === undefined ||
|
|
288
|
+
evalCond(option.when, flags.answers, extra);
|
|
289
|
+
if (!applicable) {
|
|
290
|
+
if (flags.answers[option.id] === undefined)
|
|
291
|
+
flags.answers[option.id] = null;
|
|
292
|
+
continue;
|
|
293
|
+
}
|
|
294
|
+
if (flags.answers[option.id] !== undefined)
|
|
295
|
+
continue;
|
|
296
|
+
if (flags.nonInteractive) {
|
|
297
|
+
if (option.default === undefined) {
|
|
298
|
+
io.stderr(`${option.id} has no default and no flag. Pass --${flagName(option)}.`);
|
|
299
|
+
return exitCodes.failure;
|
|
300
|
+
}
|
|
301
|
+
flags.answers[option.id] = option.default;
|
|
302
|
+
continue;
|
|
303
|
+
}
|
|
304
|
+
const spec = optionPrompt(option, {
|
|
305
|
+
cwd,
|
|
306
|
+
...(flags.dir !== undefined ? { dir: flags.dir } : {}),
|
|
307
|
+
});
|
|
308
|
+
if (spec.kind === "select") {
|
|
309
|
+
const value = await askSelect(spec);
|
|
310
|
+
if (value === undefined)
|
|
311
|
+
return cancelled();
|
|
312
|
+
flags.answers[option.id] = value;
|
|
313
|
+
}
|
|
314
|
+
else if (spec.kind === "confirm") {
|
|
315
|
+
const value = await askConfirm(spec);
|
|
316
|
+
if (value === undefined)
|
|
317
|
+
return cancelled();
|
|
318
|
+
flags.answers[option.id] = value;
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
const value = await askText(spec);
|
|
322
|
+
if (value === undefined)
|
|
323
|
+
return cancelled();
|
|
324
|
+
flags.answers[option.id] = value;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
if (writeNewProfile)
|
|
328
|
+
writeProfile(store, profile);
|
|
329
|
+
const projectName = flags.answers.projectName;
|
|
330
|
+
if (typeof projectName !== "string" || projectName.length === 0) {
|
|
331
|
+
io.stderr("projectName has no default and no flag. Pass --project-name.");
|
|
332
|
+
return exitCodes.failure;
|
|
333
|
+
}
|
|
334
|
+
const outDir = path.resolve(cwd, flags.dir ?? projectName);
|
|
335
|
+
const input = {
|
|
336
|
+
templateDir,
|
|
337
|
+
answers: flags.answers,
|
|
338
|
+
profile,
|
|
339
|
+
outDir,
|
|
340
|
+
packageManager: flags.packageManager,
|
|
341
|
+
styleOverrides: flags.style,
|
|
342
|
+
};
|
|
343
|
+
const spin = session?.spinner();
|
|
344
|
+
spin?.start("Rendering");
|
|
345
|
+
try {
|
|
346
|
+
await renderFromYosrSeed(input, io.renderProject ?? render);
|
|
347
|
+
spin?.stop("Rendered");
|
|
348
|
+
}
|
|
349
|
+
catch (error) {
|
|
350
|
+
spin?.stop("Render failed");
|
|
351
|
+
throw error;
|
|
352
|
+
}
|
|
353
|
+
if (flags.saveProfile) {
|
|
354
|
+
writeProfile(store, JSON.parse(readFileSync(path.join(outDir, ".seed/profile.json"), "utf8")));
|
|
355
|
+
}
|
|
356
|
+
spin?.start("Installing");
|
|
357
|
+
const gateOptions = {
|
|
358
|
+
dir: outDir,
|
|
359
|
+
templateDir,
|
|
360
|
+
services: true,
|
|
361
|
+
e2e: flags.e2e,
|
|
362
|
+
quiet: session !== undefined,
|
|
363
|
+
};
|
|
364
|
+
if (spin)
|
|
365
|
+
gateOptions.onStep = ({ id }) => {
|
|
366
|
+
spin.message(id === "install" ? "Installing" : id);
|
|
367
|
+
};
|
|
368
|
+
let gate;
|
|
369
|
+
try {
|
|
370
|
+
gate = await (io.runProjectGate ?? runGate)(gateOptions);
|
|
371
|
+
spin?.stop(gate.green ? "Checked" : "Gate failed");
|
|
372
|
+
}
|
|
373
|
+
catch (error) {
|
|
374
|
+
spin?.stop("Gate failed");
|
|
375
|
+
throw error;
|
|
376
|
+
}
|
|
377
|
+
if (!gate.green && session) {
|
|
378
|
+
for (const step of gate.steps) {
|
|
379
|
+
if (step.durationSec === undefined)
|
|
380
|
+
continue;
|
|
381
|
+
const line = ` ${step.id.padEnd(10)} ${step.result.padEnd(9)} ${step.durationSec}s`;
|
|
382
|
+
if (step.result === "failed" || step.result === "timed-out")
|
|
383
|
+
session.log.error(line);
|
|
384
|
+
else
|
|
385
|
+
session.log.step(line);
|
|
386
|
+
if (step.excerpt)
|
|
387
|
+
session.note(step.excerpt, step.id);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
if (flags.git)
|
|
391
|
+
commitProject(outDir, gate.green ? "Initial commit" : "Initial commit (not green)", io.gitIdentity);
|
|
392
|
+
if (flags.push && gate.green) {
|
|
393
|
+
(io.gh ?? defaultGh)([
|
|
394
|
+
"repo",
|
|
395
|
+
"create",
|
|
396
|
+
projectName,
|
|
397
|
+
"--source",
|
|
398
|
+
outDir,
|
|
399
|
+
"--private",
|
|
400
|
+
"--push",
|
|
401
|
+
], outDir);
|
|
402
|
+
}
|
|
403
|
+
else if (flags.push) {
|
|
404
|
+
const notPushed = "Not pushed: gate is not green.";
|
|
405
|
+
if (session)
|
|
406
|
+
session.log.error(notPushed);
|
|
407
|
+
else
|
|
408
|
+
io.stderr(notPushed);
|
|
409
|
+
}
|
|
410
|
+
const relative = path.relative(cwd, outDir);
|
|
411
|
+
const wrote = `Wrote ${relative.startsWith("..") ? outDir : `./${relative}`}`;
|
|
412
|
+
const folder = relative.startsWith("..") || path.isAbsolute(relative)
|
|
413
|
+
? outDir
|
|
414
|
+
: relative;
|
|
415
|
+
const dev = flags.packageManager === "npm" ? "npm run dev" : "pnpm dev";
|
|
416
|
+
if (session) {
|
|
417
|
+
session.log.success(wrote);
|
|
418
|
+
if (flags.git)
|
|
419
|
+
session.log.step(".git initialized");
|
|
420
|
+
if (!gate.green) {
|
|
421
|
+
session.log.error(gate.banner ?? "NOT GREEN");
|
|
422
|
+
session.outro(`The project was still written. See ${folder}/.seed/report.md`);
|
|
423
|
+
return gate.exitCode;
|
|
424
|
+
}
|
|
425
|
+
session.log.success("Gate green. Exit 0.");
|
|
426
|
+
session.outro(`Next: cd ${folder} && ${dev}`);
|
|
427
|
+
return exitCodes.ok;
|
|
428
|
+
}
|
|
429
|
+
io.stdout(wrote);
|
|
430
|
+
if (flags.git)
|
|
431
|
+
io.stdout(".git initialized");
|
|
432
|
+
if (!gate.green) {
|
|
433
|
+
io.stderr(gate.banner ?? "NOT GREEN");
|
|
434
|
+
return gate.exitCode;
|
|
435
|
+
}
|
|
436
|
+
io.stdout("Gate green. Exit 0.");
|
|
437
|
+
return exitCodes.ok;
|
|
438
|
+
}
|
|
439
|
+
catch (error) {
|
|
440
|
+
const message = error instanceof RenderError
|
|
441
|
+
? error.message
|
|
442
|
+
: error instanceof Error
|
|
443
|
+
? error.message
|
|
444
|
+
: String(error);
|
|
445
|
+
if (session)
|
|
446
|
+
session.outro(message);
|
|
447
|
+
else
|
|
448
|
+
io.stderr(message);
|
|
449
|
+
return exitCodes.failure;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ModelFile, ZoneBounds } from "./types.js";
|
|
2
|
+
/** Engine defaults from template-format §7, plus the manifest protected list. */
|
|
3
|
+
export declare const ENGINE_PROTECTED: string[];
|
|
4
|
+
export declare function normDeltaPath(file: string): string;
|
|
5
|
+
export declare function resolveGlob(glob: string, pathMap: Record<string, string>): string;
|
|
6
|
+
export declare function checkBounds(input: {
|
|
7
|
+
files: ModelFile[];
|
|
8
|
+
dependencies?: string[];
|
|
9
|
+
zone: ZoneBounds;
|
|
10
|
+
protectedGlobs: string[];
|
|
11
|
+
tree: Set<string>;
|
|
12
|
+
previous: Map<string, string>;
|
|
13
|
+
maxChangedLines?: number;
|
|
14
|
+
}): string[];
|