create-cartwright 2.0.0-beta.1 → 2.0.1

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 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>` | `v0.1.0-beta` | Template ref on `cartwright-template` mirror |
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 pinned `--ref` (default `v0.1.0-beta`).
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/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=<tag-or-branch>]
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,8 +33,20 @@ 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
- const DEFAULT_REF = "v0.1.0-beta";
24
- import { detectPackageManager, generateAuthSecret, patchEnvLocal, patchBrandConfigContent, tryGitInit, tryInstall, databaseNote } from "./scaffold";
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";
25
50
  import { resolveKeyMode } from "./key-step";
26
51
  import { runInterview } from "./interview";
27
52
  import { summarizeBuild } from "./approve";
@@ -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 templateRef = values.ref ?? DEFAULT_REF;
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
- fetchSpinner.start(`Fetching cartwright template (${templateRef})…`);
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 (${templateRef}).`));
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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -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" });
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
@@ -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,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAEhE,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,KAAK,GAAG,0CAA0C,CAAC;QACzD,MAAM,GAAG,GAAG,uBAAuB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACvD,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"scaffold.test.js","sourceRoot":"","sources":["../src/scaffold.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-cartwright",
3
- "version": "2.0.0-beta.1",
3
+ "version": "2.0.1",
4
4
  "description": "Scaffolder for AI-first webshops powered by Cartwright",
5
5
  "keywords": [
6
6
  "cartwright",