yosr-seed 0.2.2 → 0.2.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.
- package/CHANGELOG.md +24 -0
- package/README.md +1 -1
- package/dist/adopt.d.ts +6 -0
- package/dist/adopt.js +416 -0
- package/dist/adopt.js.map +1 -0
- package/dist/create.js +3 -0
- package/dist/create.js.map +1 -1
- package/dist/engine/ci/apply.d.ts +15 -0
- package/dist/engine/ci/apply.js +32 -0
- package/dist/engine/ci/apply.js.map +1 -0
- package/dist/engine/ci/content.d.ts +12 -0
- package/dist/engine/ci/content.js +58 -0
- package/dist/engine/ci/content.js.map +1 -0
- package/dist/engine/gate/run.d.ts +35 -1
- package/dist/engine/gate/run.js +84 -22
- package/dist/engine/gate/run.js.map +1 -1
- package/dist/engine/index.d.ts +4 -1
- package/dist/engine/index.js +4 -1
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/render/lockfile.js +1 -0
- package/dist/engine/render/lockfile.js.map +1 -1
- package/dist/engine/render/render.js +4 -0
- package/dist/engine/render/render.js.map +1 -1
- package/dist/help.js +7 -1
- package/dist/help.js.map +1 -1
- package/dist/labels.js +1 -0
- package/dist/labels.js.map +1 -1
- package/dist/run.js +6 -0
- package/dist/run.js.map +1 -1
- package/dist/schemas/seed.answers.schema.json +5 -0
- package/dist/upgrade.d.ts +35 -0
- package/dist/upgrade.js +390 -0
- package/dist/upgrade.js.map +1 -0
- package/package.json +8 -7
package/dist/upgrade.js
ADDED
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { existsSync, mkdtempSync, readFileSync, readdirSync, rmSync, statSync, } from "node:fs";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import { fileURLToPath } from "node:url";
|
|
7
|
+
import { exitCodes, render, } from "./engine/index.js";
|
|
8
|
+
import { isTemplateId, templateDir, templatePackageVersion, } from "./templates.js";
|
|
9
|
+
const REGISTRY_TIMEOUT_MS = 10_000;
|
|
10
|
+
function sha256File(file) {
|
|
11
|
+
return createHash("sha256").update(readFileSync(file)).digest("hex");
|
|
12
|
+
}
|
|
13
|
+
function compareSemver(left, right) {
|
|
14
|
+
const parse = (value) => {
|
|
15
|
+
const core = value.split("-")[0] ?? value;
|
|
16
|
+
return core.split(".").map((part) => Number.parseInt(part, 10) || 0);
|
|
17
|
+
};
|
|
18
|
+
const a = parse(left);
|
|
19
|
+
const b = parse(right);
|
|
20
|
+
for (let i = 0; i < Math.max(a.length, b.length); i += 1) {
|
|
21
|
+
const diff = (a[i] ?? 0) - (b[i] ?? 0);
|
|
22
|
+
if (diff !== 0)
|
|
23
|
+
return diff;
|
|
24
|
+
}
|
|
25
|
+
if (left.includes("-") && !right.includes("-"))
|
|
26
|
+
return -1;
|
|
27
|
+
if (!left.includes("-") && right.includes("-"))
|
|
28
|
+
return 1;
|
|
29
|
+
return left.localeCompare(right);
|
|
30
|
+
}
|
|
31
|
+
export function loadMigrationNotes(notesPath = defaultNotesPath()) {
|
|
32
|
+
try {
|
|
33
|
+
return JSON.parse(readFileSync(notesPath, "utf8"));
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return { versions: {} };
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function defaultNotesPath() {
|
|
40
|
+
return path.join(path.dirname(fileURLToPath(import.meta.url)), "..", "migrations", "notes.json");
|
|
41
|
+
}
|
|
42
|
+
/** Notes for versions strictly after `fromVersion`, up to `notesCeiling`. */
|
|
43
|
+
export function notesAfter(notes, fromVersion, notesCeiling) {
|
|
44
|
+
const versions = Object.keys(notes.versions ?? {}).sort(compareSemver);
|
|
45
|
+
const out = [];
|
|
46
|
+
for (const version of versions) {
|
|
47
|
+
if (compareSemver(version, fromVersion) <= 0)
|
|
48
|
+
continue;
|
|
49
|
+
if (notesCeiling !== undefined &&
|
|
50
|
+
compareSemver(version, notesCeiling) > 0) {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
const entry = notes.versions?.[version];
|
|
54
|
+
if (entry === undefined)
|
|
55
|
+
continue;
|
|
56
|
+
out.push({
|
|
57
|
+
version,
|
|
58
|
+
summary: entry.summary ?? "",
|
|
59
|
+
lines: entry.lines ?? [],
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return out;
|
|
63
|
+
}
|
|
64
|
+
export function highestNotesVersion(notes) {
|
|
65
|
+
const versions = Object.keys(notes.versions ?? {}).sort(compareSemver);
|
|
66
|
+
return versions.at(-1);
|
|
67
|
+
}
|
|
68
|
+
export function lookupLatestPublished(packageName, opts = {}) {
|
|
69
|
+
if (opts.view)
|
|
70
|
+
return opts.view(packageName);
|
|
71
|
+
const timeoutMs = opts.timeoutMs ?? REGISTRY_TIMEOUT_MS;
|
|
72
|
+
return new Promise((resolve) => {
|
|
73
|
+
const child = spawn("npm", ["view", packageName, "version", "--prefer-online"], {
|
|
74
|
+
// Keep registry lookup out of the project tree (npm must not write here).
|
|
75
|
+
cwd: tmpdir(),
|
|
76
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
77
|
+
env: process.env,
|
|
78
|
+
});
|
|
79
|
+
let stdout = "";
|
|
80
|
+
let settled = false;
|
|
81
|
+
const finish = (value) => {
|
|
82
|
+
if (settled)
|
|
83
|
+
return;
|
|
84
|
+
settled = true;
|
|
85
|
+
clearTimeout(timer);
|
|
86
|
+
resolve(value);
|
|
87
|
+
};
|
|
88
|
+
const timer = setTimeout(() => {
|
|
89
|
+
child.kill("SIGTERM");
|
|
90
|
+
finish(undefined);
|
|
91
|
+
}, timeoutMs);
|
|
92
|
+
child.stdout?.on("data", (chunk) => {
|
|
93
|
+
stdout += String(chunk);
|
|
94
|
+
});
|
|
95
|
+
child.on("error", () => {
|
|
96
|
+
finish(undefined);
|
|
97
|
+
});
|
|
98
|
+
child.on("close", (code) => {
|
|
99
|
+
if (code !== 0) {
|
|
100
|
+
finish(undefined);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const version = stdout.trim();
|
|
104
|
+
finish(version.length > 0 ? version : undefined);
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
function walkFiles(root) {
|
|
109
|
+
const out = [];
|
|
110
|
+
const visit = (rel) => {
|
|
111
|
+
const full = path.join(root, rel);
|
|
112
|
+
const st = statSync(full);
|
|
113
|
+
if (st.isDirectory()) {
|
|
114
|
+
for (const name of readdirSync(full).sort()) {
|
|
115
|
+
if (name === "node_modules" || name === ".git")
|
|
116
|
+
continue;
|
|
117
|
+
visit(rel.length === 0 ? name : `${rel}/${name}`);
|
|
118
|
+
}
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
if (st.isFile())
|
|
122
|
+
out.push(rel.split(path.sep).join("/"));
|
|
123
|
+
};
|
|
124
|
+
visit("");
|
|
125
|
+
return out;
|
|
126
|
+
}
|
|
127
|
+
function projectFileDigests(root) {
|
|
128
|
+
const map = new Map();
|
|
129
|
+
for (const rel of walkFiles(root)) {
|
|
130
|
+
map.set(rel, sha256File(path.join(root, rel)));
|
|
131
|
+
}
|
|
132
|
+
return map;
|
|
133
|
+
}
|
|
134
|
+
/** Runtime no-write guard: recorded files + `.seed/` only (not the whole tree). */
|
|
135
|
+
function upgradeGuardDigests(root, recordedKeys) {
|
|
136
|
+
const paths = new Set();
|
|
137
|
+
for (const rel of recordedKeys)
|
|
138
|
+
paths.add(rel);
|
|
139
|
+
const seedDir = path.join(root, ".seed");
|
|
140
|
+
if (existsSync(seedDir) && statSync(seedDir).isDirectory()) {
|
|
141
|
+
for (const rel of walkFiles(seedDir)) {
|
|
142
|
+
paths.add(`.seed/${rel}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const map = new Map();
|
|
146
|
+
for (const rel of [...paths].sort()) {
|
|
147
|
+
const full = path.join(root, rel);
|
|
148
|
+
map.set(rel, existsSync(full) && statSync(full).isFile() ? sha256File(full) : "");
|
|
149
|
+
}
|
|
150
|
+
return map;
|
|
151
|
+
}
|
|
152
|
+
function fingerprintFromDigests(digests) {
|
|
153
|
+
const hash = createHash("sha256");
|
|
154
|
+
for (const [rel, digest] of [...digests.entries()].sort(([a], [b]) => a.localeCompare(b))) {
|
|
155
|
+
hash.update(rel);
|
|
156
|
+
hash.update("\0");
|
|
157
|
+
hash.update(digest);
|
|
158
|
+
hash.update("\0");
|
|
159
|
+
}
|
|
160
|
+
return hash.digest("hex");
|
|
161
|
+
}
|
|
162
|
+
/** Full-tree fingerprint for tests/QA; runtime guard uses recorded + `.seed/` only. */
|
|
163
|
+
function projectFingerprint(root) {
|
|
164
|
+
return fingerprintFromDigests(projectFileDigests(root));
|
|
165
|
+
}
|
|
166
|
+
function fingerprintDiff(before, after) {
|
|
167
|
+
const lines = [];
|
|
168
|
+
const keys = new Set([...before.keys(), ...after.keys()]);
|
|
169
|
+
for (const rel of [...keys].sort()) {
|
|
170
|
+
const left = before.get(rel);
|
|
171
|
+
const right = after.get(rel);
|
|
172
|
+
if (left === right)
|
|
173
|
+
continue;
|
|
174
|
+
if (left === undefined)
|
|
175
|
+
lines.push(`+ ${rel}`);
|
|
176
|
+
else if (right === undefined)
|
|
177
|
+
lines.push(`- ${rel}`);
|
|
178
|
+
else
|
|
179
|
+
lines.push(`M ${rel}`);
|
|
180
|
+
}
|
|
181
|
+
return lines;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Report-only upgrade check (ADR 0025 §2). Writes nothing to the project tree.
|
|
185
|
+
*/
|
|
186
|
+
export async function runUpgrade(io, deps = {}) {
|
|
187
|
+
const root = path.resolve(io.cwd ?? process.cwd());
|
|
188
|
+
const answersPath = path.join(root, ".seed", "answers.json");
|
|
189
|
+
if (!existsSync(answersPath)) {
|
|
190
|
+
io.stderr("This folder is not a Yosr Seed project. .seed/answers.json was not found.");
|
|
191
|
+
return exitCodes.failure;
|
|
192
|
+
}
|
|
193
|
+
let answers;
|
|
194
|
+
try {
|
|
195
|
+
answers = JSON.parse(readFileSync(answersPath, "utf8"));
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
199
|
+
io.stderr(`Could not read .seed/answers.json: ${message}`);
|
|
200
|
+
return exitCodes.failure;
|
|
201
|
+
}
|
|
202
|
+
if (answers.origin === "adopted") {
|
|
203
|
+
io.stderr("This project was adopted, not created with Yosr Seed. Upgrade is not available for adopted projects yet.");
|
|
204
|
+
return exitCodes.failure;
|
|
205
|
+
}
|
|
206
|
+
const recordedKeys = Object.keys(answers.files ?? {});
|
|
207
|
+
const beforeDigests = upgradeGuardDigests(root, recordedKeys);
|
|
208
|
+
const before = deps.nowFingerprint?.(root) ?? fingerprintFromDigests(beforeDigests);
|
|
209
|
+
const engine = answers.engine ?? "unknown";
|
|
210
|
+
const templateName = answers.template?.name ?? "unknown";
|
|
211
|
+
const templateVersion = answers.template?.version ?? "unknown";
|
|
212
|
+
const cliVersion = io.version;
|
|
213
|
+
io.stdout("Yosr Seed upgrade report");
|
|
214
|
+
io.stdout(`Created with yosr-seed ${engine}`);
|
|
215
|
+
io.stdout(`Template ${templateName}@${templateVersion}`);
|
|
216
|
+
io.stdout(`Running CLI yosr-seed ${cliVersion}`);
|
|
217
|
+
const latest = await (deps.lookupLatest ?? lookupLatestPublished)("yosr-seed");
|
|
218
|
+
if (latest === undefined) {
|
|
219
|
+
io.stdout("Latest published: unknown (registry unavailable)");
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
io.stdout(`Latest published: yosr-seed ${latest}`);
|
|
223
|
+
}
|
|
224
|
+
const notes = loadMigrationNotes(deps.notesPath);
|
|
225
|
+
const notesTop = highestNotesVersion(notes);
|
|
226
|
+
if (notesTop !== undefined) {
|
|
227
|
+
io.stdout(`Notes known up to ${notesTop}`);
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
io.stdout("Notes known up to (none shipped in this CLI)");
|
|
231
|
+
}
|
|
232
|
+
if (engine !== "unknown" && compareSemver(cliVersion, engine) < 0) {
|
|
233
|
+
io.stdout(`This CLI (${cliVersion}) is older than the project record (${engine}).`);
|
|
234
|
+
io.stdout("Run: npx yosr-seed@latest upgrade");
|
|
235
|
+
io.stdout("Skipped file comparison against an older baseline.");
|
|
236
|
+
const afterOlderDigests = upgradeGuardDigests(root, recordedKeys);
|
|
237
|
+
const afterOlder = deps.nowFingerprint?.(root) ?? fingerprintFromDigests(afterOlderDigests);
|
|
238
|
+
if (afterOlder !== before) {
|
|
239
|
+
io.stderr("Internal error: upgrade changed the project tree.");
|
|
240
|
+
for (const line of fingerprintDiff(beforeDigests, afterOlderDigests)) {
|
|
241
|
+
io.stderr(` ${line}`);
|
|
242
|
+
}
|
|
243
|
+
return exitCodes.failure;
|
|
244
|
+
}
|
|
245
|
+
return exitCodes.ok;
|
|
246
|
+
}
|
|
247
|
+
if (latest !== undefined &&
|
|
248
|
+
compareSemver(cliVersion, latest) < 0) {
|
|
249
|
+
io.stdout(`A newer Yosr Seed is published (${latest}). Consider: npx yosr-seed@latest upgrade`);
|
|
250
|
+
}
|
|
251
|
+
const fromForNotes = engine === "unknown" ? "0.0.0" : engine;
|
|
252
|
+
const gapNotes = notesAfter(notes, fromForNotes, notesTop);
|
|
253
|
+
io.stdout("");
|
|
254
|
+
io.stdout("Official migration notes");
|
|
255
|
+
if (gapNotes.length === 0) {
|
|
256
|
+
io.stdout(notesTop === undefined
|
|
257
|
+
? "- (no notes in this CLI)"
|
|
258
|
+
: `- (none between ${fromForNotes} and ${notesTop})`);
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
for (const entry of gapNotes) {
|
|
262
|
+
io.stdout(`- ${entry.version}: ${entry.summary}`);
|
|
263
|
+
for (const line of entry.lines)
|
|
264
|
+
io.stdout(` ${line}`);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
if (!isTemplateId(templateName)) {
|
|
268
|
+
io.stderr(`Template ${JSON.stringify(templateName)} is not shipped by this yosr-seed.`);
|
|
269
|
+
return exitCodes.failure;
|
|
270
|
+
}
|
|
271
|
+
const profilePath = path.join(root, ".seed", "profile.json");
|
|
272
|
+
if (!existsSync(profilePath)) {
|
|
273
|
+
io.stderr(".seed/profile.json was not found.");
|
|
274
|
+
return exitCodes.failure;
|
|
275
|
+
}
|
|
276
|
+
let profile;
|
|
277
|
+
try {
|
|
278
|
+
profile = JSON.parse(readFileSync(profilePath, "utf8"));
|
|
279
|
+
}
|
|
280
|
+
catch (error) {
|
|
281
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
282
|
+
io.stderr(`Could not read .seed/profile.json: ${message}`);
|
|
283
|
+
return exitCodes.failure;
|
|
284
|
+
}
|
|
285
|
+
const templateId = templateName;
|
|
286
|
+
const resolvedTemplateVersion = templatePackageVersion(templateId);
|
|
287
|
+
io.stdout("");
|
|
288
|
+
io.stdout(`Comparing recorded files against ${templateId}@${resolvedTemplateVersion} (CLI ${cliVersion})`);
|
|
289
|
+
const mktemp = deps.mktemp ?? ((prefix) => mkdtempSync(path.join(tmpdir(), prefix)));
|
|
290
|
+
const tempRoot = mktemp("yosr-upgrade-");
|
|
291
|
+
const outDir = path.join(tempRoot, "baseline");
|
|
292
|
+
const renderFn = deps.renderBaseline ?? render;
|
|
293
|
+
const answersForRender = {};
|
|
294
|
+
for (const [key, value] of Object.entries(answers.options ?? {})) {
|
|
295
|
+
if (value === null)
|
|
296
|
+
continue;
|
|
297
|
+
answersForRender[key] = value;
|
|
298
|
+
}
|
|
299
|
+
try {
|
|
300
|
+
const prevCwd = process.cwd();
|
|
301
|
+
try {
|
|
302
|
+
// Render probes pnpm from process.cwd(); stay out of the user tree.
|
|
303
|
+
process.chdir(tempRoot);
|
|
304
|
+
await renderFn({
|
|
305
|
+
templateDir: templateDir(templateId),
|
|
306
|
+
engineVersion: cliVersion,
|
|
307
|
+
answers: answersForRender,
|
|
308
|
+
profile,
|
|
309
|
+
...(answers.style?.profileName !== undefined
|
|
310
|
+
? { profileName: answers.style.profileName }
|
|
311
|
+
: {}),
|
|
312
|
+
outDir,
|
|
313
|
+
...(answers.packageManager !== undefined
|
|
314
|
+
? { packageManager: answers.packageManager }
|
|
315
|
+
: {}),
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
finally {
|
|
319
|
+
process.chdir(prevCwd);
|
|
320
|
+
}
|
|
321
|
+
const recorded = answers.files ?? {};
|
|
322
|
+
const unchanged = [];
|
|
323
|
+
const changedByYou = [];
|
|
324
|
+
const worthPorting = [];
|
|
325
|
+
for (const rel of Object.keys(recorded).sort()) {
|
|
326
|
+
const recordedHash = recorded[rel]?.sha256;
|
|
327
|
+
if (typeof recordedHash !== "string")
|
|
328
|
+
continue;
|
|
329
|
+
const projectFile = path.join(root, rel);
|
|
330
|
+
const officialFile = path.join(outDir, rel);
|
|
331
|
+
const currentHash = existsSync(projectFile)
|
|
332
|
+
? sha256File(projectFile)
|
|
333
|
+
: undefined;
|
|
334
|
+
const officialHash = existsSync(officialFile)
|
|
335
|
+
? sha256File(officialFile)
|
|
336
|
+
: undefined;
|
|
337
|
+
if (currentHash === recordedHash)
|
|
338
|
+
unchanged.push(rel);
|
|
339
|
+
else if (currentHash === undefined)
|
|
340
|
+
changedByYou.push(`${rel} (deleted)`);
|
|
341
|
+
else
|
|
342
|
+
changedByYou.push(rel);
|
|
343
|
+
if (officialHash !== undefined && officialHash !== recordedHash) {
|
|
344
|
+
worthPorting.push(rel);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
io.stdout("");
|
|
348
|
+
io.stdout(`Unchanged since create (${unchanged.length})`);
|
|
349
|
+
for (const rel of unchanged.slice(0, 20))
|
|
350
|
+
io.stdout(` ${rel}`);
|
|
351
|
+
if (unchanged.length > 20)
|
|
352
|
+
io.stdout(` … and ${unchanged.length - 20} more`);
|
|
353
|
+
io.stdout("");
|
|
354
|
+
io.stdout(`Changed by you (${changedByYou.length})`);
|
|
355
|
+
if (changedByYou.length === 0)
|
|
356
|
+
io.stdout(" (none)");
|
|
357
|
+
else
|
|
358
|
+
for (const rel of changedByYou)
|
|
359
|
+
io.stdout(` ${rel}`);
|
|
360
|
+
io.stdout("");
|
|
361
|
+
io.stdout(`Official file now differs — worth porting (${worthPorting.length})`);
|
|
362
|
+
if (worthPorting.length === 0)
|
|
363
|
+
io.stdout(" (none)");
|
|
364
|
+
else
|
|
365
|
+
for (const rel of worthPorting)
|
|
366
|
+
io.stdout(` ${rel}`);
|
|
367
|
+
io.stdout("");
|
|
368
|
+
io.stdout("Yosr Seed upgrade reports only. It does not apply or merge changes.");
|
|
369
|
+
}
|
|
370
|
+
catch (error) {
|
|
371
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
372
|
+
io.stderr(`Upgrade comparison failed: ${message}`);
|
|
373
|
+
return exitCodes.failure;
|
|
374
|
+
}
|
|
375
|
+
finally {
|
|
376
|
+
rmSync(tempRoot, { recursive: true, force: true });
|
|
377
|
+
}
|
|
378
|
+
const afterDigests = upgradeGuardDigests(root, recordedKeys);
|
|
379
|
+
const after = deps.nowFingerprint?.(root) ?? fingerprintFromDigests(afterDigests);
|
|
380
|
+
if (after !== before) {
|
|
381
|
+
io.stderr("Internal error: upgrade changed the project tree.");
|
|
382
|
+
for (const line of fingerprintDiff(beforeDigests, afterDigests)) {
|
|
383
|
+
io.stderr(` ${line}`);
|
|
384
|
+
}
|
|
385
|
+
return exitCodes.failure;
|
|
386
|
+
}
|
|
387
|
+
return exitCodes.ok;
|
|
388
|
+
}
|
|
389
|
+
export { compareSemver, projectFingerprint };
|
|
390
|
+
//# sourceMappingURL=upgrade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../src/upgrade.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "yosr-seed",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"description": "Yosr Seed CLI. Creates a project from a template.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"homepage": "https://seed.yosr.ai",
|
|
@@ -21,18 +21,19 @@
|
|
|
21
21
|
"files": [
|
|
22
22
|
"CHANGELOG.md",
|
|
23
23
|
"LICENSE",
|
|
24
|
-
"dist"
|
|
24
|
+
"dist",
|
|
25
|
+
"migrations"
|
|
25
26
|
],
|
|
26
27
|
"engines": {
|
|
27
28
|
"node": ">=24"
|
|
28
29
|
},
|
|
29
30
|
"dependencies": {
|
|
30
31
|
"@clack/prompts": "1.8.1",
|
|
31
|
-
"@yosr-ai/template-fastapi": "0.2.
|
|
32
|
-
"@yosr-ai/template-hono": "0.2.
|
|
33
|
-
"@yosr-ai/template-next-fullstack": "0.2.
|
|
34
|
-
"@yosr-ai/template-vite-react": "0.2.
|
|
35
|
-
"@yosr-ai/template-astro-site": "0.2.
|
|
32
|
+
"@yosr-ai/template-fastapi": "0.2.4",
|
|
33
|
+
"@yosr-ai/template-hono": "0.2.4",
|
|
34
|
+
"@yosr-ai/template-next-fullstack": "0.2.4",
|
|
35
|
+
"@yosr-ai/template-vite-react": "0.2.4",
|
|
36
|
+
"@yosr-ai/template-astro-site": "0.2.4",
|
|
36
37
|
"ajv": "8.20.0",
|
|
37
38
|
"ajv-formats": "3.0.1",
|
|
38
39
|
"prettier": "3.9.10"
|