create-astro 4.9.2 → 4.11.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -45,19 +45,19 @@ npm create astro@latest my-astro-project -- --template cassidoo/shopify-react-as
45
45
 
46
46
  May be provided in place of prompts
47
47
 
48
- | Name | Description |
49
- | :--------------------------- | :----------------------------------------------------- |
50
- | `--help` (`-h`) | Display available flags. |
51
- | `--template <name>` | Specify your template. |
52
- | `--install` / `--no-install` | Install dependencies (or not). |
53
- | `--git` / `--no-git` | Initialize git repo (or not). |
54
- | `--yes` (`-y`) | Skip all prompts by accepting defaults. |
55
- | `--no` (`-n`) | Skip all prompts by declining defaults. |
56
- | `--dry-run` | Walk through steps without executing. |
57
- | `--skip-houston` | Skip Houston animation. |
58
- | `--ref` | Specify an Astro branch (default: latest). |
59
- | `--fancy` | Enable full Unicode support for Windows. |
60
- | `--typescript <option>` | TypeScript option: `strict` / `strictest` / `relaxed`. |
48
+ | Name | Description |
49
+ | :--------------------------- | :----------------------------------------- |
50
+ | `--help` (`-h`) | Display available flags. |
51
+ | `--template <name>` | Specify your template. |
52
+ | `--install` / `--no-install` | Install dependencies (or not). |
53
+ | `--add <integrations>` | Add integrations. |
54
+ | `--git` / `--no-git` | Initialize git repo (or not). |
55
+ | `--yes` (`-y`) | Skip all prompts by accepting defaults. |
56
+ | `--no` (`-n`) | Skip all prompts by declining defaults. |
57
+ | `--dry-run` | Walk through steps without executing. |
58
+ | `--skip-houston` | Skip Houston animation. |
59
+ | `--ref` | Specify an Astro branch (default: latest). |
60
+ | `--fancy` | Enable full Unicode support for Windows. |
61
61
 
62
62
  [examples]: https://github.com/withastro/astro/tree/main/examples
63
63
  [typescript]: https://github.com/withastro/astro/tree/main/packages/astro/tsconfigs
@@ -8,6 +8,7 @@ export interface Context {
8
8
  version: Promise<string>;
9
9
  skipHouston: boolean;
10
10
  fancy?: boolean;
11
+ add?: string[];
11
12
  dryRun?: boolean;
12
13
  yes?: boolean;
13
14
  projectName?: string;
@@ -1,2 +1,2 @@
1
1
  import type { Context } from './context.js';
2
- export declare function dependencies(ctx: Pick<Context, 'install' | 'yes' | 'prompt' | 'packageManager' | 'cwd' | 'dryRun' | 'tasks'>): Promise<void>;
2
+ export declare function dependencies(ctx: Pick<Context, 'install' | 'yes' | 'prompt' | 'packageManager' | 'cwd' | 'dryRun' | 'tasks' | 'add'>): Promise<void>;
package/dist/index.d.ts CHANGED
@@ -5,8 +5,7 @@ import { intro } from './actions/intro.js';
5
5
  import { next } from './actions/next-steps.js';
6
6
  import { projectName } from './actions/project-name.js';
7
7
  import { template } from './actions/template.js';
8
- import { setupTypeScript, typescript } from './actions/typescript.js';
9
8
  import { verify } from './actions/verify.js';
10
9
  import { setStdout } from './messages.js';
11
10
  export declare function main(): Promise<void>;
12
- export { dependencies, getContext, git, intro, next, projectName, setStdout, setupTypeScript, template, typescript, verify, };
11
+ export { dependencies, getContext, git, intro, next, projectName, setStdout, template, verify };
package/dist/index.js CHANGED
@@ -228,6 +228,7 @@ function getSeasonalHouston({ fancy }) {
228
228
  `Your creativity is the gift that keeps on giving!`
229
229
  ]
230
230
  };
231
+ case void 0:
231
232
  default:
232
233
  return {
233
234
  hats: fancy ? ["\u{1F3A9}", "\u{1F3A9}", "\u{1F3A9}", "\u{1F3A9}", "\u{1F393}", "\u{1F451}", "\u{1F9E2}", "\u{1F366}"] : void 0,
@@ -380,11 +381,6 @@ var error = async (prefix, text2) => {
380
381
  log(`${" ".repeat(5)} ${color.red("\u25B2")} ${color.red(prefix)} ${color.dim(text2)}`);
381
382
  }
382
383
  };
383
- var typescriptByDefault = async () => {
384
- await info(`No worries!`, "TypeScript is supported in Astro by default,");
385
- log(`${" ".repeat(9)}${color.dim("but you are free to continue writing JavaScript instead.")}`);
386
- await sleep(1e3);
387
- };
388
384
  var nextSteps = async ({ projectDir, devCmd }) => {
389
385
  const max = stdout.columns;
390
386
  const prefix = max < 80 ? " " : " ".repeat(9);
@@ -446,7 +442,7 @@ function printHelp({
446
442
  if (headline) {
447
443
  message.push(
448
444
  linebreak(),
449
- `${title(commandName)} ${color.green(`v${"4.9.2"}`)} ${headline}`
445
+ `${title(commandName)} ${color.green(`v${"4.11.0-beta.0"}`)} ${headline}`
450
446
  );
451
447
  }
452
448
  if (usage) {
@@ -481,11 +477,11 @@ async function getContext(argv) {
481
477
  "--no-install": Boolean,
482
478
  "--git": Boolean,
483
479
  "--no-git": Boolean,
484
- "--typescript": String,
485
480
  "--skip-houston": Boolean,
486
481
  "--dry-run": Boolean,
487
482
  "--help": Boolean,
488
483
  "--fancy": Boolean,
484
+ "--add": [String],
489
485
  "-y": "--yes",
490
486
  "-n": "--no",
491
487
  "-h": "--help"
@@ -503,29 +499,29 @@ async function getContext(argv) {
503
499
  "--no-install": noInstall,
504
500
  "--git": git2,
505
501
  "--no-git": noGit,
506
- "--typescript": typescript2,
507
502
  "--fancy": fancy,
508
503
  "--skip-houston": skipHouston,
509
504
  "--dry-run": dryRun,
510
- "--ref": ref
505
+ "--ref": ref,
506
+ "--add": add
511
507
  } = flags;
512
508
  let projectName2 = cwd;
513
509
  if (no) {
514
510
  yes = false;
515
511
  if (install2 == void 0) install2 = false;
516
512
  if (git2 == void 0) git2 = false;
517
- if (typescript2 == void 0) typescript2 = "strict";
518
513
  }
519
- skipHouston = (os.platform() === "win32" && !fancy || skipHouston) ?? [yes, no, install2, git2, typescript2].some((v) => v !== void 0);
514
+ skipHouston = (os.platform() === "win32" && !fancy || skipHouston) ?? [yes, no, install2, git2].some((v) => v !== void 0);
520
515
  const { messages, hats, ties } = getSeasonalHouston({ fancy });
521
516
  const context = {
522
517
  help: help2,
523
518
  prompt,
524
519
  packageManager,
525
520
  username: getName(),
526
- version: getVersion(packageManager, "astro", "4.16.0"),
521
+ version: getVersion(packageManager, "astro", "5.0.0-beta.7"),
527
522
  skipHouston,
528
523
  fancy,
524
+ add,
529
525
  dryRun,
530
526
  projectName: projectName2,
531
527
  template: template2,
@@ -536,7 +532,6 @@ async function getContext(argv) {
536
532
  yes,
537
533
  install: install2 ?? (noInstall ? false : void 0),
538
534
  git: git2 ?? (noGit ? false : void 0),
539
- typescript: typescript2,
540
535
  cwd,
541
536
  exit(code) {
542
537
  process.exit(code);
@@ -572,8 +567,12 @@ async function dependencies(ctx) {
572
567
  }));
573
568
  ctx.install = deps;
574
569
  }
570
+ ctx.add = ctx.add?.reduce((acc, item) => acc.concat(item.split(",")), []);
575
571
  if (ctx.dryRun) {
576
- await info("--dry-run", `Skipping dependency installation`);
572
+ await info(
573
+ "--dry-run",
574
+ `Skipping dependency installation${ctx.add ? ` and adding ${ctx.add.join(", ")}` : ""}`
575
+ );
577
576
  } else if (deps) {
578
577
  ctx.tasks.push({
579
578
  pending: "Dependencies",
@@ -590,6 +589,24 @@ async function dependencies(ctx) {
590
589
  },
591
590
  while: () => install({ packageManager: ctx.packageManager, cwd: ctx.cwd })
592
591
  });
592
+ let add = ctx.add;
593
+ if (add) {
594
+ ctx.tasks.push({
595
+ pending: "Integrations",
596
+ start: `Adding integrations with astro add`,
597
+ end: "Integrations added",
598
+ onError: (e) => {
599
+ error("error", e);
600
+ error(
601
+ "error",
602
+ `Failed to add integrations, please run ${color2.bold(
603
+ `astro add ${add.join(" ")}`
604
+ )} to install them manually after setup.`
605
+ );
606
+ },
607
+ while: () => astroAdd({ integrations: add, packageManager: ctx.packageManager, cwd: ctx.cwd })
608
+ });
609
+ }
593
610
  } else {
594
611
  await info(
595
612
  ctx.yes === false ? "deps [skip]" : "No problem!",
@@ -597,6 +614,18 @@ async function dependencies(ctx) {
597
614
  );
598
615
  }
599
616
  }
617
+ async function astroAdd({
618
+ integrations,
619
+ packageManager,
620
+ cwd
621
+ }) {
622
+ if (packageManager === "yarn") await ensureYarnLock({ cwd });
623
+ return shell(
624
+ packageManager === "npm" ? "npx" : `${packageManager} dlx`,
625
+ ["astro add", integrations.join(" "), "-y"],
626
+ { cwd, timeout: 9e4, stdio: "ignore" }
627
+ );
628
+ }
600
629
  async function install({ packageManager, cwd }) {
601
630
  if (packageManager === "yarn") await ensureYarnLock({ cwd });
602
631
  return shell(packageManager, ["install"], { cwd, timeout: 9e4, stdio: "ignore" });
@@ -675,14 +704,14 @@ function help() {
675
704
  ["--help (-h)", "See all available flags."],
676
705
  ["--template <name>", "Specify your template."],
677
706
  ["--install / --no-install", "Install dependencies (or not)."],
707
+ ["--add <integrations>", "Add integrations."],
678
708
  ["--git / --no-git", "Initialize git repo (or not)."],
679
709
  ["--yes (-y)", "Skip all prompts by accepting defaults."],
680
710
  ["--no (-n)", "Skip all prompts by declining defaults."],
681
711
  ["--dry-run", "Walk through steps without executing."],
682
712
  ["--skip-houston", "Skip Houston animation."],
683
713
  ["--ref", "Choose astro branch (default: latest)."],
684
- ["--fancy", "Enable full Unicode support for Windows."],
685
- ["--typescript <option>", "TypeScript option: strict | strictest | relaxed."]
714
+ ["--fancy", "Enable full Unicode support for Windows."]
686
715
  ]
687
716
  }
688
717
  });
@@ -854,9 +883,9 @@ async function template(ctx) {
854
883
  message: "How would you like to start your new project?",
855
884
  initial: "basics",
856
885
  choices: [
857
- { value: "basics", label: "Include sample files", hint: "(recommended)" },
886
+ { value: "basics", label: "A basic, minimal starter", hint: "(recommended)" },
858
887
  { value: "blog", label: "Use blog template" },
859
- { value: "minimal", label: "Empty" }
888
+ { value: "starlight", label: "Use docs (Starlight) template" }
860
889
  ]
861
890
  });
862
891
  ctx.template = tmpl;
@@ -900,11 +929,15 @@ var FILES_TO_UPDATE = {
900
929
  function getTemplateTarget(tmpl, ref = "latest") {
901
930
  if (tmpl.startsWith("starlight")) {
902
931
  const [, starter = "basics"] = tmpl.split("/");
903
- return `withastro/starlight/examples/${starter}`;
932
+ return `github:withastro/starlight/examples/${starter}`;
904
933
  }
905
934
  const isThirdParty = tmpl.includes("/");
906
935
  if (isThirdParty) return tmpl;
907
- return `github:withastro/astro/examples/${tmpl}#${ref}`;
936
+ if (ref === "latest") {
937
+ return `github:withastro/astro#examples/${tmpl}`;
938
+ } else {
939
+ return `github:withastro/astro/examples/${tmpl}#${ref}`;
940
+ }
908
941
  }
909
942
  async function copyTemplate(tmpl, ctx) {
910
943
  const templateTarget = getTemplateTarget(tmpl, ctx.ref);
@@ -912,7 +945,6 @@ async function copyTemplate(tmpl, ctx) {
912
945
  try {
913
946
  await downloadTemplate(templateTarget, {
914
947
  force: true,
915
- provider: "github",
916
948
  cwd: ctx.cwd,
917
949
  dir: "."
918
950
  });
@@ -956,231 +988,9 @@ async function copyTemplate(tmpl, ctx) {
956
988
  }
957
989
  }
958
990
 
959
- // src/actions/typescript.ts
960
- import { readFile, rm, writeFile } from "node:fs/promises";
961
- import path6 from "node:path";
962
- import { color as color7 } from "@astrojs/cli-kit";
963
-
964
- // ../../node_modules/.pnpm/strip-json-comments@5.0.1/node_modules/strip-json-comments/index.js
965
- var singleComment = Symbol("singleComment");
966
- var multiComment = Symbol("multiComment");
967
- var stripWithoutWhitespace = () => "";
968
- var stripWithWhitespace = (string, start, end) => string.slice(start, end).replace(/\S/g, " ");
969
- var isEscaped = (jsonString, quotePosition) => {
970
- let index = quotePosition - 1;
971
- let backslashCount = 0;
972
- while (jsonString[index] === "\\") {
973
- index -= 1;
974
- backslashCount += 1;
975
- }
976
- return Boolean(backslashCount % 2);
977
- };
978
- function stripJsonComments(jsonString, { whitespace = true, trailingCommas = false } = {}) {
979
- if (typeof jsonString !== "string") {
980
- throw new TypeError(`Expected argument \`jsonString\` to be a \`string\`, got \`${typeof jsonString}\``);
981
- }
982
- const strip = whitespace ? stripWithWhitespace : stripWithoutWhitespace;
983
- let isInsideString = false;
984
- let isInsideComment = false;
985
- let offset = 0;
986
- let buffer = "";
987
- let result = "";
988
- let commaIndex = -1;
989
- for (let index = 0; index < jsonString.length; index++) {
990
- const currentCharacter = jsonString[index];
991
- const nextCharacter = jsonString[index + 1];
992
- if (!isInsideComment && currentCharacter === '"') {
993
- const escaped = isEscaped(jsonString, index);
994
- if (!escaped) {
995
- isInsideString = !isInsideString;
996
- }
997
- }
998
- if (isInsideString) {
999
- continue;
1000
- }
1001
- if (!isInsideComment && currentCharacter + nextCharacter === "//") {
1002
- buffer += jsonString.slice(offset, index);
1003
- offset = index;
1004
- isInsideComment = singleComment;
1005
- index++;
1006
- } else if (isInsideComment === singleComment && currentCharacter + nextCharacter === "\r\n") {
1007
- index++;
1008
- isInsideComment = false;
1009
- buffer += strip(jsonString, offset, index);
1010
- offset = index;
1011
- continue;
1012
- } else if (isInsideComment === singleComment && currentCharacter === "\n") {
1013
- isInsideComment = false;
1014
- buffer += strip(jsonString, offset, index);
1015
- offset = index;
1016
- } else if (!isInsideComment && currentCharacter + nextCharacter === "/*") {
1017
- buffer += jsonString.slice(offset, index);
1018
- offset = index;
1019
- isInsideComment = multiComment;
1020
- index++;
1021
- continue;
1022
- } else if (isInsideComment === multiComment && currentCharacter + nextCharacter === "*/") {
1023
- index++;
1024
- isInsideComment = false;
1025
- buffer += strip(jsonString, offset, index + 1);
1026
- offset = index + 1;
1027
- continue;
1028
- } else if (trailingCommas && !isInsideComment) {
1029
- if (commaIndex !== -1) {
1030
- if (currentCharacter === "}" || currentCharacter === "]") {
1031
- buffer += jsonString.slice(offset, index);
1032
- result += strip(buffer, 0, 1) + buffer.slice(1);
1033
- buffer = "";
1034
- offset = index;
1035
- commaIndex = -1;
1036
- } else if (currentCharacter !== " " && currentCharacter !== " " && currentCharacter !== "\r" && currentCharacter !== "\n") {
1037
- buffer += jsonString.slice(offset, index);
1038
- offset = index;
1039
- commaIndex = -1;
1040
- }
1041
- } else if (currentCharacter === ",") {
1042
- result += buffer + jsonString.slice(offset, index);
1043
- buffer = "";
1044
- offset = index;
1045
- commaIndex = index;
1046
- }
1047
- }
1048
- }
1049
- return result + buffer + (isInsideComment ? strip(jsonString.slice(offset)) : jsonString.slice(offset));
1050
- }
1051
-
1052
- // src/actions/typescript.ts
1053
- async function typescript(ctx) {
1054
- let ts = ctx.typescript ?? (typeof ctx.yes !== "undefined" ? "strict" : void 0);
1055
- if (ts === void 0) {
1056
- const { useTs } = await ctx.prompt({
1057
- name: "useTs",
1058
- type: "confirm",
1059
- label: title("ts"),
1060
- message: `Do you plan to write TypeScript?`,
1061
- initial: true
1062
- });
1063
- if (!useTs) {
1064
- await typescriptByDefault();
1065
- return;
1066
- }
1067
- ({ ts } = await ctx.prompt({
1068
- name: "ts",
1069
- type: "select",
1070
- label: title("use"),
1071
- message: `How strict should TypeScript be?`,
1072
- initial: "strict",
1073
- choices: [
1074
- { value: "strict", label: "Strict", hint: `(recommended)` },
1075
- { value: "strictest", label: "Strictest" },
1076
- { value: "base", label: "Relaxed" }
1077
- ]
1078
- }));
1079
- } else {
1080
- if (!["strict", "strictest", "relaxed", "default", "base"].includes(ts)) {
1081
- if (!ctx.dryRun) {
1082
- await rm(ctx.cwd, { recursive: true, force: true });
1083
- }
1084
- error(
1085
- "Error",
1086
- `Unknown TypeScript option ${color7.reset(ts)}${color7.dim(
1087
- "! Expected strict | strictest | relaxed"
1088
- )}`
1089
- );
1090
- ctx.exit(1);
1091
- }
1092
- await info("ts", `Using ${color7.reset(ts)}${color7.dim(" TypeScript configuration")}`);
1093
- }
1094
- if (ctx.dryRun) {
1095
- await info("--dry-run", `Skipping TypeScript setup`);
1096
- } else if (ts && ts !== "unsure") {
1097
- if (ts === "relaxed" || ts === "default") {
1098
- ts = "base";
1099
- }
1100
- ctx.tasks.push({
1101
- pending: "TypeScript",
1102
- start: "TypeScript customizing...",
1103
- end: "TypeScript customized",
1104
- while: () => setupTypeScript(ts, ctx).catch((e) => {
1105
- error("error", e);
1106
- process.exit(1);
1107
- })
1108
- });
1109
- } else {
1110
- }
1111
- }
1112
- var FILES_TO_UPDATE2 = {
1113
- "package.json": async (file, options) => {
1114
- try {
1115
- const data = await readFile(file, { encoding: "utf-8" });
1116
- const indent = /(^\s+)/m.exec(data)?.[1] ?? " ";
1117
- const parsedPackageJson = JSON.parse(data);
1118
- const buildScript = parsedPackageJson.scripts?.build;
1119
- if (typeof buildScript === "string" && !buildScript.includes("astro check")) {
1120
- parsedPackageJson.scripts.build = `astro check && ${buildScript}`;
1121
- }
1122
- const [astroCheckVersion, typescriptVersion] = await Promise.all([
1123
- getVersion(options.ctx.packageManager, "@astrojs/check", "0.9.4"),
1124
- getVersion(options.ctx.packageManager, "typescript", "5.6.2")
1125
- ]);
1126
- parsedPackageJson.dependencies ??= {};
1127
- parsedPackageJson.dependencies["@astrojs/check"] = `^${astroCheckVersion}`;
1128
- parsedPackageJson.dependencies.typescript = `^${typescriptVersion}`;
1129
- await writeFile(file, JSON.stringify(parsedPackageJson, null, indent), "utf-8");
1130
- } catch (err) {
1131
- if (err && err.code === "ENOENT") return;
1132
- if (err instanceof Error) throw new Error(err.message);
1133
- }
1134
- },
1135
- "tsconfig.json": async (file, options) => {
1136
- try {
1137
- const data = await readFile(file, { encoding: "utf-8" });
1138
- const templateTSConfig = JSON.parse(stripJsonComments(data));
1139
- if (templateTSConfig && typeof templateTSConfig === "object") {
1140
- const result = Object.assign(templateTSConfig, {
1141
- extends: `astro/tsconfigs/${options.value}`
1142
- });
1143
- await writeFile(file, JSON.stringify(result, null, 2));
1144
- } else {
1145
- throw new Error(
1146
- "There was an error applying the requested TypeScript settings. This could be because the template's tsconfig.json is malformed"
1147
- );
1148
- }
1149
- } catch (err) {
1150
- if (err && err.code === "ENOENT") {
1151
- await writeFile(
1152
- file,
1153
- JSON.stringify({ extends: `astro/tsconfigs/${options.value}` }, null, 2)
1154
- );
1155
- }
1156
- }
1157
- },
1158
- "astro.config.mjs": async (file, options) => {
1159
- if (!(options.value === "strict" || options.value === "strictest")) {
1160
- return;
1161
- }
1162
- try {
1163
- let data = await readFile(file, { encoding: "utf-8" });
1164
- data = `// @ts-check
1165
- ${data}`;
1166
- await writeFile(file, data, { encoding: "utf-8" });
1167
- } catch (err) {
1168
- if (err && err.code === "ENOENT") return;
1169
- if (err instanceof Error) throw new Error(err.message);
1170
- }
1171
- }
1172
- };
1173
- async function setupTypeScript(value, ctx) {
1174
- await Promise.all(
1175
- Object.entries(FILES_TO_UPDATE2).map(
1176
- async ([file, update]) => update(path6.resolve(path6.join(ctx.cwd, file)), { value, ctx })
1177
- )
1178
- );
1179
- }
1180
-
1181
991
  // src/actions/verify.ts
1182
992
  import dns from "node:dns/promises";
1183
- import { color as color8 } from "@astrojs/cli-kit";
993
+ import { color as color7 } from "@astrojs/cli-kit";
1184
994
  import { verifyTemplate } from "@bluwy/giget-core";
1185
995
  async function verify(ctx) {
1186
996
  if (!ctx.dryRun) {
@@ -1198,7 +1008,7 @@ async function verify(ctx) {
1198
1008
  if (!ok) {
1199
1009
  bannerAbort();
1200
1010
  log("");
1201
- error("error", `Template ${color8.reset(ctx.template)} ${color8.dim("could not be found!")}`);
1011
+ error("error", `Template ${color7.reset(ctx.template)} ${color7.dim("could not be found!")}`);
1202
1012
  await info("check", "https://astro.build/examples");
1203
1013
  ctx.exit(1);
1204
1014
  }
@@ -1228,7 +1038,6 @@ async function main() {
1228
1038
  intro,
1229
1039
  projectName,
1230
1040
  template,
1231
- typescript,
1232
1041
  dependencies,
1233
1042
  // Steps which write to files need to go above git
1234
1043
  git
@@ -1254,8 +1063,6 @@ export {
1254
1063
  next,
1255
1064
  projectName,
1256
1065
  setStdout,
1257
- setupTypeScript,
1258
1066
  template,
1259
- typescript,
1260
1067
  verify
1261
1068
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-astro",
3
- "version": "4.9.2",
3
+ "version": "4.11.0-beta.0",
4
4
  "type": "module",
5
5
  "author": "withastro",
6
6
  "license": "MIT",
@@ -26,7 +26,7 @@
26
26
  "//b": "DEPENDENCIES IS FOR UNBUNDLED PACKAGES",
27
27
  "dependencies": {
28
28
  "@astrojs/cli-kit": "^0.4.1",
29
- "@bluwy/giget-core": "^0.1.0"
29
+ "@bluwy/giget-core": "^0.1.1"
30
30
  },
31
31
  "devDependencies": {
32
32
  "arg": "^5.0.2",
@@ -1,5 +0,0 @@
1
- import type { Context } from './context.js';
2
- type PickedTypeScriptContext = Pick<Context, 'typescript' | 'yes' | 'prompt' | 'dryRun' | 'cwd' | 'exit' | 'packageManager' | 'install' | 'tasks'>;
3
- export declare function typescript(ctx: PickedTypeScriptContext): Promise<void>;
4
- export declare function setupTypeScript(value: string, ctx: PickedTypeScriptContext): Promise<void>;
5
- export {};