fix(cli): scaffold installable framework versions
This commit is contained in:
+29
-25
@@ -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",
|
||||
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user