create-cartwright 0.1.0
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/README.md +59 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +254 -0
- package/dist/index.js.map +1 -0
- package/package.json +58 -0
package/README.md
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# create-cartwright
|
|
2
|
+
|
|
3
|
+
CLI scaffolder for AI-first webshops powered by [Cartwright](https://cartwright.app).
|
|
4
|
+
|
|
5
|
+
## Quick start
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx create-cartwright@latest my-shop
|
|
9
|
+
cd my-shop
|
|
10
|
+
npx prisma migrate deploy
|
|
11
|
+
npx prisma db seed
|
|
12
|
+
pnpm dev
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Or with all defaults (no prompts):
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npx create-cartwright@latest my-shop --yes --db=turso --ai
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Flags
|
|
22
|
+
|
|
23
|
+
| Flag | Default | What it does |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| `--yes`, `-y` | false | Skip prompts, use defaults |
|
|
26
|
+
| `--db=<turso\|postgres\|sqlite>` | (prompt) | Database choice — drives next-steps guidance |
|
|
27
|
+
| `--ai` / `--no-ai` | (prompt) | Enable / disable the AI commerce features hint |
|
|
28
|
+
| `--ref=<tag\|branch>` | `v0.1.0-beta` | Template ref on `cartwright-template` mirror |
|
|
29
|
+
| `--pm=<pnpm\|npm\|yarn\|bun>` | auto-detect | Package manager for install |
|
|
30
|
+
| `--no-install` | false | Skip dependency install |
|
|
31
|
+
| `--no-git` | false | Skip `git init` + initial commit |
|
|
32
|
+
|
|
33
|
+
## What it does
|
|
34
|
+
|
|
35
|
+
1. Three prompts (project name, database, AI features) — skippable with `--yes`.
|
|
36
|
+
2. Downloads a sanitised snapshot from [`cartwright-template`](https://github.com/Teloz1870/cartwright-template) at the pinned `--ref` (default `v0.1.0-beta`).
|
|
37
|
+
3. Generates a random 32-byte `AUTH_SECRET` and writes `.env.local`.
|
|
38
|
+
4. Patches `brand.config.ts` — `storeName` (Title Case of project name) + `storeSlug` (kebab-case).
|
|
39
|
+
5. Optional: `git init` + initial commit.
|
|
40
|
+
6. Optional: install dependencies with the detected (or specified) package manager.
|
|
41
|
+
7. Prints database-aware next-steps with copy-pastable commands.
|
|
42
|
+
|
|
43
|
+
## Requirements
|
|
44
|
+
|
|
45
|
+
- Node.js ≥ 22
|
|
46
|
+
- (Optional) git, for the initial commit
|
|
47
|
+
- (Optional) pnpm/npm/yarn/bun, for dependency install
|
|
48
|
+
|
|
49
|
+
## Why a public mirror?
|
|
50
|
+
|
|
51
|
+
The Cartwright template repo is currently in private early access. The CLI fetches from a **public sanitised mirror** (`cartwright-template`) that auto-syncs on every release tag — so you don't need a GitHub token to scaffold. When the template flips to public, the CLI will point at it directly with no breaking change.
|
|
52
|
+
|
|
53
|
+
## Source
|
|
54
|
+
|
|
55
|
+
This CLI is part of the [`cartwright-app`](https://github.com/Teloz1870/cartwright-app) monorepo. PRs welcome.
|
|
56
|
+
|
|
57
|
+
## License
|
|
58
|
+
|
|
59
|
+
MIT
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* create-cartwright — scaffolder for AI-first webshops.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* npx create-cartwright@latest [name] [--yes]
|
|
7
|
+
* [--db=turso|postgres|sqlite] [--ai|--no-ai]
|
|
8
|
+
* [--ref=<tag-or-branch>]
|
|
9
|
+
* [--pm=pnpm|npm|yarn|bun]
|
|
10
|
+
* [--no-install] [--no-git]
|
|
11
|
+
*
|
|
12
|
+
* Pulls a sanitised snapshot of cartwright-template via giget, generates a
|
|
13
|
+
* fresh AUTH_SECRET, injects the project name into brand.config.ts, and
|
|
14
|
+
* optionally installs deps + inits git.
|
|
15
|
+
*/
|
|
16
|
+
import { intro, outro, text, select, confirm, cancel, isCancel, spinner, note, } from "@clack/prompts";
|
|
17
|
+
import { downloadTemplate } from "giget";
|
|
18
|
+
import pc from "picocolors";
|
|
19
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
20
|
+
import { join, resolve } from "node:path";
|
|
21
|
+
import { execSync } from "node:child_process";
|
|
22
|
+
import { randomBytes } from "node:crypto";
|
|
23
|
+
import { parseArgs } from "node:util";
|
|
24
|
+
const TEMPLATE_REPO = "github:Teloz1870/cartwright-template";
|
|
25
|
+
const DEFAULT_REF = "v0.1.0-beta";
|
|
26
|
+
function detectPackageManager() {
|
|
27
|
+
const ua = process.env.npm_config_user_agent ?? "";
|
|
28
|
+
if (ua.startsWith("pnpm"))
|
|
29
|
+
return "pnpm";
|
|
30
|
+
if (ua.startsWith("yarn"))
|
|
31
|
+
return "yarn";
|
|
32
|
+
if (ua.startsWith("bun"))
|
|
33
|
+
return "bun";
|
|
34
|
+
return "npm";
|
|
35
|
+
}
|
|
36
|
+
function exitOnCancel(value) {
|
|
37
|
+
if (isCancel(value)) {
|
|
38
|
+
cancel("Cancelled.");
|
|
39
|
+
process.exit(0);
|
|
40
|
+
}
|
|
41
|
+
return value;
|
|
42
|
+
}
|
|
43
|
+
function generateAuthSecret() {
|
|
44
|
+
return randomBytes(32).toString("hex");
|
|
45
|
+
}
|
|
46
|
+
function patchEnvLocal(targetDir, authSecret) {
|
|
47
|
+
const envExamplePath = join(targetDir, ".env.example");
|
|
48
|
+
if (!existsSync(envExamplePath))
|
|
49
|
+
return;
|
|
50
|
+
const example = readFileSync(envExamplePath, "utf8");
|
|
51
|
+
const patched = example.replace(/^AUTH_SECRET=.*/m, `AUTH_SECRET="${authSecret}"`);
|
|
52
|
+
writeFileSync(join(targetDir, ".env.local"), patched);
|
|
53
|
+
}
|
|
54
|
+
function patchBrandConfig(targetDir, projectName) {
|
|
55
|
+
const path = join(targetDir, "brand.config.ts");
|
|
56
|
+
if (!existsSync(path))
|
|
57
|
+
return;
|
|
58
|
+
const original = readFileSync(path, "utf8");
|
|
59
|
+
const titled = projectName
|
|
60
|
+
.split("-")
|
|
61
|
+
.map((s) => s.charAt(0).toUpperCase() + s.slice(1))
|
|
62
|
+
.join(" ");
|
|
63
|
+
// Replace the first storeName + storeSlug occurrences in the brand object.
|
|
64
|
+
const patched = original
|
|
65
|
+
.replace(/storeName:\s*"[^"]*"/, `storeName: "${titled}"`)
|
|
66
|
+
.replace(/storeSlug:\s*"[^"]*"/, `storeSlug: "${projectName}"`);
|
|
67
|
+
if (patched !== original)
|
|
68
|
+
writeFileSync(path, patched);
|
|
69
|
+
}
|
|
70
|
+
function tryGitInit(targetDir) {
|
|
71
|
+
try {
|
|
72
|
+
execSync("git init -q && git add -A && git commit -q -m 'feat: initial commit from create-cartwright'", { cwd: targetDir, stdio: "ignore" });
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function tryInstall(targetDir, pm) {
|
|
80
|
+
try {
|
|
81
|
+
execSync(`${pm} install`, { cwd: targetDir, stdio: "ignore" });
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function databaseNote(db) {
|
|
89
|
+
switch (db) {
|
|
90
|
+
case "turso":
|
|
91
|
+
return [
|
|
92
|
+
pc.bold("Turso setup (production):"),
|
|
93
|
+
" turso db create my-shop-db",
|
|
94
|
+
" turso db tokens create my-shop-db",
|
|
95
|
+
pc.dim(" Set TURSO_DATABASE_URL + TURSO_AUTH_TOKEN in Vercel."),
|
|
96
|
+
].join("\n");
|
|
97
|
+
case "postgres":
|
|
98
|
+
return [
|
|
99
|
+
pc.bold("Postgres setup:"),
|
|
100
|
+
" Update DATABASE_URL in .env.local to your Postgres URL.",
|
|
101
|
+
pc.dim(" Prisma schema currently uses 'sqlite' provider — switch to 'postgresql' in prisma/schema.prisma and run a fresh migration."),
|
|
102
|
+
].join("\n");
|
|
103
|
+
case "sqlite":
|
|
104
|
+
return [
|
|
105
|
+
pc.bold("SQLite (local only):"),
|
|
106
|
+
" No extra setup. dev.db will be created on first migration.",
|
|
107
|
+
].join("\n");
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
async function run() {
|
|
111
|
+
const { values, positionals } = parseArgs({
|
|
112
|
+
allowPositionals: true,
|
|
113
|
+
options: {
|
|
114
|
+
yes: { type: "boolean", short: "y" },
|
|
115
|
+
db: { type: "string" },
|
|
116
|
+
ai: { type: "boolean" },
|
|
117
|
+
"no-ai": { type: "boolean" },
|
|
118
|
+
ref: { type: "string" },
|
|
119
|
+
pm: { type: "string" },
|
|
120
|
+
"no-install": { type: "boolean" },
|
|
121
|
+
"no-git": { type: "boolean" },
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
intro(`${pc.bgYellow(pc.black(" create-cartwright "))} ${pc.dim("v0.1.0-beta")}`);
|
|
125
|
+
// ── Project name ────────────────────────────────────────────────────────
|
|
126
|
+
const defaultName = positionals[0] ?? "my-cartwright-shop";
|
|
127
|
+
const projectName = values.yes
|
|
128
|
+
? defaultName
|
|
129
|
+
: exitOnCancel(await text({
|
|
130
|
+
message: "Project name?",
|
|
131
|
+
initialValue: defaultName,
|
|
132
|
+
validate: (v) => /^[a-z][a-z0-9-]*$/.test(v)
|
|
133
|
+
? undefined
|
|
134
|
+
: "Use lowercase letters, digits and dashes; start with a letter.",
|
|
135
|
+
}));
|
|
136
|
+
// ── Database ────────────────────────────────────────────────────────────
|
|
137
|
+
const dbFromFlag = values.db;
|
|
138
|
+
const database = dbFromFlag ??
|
|
139
|
+
(values.yes
|
|
140
|
+
? "turso"
|
|
141
|
+
: exitOnCancel(await select({
|
|
142
|
+
message: "Database?",
|
|
143
|
+
options: [
|
|
144
|
+
{
|
|
145
|
+
value: "turso",
|
|
146
|
+
label: "Turso (recommended — libSQL on edge)",
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
value: "postgres",
|
|
150
|
+
label: "Postgres (Neon / Supabase / self-hosted)",
|
|
151
|
+
},
|
|
152
|
+
{ value: "sqlite", label: "SQLite (local-only)" },
|
|
153
|
+
],
|
|
154
|
+
initialValue: "turso",
|
|
155
|
+
})));
|
|
156
|
+
if (!["turso", "postgres", "sqlite"].includes(database)) {
|
|
157
|
+
cancel(`Unknown database "${database}". Use turso, postgres, or sqlite.`);
|
|
158
|
+
process.exit(1);
|
|
159
|
+
}
|
|
160
|
+
// ── AI features ─────────────────────────────────────────────────────────
|
|
161
|
+
const aiFlag = values.ai === true ? true : values["no-ai"] === true ? false : undefined;
|
|
162
|
+
const withAi = aiFlag ??
|
|
163
|
+
(values.yes
|
|
164
|
+
? true
|
|
165
|
+
: exitOnCancel(await confirm({
|
|
166
|
+
message: "Include AI commerce features? (requires Anthropic + Gemini API keys)",
|
|
167
|
+
initialValue: true,
|
|
168
|
+
})));
|
|
169
|
+
// ── Tooling defaults ────────────────────────────────────────────────────
|
|
170
|
+
const detected = detectPackageManager();
|
|
171
|
+
const packageManager = values.pm ?? detected;
|
|
172
|
+
const installDeps = !values["no-install"];
|
|
173
|
+
const initGit = !values["no-git"];
|
|
174
|
+
const templateRef = values.ref ?? DEFAULT_REF;
|
|
175
|
+
// ── Pre-flight ──────────────────────────────────────────────────────────
|
|
176
|
+
const targetDir = resolve(process.cwd(), projectName);
|
|
177
|
+
if (existsSync(targetDir)) {
|
|
178
|
+
cancel(`Directory "${projectName}" already exists.`);
|
|
179
|
+
process.exit(1);
|
|
180
|
+
}
|
|
181
|
+
// ── Template fetch ──────────────────────────────────────────────────────
|
|
182
|
+
const fetchSpinner = spinner();
|
|
183
|
+
fetchSpinner.start(`Fetching cartwright template (${templateRef})…`);
|
|
184
|
+
try {
|
|
185
|
+
await downloadTemplate(`${TEMPLATE_REPO}#${templateRef}`, {
|
|
186
|
+
dir: targetDir,
|
|
187
|
+
force: false,
|
|
188
|
+
});
|
|
189
|
+
fetchSpinner.stop(pc.green(`Template downloaded (${templateRef}).`));
|
|
190
|
+
}
|
|
191
|
+
catch (err) {
|
|
192
|
+
fetchSpinner.stop(pc.red("Template fetch failed."));
|
|
193
|
+
console.error(err);
|
|
194
|
+
process.exit(1);
|
|
195
|
+
}
|
|
196
|
+
// ── Customise the scaffold ──────────────────────────────────────────────
|
|
197
|
+
const authSecret = generateAuthSecret();
|
|
198
|
+
patchEnvLocal(targetDir, authSecret);
|
|
199
|
+
patchBrandConfig(targetDir, projectName);
|
|
200
|
+
// ── Git init ────────────────────────────────────────────────────────────
|
|
201
|
+
if (initGit) {
|
|
202
|
+
const gitOk = tryGitInit(targetDir);
|
|
203
|
+
if (!gitOk) {
|
|
204
|
+
note(pc.yellow("git init skipped — git not available."), "info");
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// ── Install ─────────────────────────────────────────────────────────────
|
|
208
|
+
if (installDeps) {
|
|
209
|
+
const installSpinner = spinner();
|
|
210
|
+
installSpinner.start(`Installing dependencies with ${packageManager}…`);
|
|
211
|
+
const ok = tryInstall(targetDir, packageManager);
|
|
212
|
+
if (ok) {
|
|
213
|
+
installSpinner.stop(pc.green("Dependencies installed."));
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
installSpinner.stop(pc.yellow(`Install failed — run \`${packageManager} install\` in ${projectName} manually.`));
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// ── Next steps ──────────────────────────────────────────────────────────
|
|
220
|
+
const runCmd = packageManager === "npm" ? "npm run" : packageManager;
|
|
221
|
+
const aiHint = withAi
|
|
222
|
+
? `\n ${pc.dim("Add ANTHROPIC_API_KEY (+ optional GEMINI keys) to .env.local before pnpm dev,")}\n ${pc.dim("or configure them later in /admin/integrations after first sign-in.")}`
|
|
223
|
+
: "";
|
|
224
|
+
const lines = [
|
|
225
|
+
pc.green("✓") +
|
|
226
|
+
` Created ${pc.bold(projectName)} at ${pc.dim(targetDir)}`,
|
|
227
|
+
pc.green("✓") + ` AUTH_SECRET generated and written to .env.local`,
|
|
228
|
+
pc.green("✓") + ` brand.config.ts patched (storeName + storeSlug)`,
|
|
229
|
+
"",
|
|
230
|
+
pc.bold("Next steps:"),
|
|
231
|
+
` cd ${projectName}`,
|
|
232
|
+
` npx prisma migrate deploy ${pc.dim("# create / sync the DB schema")}`,
|
|
233
|
+
` npx prisma db seed ${pc.dim("# seed demo products + categories")}`,
|
|
234
|
+
` ${runCmd} dev ${pc.dim("# http://localhost:3000")}`,
|
|
235
|
+
"",
|
|
236
|
+
databaseNote(database),
|
|
237
|
+
aiHint,
|
|
238
|
+
"",
|
|
239
|
+
pc.bold("Going to production?"),
|
|
240
|
+
pc.dim(" Deploy, custom domain, and email — the Go Live guide has the path:"),
|
|
241
|
+
pc.dim(" https://cartwright.app/docs/deployment/go-live"),
|
|
242
|
+
"",
|
|
243
|
+
pc.dim("Docs: https://cartwright.app/docs/getting-started/quick-start"),
|
|
244
|
+
pc.dim("Mirror: https://github.com/Teloz1870/cartwright-template"),
|
|
245
|
+
]
|
|
246
|
+
.filter(Boolean)
|
|
247
|
+
.join("\n");
|
|
248
|
+
outro(lines);
|
|
249
|
+
}
|
|
250
|
+
run().catch((err) => {
|
|
251
|
+
console.error(pc.red("Unexpected error:"), err);
|
|
252
|
+
process.exit(1);
|
|
253
|
+
});
|
|
254
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "create-cartwright",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Scaffolder for AI-first webshops powered by Cartwright",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"cartwright",
|
|
7
|
+
"nextjs",
|
|
8
|
+
"scaffolder",
|
|
9
|
+
"starter",
|
|
10
|
+
"template",
|
|
11
|
+
"ecommerce",
|
|
12
|
+
"ai",
|
|
13
|
+
"mcp",
|
|
14
|
+
"stripe"
|
|
15
|
+
],
|
|
16
|
+
"type": "module",
|
|
17
|
+
"bin": {
|
|
18
|
+
"create-cartwright": "dist/index.js"
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"dist",
|
|
22
|
+
"README.md"
|
|
23
|
+
],
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "tsc",
|
|
26
|
+
"dev": "tsx src/index.ts",
|
|
27
|
+
"typecheck": "tsc --noEmit",
|
|
28
|
+
"lint": "eslint src --max-warnings=0",
|
|
29
|
+
"test": "echo 'TODO: vitest'",
|
|
30
|
+
"prepublishOnly": "pnpm build"
|
|
31
|
+
},
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@clack/prompts": "^0.11.0",
|
|
34
|
+
"giget": "^1.2.5",
|
|
35
|
+
"picocolors": "^1.1.0",
|
|
36
|
+
"zod": "^4.4.3"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/node": "^22.10.0",
|
|
40
|
+
"eslint": "^9.0.0",
|
|
41
|
+
"tsx": "^4.19.0",
|
|
42
|
+
"typescript": "^5.7.0"
|
|
43
|
+
},
|
|
44
|
+
"engines": {
|
|
45
|
+
"node": ">=22"
|
|
46
|
+
},
|
|
47
|
+
"publishConfig": {
|
|
48
|
+
"access": "public"
|
|
49
|
+
},
|
|
50
|
+
"license": "MIT",
|
|
51
|
+
"repository": {
|
|
52
|
+
"type": "git",
|
|
53
|
+
"url": "git+https://github.com/Teloz1870/cartwright-app.git",
|
|
54
|
+
"directory": "apps/cli"
|
|
55
|
+
},
|
|
56
|
+
"homepage": "https://cartwright.app",
|
|
57
|
+
"bugs": "https://github.com/Teloz1870/cartwright-app/issues"
|
|
58
|
+
}
|