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 { AI_GUIDE, CLAUDE_MD } from "./ai-guide.ts";
import { currentCliVersion } from "./update-notifier.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. */ /** Map of file (relative to app root) -> contents. */
const TEMPLATE: Record<string, string> = { const TEMPLATE: Record<string, string> = {
@@ -72,7 +76,7 @@ Thumbs.db
"private": true, "private": true,
"type": "module", "type": "module",
"wrnexus": { "wrnexus": {
"version": "${frameworkVersion}" "version": "${cliVersion}"
}, },
"scripts": { "scripts": {
"dev": "wrnexus dev .", "dev": "wrnexus dev .",
@@ -92,31 +96,31 @@ Thumbs.db
"check": "bun run typecheck && bun run lint && bun run test && bun run format:check" "check": "bun run typecheck && bun run lint && bun run test && bun run format:check"
}, },
"dependencies": { "dependencies": {
"@wrnexus/ai": "${frameworkVersion}", "@wrnexus/ai": "${scaffoldFrameworkRange}",
"@wrnexus/auth": "${frameworkVersion}", "@wrnexus/auth": "${scaffoldFrameworkRange}",
"@wrnexus/captcha": "${frameworkVersion}", "@wrnexus/captcha": "${scaffoldFrameworkRange}",
"@wrnexus/core": "${frameworkVersion}", "@wrnexus/core": "${scaffoldFrameworkRange}",
"@wrnexus/csr": "${frameworkVersion}", "@wrnexus/csr": "${scaffoldFrameworkRange}",
"@wrnexus/db": "${frameworkVersion}", "@wrnexus/db": "${scaffoldFrameworkRange}",
"@wrnexus/dev-server": "${frameworkVersion}", "@wrnexus/dev-server": "${scaffoldFrameworkRange}",
"@wrnexus/encryption": "${frameworkVersion}", "@wrnexus/encryption": "${scaffoldFrameworkRange}",
"@wrnexus/helpers": "${frameworkVersion}", "@wrnexus/helpers": "${scaffoldFrameworkRange}",
"@wrnexus/i18n": "${frameworkVersion}", "@wrnexus/i18n": "${scaffoldFrameworkRange}",
"@wrnexus/image": "${frameworkVersion}", "@wrnexus/image": "${scaffoldFrameworkRange}",
"@wrnexus/jwt": "${frameworkVersion}", "@wrnexus/jwt": "${scaffoldFrameworkRange}",
"@wrnexus/observability": "${frameworkVersion}", "@wrnexus/observability": "${scaffoldFrameworkRange}",
"@wrnexus/realtime": "${frameworkVersion}", "@wrnexus/realtime": "${scaffoldFrameworkRange}",
"@wrnexus/security": "${frameworkVersion}", "@wrnexus/security": "${scaffoldFrameworkRange}",
"@wrnexus/store": "${frameworkVersion}", "@wrnexus/store": "${scaffoldFrameworkRange}",
"@wrnexus/styles": "${frameworkVersion}", "@wrnexus/styles": "${scaffoldFrameworkRange}",
"@wrnexus/tracking": "${frameworkVersion}", "@wrnexus/tracking": "${scaffoldFrameworkRange}",
"@wrnexus/ui": "${frameworkVersion}", "@wrnexus/ui": "${scaffoldFrameworkRange}",
"@wrnexus/uploader": "${frameworkVersion}", "@wrnexus/uploader": "${scaffoldFrameworkRange}",
"@wrnexus/validation": "${frameworkVersion}", "@wrnexus/validation": "${scaffoldFrameworkRange}",
"@wrnexus/authz": "${frameworkVersion}" "@wrnexus/authz": "${scaffoldFrameworkRange}"
}, },
"devDependencies": { "devDependencies": {
"@wrnexus/cli": "${frameworkVersion}", "@wrnexus/cli": "${cliVersion}",
"@eslint/js": "^9.0.0", "@eslint/js": "^9.0.0",
"@iconify-json/lucide": "^1.2.118", "@iconify-json/lucide": "^1.2.118",
"@iconify/tailwind4": "^1.2.3", "@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 { tmpdir } from "node:os";
import { join } from "node:path"; import { join } from "node:path";
import { format } from "prettier"; import { format } from "prettier";
import { scaffoldApp } from "../src/create.ts"; import { scaffoldApp, scaffoldFrameworkRange } from "../src/create.ts";
import { currentCliVersion } from "../src/update-notifier.ts"; import { currentCliVersion } from "../src/update-notifier.ts";
test("scaffoldApp creates a comprehensive .gitignore", () => { test("scaffoldApp creates a comprehensive .gitignore", () => {
@@ -88,7 +88,7 @@ test("scaffoldApp includes the complete v0.8 configuration and starter structure
"@wrnexus/uploader", "@wrnexus/uploader",
"@wrnexus/validation", "@wrnexus/validation",
]) { ]) {
expect(pkg.dependencies[packageName]).toBe(currentCliVersion()); expect(pkg.dependencies[packageName]).toBe(scaffoldFrameworkRange);
} }
for (const block of [ 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 parent = mkdtempSync(join(tmpdir(), "wrnexus-create-"));
const root = join(parent, "current-app"); const root = join(parent, "current-app");
@@ -141,9 +141,9 @@ test("scaffoldApp pins the current framework and exposes llms.txt publicly", ()
const version = currentCliVersion(); const version = currentCliVersion();
expect(pkg.wrnexus.version).toBe(version); 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[]) { 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["@wrnexus/cli"]).toBe(version);
expect(pkg.devDependencies["@iconify/tailwind4"]).toBe("^1.2.3"); expect(pkg.devDependencies["@iconify/tailwind4"]).toBe("^1.2.3");