@contentrail/cli 0.2.2 → 0.2.4

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.
Files changed (57) hide show
  1. package/README.md +36 -28
  2. package/dist/cli.d.ts +5 -0
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +238 -140
  5. package/dist/cli.js.map +1 -1
  6. package/dist/cloudflare/pages-client.d.ts +4 -0
  7. package/dist/cloudflare/pages-client.d.ts.map +1 -1
  8. package/dist/cloudflare/pages-client.js +15 -1
  9. package/dist/cloudflare/pages-client.js.map +1 -1
  10. package/dist/commands/configure.d.ts +17 -0
  11. package/dist/commands/configure.d.ts.map +1 -0
  12. package/dist/commands/configure.js +109 -0
  13. package/dist/commands/configure.js.map +1 -0
  14. package/dist/commands/connect.d.ts +3 -0
  15. package/dist/commands/connect.d.ts.map +1 -1
  16. package/dist/commands/connect.js +37 -8
  17. package/dist/commands/connect.js.map +1 -1
  18. package/dist/commands/init-next-admin.d.ts.map +1 -1
  19. package/dist/commands/init-next-admin.js +34 -0
  20. package/dist/commands/init-next-admin.js.map +1 -1
  21. package/dist/commands/init.d.ts +6 -0
  22. package/dist/commands/init.d.ts.map +1 -1
  23. package/dist/commands/init.js +141 -31
  24. package/dist/commands/init.js.map +1 -1
  25. package/dist/install/plan.d.ts +8 -0
  26. package/dist/install/plan.d.ts.map +1 -0
  27. package/dist/install/plan.js +29 -0
  28. package/dist/install/plan.js.map +1 -0
  29. package/dist/install/run.d.ts +5 -0
  30. package/dist/install/run.d.ts.map +1 -0
  31. package/dist/install/run.js +80 -0
  32. package/dist/install/run.js.map +1 -0
  33. package/dist/interactive/clack-host.d.ts +3 -0
  34. package/dist/interactive/clack-host.d.ts.map +1 -0
  35. package/dist/interactive/clack-host.js +47 -0
  36. package/dist/interactive/clack-host.js.map +1 -0
  37. package/dist/interactive/connect-wizard.d.ts +17 -0
  38. package/dist/interactive/connect-wizard.d.ts.map +1 -0
  39. package/dist/interactive/connect-wizard.js +41 -0
  40. package/dist/interactive/connect-wizard.js.map +1 -0
  41. package/dist/interactive/init-wizard.d.ts +12 -0
  42. package/dist/interactive/init-wizard.d.ts.map +1 -0
  43. package/dist/interactive/init-wizard.js +73 -0
  44. package/dist/interactive/init-wizard.js.map +1 -0
  45. package/dist/interactive/is-interactive.d.ts +9 -0
  46. package/dist/interactive/is-interactive.d.ts.map +1 -0
  47. package/dist/interactive/is-interactive.js +19 -0
  48. package/dist/interactive/is-interactive.js.map +1 -0
  49. package/dist/interactive/menu.d.ts +4 -0
  50. package/dist/interactive/menu.d.ts.map +1 -0
  51. package/dist/interactive/menu.js +55 -0
  52. package/dist/interactive/menu.js.map +1 -0
  53. package/dist/interactive/types.d.ts +34 -0
  54. package/dist/interactive/types.d.ts.map +1 -0
  55. package/dist/interactive/types.js +2 -0
  56. package/dist/interactive/types.js.map +1 -0
  57. package/package.json +5 -4
@@ -1,9 +1,13 @@
1
+ import { readFileSync } from "node:fs";
1
2
  import path from "node:path";
2
3
  import { CONFIG_FILE_NAME, DEFAULT_CONFIG, } from "../config/types.js";
3
4
  import { detectFrameworkFromPackage, readPackageJson, } from "../detect/framework.js";
4
5
  import { ExitCode } from "../exit-codes.js";
6
+ import { promptInitOptions } from "../interactive/init-wizard.js";
7
+ import { resolveInstallPlan } from "../install/plan.js";
5
8
  import { ensureDir, writeFileSafe } from "../util/fs.js";
6
9
  import { NEXT_ADMIN_FILES, nextAdminInstallHint, scaffoldNextAdmin, } from "./init-next-admin.js";
10
+ const CLI_VERSION = JSON.parse(readFileSync(new URL("../../package.json", import.meta.url), "utf8")).version;
7
11
  export async function runInit(options, log) {
8
12
  const nodeMajor = Number(process.versions.node.split(".")[0]);
9
13
  if (Number.isNaN(nodeMajor) || nodeMajor < 22) {
@@ -16,7 +20,7 @@ export async function runInit(options, log) {
16
20
  return ExitCode.Config;
17
21
  }
18
22
  const detected = detectFrameworkFromPackage(pkg);
19
- const framework = options.framework === "astro" ||
23
+ let framework = options.framework === "astro" ||
20
24
  options.framework === "vite" ||
21
25
  options.framework === "next" ||
22
26
  options.framework === "static"
@@ -24,14 +28,40 @@ export async function runInit(options, log) {
24
28
  : detected === "unknown"
25
29
  ? "static"
26
30
  : detected;
31
+ let withEditor = options.withEditor !== false;
32
+ let withFunctions = options.withFunctions !== false;
33
+ let force = options.force === true;
34
+ let shouldInstall = options.install === true;
35
+ if (options.interactive === true && options.prompts !== undefined) {
36
+ options.prompts.intro("ContentRail setup");
37
+ const answers = await promptInitOptions(options.prompts, detected);
38
+ if (answers.cancelled) {
39
+ return ExitCode.Success;
40
+ }
41
+ const frameworkForced = options.framework === "astro" ||
42
+ options.framework === "vite" ||
43
+ options.framework === "next" ||
44
+ options.framework === "static";
45
+ if (!frameworkForced) {
46
+ framework = answers.framework;
47
+ }
48
+ if (options.withEditor === undefined) {
49
+ withEditor = answers.withEditor;
50
+ }
51
+ if (options.withFunctions === undefined) {
52
+ withFunctions = answers.withFunctions;
53
+ }
54
+ if (options.force !== true) {
55
+ force = answers.force;
56
+ }
57
+ shouldInstall = options.install === true ? true : answers.install;
58
+ }
27
59
  if (framework === "static" || framework === "next") {
28
60
  log.info(framework === "next"
29
61
  ? 'Next.js detected: ContentRail will not generate App Router pages. Use output: "export" so Pages can serve `out/`. Init adds content, /admin (Vite bundle into public/admin), and Pages Functions.'
30
62
  : "Generic static site: ContentRail will not generate your HTML/React pages. Init adds content, /admin (Vite bundle into public/admin), and Pages Functions.");
31
63
  }
32
64
  const collectionsPath = framework === "astro" ? "src/contentrail/config.ts" : "content/config.ts";
33
- const withEditor = options.withEditor !== false;
34
- const withFunctions = options.withFunctions !== false;
35
65
  const config = {
36
66
  ...DEFAULT_CONFIG,
37
67
  framework,
@@ -61,13 +91,23 @@ export async function runInit(options, log) {
61
91
  for (const item of planned) {
62
92
  log.info(` - ${item}`);
63
93
  }
94
+ if (shouldInstall) {
95
+ const plan = resolveInstallPlan(framework, CLI_VERSION);
96
+ log.info("Dry run: would install:");
97
+ for (const pkg of plan.dependencies) {
98
+ log.info(` - ${pkg}`);
99
+ }
100
+ for (const pkg of plan.devDependencies) {
101
+ log.info(` - ${pkg} (dev)`);
102
+ }
103
+ }
64
104
  log.info("No files were written.");
65
105
  return ExitCode.Success;
66
106
  }
67
- const configResult = await writeFileSafe(path.join(options.projectRoot, CONFIG_FILE_NAME), `${JSON.stringify(config, null, 2)}\n`, { force: options.force });
107
+ const configResult = await writeFileSafe(path.join(options.projectRoot, CONFIG_FILE_NAME), `${JSON.stringify(config, null, 2)}\n`, { force });
68
108
  (configResult === "written" ? written : skipped).push(CONFIG_FILE_NAME);
69
109
  const collectionSource = collectionModuleSource();
70
- const collectionResult = await writeFileSafe(path.join(options.projectRoot, collectionsPath), collectionSource, { force: options.force });
110
+ const collectionResult = await writeFileSafe(path.join(options.projectRoot, collectionsPath), collectionSource, { force });
71
111
  (collectionResult === "written" ? written : skipped).push(collectionsPath);
72
112
  await ensureDir(path.join(options.projectRoot, "content", "articles"));
73
113
  const sampleEntry = path.join(options.projectRoot, "content", "articles", "welcome.json");
@@ -77,7 +117,7 @@ export async function runInit(options, log) {
77
117
  published: true,
78
118
  summary: "First ContentRail entry.",
79
119
  body: "Edit this JSON or use the ContentRail editor.",
80
- }, null, 2)}\n`, { force: options.force });
120
+ }, null, 2)}\n`, { force });
81
121
  (entryResult === "written" ? written : skipped).push("content/articles/welcome.json");
82
122
  if (withEditor) {
83
123
  const editorResult = await writeFileSafe(path.join(options.projectRoot, "contentrail.editor.json"), `${JSON.stringify({
@@ -124,15 +164,15 @@ export async function runInit(options, log) {
124
164
  ],
125
165
  },
126
166
  ],
127
- }, null, 2)}\n`, { force: options.force });
167
+ }, null, 2)}\n`, { force });
128
168
  (editorResult === "written" ? written : skipped).push("contentrail.editor.json");
129
169
  }
130
170
  if (framework === "static" || framework === "next") {
131
- const htmlResult = await writeFileSafe(path.join(options.projectRoot, "admin/index.html"), ADMIN_HTML, { force: options.force });
171
+ const htmlResult = await writeFileSafe(path.join(options.projectRoot, "admin/index.html"), ADMIN_HTML, { force });
132
172
  (htmlResult === "written" ? written : skipped).push("admin/index.html");
133
- const mainResult = await writeFileSafe(path.join(options.projectRoot, "admin/main.ts"), ADMIN_MAIN, { force: options.force });
173
+ const mainResult = await writeFileSafe(path.join(options.projectRoot, "admin/main.ts"), ADMIN_MAIN, { force });
134
174
  (mainResult === "written" ? written : skipped).push("admin/main.ts");
135
- const nextAdmin = await scaffoldNextAdmin(options.projectRoot, options.force);
175
+ const nextAdmin = await scaffoldNextAdmin(options.projectRoot, force);
136
176
  written.push(...nextAdmin.written);
137
177
  skipped.push(...nextAdmin.skipped);
138
178
  }
@@ -140,11 +180,11 @@ export async function runInit(options, log) {
140
180
  const importPath = framework === "astro"
141
181
  ? "../../src/contentrail/config"
142
182
  : "../../content/config";
143
- const apiResult = await writeFileSafe(path.join(options.projectRoot, "functions/api/[[path]].ts"), pagesApiSource(importPath), { force: options.force });
183
+ const apiResult = await writeFileSafe(path.join(options.projectRoot, "functions/api/[[path]].ts"), pagesApiSource(importPath), { force });
144
184
  (apiResult === "written" ? written : skipped).push("functions/api/[[path]].ts");
145
- const middlewareResult = await writeFileSafe(path.join(options.projectRoot, "functions/_middleware.ts"), PAGES_MIDDLEWARE, { force: options.force });
185
+ const middlewareResult = await writeFileSafe(path.join(options.projectRoot, "functions/_middleware.ts"), PAGES_MIDDLEWARE, { force });
146
186
  (middlewareResult === "written" ? written : skipped).push("functions/_middleware.ts");
147
- const varsResult = await writeFileSafe(path.join(options.projectRoot, ".dev.vars.example"), DEV_VARS_EXAMPLE, { force: options.force });
187
+ const varsResult = await writeFileSafe(path.join(options.projectRoot, ".dev.vars.example"), DEV_VARS_EXAMPLE, { force });
148
188
  (varsResult === "written" ? written : skipped).push(".dev.vars.example");
149
189
  }
150
190
  log.info(`ContentRail initialized for ${framework}.`);
@@ -156,9 +196,34 @@ export async function runInit(options, log) {
156
196
  .map((item) => ` - ${item}`)
157
197
  .join("\n")}`);
158
198
  }
159
- log.info(framework === "next" || framework === "static"
160
- ? nextAdminInstallHint(framework)
161
- : "Next: npm install @contentrail/core @contentrail/editor @contentrail/cloudflare @contentrail/publisher preact@^10.26.0 zod@^4.6.7. Export CF_API_TOKEN. Then `contentrail connect --confirm --yes` and `contentrail deploy`. Protect /admin with Cloudflare Access.");
199
+ if (shouldInstall) {
200
+ if (options.installDeps === undefined) {
201
+ log.error("Package install was requested but no installer is available. Re-run without --install or use the interactive CLI.");
202
+ return ExitCode.Failure;
203
+ }
204
+ const plan = resolveInstallPlan(framework, CLI_VERSION);
205
+ const installResult = await options.installDeps({
206
+ projectRoot: options.projectRoot,
207
+ plan,
208
+ dryRun: false,
209
+ });
210
+ if (!installResult.ok) {
211
+ log.error(installResult.detail);
212
+ return ExitCode.Failure;
213
+ }
214
+ log.info(installResult.detail);
215
+ if (options.interactive === true) {
216
+ options.prompts?.outro("Setup complete. Export CF_API_TOKEN, then run `contentrail` → Connect.");
217
+ }
218
+ }
219
+ else {
220
+ log.info(framework === "next" || framework === "static"
221
+ ? nextAdminInstallHint(framework)
222
+ : "Next: run `contentrail init --install` (or the interactive setup) to add packages, or install @contentrail/core @contentrail/editor @contentrail/cloudflare @contentrail/publisher preact@^10.26.0 zod@^4.6.7 manually. Export CF_API_TOKEN. Then `contentrail connect` and `contentrail deploy`. Protect /admin with Cloudflare Access.");
223
+ if (options.interactive === true) {
224
+ options.prompts?.outro("Files ready. Re-run setup with install, or `contentrail init --install`.");
225
+ }
226
+ }
162
227
  return ExitCode.Success;
163
228
  }
164
229
  const ADMIN_HTML = `<!doctype html>
@@ -201,37 +266,47 @@ mountAdmin({
201
266
  const DEV_VARS_EXAMPLE = `# Copy to .dev.vars (gitignored). Never commit secrets.
202
267
  # Do not use PUBLIC_* or VITE_* for secrets.
203
268
 
204
- CONTENTRAIL_ACCESS_TEAM_DOMAIN=
205
- CONTENTRAIL_ACCESS_AUD=
206
- CONTENTRAIL_SITE_ID=
269
+ # Default: username/password admin (no Zero Trust required)
270
+ CONTENTRAIL_ADMIN_USERNAME=admin
271
+ CONTENTRAIL_ADMIN_PASSWORD=
272
+ CONTENTRAIL_SESSION_SECRET=
273
+
274
+ CONTENTRAIL_SITE_ID=site
207
275
  CONTENTRAIL_GIT_OWNER=
208
276
  CONTENTRAIL_GIT_REPO=
209
277
  CONTENTRAIL_GIT_BRANCH=main
210
278
  CONTENTRAIL_CONTENT_ROOT=content
211
- CONTENTRAIL_ADMIN_ORIGIN=http://localhost:4321
279
+ CONTENTRAIL_ADMIN_ORIGIN=http://localhost:8788
212
280
  CONTENTRAIL_GITHUB_TOKEN=
213
281
  `;
214
282
  const PAGES_MIDDLEWARE = `/**
215
- * Rejects unauthenticated API calls early.
216
- * Static /admin HTML is NOT covered — configure Cloudflare Access on /admin*.
283
+ * Early reject for /api without session cookie, Bearer, or Access JWT.
284
+ * /api/login and /api/health stay public.
217
285
  */
218
286
  export const onRequest: PagesFunction = async (context) => {
219
287
  const url = new URL(context.request.url);
220
288
  if (
221
289
  url.pathname.startsWith("/api/") &&
222
290
  url.pathname !== "/api/health" &&
291
+ url.pathname !== "/api/login" &&
223
292
  context.request.method !== "OPTIONS"
224
293
  ) {
225
294
  const access = context.request.headers.get("Cf-Access-Jwt-Assertion");
226
295
  const authorization = context.request.headers.get("Authorization");
296
+ const cookie = context.request.headers.get("Cookie") ?? "";
227
297
  const hasBearer =
228
298
  authorization !== null && /^Bearer\\s+\\S+/i.test(authorization);
229
- if ((access === null || access.trim() === "") && !hasBearer) {
299
+ const hasSession = /(?:^|;\\s*)contentrail_session=/.test(cookie);
300
+ if (
301
+ (access === null || access.trim() === "") &&
302
+ !hasBearer &&
303
+ !hasSession
304
+ ) {
230
305
  return new Response(
231
306
  JSON.stringify({
232
307
  error: {
233
308
  code: "MISSING_CREDENTIAL",
234
- message: "Missing Access JWT credential.",
309
+ message: "Missing admin session. Sign in at /admin.",
235
310
  },
236
311
  }),
237
312
  { status: 401, headers: { "content-type": "application/json" } },
@@ -244,11 +319,12 @@ export const onRequest: PagesFunction = async (context) => {
244
319
  function pagesApiSource(collectionsImport) {
245
320
  return `/**
246
321
  * ContentRail Pages Functions API. Server-only.
247
- * Bind secrets in Pages / .dev.vars — never PUBLIC_* or VITE_*.
322
+ * Default auth: username/password. Cloudflare Access is optional.
248
323
  */
249
324
  import {
250
325
  createCloudflareAccessAuthenticator,
251
326
  createPagesSiteHandler,
327
+ createPasswordAuthenticator,
252
328
  createSiteAuthorizer,
253
329
  } from "@contentrail/cloudflare";
254
330
  import {
@@ -259,8 +335,11 @@ import {
259
335
  import { articles } from "${collectionsImport}";
260
336
 
261
337
  interface Env {
262
- CONTENTRAIL_ACCESS_TEAM_DOMAIN: string;
263
- CONTENTRAIL_ACCESS_AUD: string;
338
+ CONTENTRAIL_ADMIN_USERNAME?: string;
339
+ CONTENTRAIL_ADMIN_PASSWORD?: string;
340
+ CONTENTRAIL_SESSION_SECRET?: string;
341
+ CONTENTRAIL_ACCESS_TEAM_DOMAIN?: string;
342
+ CONTENTRAIL_ACCESS_AUD?: string;
264
343
  CONTENTRAIL_SITE_ID: string;
265
344
  CONTENTRAIL_GIT_OWNER: string;
266
345
  CONTENTRAIL_GIT_REPO: string;
@@ -272,12 +351,43 @@ interface Env {
272
351
 
273
352
  export const onRequest: PagesFunction<Env> = async (context) => {
274
353
  const env = context.env;
354
+ const passwordReady =
355
+ Boolean(env.CONTENTRAIL_ADMIN_USERNAME?.trim()) &&
356
+ Boolean(env.CONTENTRAIL_ADMIN_PASSWORD) &&
357
+ Boolean(env.CONTENTRAIL_SESSION_SECRET?.trim());
358
+ const accessReady =
359
+ Boolean(env.CONTENTRAIL_ACCESS_TEAM_DOMAIN?.trim()) &&
360
+ Boolean(env.CONTENTRAIL_ACCESS_AUD?.trim());
361
+ const passwordAuth = passwordReady
362
+ ? {
363
+ username: env.CONTENTRAIL_ADMIN_USERNAME!.trim(),
364
+ password: env.CONTENTRAIL_ADMIN_PASSWORD!,
365
+ sessionSecret: env.CONTENTRAIL_SESSION_SECRET!.trim(),
366
+ }
367
+ : undefined;
368
+ const authenticator = passwordReady
369
+ ? createPasswordAuthenticator(passwordAuth!)
370
+ : accessReady
371
+ ? createCloudflareAccessAuthenticator({
372
+ teamDomain: env.CONTENTRAIL_ACCESS_TEAM_DOMAIN!,
373
+ audience: env.CONTENTRAIL_ACCESS_AUD!,
374
+ })
375
+ : {
376
+ async authenticate() {
377
+ return {
378
+ ok: false as const,
379
+ status: 401 as const,
380
+ code: "KEY_UNAVAILABLE" as const,
381
+ message:
382
+ "Configure CONTENTRAIL_ADMIN_USERNAME/PASSWORD/SESSION_SECRET or Cloudflare Access.",
383
+ };
384
+ },
385
+ };
386
+
275
387
  const handler = createPagesSiteHandler({
276
388
  siteId: env.CONTENTRAIL_SITE_ID,
277
- authenticator: createCloudflareAccessAuthenticator({
278
- teamDomain: env.CONTENTRAIL_ACCESS_TEAM_DOMAIN,
279
- audience: env.CONTENTRAIL_ACCESS_AUD,
280
- }),
389
+ authenticator,
390
+ ...(passwordAuth !== undefined ? { passwordAuth } : {}),
281
391
  authorizer: createSiteAuthorizer({
282
392
  sites: {
283
393
  [env.CONTENTRAIL_SITE_ID]: {
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,cAAc,GAEf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,0BAA0B,EAC1B,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAY9B,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,OAAoB,EACpB,GAAW;IAEX,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC;QAC9C,GAAG,CAAC,KAAK,CAAC,oCAAoC,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;QACzE,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC1B,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACvD,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,GAAG,CAAC,KAAK,CACP,4HAA4H,CAC7H,CAAC;QACF,OAAO,QAAQ,CAAC,MAAM,CAAC;IACzB,CAAC;IAED,MAAM,QAAQ,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC;IACjD,MAAM,SAAS,GACb,OAAO,CAAC,SAAS,KAAK,OAAO;QAC7B,OAAO,CAAC,SAAS,KAAK,MAAM;QAC5B,OAAO,CAAC,SAAS,KAAK,MAAM;QAC5B,OAAO,CAAC,SAAS,KAAK,QAAQ;QAC5B,CAAC,CAAC,OAAO,CAAC,SAAS;QACnB,CAAC,CAAC,QAAQ,KAAK,SAAS;YACtB,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,QAAQ,CAAC;IAEjB,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACnD,GAAG,CAAC,IAAI,CACN,SAAS,KAAK,MAAM;YAClB,CAAC,CAAC,mMAAmM;YACrM,CAAC,CAAC,2JAA2J,CAChK,CAAC;IACJ,CAAC;IAED,MAAM,eAAe,GACnB,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,mBAAmB,CAAC;IAE5E,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,KAAK,KAAK,CAAC;IAChD,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,KAAK,KAAK,CAAC;IAEtD,MAAM,MAAM,GAA6B;QACvC,GAAG,cAAc;QACjB,SAAS;QACT,WAAW,EAAE,eAAe;QAC5B,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,yBAAyB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnE,CAAC;IAEF,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAa;QACxB,gBAAgB;QAChB,eAAe;QACf,+BAA+B;KAChC,CAAC;IACF,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,eAAe,EAAE,GAAG,gBAAgB,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CACV,2BAA2B,EAC3B,0BAA0B,EAC1B,mBAAmB,CACpB,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,GAAG,CAAC,IAAI,CAAC,iDAAiD,SAAS,GAAG,CAAC,CAAC;QACxE,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC1B,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACnC,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC1B,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,aAAa,CACtC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,gBAAgB,CAAC,EAChD,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EACtC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CACzB,CAAC;IACF,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAExE,MAAM,gBAAgB,GAAG,sBAAsB,EAAE,CAAC;IAClD,MAAM,gBAAgB,GAAG,MAAM,aAAa,CAC1C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,EAC/C,gBAAgB,EAChB,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CACzB,CAAC;IACF,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAE3E,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IACvE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAC3B,OAAO,CAAC,WAAW,EACnB,SAAS,EACT,UAAU,EACV,cAAc,CACf,CAAC;IACF,MAAM,WAAW,GAAG,MAAM,aAAa,CACrC,WAAW,EACX,GAAG,IAAI,CAAC,SAAS,CACf;QACE,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,0BAA0B;QACnC,IAAI,EAAE,+CAA+C;KACtD,EACD,IAAI,EACJ,CAAC,CACF,IAAI,EACL,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CACzB,CAAC;IACF,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAClD,+BAA+B,CAChC,CAAC;IAEF,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,MAAM,aAAa,CACtC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,yBAAyB,CAAC,EACzD,GAAG,IAAI,CAAC,SAAS,CACf;YACE,WAAW,EAAE;gBACX;oBACE,IAAI,EAAE,UAAU;oBAChB,KAAK,EAAE,UAAU;oBACjB,UAAU,EAAE,OAAO;oBACnB,MAAM,EAAE;wBACN;4BACE,IAAI,EAAE,OAAO;4BACb,KAAK,EAAE,OAAO;4BACd,MAAM,EAAE,MAAM;4BACd,QAAQ,EAAE,IAAI;4BACd,KAAK,EAAE,EAAE;yBACV;wBACD;4BACE,IAAI,EAAE,MAAM;4BACZ,KAAK,EAAE,MAAM;4BACb,MAAM,EAAE,MAAM;4BACd,QAAQ,EAAE,IAAI;4BACd,KAAK,EAAE,EAAE;yBACV;wBACD;4BACE,IAAI,EAAE,WAAW;4BACjB,KAAK,EAAE,WAAW;4BAClB,MAAM,EAAE,SAAS;4BACjB,KAAK,EAAE,EAAE;yBACV;wBACD;4BACE,IAAI,EAAE,SAAS;4BACf,KAAK,EAAE,SAAS;4BAChB,MAAM,EAAE,UAAU;4BAClB,QAAQ,EAAE,IAAI;4BACd,KAAK,EAAE,EAAE;yBACV;wBACD;4BACE,IAAI,EAAE,MAAM;4BACZ,KAAK,EAAE,MAAM;4BACb,MAAM,EAAE,UAAU;4BAClB,QAAQ,EAAE,IAAI;4BACd,KAAK,EAAE,EAAE;yBACV;qBACF;iBACF;aACF;SACF,EACD,IAAI,EACJ,CAAC,CACF,IAAI,EACL,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CACzB,CAAC;QACF,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CACnD,yBAAyB,CAC1B,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACnD,MAAM,UAAU,GAAG,MAAM,aAAa,CACpC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,kBAAkB,CAAC,EAClD,UAAU,EACV,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CACzB,CAAC;QACF,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACxE,MAAM,UAAU,GAAG,MAAM,aAAa,CACpC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,EAC/C,UAAU,EACV,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CACzB,CAAC;QACF,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACrE,MAAM,SAAS,GAAG,MAAM,iBAAiB,CACvC,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,KAAK,CACd,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,UAAU,GACd,SAAS,KAAK,OAAO;YACnB,CAAC,CAAC,8BAA8B;YAChC,CAAC,CAAC,sBAAsB,CAAC;QAC7B,MAAM,SAAS,GAAG,MAAM,aAAa,CACnC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,2BAA2B,CAAC,EAC3D,cAAc,CAAC,UAAU,CAAC,EAC1B,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CACzB,CAAC;QACF,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAChD,2BAA2B,CAC5B,CAAC;QACF,MAAM,gBAAgB,GAAG,MAAM,aAAa,CAC1C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,0BAA0B,CAAC,EAC1D,gBAAgB,EAChB,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CACzB,CAAC;QACF,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CACvD,0BAA0B,CAC3B,CAAC;QACF,MAAM,UAAU,GAAG,MAAM,aAAa,CACpC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,mBAAmB,CAAC,EACnD,gBAAgB,EAChB,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CACzB,CAAC;QACF,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC3E,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,+BAA+B,SAAS,GAAG,CAAC,CAAC;IACtD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,GAAG,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,GAAG,CAAC,IAAI,CACN,8DAA8D,OAAO;aAClE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC;aAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAC;IACJ,CAAC;IACD,GAAG,CAAC,IAAI,CACN,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,QAAQ;QAC5C,CAAC,CAAC,oBAAoB,CAAC,SAAS,CAAC;QACjC,CAAC,CAAC,qQAAqQ,CAC1Q,CAAC;IACF,OAAO,QAAQ,CAAC,OAAO,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,GAAG;;;;;;;;;;;;;CAalB,CAAC;AAEF,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;CAsBlB,CAAC;AAEF,MAAM,gBAAgB,GAAG;;;;;;;;;;;;CAYxB,CAAC;AAEF,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BxB,CAAC;AAEF,SAAS,cAAc,CAAC,iBAAyB;IAC/C,OAAO;;;;;;;;;;;;;;4BAcmB,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiD5C,CAAC;AACF,CAAC;AAED,SAAS,sBAAsB;IAC7B,OAAO;;;;;;;;;;;;;CAaR,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { InstallPlan } from "../interactive/types.js";
2
+ export type InstallFramework = "astro" | "vite" | "next" | "static";
3
+ /**
4
+ * Packages the consumer site needs after `contentrail init`.
5
+ * The developer installs `@contentrail/cli` only; init installs the rest.
6
+ */
7
+ export declare function resolveInstallPlan(framework: InstallFramework, version: string): InstallPlan;
8
+ //# sourceMappingURL=plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/install/plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEpE;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,gBAAgB,EAC3B,OAAO,EAAE,MAAM,GACd,WAAW,CAuBb"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Packages the consumer site needs after `contentrail init`.
3
+ * The developer installs `@contentrail/cli` only; init installs the rest.
4
+ */
5
+ export function resolveInstallPlan(framework, version) {
6
+ const pin = (name) => `${name}@${version}`;
7
+ const dependencies = [
8
+ pin("@contentrail/core"),
9
+ pin("@contentrail/editor"),
10
+ pin("@contentrail/publisher"),
11
+ pin("@contentrail/cloudflare"),
12
+ "preact@^10.26.0",
13
+ "zod@^4.6.7",
14
+ ];
15
+ const devDependencies = [];
16
+ if (framework === "astro") {
17
+ dependencies.push(pin("@contentrail/astro"), pin("@contentrail/reader"));
18
+ }
19
+ else if (framework === "vite") {
20
+ dependencies.push(pin("@contentrail/vite"), pin("@contentrail/reader"));
21
+ }
22
+ else {
23
+ // Next / generic static: Vite builds /admin into public/admin.
24
+ dependencies.push(pin("@contentrail/reader"));
25
+ devDependencies.push("vite@^8.3.5");
26
+ }
27
+ return { dependencies, devDependencies };
28
+ }
29
+ //# sourceMappingURL=plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/install/plan.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAA2B,EAC3B,OAAe;IAEf,MAAM,GAAG,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;IAC3D,MAAM,YAAY,GAAG;QACnB,GAAG,CAAC,mBAAmB,CAAC;QACxB,GAAG,CAAC,qBAAqB,CAAC;QAC1B,GAAG,CAAC,wBAAwB,CAAC;QAC7B,GAAG,CAAC,yBAAyB,CAAC;QAC9B,iBAAiB;QACjB,YAAY;KACb,CAAC;IACF,MAAM,eAAe,GAAa,EAAE,CAAC;IAErC,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QAC1B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC3E,CAAC;SAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QAChC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC1E,CAAC;SAAM,CAAC;QACN,+DAA+D;QAC/D,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC9C,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { InstallDepsFn } from "../interactive/types.js";
2
+ export declare function createPackageInstallRunner(options?: {
3
+ readonly env?: NodeJS.ProcessEnv;
4
+ }): InstallDepsFn;
5
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/install/run.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,yBAAyB,CAAC;AAmC5E,wBAAgB,0BAA0B,CAAC,OAAO,CAAC,EAAE;IACnD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAClC,GAAG,aAAa,CAiEhB"}
@@ -0,0 +1,80 @@
1
+ import { detectPackageManager } from "../detect/framework.js";
2
+ import { runCommand } from "../util/spawn.js";
3
+ function packageManagerArgs(manager, kind, packages) {
4
+ if (manager === "pnpm") {
5
+ return {
6
+ command: "pnpm",
7
+ args: kind === "devDependencies"
8
+ ? ["add", "-D", ...packages]
9
+ : ["add", ...packages],
10
+ };
11
+ }
12
+ if (manager === "yarn") {
13
+ return {
14
+ command: "yarn",
15
+ args: kind === "devDependencies"
16
+ ? ["add", "-D", ...packages]
17
+ : ["add", ...packages],
18
+ };
19
+ }
20
+ return {
21
+ command: "npm",
22
+ args: kind === "devDependencies"
23
+ ? ["install", "-D", ...packages]
24
+ : ["install", ...packages],
25
+ };
26
+ }
27
+ export function createPackageInstallRunner(options) {
28
+ return async ({ projectRoot, plan, dryRun }) => {
29
+ if (plan.dependencies.length === 0 && plan.devDependencies.length === 0) {
30
+ return { ok: true, skipped: true, detail: "Nothing to install." };
31
+ }
32
+ const detected = await detectPackageManager(projectRoot);
33
+ const manager = detected === "unknown" ? "npm" : detected;
34
+ const lines = [
35
+ ...plan.dependencies.map((pkg) => ` ${pkg}`),
36
+ ...plan.devDependencies.map((pkg) => ` ${pkg} (dev)`),
37
+ ];
38
+ if (dryRun) {
39
+ return {
40
+ ok: true,
41
+ skipped: true,
42
+ detail: `Dry run: would install with ${manager}:\n${lines.join("\n")}`,
43
+ };
44
+ }
45
+ if (plan.dependencies.length > 0) {
46
+ const { command, args } = packageManagerArgs(manager, "dependencies", plan.dependencies);
47
+ const result = await runCommand(command, args, {
48
+ cwd: projectRoot,
49
+ ...(options?.env !== undefined ? { env: options.env } : {}),
50
+ });
51
+ if (result.code !== 0) {
52
+ return {
53
+ ok: false,
54
+ skipped: false,
55
+ detail: `${command} ${args.join(" ")} failed:\n${result.stderr || result.stdout}`,
56
+ };
57
+ }
58
+ }
59
+ if (plan.devDependencies.length > 0) {
60
+ const { command, args } = packageManagerArgs(manager, "devDependencies", plan.devDependencies);
61
+ const result = await runCommand(command, args, {
62
+ cwd: projectRoot,
63
+ ...(options?.env !== undefined ? { env: options.env } : {}),
64
+ });
65
+ if (result.code !== 0) {
66
+ return {
67
+ ok: false,
68
+ skipped: false,
69
+ detail: `${command} ${args.join(" ")} failed:\n${result.stderr || result.stdout}`,
70
+ };
71
+ }
72
+ }
73
+ return {
74
+ ok: true,
75
+ skipped: false,
76
+ detail: `Installed with ${manager}:\n${lines.join("\n")}`,
77
+ };
78
+ };
79
+ }
80
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/install/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { PromptHost } from "./types.js";
2
+ export declare function createClackPromptHost(): PromptHost;
3
+ //# sourceMappingURL=clack-host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clack-host.d.ts","sourceRoot":"","sources":["../../src/interactive/clack-host.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAgB,MAAM,YAAY,CAAC;AAE3D,wBAAgB,qBAAqB,IAAI,UAAU,CA+ClD"}
@@ -0,0 +1,47 @@
1
+ import * as p from "@clack/prompts";
2
+ export function createClackPromptHost() {
3
+ return {
4
+ intro(message) {
5
+ p.intro(message);
6
+ },
7
+ outro(message) {
8
+ p.outro(message);
9
+ },
10
+ note(message, title) {
11
+ p.note(message, title);
12
+ },
13
+ async select(message, options) {
14
+ // @clack Option<T> is incompatible with exactOptionalPropertyTypes for hints.
15
+ const value = await p.select({
16
+ message,
17
+ options: options.map((option) => ({
18
+ value: option.value,
19
+ label: option.label,
20
+ ...(option.hint !== undefined ? { hint: option.hint } : {}),
21
+ })),
22
+ });
23
+ return value;
24
+ },
25
+ async confirm(message, initial = true) {
26
+ return p.confirm({ message, initialValue: initial });
27
+ },
28
+ async text(message, options) {
29
+ return p.text({
30
+ message,
31
+ ...(options?.placeholder !== undefined
32
+ ? { placeholder: options.placeholder }
33
+ : {}),
34
+ ...(options?.initialValue !== undefined
35
+ ? { initialValue: options.initialValue }
36
+ : {}),
37
+ });
38
+ },
39
+ cancel(message = "Cancelled.") {
40
+ p.cancel(message);
41
+ },
42
+ isCancel(value) {
43
+ return p.isCancel(value);
44
+ },
45
+ };
46
+ }
47
+ //# sourceMappingURL=clack-host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clack-host.js","sourceRoot":"","sources":["../../src/interactive/clack-host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAGpC,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,KAAK,CAAC,OAAO;YACX,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC;QACD,KAAK,CAAC,OAAO;YACX,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,KAAK;YACjB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,KAAK,CAAC,MAAM,CACV,OAAe,EACf,OAAmC;YAEnC,8EAA8E;YAC9E,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC;gBAC3B,OAAO;gBACP,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;oBAChC,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC5D,CAAC,CAAC;aAC8B,CAAC,CAAC;YACrC,OAAO,KAAmB,CAAC;QAC7B,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;YACnC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO;YACzB,OAAO,CAAC,CAAC,IAAI,CAAC;gBACZ,OAAO;gBACP,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,SAAS;oBACpC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE;oBACtC,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,OAAO,EAAE,YAAY,KAAK,SAAS;oBACrC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE;oBACxC,CAAC,CAAC,EAAE,CAAC;aACR,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,OAAO,GAAG,YAAY;YAC3B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpB,CAAC;QACD,QAAQ,CAAC,KAAK;YACZ,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { PromptHost } from "./types.js";
2
+ export interface ConnectWizardAccount {
3
+ readonly id: string;
4
+ readonly name: string;
5
+ }
6
+ export interface ConnectWizardResult {
7
+ readonly cancelled: boolean;
8
+ readonly accountId?: string;
9
+ readonly projectName?: string;
10
+ readonly confirmApply: boolean;
11
+ }
12
+ export declare function promptConnectOptions(host: PromptHost, input: {
13
+ readonly accounts: readonly ConnectWizardAccount[];
14
+ readonly defaultAccountId?: string;
15
+ readonly defaultProjectName: string;
16
+ }): Promise<ConnectWizardResult>;
17
+ //# sourceMappingURL=connect-wizard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-wizard.d.ts","sourceRoot":"","sources":["../../src/interactive/connect-wizard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE;IACL,QAAQ,CAAC,QAAQ,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACnD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC,GACA,OAAO,CAAC,mBAAmB,CAAC,CAmD9B"}
@@ -0,0 +1,41 @@
1
+ export async function promptConnectOptions(host, input) {
2
+ let accountId = input.defaultAccountId;
3
+ if (accountId === undefined || accountId === "") {
4
+ if (input.accounts.length === 1) {
5
+ accountId = input.accounts[0].id;
6
+ host.note(`${input.accounts[0].name} (${accountId})`, "Cloudflare account");
7
+ }
8
+ else {
9
+ const selected = await host.select("Which Cloudflare account?", input.accounts.map((account) => ({
10
+ value: account.id,
11
+ label: account.name,
12
+ hint: account.id,
13
+ })));
14
+ if (host.isCancel(selected)) {
15
+ host.cancel("Connect cancelled.");
16
+ return { cancelled: true, confirmApply: false };
17
+ }
18
+ accountId = selected;
19
+ }
20
+ }
21
+ const projectName = await host.text("Pages project name", {
22
+ initialValue: input.defaultProjectName,
23
+ placeholder: input.defaultProjectName,
24
+ });
25
+ if (host.isCancel(projectName) || projectName.trim() === "") {
26
+ host.cancel("Connect cancelled.");
27
+ return { cancelled: true, confirmApply: false };
28
+ }
29
+ const confirmApply = await host.confirm("Create or patch this Cloudflare Pages project now?", false);
30
+ if (host.isCancel(confirmApply)) {
31
+ host.cancel("Connect cancelled.");
32
+ return { cancelled: true, confirmApply: false };
33
+ }
34
+ return {
35
+ cancelled: false,
36
+ accountId,
37
+ projectName: projectName.trim(),
38
+ confirmApply,
39
+ };
40
+ }
41
+ //# sourceMappingURL=connect-wizard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-wizard.js","sourceRoot":"","sources":["../../src/interactive/connect-wizard.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAgB,EAChB,KAIC;IAED,IAAI,SAAS,GAAG,KAAK,CAAC,gBAAgB,CAAC;IAEvC,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;QAChD,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CACP,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,SAAS,GAAG,EAC3C,oBAAoB,CACrB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAChC,2BAA2B,EAC3B,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC/B,KAAK,EAAE,OAAO,CAAC,EAAE;gBACjB,KAAK,EAAE,OAAO,CAAC,IAAI;gBACnB,IAAI,EAAE,OAAO,CAAC,EAAE;aACjB,CAAC,CAAC,CACJ,CAAC;YACF,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;gBAClC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;YAClD,CAAC;YACD,SAAS,GAAG,QAAQ,CAAC;QACvB,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;QACxD,YAAY,EAAE,KAAK,CAAC,kBAAkB;QACtC,WAAW,EAAE,KAAK,CAAC,kBAAkB;KACtC,CAAC,CAAC;IACH,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAClC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;IAClD,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CACrC,oDAAoD,EACpD,KAAK,CACN,CAAC;IACF,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAClC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;IAClD,CAAC;IAED,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,SAAS;QACT,WAAW,EAAE,WAAW,CAAC,IAAI,EAAE;QAC/B,YAAY;KACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { DetectedFramework } from "../detect/framework.js";
2
+ import type { PromptHost } from "./types.js";
3
+ export interface InitWizardResult {
4
+ readonly framework: "astro" | "vite" | "next" | "static";
5
+ readonly withEditor: boolean;
6
+ readonly withFunctions: boolean;
7
+ readonly force: boolean;
8
+ readonly install: boolean;
9
+ readonly cancelled: boolean;
10
+ }
11
+ export declare function promptInitOptions(host: PromptHost, detected: DetectedFramework): Promise<InitWizardResult>;
12
+ //# sourceMappingURL=init-wizard.d.ts.map