create-cartwright 2.0.0-beta.1 → 2.0.2
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 +21 -2
- package/dist/approve.d.ts +1 -1
- package/dist/generate/index.d.ts +1 -1
- package/dist/index.js +72 -10
- package/dist/index.js.map +1 -1
- package/dist/inject.d.ts +1 -1
- package/dist/inject.js +1 -1
- package/dist/inject.js.map +1 -1
- package/dist/interview.d.ts +1 -1
- package/dist/interview.js +1 -1
- package/dist/interview.js.map +1 -1
- package/dist/key-step.js +1 -1
- package/dist/key-step.js.map +1 -1
- package/dist/scaffold.d.ts +38 -0
- package/dist/scaffold.js +85 -0
- package/dist/scaffold.js.map +1 -1
- package/dist/scaffold.test.js +96 -1
- package/dist/scaffold.test.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -25,15 +25,34 @@ npx create-cartwright@latest my-shop --yes --db=turso --ai
|
|
|
25
25
|
| `--yes`, `-y` | false | Skip prompts, use defaults |
|
|
26
26
|
| `--db=<turso\|postgres\|sqlite>` | (prompt) | Database choice — drives next-steps guidance |
|
|
27
27
|
| `--ai` / `--no-ai` | (prompt) | Enable / disable the AI commerce features hint |
|
|
28
|
-
| `--ref=<tag\|branch>` | `
|
|
28
|
+
| `--ref=<stable\|next\|tag\|branch>` | `stable` | Template channel (see below) |
|
|
29
29
|
| `--pm=<pnpm\|npm\|yarn\|bun>` | auto-detect | Package manager for install |
|
|
30
30
|
| `--no-install` | false | Skip dependency install |
|
|
31
31
|
| `--no-git` | false | Skip `git init` + initial commit |
|
|
32
32
|
|
|
33
|
+
## Template channels
|
|
34
|
+
|
|
35
|
+
| Channel | What it is | When to use |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| `stable` (default) | Latest tagged release of the template. Battle-tested across the maintainer's canary deploys before tagging. | Production scaffolds. New shops. |
|
|
38
|
+
| `next` | Bleeding-edge: the `next` branch on `cartwright-template`, updated on every push to the template's source repo. | Trying features that haven't been cut into a stable release yet. Not for production. |
|
|
39
|
+
| `vX.Y.Z` (any tag) | Pin to a specific historical release. | Reproducing a known-good scaffold. |
|
|
40
|
+
| `<branch>` (any branch) | Pin to a branch on the mirror. | Power-user experimentation. |
|
|
41
|
+
|
|
42
|
+
Examples:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
npx create-cartwright@latest my-shop # → stable (default)
|
|
46
|
+
npx create-cartwright@latest my-shop --ref next # → bleeding-edge
|
|
47
|
+
npx create-cartwright@latest my-shop --ref v0.1.0-beta # → pin to a tag
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
The spinner shows the channel and the resolved ref so you can see exactly what you pulled — useful when reporting issues.
|
|
51
|
+
|
|
33
52
|
## What it does
|
|
34
53
|
|
|
35
54
|
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
|
|
55
|
+
2. Downloads a sanitised snapshot from [`cartwright-template`](https://github.com/Teloz1870/cartwright-template) at the resolved `--ref` channel (default `stable`).
|
|
37
56
|
3. Generates a random 32-byte `AUTH_SECRET` and writes `.env.local`.
|
|
38
57
|
4. Patches `brand.config.ts` — `storeName` (Title Case of project name) + `storeSlug` (kebab-case).
|
|
39
58
|
5. Optional: `git init` + initial commit.
|
package/dist/approve.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { type ShopBrief } from "./brief";
|
|
1
|
+
import { type ShopBrief } from "./brief.js";
|
|
2
2
|
export declare function summarizeBuild(brief: ShopBrief): string;
|
package/dist/generate/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ShopBrief } from "../brief";
|
|
1
|
+
import { type ShopBrief } from "../brief.js";
|
|
2
2
|
export declare function generateThemeCss(brief: ShopBrief): string;
|
|
3
3
|
export declare function generatePromptModule(brief: ShopBrief): string;
|
|
4
4
|
export declare function generateSeedData(brief: ShopBrief): string;
|
package/dist/index.js
CHANGED
|
@@ -5,10 +5,23 @@
|
|
|
5
5
|
* Usage:
|
|
6
6
|
* npx create-cartwright@latest [name] [--yes]
|
|
7
7
|
* [--db=turso|postgres|sqlite] [--ai|--no-ai]
|
|
8
|
-
* [--ref
|
|
8
|
+
* [--ref=stable|next|<tag-or-branch>]
|
|
9
|
+
* [--template=website-corporate|coffee|sunglasses|agent-marketplace|generic]
|
|
9
10
|
* [--pm=pnpm|npm|yarn|bun]
|
|
10
11
|
* [--no-install] [--no-git]
|
|
11
12
|
*
|
|
13
|
+
* Channels:
|
|
14
|
+
* --ref stable (default) → latest tagged template release
|
|
15
|
+
* --ref next → bleeding-edge main branch from cartwright-private
|
|
16
|
+
* --ref vX.Y.Z → pin to a specific historical tag
|
|
17
|
+
*
|
|
18
|
+
* Templates (sets brand.mode + brand.features defaults in brand.config.ts):
|
|
19
|
+
* --template generic (default) → webshop mode, no A2A
|
|
20
|
+
* --template website-corporate → website mode (no shop catalogue)
|
|
21
|
+
* --template coffee → webshop mode, coffee seed data
|
|
22
|
+
* --template sunglasses → webshop mode, legacy eyewear fields
|
|
23
|
+
* --template agent-marketplace → A2A mode, no shop GUI, A-JWT endpoints on
|
|
24
|
+
*
|
|
12
25
|
* Pulls a sanitised snapshot of cartwright-template via giget, generates a
|
|
13
26
|
* fresh AUTH_SECRET, injects the project name into brand.config.ts, and
|
|
14
27
|
* optionally installs deps + inits git.
|
|
@@ -20,12 +33,24 @@ import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
|
20
33
|
import { join, resolve } from "node:path";
|
|
21
34
|
import { parseArgs } from "node:util";
|
|
22
35
|
const TEMPLATE_REPO = "github:Teloz1870/cartwright-template";
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
36
|
+
// Default channel resolves to the latest tag mirrored from cartwright-private.
|
|
37
|
+
// Bump together with a Changeset whenever a new template tag goes out —
|
|
38
|
+
// .github/workflows/bump-template-ref.yml does this automatically by opening
|
|
39
|
+
// a PR when it sees a newer tag on the public mirror.
|
|
40
|
+
const DEFAULT_REF = "v0.2.0";
|
|
41
|
+
// Channel aliases the user can pass via --ref.
|
|
42
|
+
// stable → DEFAULT_REF (latest tag — what default `npx create-cartwright` uses)
|
|
43
|
+
// next → bleeding-edge branch on the mirror, updated on every push to
|
|
44
|
+
// cartwright-private/main. Not recommended for production scaffolds.
|
|
45
|
+
const REF_ALIASES = {
|
|
46
|
+
stable: DEFAULT_REF,
|
|
47
|
+
next: "next",
|
|
48
|
+
};
|
|
49
|
+
import { TEMPLATE_SLUGS, detectPackageManager, generateAuthSecret, patchEnvLocal, patchBrandConfigContent, patchBrandConfigForTemplate, isTemplateSlug, tryGitInit, tryInstall, databaseNote } from "./scaffold.js";
|
|
50
|
+
import { resolveKeyMode } from "./key-step.js";
|
|
51
|
+
import { runInterview } from "./interview.js";
|
|
52
|
+
import { summarizeBuild } from "./approve.js";
|
|
53
|
+
import { injectBriefFiles } from "./inject.js";
|
|
29
54
|
function exitOnCancel(value) {
|
|
30
55
|
if (isCancel(value)) {
|
|
31
56
|
cancel("Cancelled.");
|
|
@@ -42,6 +67,20 @@ function patchBrandConfig(targetDir, projectName) {
|
|
|
42
67
|
if (patched !== original)
|
|
43
68
|
writeFileSync(path, patched);
|
|
44
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Apply per-template defaults to brand.config.ts. Called after the basic
|
|
72
|
+
* name/slug patch. Idempotent — safe to call even if the template fields
|
|
73
|
+
* already match (the regex replacements no-op).
|
|
74
|
+
*/
|
|
75
|
+
function applyTemplateDefaults(targetDir, template) {
|
|
76
|
+
const path = join(targetDir, "brand.config.ts");
|
|
77
|
+
if (!existsSync(path))
|
|
78
|
+
return;
|
|
79
|
+
const original = readFileSync(path, "utf8");
|
|
80
|
+
const patched = patchBrandConfigForTemplate(original, template);
|
|
81
|
+
if (patched !== original)
|
|
82
|
+
writeFileSync(path, patched);
|
|
83
|
+
}
|
|
45
84
|
async function run() {
|
|
46
85
|
const { values, positionals } = parseArgs({
|
|
47
86
|
allowPositionals: true,
|
|
@@ -53,10 +92,21 @@ async function run() {
|
|
|
53
92
|
"ai-gen": { type: "boolean" },
|
|
54
93
|
ref: { type: "string" },
|
|
55
94
|
pm: { type: "string" },
|
|
95
|
+
template: { type: "string" },
|
|
56
96
|
"no-install": { type: "boolean" },
|
|
57
97
|
"no-git": { type: "boolean" },
|
|
58
98
|
},
|
|
59
99
|
});
|
|
100
|
+
// Validate --template if provided. Default is "generic" (full webshop
|
|
101
|
+
// scaffold matching pre-Phase-2 behaviour).
|
|
102
|
+
let templateSlug = "generic";
|
|
103
|
+
if (values.template !== undefined) {
|
|
104
|
+
if (!isTemplateSlug(values.template)) {
|
|
105
|
+
console.error(pc.red(`Invalid --template "${values.template}". Choose one of: ${TEMPLATE_SLUGS.join(", ")}`));
|
|
106
|
+
process.exit(1);
|
|
107
|
+
}
|
|
108
|
+
templateSlug = values.template;
|
|
109
|
+
}
|
|
60
110
|
intro(`${pc.bgYellow(pc.black(" create-cartwright "))} ${pc.dim("v2.0.0-beta")}`);
|
|
61
111
|
// ── Project name ────────────────────────────────────────────────────────
|
|
62
112
|
const defaultName = positionals[0] ?? "my-cartwright-shop";
|
|
@@ -139,7 +189,8 @@ async function run() {
|
|
|
139
189
|
const packageManager = values.pm ?? detected;
|
|
140
190
|
const installDeps = !values["no-install"];
|
|
141
191
|
const initGit = !values["no-git"];
|
|
142
|
-
const
|
|
192
|
+
const requestedRef = values.ref ?? "stable";
|
|
193
|
+
const templateRef = REF_ALIASES[requestedRef] ?? requestedRef;
|
|
143
194
|
// ── Pre-flight ──────────────────────────────────────────────────────────
|
|
144
195
|
const finalSlug = storeSlugOverride ?? projectName;
|
|
145
196
|
const finalProjectName = storeNameOverride ?? projectName;
|
|
@@ -150,13 +201,16 @@ async function run() {
|
|
|
150
201
|
}
|
|
151
202
|
// ── Template fetch ──────────────────────────────────────────────────────
|
|
152
203
|
const fetchSpinner = spinner();
|
|
153
|
-
|
|
204
|
+
const refDisplay = requestedRef === templateRef
|
|
205
|
+
? templateRef
|
|
206
|
+
: `${requestedRef} → ${templateRef}`;
|
|
207
|
+
fetchSpinner.start(`Fetching cartwright template (${refDisplay})…`);
|
|
154
208
|
try {
|
|
155
209
|
await downloadTemplate(`${TEMPLATE_REPO}#${templateRef}`, {
|
|
156
210
|
dir: targetDir,
|
|
157
211
|
force: false,
|
|
158
212
|
});
|
|
159
|
-
fetchSpinner.stop(pc.green(`Template downloaded (${
|
|
213
|
+
fetchSpinner.stop(pc.green(`Template downloaded (${refDisplay}).`));
|
|
160
214
|
}
|
|
161
215
|
catch (err) {
|
|
162
216
|
fetchSpinner.stop(pc.red("Template fetch failed."));
|
|
@@ -174,6 +228,14 @@ async function run() {
|
|
|
174
228
|
else {
|
|
175
229
|
patchBrandConfig(targetDir, finalProjectName);
|
|
176
230
|
}
|
|
231
|
+
// Apply per-template defaults (mode, features, industryTemplate) AFTER
|
|
232
|
+
// the basic name/slug patch so the regex-based replacements act on a
|
|
233
|
+
// known shape. Always run — for `--template generic` (the default) the
|
|
234
|
+
// patches are no-ops on a generic-defaulted brand.config.
|
|
235
|
+
applyTemplateDefaults(targetDir, templateSlug);
|
|
236
|
+
if (templateSlug !== "generic") {
|
|
237
|
+
note(`Template: ${pc.bold(templateSlug)} — applied mode + features defaults to brand.config.ts`, "info");
|
|
238
|
+
}
|
|
177
239
|
// ── Git init ────────────────────────────────────────────────────────────
|
|
178
240
|
if (initGit) {
|
|
179
241
|
const gitOk = tryGitInit(targetDir);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EACL,KAAK,EACL,KAAK,EACL,IAAI,EACJ,MAAM,EACN,OAAO,EACP,MAAM,EACN,QAAQ,EACR,OAAO,EACP,IAAI,EACJ,QAAQ,GACT,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAG1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,sCAAsC,CAAC;AAE7D,+EAA+E;AAC/E,wEAAwE;AACxE,6EAA6E;AAC7E,sDAAsD;AACtD,MAAM,WAAW,GAAG,QAAQ,CAAC;AAE7B,+CAA+C;AAC/C,kFAAkF;AAClF,0EAA0E;AAC1E,gFAAgF;AAChF,MAAM,WAAW,GAA2B;IAC1C,MAAM,EAAE,WAAW;IACnB,IAAI,EAAE,MAAM;CACb,CAAC;AAEF,OAAO,EAIL,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,uBAAuB,EACvB,2BAA2B,EAC3B,cAAc,EACd,UAAU,EACV,UAAU,EACV,YAAY,EACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,SAAS,YAAY,CAAI,KAAiB;IACxC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,CAAC,YAAY,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,KAAU,CAAC;AACpB,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAiB,EAAE,WAAmB;IAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO;IAC9B,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,uBAAuB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC/D,IAAI,OAAO,KAAK,QAAQ;QAAE,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACzD,CAAC;AAED;;;;GAIG;AACH,SAAS,qBAAqB,CAC5B,SAAiB,EACjB,QAAsB;IAEtB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO;IAC9B,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,2BAA2B,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAChE,IAAI,OAAO,KAAK,QAAQ;QAAE,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACzD,CAAC;AAED,KAAK,UAAU,GAAG;IAChB,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC;QACxC,gBAAgB,EAAE,IAAI;QACtB,OAAO,EAAE;YACP,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;YACpC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACtB,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YACvB,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YAC5B,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YAC7B,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACvB,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACtB,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC5B,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YACjC,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;SAC9B;KACF,CAAC,CAAC;IAEH,sEAAsE;IACtE,4CAA4C;IAC5C,IAAI,YAAY,GAAiB,SAAS,CAAC;IAC3C,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,KAAK,CACX,EAAE,CAAC,GAAG,CACJ,uBAAuB,MAAM,CAAC,QAAQ,qBAAqB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvF,CACF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,CAAC;IAED,KAAK,CACH,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAC3E,CAAC;IAEF,2EAA2E;IAC3E,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,oBAAoB,CAAC;IAC3D,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG;QAC5B,CAAC,CAAC,WAAW;QACb,CAAC,CAAC,YAAY,CACV,MAAM,IAAI,CAAC;YACT,OAAO,EAAE,eAAe;YACxB,YAAY,EAAE,WAAW;YACzB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CACd,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;gBACzB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,gEAAgE;SACvE,CAAC,CACH,CAAC;IAEN,2EAA2E;IAC3E,MAAM,UAAU,GAAG,MAAM,CAAC,EAA0B,CAAC;IACrD,MAAM,QAAQ,GACZ,UAAU;QACV,CAAC,MAAM,CAAC,GAAG;YACT,CAAC,CAAC,OAAO;YACT,CAAC,CAAE,YAAY,CACX,MAAM,MAAM,CAAC;gBACX,OAAO,EAAE,WAAW;gBACpB,OAAO,EAAE;oBACP;wBACE,KAAK,EAAE,OAAO;wBACd,KAAK,EAAE,sCAAsC;qBAC9C;oBACD;wBACE,KAAK,EAAE,UAAU;wBACjB,KAAK,EAAE,0CAA0C;qBAClD;oBACD,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,qBAAqB,EAAE;iBAClD;gBACD,YAAY,EAAE,OAAO;aACtB,CAAC,CACU,CAAC,CAAC;IAEtB,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxD,MAAM,CAAC,qBAAqB,QAAQ,oCAAoC,CAAC,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,2EAA2E;IAC3E,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACxF,MAAM,MAAM,GACV,MAAM;QACN,CAAC,MAAM,CAAC,GAAG;YACT,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,YAAY,CACV,MAAM,OAAO,CAAC;gBACZ,OAAO,EACL,sEAAsE;gBACxE,YAAY,EAAE,IAAI;aACnB,CAAC,CACH,CAAC,CAAC;IAET,4EAA4E;IAC5E,IAAI,cAAc,GAAG,SAAS,CAAC;IAC/B,IAAI,iBAAiB,GAAG,SAAS,CAAC;IAClC,IAAI,iBAAiB,GAAG,SAAS,CAAC;IAElC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CACrE,MAAM,OAAO,CAAC;QACZ,OAAO,EAAE,kEAAkE;QAC3E,YAAY,EAAE,IAAI;KACnB,CAAC,CACH,CAAC,CAAC;IAEH,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC;YACnC,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc;YAC3C,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,QAAQ,CAAC,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;YAC3F,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,gDAAgD,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;SAC1I,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC3B,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC,CAAC,CAAC;YAE9F,cAAc,GAAG,MAAM,YAAY,CAAC;gBAClC,MAAM,EAAE,OAAO,CAAC,GAAG;gBACnB,aAAa;gBACb,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;gBACrF,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aAC1C,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,cAAc,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,CAAC;YAC1D,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,2CAA2C,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAErH,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,MAAM,CAAC,oBAAoB,CAAC,CAAC;gBAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,iBAAiB,GAAG,cAAc,CAAC,IAAI,CAAC;YACxC,iBAAiB,GAAG,cAAc,CAAC,SAAS,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC;IACxC,MAAM,cAAc,GACjB,MAAM,CAAC,EAAiC,IAAI,QAAQ,CAAC;IACxD,MAAM,WAAW,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,IAAI,QAAQ,CAAC;IAC5C,MAAM,WAAW,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC;IAE9D,2EAA2E;IAC3E,MAAM,SAAS,GAAG,iBAAiB,IAAI,WAAW,CAAC;IACnD,MAAM,gBAAgB,GAAG,iBAAiB,IAAI,WAAW,CAAC;IAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;IAEpD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,cAAc,SAAS,mBAAmB,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,2EAA2E;IAC3E,MAAM,YAAY,GAAG,OAAO,EAAE,CAAC;IAC/B,MAAM,UAAU,GACd,YAAY,KAAK,WAAW;QAC1B,CAAC,CAAC,WAAW;QACb,CAAC,CAAC,GAAG,YAAY,MAAM,WAAW,EAAE,CAAC;IACzC,YAAY,CAAC,KAAK,CAAC,iCAAiC,UAAU,IAAI,CAAC,CAAC;IACpE,IAAI,CAAC;QACH,MAAM,gBAAgB,CAAC,GAAG,aAAa,IAAI,WAAW,EAAE,EAAE;YACxD,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;QACH,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,wBAAwB,UAAU,IAAI,CAAC,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,2EAA2E;IAC3E,MAAM,UAAU,GAAG,kBAAkB,EAAE,CAAC;IACxC,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAErC,IAAI,cAAc,EAAE,CAAC;QACnB,gBAAgB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QAC5C,mFAAmF;QACnF,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACzC,CAAC;SAAM,CAAC;QACN,gBAAgB,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAChD,CAAC;IAED,uEAAuE;IACvE,qEAAqE;IACrE,uEAAuE;IACvE,0DAA0D;IAC1D,qBAAqB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAC/C,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,CACF,aAAa,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,wDAAwD,EAC1F,MAAM,CACP,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,uCAAuC,CAAC,EAAE,MAAM,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,cAAc,GAAG,OAAO,EAAE,CAAC;QACjC,cAAc,CAAC,KAAK,CAAC,gCAAgC,cAAc,GAAG,CAAC,CAAC;QACxE,MAAM,EAAE,GAAG,UAAU,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QACjD,IAAI,EAAE,EAAE,CAAC;YACP,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,cAAc,CAAC,IAAI,CACjB,EAAE,CAAC,MAAM,CACP,0BAA0B,cAAc,iBAAiB,WAAW,YAAY,CACjF,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,MAAM,MAAM,GACV,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC;IAExD,MAAM,MAAM,GAAG,MAAM;QACnB,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,+EAA+E,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,qEAAqE,CAAC,EAAE;QACtL,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,KAAK,GAAG;QACZ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;YACX,YAAY,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;QACjE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,kDAAkD;QAClE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,kDAAkD;QAClE,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,EAAE;QAC1D,EAAE;QACF,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC;QACtB,QAAQ,SAAS,EAAE;QACnB,iCAAiC,EAAE,CAAC,GAAG,CAAC,+BAA+B,CAAC,EAAE;QAC1E,iCAAiC,EAAE,CAAC,GAAG,CAAC,mCAAmC,CAAC,EAAE;QAC9E,KAAK,MAAM,uBAAuB,EAAE,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAE;QACrE,EAAE;QACF,YAAY,CAAC,QAAQ,CAAC;QACtB,MAAM;QACN,EAAE;QACF,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC;QAC/B,EAAE,CAAC,GAAG,CAAC,sEAAsE,CAAC;QAC9E,EAAE,CAAC,GAAG,CAAC,kDAAkD,CAAC;QAC1D,EAAE;QACF,EAAE,CAAC,GAAG,CAAC,kEAAkE,CAAC;QAC1E,EAAE,CAAC,GAAG,CAAC,2DAA2D,CAAC;KACpE;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,KAAK,CAAC,KAAK,CAAC,CAAC;AACf,CAAC;AAED,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAClB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,GAAG,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/inject.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { type ShopBrief } from "./brief";
|
|
1
|
+
import { type ShopBrief } from "./brief.js";
|
|
2
2
|
export declare function injectBriefFiles(targetDir: string, brief: ShopBrief): void;
|
package/dist/inject.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { writeFileSync, mkdirSync, existsSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
import { generateThemeCss, generatePromptModule, generateSeedData } from "./generate";
|
|
3
|
+
import { generateThemeCss, generatePromptModule, generateSeedData } from "./generate/index.js";
|
|
4
4
|
export function injectBriefFiles(targetDir, brief) {
|
|
5
5
|
// Opret mapper
|
|
6
6
|
const cssDir = join(targetDir, "themes");
|
package/dist/inject.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../src/inject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../src/inject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE/F,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,KAAgB;IAClE,eAAe;IACf,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAEnE,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAC7C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,cAAc;IACd,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,MAAM,CAAC,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1E,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;IACjF,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IAEvE,iFAAiF;IACjF,qFAAqF;AACvF,CAAC"}
|
package/dist/interview.d.ts
CHANGED
package/dist/interview.js
CHANGED
package/dist/interview.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interview.js","sourceRoot":"","sources":["../src/interview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"interview.js","sourceRoot":"","sources":["../src/interview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAUxC,MAAM,eAAe,GAAG;IACtB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC/B,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE;QAC1F,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,iEAAiE;YAC9E,UAAU,EAAE;gBACV,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC7B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACxB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC3B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC5B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACxB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC3B,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC5B,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBAC3B,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;qBAC/B;iBACF;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;yBACzB;qBACF;iBACF;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxB,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BAChC,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;4BAC/B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;yBAC1B;qBACF;iBACF;aACF;SACF;KACF;IACD,QAAQ,EAAE,CAAC,YAAY,EAAE,cAAc,CAAC;CACzC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAmB;IACpD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,sCAAsC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IAEzE,MAAM,kBAAkB,GAAG;;;;CAI5B,CAAC;IAEA,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,GAAG,kBAAkB,yBAAyB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAElF,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,CAAQ,CAAC;QAE5E,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YAChC,OAAO,GAAG,CAAC,KAAkB,CAAC;QAChC,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC;IACpC,CAAC;AACH,CAAC"}
|
package/dist/key-step.js
CHANGED
package/dist/key-step.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-step.js","sourceRoot":"","sources":["../src/key-step.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"key-step.js","sourceRoot":"","sources":["../src/key-step.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAUvC,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAiB;IACpD,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAElC,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,OAAO;YAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC;IACvD,CAAC;IAED,OAAO,IAAI,EAAE,CAAC;QACZ,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACpC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAC9C,IAAI,UAAU;gBAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,OAAO;YAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC;IACvD,CAAC;AACH,CAAC"}
|
package/dist/scaffold.d.ts
CHANGED
|
@@ -1,10 +1,48 @@
|
|
|
1
1
|
export type Database = "turso" | "postgres" | "sqlite";
|
|
2
2
|
export type PackageManager = "pnpm" | "npm" | "yarn" | "bun";
|
|
3
|
+
/**
|
|
4
|
+
* Industry templates the CLI knows about. Each maps to:
|
|
5
|
+
* - the seed-data slug in industry-templates/<slug>/seed-data.ts
|
|
6
|
+
* - a set of default brand.mode + brand.features values
|
|
7
|
+
*
|
|
8
|
+
* Customers can still override any field after scaffold by editing
|
|
9
|
+
* brand.config.ts directly. These are starting points, not constraints.
|
|
10
|
+
*/
|
|
11
|
+
export type TemplateSlug = "website-corporate" | "coffee" | "sunglasses" | "agent-marketplace" | "generic";
|
|
12
|
+
export declare const TEMPLATE_SLUGS: ReadonlyArray<TemplateSlug>;
|
|
13
|
+
/**
|
|
14
|
+
* Per-template defaults written into brand.config.ts after download.
|
|
15
|
+
* Keys mirror brand.config.ts shape (mode + features.*).
|
|
16
|
+
*/
|
|
17
|
+
export type TemplateDefaults = {
|
|
18
|
+
mode: "website" | "webshop" | "agent-marketplace";
|
|
19
|
+
features: {
|
|
20
|
+
webshop: boolean;
|
|
21
|
+
acp: boolean;
|
|
22
|
+
a2a: boolean;
|
|
23
|
+
adminAgenticDashboard: boolean;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
export declare const TEMPLATE_DEFAULTS: Readonly<Record<TemplateSlug, TemplateDefaults>>;
|
|
27
|
+
export declare function isTemplateSlug(value: unknown): value is TemplateSlug;
|
|
3
28
|
export declare function detectPackageManager(): PackageManager;
|
|
4
29
|
export declare function generateAuthSecret(): string;
|
|
5
30
|
export declare function patchEnvLocal(targetDir: string, authSecret: string): void;
|
|
6
31
|
export declare function titleCase(projectName: string): string;
|
|
7
32
|
export declare function patchBrandConfigContent(original: string, projectName: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Apply the per-template defaults to a brand.config.ts source string.
|
|
35
|
+
* Patches:
|
|
36
|
+
* - industryTemplate: "<slug>"
|
|
37
|
+
* - mode: "<mode>"
|
|
38
|
+
* - features.webshop, features.acp, features.a2a, features.adminAgenticDashboard
|
|
39
|
+
*
|
|
40
|
+
* The replacements are regex-anchored to the exact field shape produced by
|
|
41
|
+
* the upstream brand.config.ts. If that shape ever changes the regexes here
|
|
42
|
+
* will silently no-op (no replacement) — the corresponding unit test catches
|
|
43
|
+
* that case.
|
|
44
|
+
*/
|
|
45
|
+
export declare function patchBrandConfigForTemplate(original: string, template: TemplateSlug): string;
|
|
8
46
|
export declare function tryGitInit(targetDir: string): boolean;
|
|
9
47
|
export declare function tryInstall(targetDir: string, pm: PackageManager): boolean;
|
|
10
48
|
export declare function databaseNote(db: Database): string;
|
package/dist/scaffold.js
CHANGED
|
@@ -3,6 +3,63 @@ import { join } from "node:path";
|
|
|
3
3
|
import { execSync } from "node:child_process";
|
|
4
4
|
import { randomBytes } from "node:crypto";
|
|
5
5
|
import pc from "picocolors";
|
|
6
|
+
export const TEMPLATE_SLUGS = [
|
|
7
|
+
"website-corporate",
|
|
8
|
+
"coffee",
|
|
9
|
+
"sunglasses",
|
|
10
|
+
"agent-marketplace",
|
|
11
|
+
"generic",
|
|
12
|
+
];
|
|
13
|
+
export const TEMPLATE_DEFAULTS = {
|
|
14
|
+
"website-corporate": {
|
|
15
|
+
mode: "website",
|
|
16
|
+
features: {
|
|
17
|
+
webshop: false,
|
|
18
|
+
acp: false,
|
|
19
|
+
a2a: false,
|
|
20
|
+
adminAgenticDashboard: false,
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
coffee: {
|
|
24
|
+
mode: "webshop",
|
|
25
|
+
features: {
|
|
26
|
+
webshop: true,
|
|
27
|
+
acp: false,
|
|
28
|
+
a2a: false,
|
|
29
|
+
adminAgenticDashboard: false,
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
sunglasses: {
|
|
33
|
+
mode: "webshop",
|
|
34
|
+
features: {
|
|
35
|
+
webshop: true,
|
|
36
|
+
acp: false,
|
|
37
|
+
a2a: false,
|
|
38
|
+
adminAgenticDashboard: false,
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
"agent-marketplace": {
|
|
42
|
+
mode: "agent-marketplace",
|
|
43
|
+
features: {
|
|
44
|
+
webshop: false,
|
|
45
|
+
acp: true,
|
|
46
|
+
a2a: true,
|
|
47
|
+
adminAgenticDashboard: true,
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
generic: {
|
|
51
|
+
mode: "webshop",
|
|
52
|
+
features: {
|
|
53
|
+
webshop: true,
|
|
54
|
+
acp: false,
|
|
55
|
+
a2a: false,
|
|
56
|
+
adminAgenticDashboard: false,
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
export function isTemplateSlug(value) {
|
|
61
|
+
return typeof value === "string" && TEMPLATE_SLUGS.includes(value);
|
|
62
|
+
}
|
|
6
63
|
export function detectPackageManager() {
|
|
7
64
|
const ua = process.env.npm_config_user_agent ?? "";
|
|
8
65
|
if (ua.startsWith("pnpm"))
|
|
@@ -35,6 +92,34 @@ export function patchBrandConfigContent(original, projectName) {
|
|
|
35
92
|
.replace(/storeName:\s*"[^"]*"/, `storeName: "${titleCase(projectName)}"`)
|
|
36
93
|
.replace(/storeSlug:\s*"[^"]*"/, `storeSlug: "${projectName}"`);
|
|
37
94
|
}
|
|
95
|
+
/**
|
|
96
|
+
* Apply the per-template defaults to a brand.config.ts source string.
|
|
97
|
+
* Patches:
|
|
98
|
+
* - industryTemplate: "<slug>"
|
|
99
|
+
* - mode: "<mode>"
|
|
100
|
+
* - features.webshop, features.acp, features.a2a, features.adminAgenticDashboard
|
|
101
|
+
*
|
|
102
|
+
* The replacements are regex-anchored to the exact field shape produced by
|
|
103
|
+
* the upstream brand.config.ts. If that shape ever changes the regexes here
|
|
104
|
+
* will silently no-op (no replacement) — the corresponding unit test catches
|
|
105
|
+
* that case.
|
|
106
|
+
*/
|
|
107
|
+
export function patchBrandConfigForTemplate(original, template) {
|
|
108
|
+
const defaults = TEMPLATE_DEFAULTS[template];
|
|
109
|
+
let out = original;
|
|
110
|
+
// industryTemplate: "xxx" (single-line)
|
|
111
|
+
out = out.replace(/industryTemplate:\s*"[^"]*"/, `industryTemplate: "${template}"`);
|
|
112
|
+
// mode: "xxx" as "website" | "webshop" | "agent-marketplace"
|
|
113
|
+
// We replace just the literal value inside the leading quotes, preserving
|
|
114
|
+
// the `as ...` type assertion if present.
|
|
115
|
+
out = out.replace(/mode:\s*"(?:website|webshop|agent-marketplace)"/, `mode: "${defaults.mode}"`);
|
|
116
|
+
// features.webshop|acp|a2a|adminAgenticDashboard: <bool>
|
|
117
|
+
for (const [key, value] of Object.entries(defaults.features)) {
|
|
118
|
+
const re = new RegExp(`(${key}:\\s*)(?:true|false)`, "g");
|
|
119
|
+
out = out.replace(re, `$1${value}`);
|
|
120
|
+
}
|
|
121
|
+
return out;
|
|
122
|
+
}
|
|
38
123
|
export function tryGitInit(targetDir) {
|
|
39
124
|
try {
|
|
40
125
|
execSync("git init -q && git add -A && git commit -q -m 'feat: initial commit from create-cartwright'", { cwd: targetDir, stdio: "ignore" });
|
package/dist/scaffold.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
|
package/dist/scaffold.test.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect } from "vitest";
|
|
2
|
-
import { titleCase, patchBrandConfigContent } from "./scaffold";
|
|
2
|
+
import { titleCase, patchBrandConfigContent, patchBrandConfigForTemplate, isTemplateSlug, TEMPLATE_SLUGS, TEMPLATE_DEFAULTS, } from "./scaffold";
|
|
3
3
|
describe("scaffold helpers", () => {
|
|
4
4
|
it("titleCase laver projektnavn til storeName", () => {
|
|
5
5
|
expect(titleCase("nord-kaffe")).toBe("Nord Kaffe");
|
|
@@ -11,4 +11,99 @@ describe("scaffold helpers", () => {
|
|
|
11
11
|
expect(out).toContain(`storeSlug: "min-shop"`);
|
|
12
12
|
});
|
|
13
13
|
});
|
|
14
|
+
// Sample brand.config.ts fragments that mirror the actual shape produced
|
|
15
|
+
// by cartwright-private after Phase 4. Keeping these here (vs. importing
|
|
16
|
+
// the real file) lets the CLI tests stay independent of the template repo.
|
|
17
|
+
const BRAND_FRAGMENT = `
|
|
18
|
+
industryTemplate: "saas",
|
|
19
|
+
mode: "website" as "website" | "webshop" | "agent-marketplace",
|
|
20
|
+
ecommerceEnabled: false,
|
|
21
|
+
features: {
|
|
22
|
+
webshop: false,
|
|
23
|
+
acp: false,
|
|
24
|
+
a2a: false,
|
|
25
|
+
adminAgenticDashboard: false,
|
|
26
|
+
tryOn: false,
|
|
27
|
+
aiStylist: true,
|
|
28
|
+
},
|
|
29
|
+
`;
|
|
30
|
+
describe("isTemplateSlug", () => {
|
|
31
|
+
for (const slug of TEMPLATE_SLUGS) {
|
|
32
|
+
it(`recognises "${slug}"`, () => {
|
|
33
|
+
expect(isTemplateSlug(slug)).toBe(true);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
it("rejects unknown slugs", () => {
|
|
37
|
+
expect(isTemplateSlug("not-a-template")).toBe(false);
|
|
38
|
+
expect(isTemplateSlug("")).toBe(false);
|
|
39
|
+
expect(isTemplateSlug(undefined)).toBe(false);
|
|
40
|
+
expect(isTemplateSlug(42)).toBe(false);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe("patchBrandConfigForTemplate", () => {
|
|
44
|
+
it("agent-marketplace flips A2A+ACP+dashboard on, webshop off", () => {
|
|
45
|
+
const out = patchBrandConfigForTemplate(BRAND_FRAGMENT, "agent-marketplace");
|
|
46
|
+
expect(out).toContain(`industryTemplate: "agent-marketplace"`);
|
|
47
|
+
expect(out).toContain(`mode: "agent-marketplace"`);
|
|
48
|
+
expect(out).toContain(`webshop: false`);
|
|
49
|
+
expect(out).toContain(`acp: true`);
|
|
50
|
+
expect(out).toContain(`a2a: true`);
|
|
51
|
+
expect(out).toContain(`adminAgenticDashboard: true`);
|
|
52
|
+
});
|
|
53
|
+
it("coffee flips webshop on, A2A off", () => {
|
|
54
|
+
const out = patchBrandConfigForTemplate(BRAND_FRAGMENT, "coffee");
|
|
55
|
+
expect(out).toContain(`industryTemplate: "coffee"`);
|
|
56
|
+
expect(out).toContain(`mode: "webshop"`);
|
|
57
|
+
expect(out).toContain(`webshop: true`);
|
|
58
|
+
expect(out).toContain(`a2a: false`);
|
|
59
|
+
});
|
|
60
|
+
it("sunglasses → webshop mode, legacy template name in industryTemplate", () => {
|
|
61
|
+
const out = patchBrandConfigForTemplate(BRAND_FRAGMENT, "sunglasses");
|
|
62
|
+
expect(out).toContain(`industryTemplate: "sunglasses"`);
|
|
63
|
+
expect(out).toContain(`mode: "webshop"`);
|
|
64
|
+
expect(out).toContain(`webshop: true`);
|
|
65
|
+
});
|
|
66
|
+
it("website-corporate → website mode, all A2A/webshop off", () => {
|
|
67
|
+
const out = patchBrandConfigForTemplate(BRAND_FRAGMENT, "website-corporate");
|
|
68
|
+
expect(out).toContain(`industryTemplate: "website-corporate"`);
|
|
69
|
+
expect(out).toContain(`mode: "website"`);
|
|
70
|
+
expect(out).toContain(`webshop: false`);
|
|
71
|
+
expect(out).toContain(`a2a: false`);
|
|
72
|
+
expect(out).toContain(`adminAgenticDashboard: false`);
|
|
73
|
+
});
|
|
74
|
+
it("generic preserves webshop mode with no A2A flags on", () => {
|
|
75
|
+
const out = patchBrandConfigForTemplate(BRAND_FRAGMENT, "generic");
|
|
76
|
+
expect(out).toContain(`industryTemplate: "generic"`);
|
|
77
|
+
expect(out).toContain(`mode: "webshop"`);
|
|
78
|
+
expect(out).toContain(`webshop: true`);
|
|
79
|
+
expect(out).toContain(`a2a: false`);
|
|
80
|
+
});
|
|
81
|
+
it("does not touch unrelated feature flags (tryOn, aiStylist)", () => {
|
|
82
|
+
const out = patchBrandConfigForTemplate(BRAND_FRAGMENT, "coffee");
|
|
83
|
+
expect(out).toContain(`tryOn: false`);
|
|
84
|
+
expect(out).toContain(`aiStylist: true`);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe("TEMPLATE_DEFAULTS — invariants", () => {
|
|
88
|
+
it("every template has all four mode-features defined", () => {
|
|
89
|
+
for (const slug of TEMPLATE_SLUGS) {
|
|
90
|
+
const d = TEMPLATE_DEFAULTS[slug];
|
|
91
|
+
expect(typeof d.features.webshop).toBe("boolean");
|
|
92
|
+
expect(typeof d.features.acp).toBe("boolean");
|
|
93
|
+
expect(typeof d.features.a2a).toBe("boolean");
|
|
94
|
+
expect(typeof d.features.adminAgenticDashboard).toBe("boolean");
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
it("agent-marketplace is the only template that turns a2a on", () => {
|
|
98
|
+
for (const slug of TEMPLATE_SLUGS) {
|
|
99
|
+
const a2aOn = TEMPLATE_DEFAULTS[slug].features.a2a;
|
|
100
|
+
if (slug === "agent-marketplace") {
|
|
101
|
+
expect(a2aOn).toBe(true);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
expect(a2aOn).toBe(false);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
});
|
|
14
109
|
//# sourceMappingURL=scaffold.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.test.js","sourceRoot":"","sources":["../src/scaffold.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"scaffold.test.js","sourceRoot":"","sources":["../src/scaffold.test.ts"],"names":[],"mappings":"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"}
|