fix(cli): scaffold installable framework versions
Quality / quality (ubuntu-latest) (push) Failing after 9m53s
Quality / quality (windows-latest) (push) Canceled after 0s

This commit is contained in:
2026-08-12 17:08:38 +05:30
parent e189b2b62f
commit bf0d866793
2 changed files with 34 additions and 30 deletions
+29 -25
View File
@@ -10,7 +10,11 @@ import { dirname, join, resolve } from "node:path";
import { AI_GUIDE, CLAUDE_MD } from "./ai-guide.ts";
import { currentCliVersion } from "./update-notifier.ts";
const frameworkVersion = currentCliVersion();
const cliVersion = currentCliVersion();
// Framework packages use independent patch versions. Keep scaffolds on the
// compatible 0.8 line instead of assuming every package shares the CLI patch.
export const scaffoldFrameworkRange = "^0.8.8";
/** Map of file (relative to app root) -> contents. */
const TEMPLATE: Record<string, string> = {
@@ -72,7 +76,7 @@ Thumbs.db
"private": true,
"type": "module",
"wrnexus": {
"version": "${frameworkVersion}"
"version": "${cliVersion}"
},
"scripts": {
"dev": "wrnexus dev .",
@@ -92,31 +96,31 @@ Thumbs.db
"check": "bun run typecheck && bun run lint && bun run test && bun run format:check"
},
"dependencies": {
"@wrnexus/ai": "${frameworkVersion}",
"@wrnexus/auth": "${frameworkVersion}",
"@wrnexus/captcha": "${frameworkVersion}",
"@wrnexus/core": "${frameworkVersion}",
"@wrnexus/csr": "${frameworkVersion}",
"@wrnexus/db": "${frameworkVersion}",
"@wrnexus/dev-server": "${frameworkVersion}",
"@wrnexus/encryption": "${frameworkVersion}",
"@wrnexus/helpers": "${frameworkVersion}",
"@wrnexus/i18n": "${frameworkVersion}",
"@wrnexus/image": "${frameworkVersion}",
"@wrnexus/jwt": "${frameworkVersion}",
"@wrnexus/observability": "${frameworkVersion}",
"@wrnexus/realtime": "${frameworkVersion}",
"@wrnexus/security": "${frameworkVersion}",
"@wrnexus/store": "${frameworkVersion}",
"@wrnexus/styles": "${frameworkVersion}",
"@wrnexus/tracking": "${frameworkVersion}",
"@wrnexus/ui": "${frameworkVersion}",
"@wrnexus/uploader": "${frameworkVersion}",
"@wrnexus/validation": "${frameworkVersion}",
"@wrnexus/authz": "${frameworkVersion}"
"@wrnexus/ai": "${scaffoldFrameworkRange}",
"@wrnexus/auth": "${scaffoldFrameworkRange}",
"@wrnexus/captcha": "${scaffoldFrameworkRange}",
"@wrnexus/core": "${scaffoldFrameworkRange}",
"@wrnexus/csr": "${scaffoldFrameworkRange}",
"@wrnexus/db": "${scaffoldFrameworkRange}",
"@wrnexus/dev-server": "${scaffoldFrameworkRange}",
"@wrnexus/encryption": "${scaffoldFrameworkRange}",
"@wrnexus/helpers": "${scaffoldFrameworkRange}",
"@wrnexus/i18n": "${scaffoldFrameworkRange}",
"@wrnexus/image": "${scaffoldFrameworkRange}",
"@wrnexus/jwt": "${scaffoldFrameworkRange}",
"@wrnexus/observability": "${scaffoldFrameworkRange}",
"@wrnexus/realtime": "${scaffoldFrameworkRange}",
"@wrnexus/security": "${scaffoldFrameworkRange}",
"@wrnexus/store": "${scaffoldFrameworkRange}",
"@wrnexus/styles": "${scaffoldFrameworkRange}",
"@wrnexus/tracking": "${scaffoldFrameworkRange}",
"@wrnexus/ui": "${scaffoldFrameworkRange}",
"@wrnexus/uploader": "${scaffoldFrameworkRange}",
"@wrnexus/validation": "${scaffoldFrameworkRange}",
"@wrnexus/authz": "${scaffoldFrameworkRange}"
},
"devDependencies": {
"@wrnexus/cli": "${frameworkVersion}",
"@wrnexus/cli": "${cliVersion}",
"@eslint/js": "^9.0.0",
"@iconify-json/lucide": "^1.2.118",
"@iconify/tailwind4": "^1.2.3",
+5 -5
View File
@@ -3,7 +3,7 @@ import { existsSync, mkdtempSync, readFileSync, rmSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { format } from "prettier";
import { scaffoldApp } from "../src/create.ts";
import { scaffoldApp, scaffoldFrameworkRange } from "../src/create.ts";
import { currentCliVersion } from "../src/update-notifier.ts";
test("scaffoldApp creates a comprehensive .gitignore", () => {
@@ -88,7 +88,7 @@ test("scaffoldApp includes the complete v0.8 configuration and starter structure
"@wrnexus/uploader",
"@wrnexus/validation",
]) {
expect(pkg.dependencies[packageName]).toBe(currentCliVersion());
expect(pkg.dependencies[packageName]).toBe(scaffoldFrameworkRange);
}
for (const block of [
@@ -131,7 +131,7 @@ test("scaffoldApp includes the complete v0.8 configuration and starter structure
}
});
test("scaffoldApp pins the current framework and exposes llms.txt publicly", () => {
test("scaffoldApp uses compatible framework packages and pins the current CLI", () => {
const parent = mkdtempSync(join(tmpdir(), "wrnexus-create-"));
const root = join(parent, "current-app");
@@ -141,9 +141,9 @@ test("scaffoldApp pins the current framework and exposes llms.txt publicly", ()
const version = currentCliVersion();
expect(pkg.wrnexus.version).toBe(version);
expect(pkg.dependencies["@wrnexus/helpers"]).toBe(version);
expect(pkg.dependencies["@wrnexus/helpers"]).toBe(scaffoldFrameworkRange);
for (const dependency of Object.values(pkg.dependencies) as string[]) {
expect(dependency).toBe(version);
expect(dependency).toBe(scaffoldFrameworkRange);
}
expect(pkg.devDependencies["@wrnexus/cli"]).toBe(version);
expect(pkg.devDependencies["@iconify/tailwind4"]).toBe("^1.2.3");