create-cloudflare 0.0.0-941764d0 → 0.0.0-99032c1e

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/dist/cli.js CHANGED
@@ -52612,7 +52612,9 @@ var require_typescript2 = __commonJS({
52612
52612
  // src/cli.ts
52613
52613
  var cli_exports = {};
52614
52614
  __export(cli_exports, {
52615
- main: () => main
52615
+ C3_DEFAULTS: () => C3_DEFAULTS,
52616
+ main: () => main,
52617
+ parseArgs: () => parseArgs
52616
52618
  });
52617
52619
  module.exports = __toCommonJS(cli_exports);
52618
52620
  var import_haikunator = __toESM(require_dist_node());
@@ -53153,8 +53155,6 @@ var space = (n = 1) => {
53153
53155
  return hidden("\u200A".repeat(n));
53154
53156
  };
53155
53157
  var logRaw = (msg) => {
53156
- if (process.env.VITEST)
53157
- return;
53158
53158
  process.stdout.write(`${msg}
53159
53159
  `);
53160
53160
  };
@@ -54347,174 +54347,165 @@ var logUpdateStderr = createLogUpdate(import_node_process6.default.stderr);
54347
54347
  var grayBar = gray(shapes.bar);
54348
54348
  var blCorner = gray(shapes.corners.bl);
54349
54349
  var leftT = gray(shapes.leftT);
54350
- var textInput = async (opts) => {
54351
- const { renderSubmitted, question, defaultValue, validate, acceptDefault } = opts;
54352
- const helpText = opts.helpText || ``;
54353
- const format3 = opts.format || ((val) => val);
54354
- const prompt = new oD({
54355
- defaultValue,
54356
- validate,
54357
- render() {
54358
- let body = "";
54359
- switch (this.state) {
54360
- case "initial":
54361
- body += `${blCorner} ${bold(question)} ${dim(helpText)}
54362
- `;
54363
- body += `${space(2)}${gray(format3(defaultValue))}
54364
- `;
54365
- break;
54366
- case "active":
54367
- body += `${blCorner} ${bold(question)} ${dim(helpText)}
54368
- `;
54369
- body += `${space(2)}${format3(this.value || dim(defaultValue))}
54370
- `;
54371
- break;
54372
- case "submit":
54373
- body += `${leftT} ${question}
54374
- `;
54375
- body += `${grayBar} ${renderSubmitted(
54376
- format3(this.value)
54377
- )}
54378
- ${grayBar}`;
54379
- break;
54380
- case "error":
54381
- body += `${leftT} ${status.error} ${dim(this.error)}
54382
- `;
54383
- body += `${grayBar}
54384
- `;
54385
- body += `${blCorner} ${question} ${dim(helpText)}
54386
- `;
54387
- body += `${space(2)}${format3(this.value)}
54388
- `;
54389
- break;
54390
- default:
54391
- break;
54392
- }
54393
- return body;
54394
- }
54395
- });
54396
- let value;
54397
- if (acceptDefault) {
54398
- logRaw(`${leftT} ${question}`);
54399
- logRaw(`${grayBar} ${renderSubmitted(defaultValue)}
54400
- ${grayBar}`);
54401
- value = defaultValue;
54402
- validate?.(value);
54403
- } else {
54404
- value = await prompt.prompt();
54405
- if (eD(value)) {
54406
- cancel("Operation cancelled.");
54407
- process.exit(0);
54408
- }
54409
- }
54350
+ var processArgument = async (args, name, promptConfig) => {
54351
+ let value = args[name];
54352
+ const renderSubmitted = getRenderers(promptConfig).submit;
54353
+ if (value !== void 0) {
54354
+ promptConfig.validate?.(value);
54355
+ const lines = renderSubmitted({ value });
54356
+ logRaw(lines.join("\n"));
54357
+ return value;
54358
+ }
54359
+ value = await inputPrompt(promptConfig);
54410
54360
  return value;
54411
54361
  };
54412
- var selectInput = async (opts) => {
54413
- const { question, options, renderSubmitted, defaultValue, acceptDefault } = opts;
54414
- const helpText = opts.helpText || ``;
54415
- const prompt = new ED({
54416
- options,
54417
- initialValue: defaultValue ?? options[0].value,
54418
- render() {
54419
- const renderOption = (opt, i) => {
54420
- const { label } = opt;
54421
- const active = i === this.cursor;
54422
- const text = active ? blue.underline(label) : dim(label);
54423
- const indicator = active ? blue(shapes.radioActive) : dim(shapes.radioInactive);
54424
- return `${space(2)}${indicator} ${text}`;
54425
- };
54426
- let body = ``;
54427
- switch (this.state) {
54428
- case "submit":
54429
- body += `${leftT} ${question}
54430
- `;
54431
- body += `${grayBar} ${renderSubmitted(options[this.cursor])}`;
54432
- body += `
54433
- ${grayBar}`;
54434
- break;
54435
- default:
54436
- body += `${blCorner} ${bold(question)} ${dim(helpText)}
54437
- `;
54438
- body += `${options.map(renderOption).join(`
54439
- `)}
54440
- `;
54441
- break;
54362
+ var inputPrompt = async (promptConfig) => {
54363
+ const renderers = getRenderers(promptConfig);
54364
+ let prompt;
54365
+ const dispatchRender = (props) => {
54366
+ const renderedLines = renderers[props.state](props);
54367
+ return renderedLines.join("\n");
54368
+ };
54369
+ if (promptConfig.type === "select") {
54370
+ prompt = new ED({
54371
+ ...promptConfig,
54372
+ options: promptConfig.options,
54373
+ initialValue: String(promptConfig.defaultValue),
54374
+ render() {
54375
+ return dispatchRender(this);
54442
54376
  }
54443
- return body;
54444
- }
54445
- });
54446
- let value;
54447
- if (acceptDefault) {
54448
- logRaw(`${leftT} ${question}`);
54449
- logRaw(
54450
- `${grayBar} ${renderSubmitted({
54451
- label: defaultValue,
54452
- value: defaultValue
54453
- })}`
54454
- );
54455
- logRaw(`${grayBar}`);
54456
- value = defaultValue;
54377
+ });
54378
+ } else if (promptConfig.type === "confirm") {
54379
+ prompt = new sD({
54380
+ ...promptConfig,
54381
+ initialValue: Boolean(promptConfig.defaultValue),
54382
+ active: promptConfig.activeText || "",
54383
+ inactive: promptConfig.inactiveText || "",
54384
+ render() {
54385
+ return dispatchRender(this);
54386
+ }
54387
+ });
54457
54388
  } else {
54458
- value = await prompt.prompt();
54459
- if (eD(value)) {
54460
- cancel("Operation cancelled.");
54461
- process.exit(0);
54462
- }
54389
+ prompt = new oD({
54390
+ ...promptConfig,
54391
+ defaultValue: String(promptConfig.defaultValue),
54392
+ render() {
54393
+ return dispatchRender(this);
54394
+ }
54395
+ });
54463
54396
  }
54464
- return value;
54397
+ const input = await prompt.prompt();
54398
+ if (eD(input)) {
54399
+ cancel("Operation cancelled.");
54400
+ process.exit(0);
54401
+ }
54402
+ return input;
54403
+ };
54404
+ var renderSubmit = (config14, value) => {
54405
+ const { question, label } = config14;
54406
+ const content = config14.type === "confirm" ? `${grayBar} ${brandColor(value)} ${dim(label)}` : `${grayBar} ${brandColor(label)} ${dim(value)}`;
54407
+ return [`${leftT} ${question}`, content, `${grayBar}`];
54408
+ };
54409
+ var handleCancel = () => {
54410
+ cancel("Operation cancelled.");
54411
+ process.exit(0);
54465
54412
  };
54466
- var confirmInput = async (opts) => {
54413
+ var getRenderers = (config14) => {
54414
+ switch (config14.type) {
54415
+ case "select":
54416
+ return getSelectRenderers(config14);
54417
+ case "confirm":
54418
+ return getConfirmRenderers(config14);
54419
+ case "text":
54420
+ return getTextRenderers(config14);
54421
+ }
54422
+ };
54423
+ var getTextRenderers = (config14) => {
54467
54424
  const {
54468
- activeText,
54469
- inactiveText,
54425
+ defaultValue,
54470
54426
  question,
54471
- renderSubmitted,
54472
- defaultValue = true,
54473
- acceptDefault
54474
- } = opts;
54475
- const helpText = opts.helpText || `(y/n)`;
54427
+ helpText: _helpText,
54428
+ format: _format
54429
+ } = config14;
54430
+ const helpText = _helpText ?? "";
54431
+ const format3 = _format ?? ((val) => String(val));
54432
+ return {
54433
+ initial: () => [
54434
+ `${blCorner} ${bold(question)} ${dim(helpText)}`,
54435
+ `${space(2)}${gray(format3(defaultValue))}`,
54436
+ ``
54437
+ // extra line for readability
54438
+ ],
54439
+ active: ({ value }) => [
54440
+ `${blCorner} ${bold(question)} ${dim(helpText)}`,
54441
+ `${space(2)}${format3(value || dim(defaultValue))}`,
54442
+ ``
54443
+ // extra line for readability
54444
+ ],
54445
+ error: ({ value, error }) => [
54446
+ `${leftT} ${status.error} ${dim(error)}`,
54447
+ `${grayBar}`,
54448
+ `${blCorner} ${question} ${dim(helpText)}`,
54449
+ `${space(2)}${format3(value)}`,
54450
+ ``
54451
+ // extra line for readability
54452
+ ],
54453
+ submit: ({ value }) => renderSubmit(config14, format3(value)),
54454
+ cancel: handleCancel
54455
+ };
54456
+ };
54457
+ var getSelectRenderers = (config14) => {
54458
+ const { options, question, helpText: _helpText } = config14;
54459
+ const helpText = _helpText ?? "";
54460
+ const defaultRenderer = ({ cursor }) => {
54461
+ const renderOption = (opt, i) => {
54462
+ const { label: optionLabel } = opt;
54463
+ const active = i === cursor;
54464
+ const text = active ? blue.underline(optionLabel) : dim(optionLabel);
54465
+ const indicator = active ? blue(shapes.radioActive) : dim(shapes.radioInactive);
54466
+ return `${space(2)}${indicator} ${text}`;
54467
+ };
54468
+ return [
54469
+ `${blCorner} ${bold(question)} ${dim(helpText)}`,
54470
+ `${options.map(renderOption).join(`
54471
+ `)}`,
54472
+ ``
54473
+ // extra line for readability
54474
+ ];
54475
+ };
54476
+ return {
54477
+ initial: defaultRenderer,
54478
+ active: defaultRenderer,
54479
+ confirm: defaultRenderer,
54480
+ error: defaultRenderer,
54481
+ submit: ({ value }) => renderSubmit(
54482
+ config14,
54483
+ options.find((o2) => o2.value === value)?.label
54484
+ ),
54485
+ cancel: handleCancel
54486
+ };
54487
+ };
54488
+ var getConfirmRenderers = (config14) => {
54489
+ const { activeText, inactiveText, question, helpText: _helpText } = config14;
54490
+ const helpText = _helpText ?? "";
54476
54491
  const active = activeText || "Yes";
54477
54492
  const inactive = inactiveText || "No";
54478
- const prompt = new sD({
54479
- active,
54480
- inactive,
54481
- initialValue: defaultValue,
54482
- render() {
54483
- const yesColor = this.value ? blue : dim;
54484
- const noColor = this.value ? dim : blue;
54485
- let body = ``;
54486
- switch (this.state) {
54487
- case "submit":
54488
- body += `${leftT} ${question}
54489
- `;
54490
- body += `${grayBar} ${renderSubmitted(this.value)}`;
54491
- body += `
54492
- ${grayBar}`;
54493
- break;
54494
- default:
54495
- body += `${blCorner} ${bold(question)} ${dim(helpText)}
54496
- `;
54497
- body += `${space(2)}${yesColor(active)} / ${noColor(inactive)}
54498
- `;
54499
- break;
54500
- }
54501
- return body;
54502
- }
54503
- });
54504
- let value;
54505
- if (acceptDefault) {
54506
- logRaw(`${leftT} ${question}`);
54507
- logRaw(`${grayBar} ${renderSubmitted(defaultValue)}`);
54508
- logRaw(`${grayBar}`);
54509
- value = defaultValue;
54510
- } else {
54511
- value = Boolean(await prompt.prompt());
54512
- if (eD(value)) {
54513
- cancel("Operation cancelled.");
54514
- process.exit(0);
54515
- }
54516
- }
54517
- return value;
54493
+ const defaultRenderer = ({ value }) => {
54494
+ const yesColor = value ? blue : dim;
54495
+ const noColor = value ? dim : blue;
54496
+ return [
54497
+ `${blCorner} ${bold(question)} ${dim(helpText)}`,
54498
+ `${space(2)}${yesColor(active)} / ${noColor(inactive)}`
54499
+ ];
54500
+ };
54501
+ return {
54502
+ initial: defaultRenderer,
54503
+ active: defaultRenderer,
54504
+ confirm: defaultRenderer,
54505
+ error: defaultRenderer,
54506
+ submit: ({ value }) => renderSubmit(config14, value ? "yes" : "no"),
54507
+ cancel: handleCancel
54508
+ };
54518
54509
  };
54519
54510
  var spinner = () => {
54520
54511
  const spinnerFrames = ["\u2524", "\u2518", "\u2534", "\u2514", "\u251C", "\u250C", "\u252C", "\u2510"];
@@ -59419,7 +59410,7 @@ var Yargs = YargsFactory(esm_default);
59419
59410
  var yargs_default = Yargs;
59420
59411
 
59421
59412
  // package.json
59422
- var version = "0.0.0-941764d0";
59413
+ var version = "0.0.0-99032c1e";
59423
59414
 
59424
59415
  // src/common.ts
59425
59416
  var import_fs6 = require("fs");
@@ -59480,15 +59471,14 @@ var runCommand = async (command2, opts = {}) => {
59480
59471
  }
59481
59472
  return printAsyncStatus({
59482
59473
  useSpinner: opts.useSpinner ?? opts.silent,
59483
- startText: opts.startText || command2.join(" "),
59474
+ startText: opts.startText || command2.join(" ").trim(),
59484
59475
  doneText: opts.doneText,
59485
59476
  promise() {
59486
59477
  const [executable, ...args] = command2;
59487
- const squelch = opts.silent || process.env.VITEST;
59488
59478
  const cmd = (0, import_cross_spawn.spawn)(executable, [...args], {
59489
59479
  // TODO: ideally inherit stderr, but npm install uses this for warnings
59490
59480
  // stdio: [ioMode, ioMode, "inherit"],
59491
- stdio: squelch ? "pipe" : "inherit",
59481
+ stdio: opts.silent ? "pipe" : "inherit",
59492
59482
  env: {
59493
59483
  ...process.env,
59494
59484
  ...opts.env
@@ -59496,7 +59486,7 @@ var runCommand = async (command2, opts = {}) => {
59496
59486
  cwd: opts.cwd
59497
59487
  });
59498
59488
  let output = ``;
59499
- if (opts?.captureOutput ?? squelch) {
59489
+ if (opts.captureOutput ?? opts.silent) {
59500
59490
  cmd.stdout?.on("data", (data) => {
59501
59491
  output += data;
59502
59492
  });
@@ -59521,6 +59511,9 @@ var runCommand = async (command2, opts = {}) => {
59521
59511
  }
59522
59512
  }
59523
59513
  });
59514
+ cmd.on("error", (code) => {
59515
+ reject(code);
59516
+ });
59524
59517
  });
59525
59518
  }
59526
59519
  });
@@ -59631,10 +59624,14 @@ var installWrangler = async () => {
59631
59624
  };
59632
59625
  var isLoggedIn = async () => {
59633
59626
  const { npx: npx6 } = detectPackageManager();
59634
- const output = await runCommand(`${npx6} wrangler whoami`, {
59635
- silent: true
59636
- });
59637
- return !/not authenticated/.test(output);
59627
+ try {
59628
+ const output = await runCommand(`${npx6} wrangler whoami`, {
59629
+ silent: true
59630
+ });
59631
+ return /You are logged in/.test(output);
59632
+ } catch (error) {
59633
+ return false;
59634
+ }
59638
59635
  };
59639
59636
  var wranglerLogin = async () => {
59640
59637
  const { npx: npx6 } = detectPackageManager();
@@ -59779,14 +59776,12 @@ var setupProjectDirectory = (args) => {
59779
59776
  };
59780
59777
  var offerToDeploy = async (ctx) => {
59781
59778
  startSection(`Deploy with Cloudflare`, `Step 3 of 3`);
59782
- ctx.args.deploy = await confirmInput({
59779
+ const label = `deploy via \`${npm} run ${ctx.framework?.config.deployCommand ?? "deploy"}\``;
59780
+ ctx.args.deploy = await processArgument(ctx.args, "deploy", {
59781
+ type: "confirm",
59783
59782
  question: "Do you want to deploy your application?",
59784
- renderSubmitted: (value) => `${brandColor(value ? `yes` : `no`)} ${dim(
59785
- `deploying via \`${npm} run ${ctx.framework?.config.deployCommand ?? "deploy"}\``
59786
- )}`,
59787
- defaultValue: ctx.args.deploy ?? (ctx.args.wranglerDefaults ? false : true),
59788
- // if --wrangler-defaults, default to false, otherwise default to true
59789
- acceptDefault: ctx.args.wranglerDefaults
59783
+ label,
59784
+ defaultValue: C3_DEFAULTS.deploy
59790
59785
  });
59791
59786
  if (!ctx.args.deploy)
59792
59787
  return;
@@ -59840,14 +59835,12 @@ var chooseAccount = async (ctx) => {
59840
59835
  label: name,
59841
59836
  value: id
59842
59837
  }));
59843
- accountId = await selectInput({
59838
+ accountId = await inputPrompt({
59839
+ type: "select",
59844
59840
  question: "Which account do you want to use?",
59845
59841
  options: accountOptions,
59846
- renderSubmitted: (option) => {
59847
- return `${brandColor("account")} ${dim(option.label)}`;
59848
- },
59849
- defaultValue: accountOptions[0].value,
59850
- acceptDefault: ctx.args.wranglerDefaults
59842
+ label: "account",
59843
+ defaultValue: accountOptions[0].value
59851
59844
  });
59852
59845
  }
59853
59846
  const accountName = Object.keys(accounts).find(
@@ -59857,6 +59850,7 @@ var chooseAccount = async (ctx) => {
59857
59850
  };
59858
59851
  var printSummary = async (ctx) => {
59859
59852
  const nextSteps = [
59853
+ [`Navigate to the new directory`, `cd ${ctx.project.name}`],
59860
59854
  [
59861
59855
  `Run the development server`,
59862
59856
  `${npm} run ${ctx.framework?.config.devCommand ?? "start"}`
@@ -59919,11 +59913,11 @@ var offerGit = async (ctx) => {
59919
59913
  const insideGitRepo = await isInsideGitRepo(ctx.project.path);
59920
59914
  if (insideGitRepo)
59921
59915
  return;
59922
- ctx.args.git ??= await confirmInput({
59916
+ ctx.args.git = await processArgument(ctx.args, "git", {
59917
+ type: "confirm",
59923
59918
  question: "Do you want to use git for version control?",
59924
- renderSubmitted: (value) => `${brandColor("git")} ${dim(value ? `yes` : `no`)}`,
59925
- defaultValue: true,
59926
- acceptDefault: ctx.args.wranglerDefaults
59919
+ label: "git",
59920
+ defaultValue: C3_DEFAULTS.git
59927
59921
  });
59928
59922
  if (ctx.args.git) {
59929
59923
  await printAsyncStatus({
@@ -59983,6 +59977,24 @@ async function initializeGit(cwd) {
59983
59977
  await runCommand(`git init`, { useSpinner: false, silent: true, cwd });
59984
59978
  }
59985
59979
  }
59980
+ async function getProductionBranch(cwd) {
59981
+ try {
59982
+ const productionBranch = await runCommand(
59983
+ // "git branch --show-current", // git@^2.22
59984
+ "git rev-parse --abbrev-ref HEAD",
59985
+ // git@^1.6.3
59986
+ {
59987
+ silent: true,
59988
+ cwd,
59989
+ useSpinner: false,
59990
+ captureOutput: true
59991
+ }
59992
+ );
59993
+ return productionBranch.trim();
59994
+ } catch (err) {
59995
+ }
59996
+ return "main";
59997
+ }
59986
59998
 
59987
59999
  // src/pages.ts
59988
60000
  var import_path8 = require("path");
@@ -60191,25 +60203,19 @@ var docusaurus_default = config3;
60191
60203
  var { npm: npm4, dlx: dlx4 } = detectPackageManager();
60192
60204
  var generate4 = async (ctx) => {
60193
60205
  const defaultTemplate = "https://github.com/gatsbyjs/gatsby-starter-blog";
60194
- const useTemplate = await confirmInput({
60206
+ const useTemplate = await inputPrompt({
60207
+ type: "confirm",
60195
60208
  question: "Would you like to use a template?",
60196
- renderSubmitted: (value) => {
60197
- const status2 = value ? "yes" : "no";
60198
- return `${brandColor(`template`)} ${status2}`;
60199
- },
60200
- defaultValue: true,
60201
- acceptDefault: false
60209
+ label: "template",
60210
+ defaultValue: true
60202
60211
  });
60203
60212
  let templateUrl = "";
60204
60213
  if (useTemplate) {
60205
- templateUrl = await textInput({
60214
+ templateUrl = await inputPrompt({
60215
+ type: "text",
60206
60216
  question: `Please specify the url of the template you'd like to use`,
60207
- renderSubmitted: (value) => {
60208
- const result = `Using template \`${value}\``;
60209
- return `${brandColor("template")} ${dim(result)}`;
60210
- },
60211
- defaultValue: defaultTemplate,
60212
- acceptDefault: false
60217
+ label: "template",
60218
+ defaultValue: defaultTemplate
60213
60219
  });
60214
60220
  }
60215
60221
  const version2 = getFrameworkVersion(ctx);
@@ -60379,6 +60385,7 @@ var generate7 = async (ctx) => {
60379
60385
  };
60380
60386
  var configure4 = async (ctx) => {
60381
60387
  process.chdir(ctx.project.path);
60388
+ writeFile2("./.node-version", "17");
60382
60389
  await npmInstall();
60383
60390
  };
60384
60391
  var config7 = {
@@ -60386,8 +60393,9 @@ var config7 = {
60386
60393
  configure: configure4,
60387
60394
  displayName: "Nuxt",
60388
60395
  packageScripts: {
60396
+ build: (cmd) => `NITRO_PRESET=cloudflare-pages ${cmd}`,
60389
60397
  "pages:dev": `wrangler pages dev ${compatDateFlag()} --proxy 3000 -- npm run dev`,
60390
- "pages:deploy": `NODE_VERSION=17 npm run generate && wrangler pages deploy ./dist`
60398
+ "pages:deploy": "npm run build && wrangler pages deploy ./dist"
60391
60399
  }
60392
60400
  };
60393
60401
  var nuxt_default = config7;
@@ -60502,7 +60510,7 @@ var config11 = {
60502
60510
  displayName: "Solid",
60503
60511
  packageScripts: {
60504
60512
  "pages:dev": `wrangler pages dev ${compatDateFlag()} --proxy 3000 -- ${npm9} run dev`,
60505
- "pages:deploy": `${npm9} run build build && wrangler pages deploy ./dist/public`
60513
+ "pages:deploy": `${npm9} run build && wrangler pages deploy ./dist/public`
60506
60514
  }
60507
60515
  };
60508
60516
  var solid_default = config11;
@@ -60613,7 +60621,7 @@ var versionMap_default = {
60613
60621
  astro: "3.1.5",
60614
60622
  docusaurus: "2.4.1",
60615
60623
  gatsby: "5.10.0",
60616
- hono: "0.2.0",
60624
+ hono: "0.2.6",
60617
60625
  next: "13.4.2",
60618
60626
  nuxt: "3.4.2",
60619
60627
  qwik: "1.1.x",
@@ -60718,14 +60726,12 @@ var getFrameworkSelection = async (args) => {
60718
60726
  value: key
60719
60727
  })
60720
60728
  );
60721
- const framework = await selectInput({
60729
+ const framework = await processArgument(args, "framework", {
60730
+ type: "select",
60731
+ label: "framework",
60722
60732
  question: "Which development framework do you want to use?",
60723
60733
  options: frameworkOptions,
60724
- renderSubmitted: (option) => {
60725
- return `${brandColor("framework")} ${dim(option.label)}`;
60726
- },
60727
- defaultValue: args.framework ?? "svelte",
60728
- acceptDefault: Boolean(args.framework)
60734
+ defaultValue: C3_DEFAULTS.framework
60729
60735
  });
60730
60736
  framework || crash("A framework must be selected to continue.");
60731
60737
  if (!supportedFramework(framework)) {
@@ -60739,11 +60745,29 @@ var updatePackageScripts = async (ctx) => {
60739
60745
  const { packageScripts } = ctx.framework?.config ?? {};
60740
60746
  if (packageScripts) {
60741
60747
  const s = spinner();
60742
- s.start(`Adding command scripts`, `for development and deployment`);
60748
+ const updatingScripts = Object.entries(packageScripts).filter(
60749
+ ([_3, cmdOrUpdater]) => typeof cmdOrUpdater === "function"
60750
+ ).length > 0;
60751
+ s.start(
60752
+ `${updatingScripts ? "Updating" : "Adding"} command scripts`,
60753
+ "for development and deployment"
60754
+ );
60743
60755
  const pkgJsonPath = (0, import_path8.resolve)("package.json");
60744
60756
  const pkgConfig = readJSON(pkgJsonPath);
60745
- Object.entries(packageScripts).forEach(([target, command2]) => {
60746
- pkgConfig.scripts[target] = command2;
60757
+ Object.entries(packageScripts).forEach(([target, cmdOrUpdater]) => {
60758
+ if (typeof cmdOrUpdater === "string") {
60759
+ const command2 = cmdOrUpdater;
60760
+ pkgConfig.scripts[target] = command2;
60761
+ } else {
60762
+ const existingCommand = pkgConfig.scripts[target];
60763
+ if (!existingCommand) {
60764
+ throw new Error(
60765
+ `Could not find ${target} script to update during ${ctx.framework} setup`
60766
+ );
60767
+ }
60768
+ const updater = cmdOrUpdater;
60769
+ pkgConfig.scripts[target] = updater(existingCommand);
60770
+ }
60747
60771
  });
60748
60772
  writeFile2(pkgJsonPath, JSON.stringify(pkgConfig, null, 2));
60749
60773
  s.stop(`${brandColor("added")} ${dim("commands to `package.json`")}`);
@@ -60759,7 +60783,8 @@ var createProject = async (ctx) => {
60759
60783
  const CLOUDFLARE_ACCOUNT_ID = ctx.account.id;
60760
60784
  const compatFlags = ctx.framework?.config.compatibilityFlags?.join(" ");
60761
60785
  const compatFlagsArg = compatFlags ? `--compatibility-flags ${compatFlags}` : "";
60762
- const cmd = `${npx5} wrangler pages project create ${ctx.project.name} --production-branch main ${compatFlagsArg}`;
60786
+ const productionBranch = await getProductionBranch(ctx.project.path);
60787
+ const cmd = `${npx5} wrangler pages project create ${ctx.project.name} --production-branch ${productionBranch} ${compatFlagsArg}`;
60763
60788
  try {
60764
60789
  await retry(
60765
60790
  CREATE_PROJECT_RETRIES,
@@ -60768,7 +60793,7 @@ var createProject = async (ctx) => {
60768
60793
  cwd: ctx.project.path,
60769
60794
  env: { CLOUDFLARE_ACCOUNT_ID },
60770
60795
  startText: "Creating Pages project",
60771
- doneText: `${brandColor("created")} ${dim(`via \`${cmd}\``)}`
60796
+ doneText: `${brandColor("created")} ${dim(`via \`${cmd.trim()}\``)}`
60772
60797
  })
60773
60798
  );
60774
60799
  } catch (error) {
@@ -60802,14 +60827,12 @@ var runWorkersGenerator = async (args) => {
60802
60827
  await printSummary(ctx);
60803
60828
  };
60804
60829
  async function getTemplate(ctx) {
60805
- if (ctx.args.ts === void 0) {
60806
- ctx.args.ts = await confirmInput({
60807
- question: "Do you want to use TypeScript?",
60808
- renderSubmitted: (value) => `${brandColor("typescript")} ${dim(`${value ? "yes" : "no"}`)}`,
60809
- defaultValue: true,
60810
- acceptDefault: ctx.args.wranglerDefaults
60811
- });
60812
- }
60830
+ ctx.args.ts = await processArgument(ctx.args, "ts", {
60831
+ type: "confirm",
60832
+ question: "Do you want to use TypeScript?",
60833
+ label: "typescript",
60834
+ defaultValue: C3_DEFAULTS.ts
60835
+ });
60813
60836
  const preexisting = ctx.args.type === "pre-existing";
60814
60837
  const template = preexisting ? "hello-world" : ctx.args.type;
60815
60838
  const path3 = (0, import_path9.resolve)(
@@ -60833,12 +60856,16 @@ async function copyExistingWorkerFiles(ctx) {
60833
60856
  if (preexisting) {
60834
60857
  await chooseAccount(ctx);
60835
60858
  if (ctx.args.existingScript === void 0) {
60836
- ctx.args.existingScript = await textInput({
60837
- question: "Please specify the name of the existing worker in this account?",
60838
- renderSubmitted: (value) => `${brandColor("worker")} ${dim(`"${value}"`)}`,
60839
- defaultValue: ctx.project.name,
60840
- acceptDefault: ctx.args.wranglerDefaults
60841
- });
60859
+ ctx.args.existingScript = await processArgument(
60860
+ ctx.args,
60861
+ "existingScript",
60862
+ {
60863
+ type: "text",
60864
+ question: "Please specify the name of the existing worker in this account?",
60865
+ label: "worker",
60866
+ defaultValue: ctx.project.name
60867
+ }
60868
+ );
60842
60869
  }
60843
60870
  const tempdir = await (0, import_promises3.mkdtemp)(
60844
60871
  (0, import_path9.join)((0, import_os.tmpdir)(), "c3-wrangler-init--from-dash-")
@@ -60894,19 +60921,55 @@ async function updateFiles(ctx) {
60894
60921
  }
60895
60922
 
60896
60923
  // src/cli.ts
60924
+ var C3_DEFAULTS = {
60925
+ projectName: new import_haikunator.default().haikunate({ tokenHex: true }),
60926
+ type: "hello-world",
60927
+ framework: "angular",
60928
+ deploy: true,
60929
+ git: true,
60930
+ open: true,
60931
+ ts: true
60932
+ };
60933
+ var WRANGLER_DEFAULTS = {
60934
+ ...C3_DEFAULTS,
60935
+ deploy: false
60936
+ };
60897
60937
  var main = async (argv) => {
60898
60938
  const args = await parseArgs(argv);
60899
60939
  printBanner();
60940
+ const projectName = await processArgument(args, "projectName", {
60941
+ type: "text",
60942
+ question: `In which directory do you want to create your application?`,
60943
+ helpText: "also used as application name",
60944
+ defaultValue: C3_DEFAULTS.projectName,
60945
+ label: "dir",
60946
+ validate: (value) => validateProjectDirectory(String(value) || C3_DEFAULTS.projectName),
60947
+ format: (val) => `./${val}`
60948
+ });
60949
+ if (!args.type) {
60950
+ if (args.framework) {
60951
+ args.type = "webFramework";
60952
+ } else if (args.existingScript) {
60953
+ args.type = "pre-existing";
60954
+ }
60955
+ }
60956
+ const templateOptions = Object.entries(templateMap).filter(([_3, { hidden: hidden2 }]) => !hidden2).map(([value, { label }]) => ({ value, label }));
60957
+ const type = await processArgument(args, "type", {
60958
+ type: "select",
60959
+ question: "What type of application do you want to create?",
60960
+ label: "type",
60961
+ options: templateOptions,
60962
+ defaultValue: C3_DEFAULTS.type
60963
+ });
60964
+ if (!type || !Object.keys(templateMap).includes(type)) {
60965
+ return crash("An application type must be specified to continue.");
60966
+ }
60900
60967
  const validatedArgs = {
60901
60968
  ...args,
60902
- projectName: await validateName(args.projectName, {
60903
- acceptDefault: args.wranglerDefaults
60904
- }),
60905
- type: await validateType(args.type, {
60906
- acceptDefault: args.wranglerDefaults
60907
- })
60969
+ type,
60970
+ projectName
60908
60971
  };
60909
- const { handler } = templateMap[validatedArgs.type];
60972
+ const { handler } = templateMap[type];
60910
60973
  await handler(validatedArgs);
60911
60974
  };
60912
60975
  var printBanner = () => {
@@ -60923,42 +60986,17 @@ var parseArgs = async (argv) => {
60923
60986
  }).option("existing-script", {
60924
60987
  type: "string",
60925
60988
  hidden: templateMap["pre-existing"].hidden
60989
+ }).option("accept-defaults", {
60990
+ alias: "y",
60991
+ type: "boolean"
60926
60992
  }).option("wrangler-defaults", { type: "boolean", hidden: true }).version(version).help().argv;
60927
60993
  return {
60994
+ ...args.wranglerDefaults && WRANGLER_DEFAULTS,
60995
+ ...args.acceptDefaults && C3_DEFAULTS,
60928
60996
  projectName: args._[0],
60929
60997
  ...args
60930
60998
  };
60931
60999
  };
60932
- var validateName = async (name, { acceptDefault = false } = {}) => {
60933
- const defaultValue = name ?? new import_haikunator.default().haikunate({ tokenHex: true });
60934
- return textInput({
60935
- question: `In which directory do you want to create your application?`,
60936
- helpText: "also used as application name",
60937
- renderSubmitted: (value) => {
60938
- return `${brandColor("dir")} ${dim(value)}`;
60939
- },
60940
- defaultValue,
60941
- acceptDefault,
60942
- validate: (value) => validateProjectDirectory(value || defaultValue),
60943
- format: (val) => `./${val}`
60944
- });
60945
- };
60946
- var validateType = async (type, { acceptDefault = false } = {}) => {
60947
- const templateOptions = Object.entries(templateMap).filter(([_3, { hidden: hidden2 }]) => !hidden2).map(([value, { label }]) => ({ value, label }));
60948
- type = await selectInput({
60949
- question: "What type of application do you want to create?",
60950
- options: templateOptions,
60951
- renderSubmitted: (option) => {
60952
- return `${brandColor("type")} ${dim(option.label)}`;
60953
- },
60954
- defaultValue: type ?? "hello-world",
60955
- acceptDefault
60956
- });
60957
- if (!type || !Object.keys(templateMap).includes(type)) {
60958
- crash("An application type must be specified to continue.");
60959
- }
60960
- return type;
60961
- };
60962
61000
  var templateMap = {
60963
61001
  webFramework: {
60964
61002
  label: "Website or web app",
@@ -60996,7 +61034,9 @@ var templateMap = {
60996
61034
  main(process.argv).catch((e) => crash(e));
60997
61035
  // Annotate the CommonJS export names for ESM import in node:
60998
61036
  0 && (module.exports = {
60999
- main
61037
+ C3_DEFAULTS,
61038
+ main,
61039
+ parseArgs
61000
61040
  });
61001
61041
  /*! Bundled license information:
61002
61042
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-cloudflare",
3
- "version": "0.0.0-941764d0",
3
+ "version": "0.0.0-99032c1e",
4
4
  "description": "A CLI for creating and deploying new applications to Cloudflare.",
5
5
  "keywords": [
6
6
  "cloudflare",
@@ -7,7 +7,6 @@
7
7
  "start": "wrangler dev"
8
8
  },
9
9
  "devDependencies": {
10
- "@cloudflare/workers-types": "^4.20230419.0",
11
10
  "itty-router": "^3.0.12",
12
11
  "wrangler": "^3.0.0"
13
12
  }
@@ -7,8 +7,6 @@
7
7
  "start": "wrangler dev"
8
8
  },
9
9
  "devDependencies": {
10
- "@cloudflare/workers-types": "^4.20230419.0",
11
- "typescript": "^5.0.4",
12
10
  "wrangler": "^3.0.0"
13
11
  }
14
12
  }
@@ -7,8 +7,6 @@
7
7
  "start": "wrangler dev"
8
8
  },
9
9
  "devDependencies": {
10
- "@cloudflare/workers-types": "^4.20230419.0",
11
- "typescript": "^5.0.4",
12
10
  "wrangler": "^3.0.0"
13
11
  }
14
12
  }
@@ -7,8 +7,6 @@
7
7
  "start": "wrangler dev"
8
8
  },
9
9
  "devDependencies": {
10
- "@cloudflare/workers-types": "^4.20230419.0",
11
- "typescript": "^5.0.4",
12
10
  "wrangler": "^3.0.0"
13
11
  }
14
12
  }