complete-cli 1.3.2 → 1.3.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 (55) hide show
  1. package/dist/commands/CheckCommand.js +16 -11
  2. package/dist/commands/CheckCommand.js.map +1 -0
  3. package/dist/commands/InitCommand.js +1 -0
  4. package/dist/commands/InitCommand.js.map +1 -0
  5. package/dist/commands/MetadataCommand.js +5 -4
  6. package/dist/commands/MetadataCommand.js.map +1 -0
  7. package/dist/commands/NukeCommand.js +1 -0
  8. package/dist/commands/NukeCommand.js.map +1 -0
  9. package/dist/commands/PublishCommand.js +6 -5
  10. package/dist/commands/PublishCommand.js.map +1 -0
  11. package/dist/commands/UpdateCommand.js +1 -0
  12. package/dist/commands/UpdateCommand.js.map +1 -0
  13. package/dist/commands/check/check.test.js +1 -0
  14. package/dist/commands/check/check.test.js.map +1 -0
  15. package/dist/commands/check/getTruncatedText.js +1 -0
  16. package/dist/commands/check/getTruncatedText.js.map +1 -0
  17. package/dist/commands/init/checkIfProjectPathExists.js +12 -5
  18. package/dist/commands/init/checkIfProjectPathExists.js.map +1 -0
  19. package/dist/commands/init/createProject.js +53 -32
  20. package/dist/commands/init/createProject.js.map +1 -0
  21. package/dist/commands/init/getAuthorName.js +1 -0
  22. package/dist/commands/init/getAuthorName.js.map +1 -0
  23. package/dist/commands/init/getProjectPath.js +1 -0
  24. package/dist/commands/init/getProjectPath.js.map +1 -0
  25. package/dist/commands/init/lockedDependencies.js +1 -0
  26. package/dist/commands/init/lockedDependencies.js.map +1 -0
  27. package/dist/commands/init/packageManager.js +16 -3
  28. package/dist/commands/init/packageManager.js.map +1 -0
  29. package/dist/commands/init/vsCodeInit.js +7 -1
  30. package/dist/commands/init/vsCodeInit.js.map +1 -0
  31. package/dist/constants.js +1 -0
  32. package/dist/constants.js.map +1 -0
  33. package/dist/git.js +4 -3
  34. package/dist/git.js.map +1 -0
  35. package/dist/interfaces/GitHubCLIHostsYAML.js +1 -0
  36. package/dist/interfaces/GitHubCLIHostsYAML.js.map +1 -0
  37. package/dist/main.js +1 -0
  38. package/dist/main.js.map +1 -0
  39. package/dist/prompt.js +2 -1
  40. package/dist/prompt.js.map +1 -0
  41. package/file-templates/dynamic/.github/workflows/setup/action.yml +1 -1
  42. package/file-templates/dynamic/Node.gitignore +3 -1
  43. package/file-templates/dynamic/package.json +2 -6
  44. package/file-templates/static/eslint.config.mjs +2 -2
  45. package/file-templates/static/scripts/lint.ts +1 -1
  46. package/package.json +9 -12
  47. package/src/commands/CheckCommand.ts +18 -14
  48. package/src/commands/MetadataCommand.ts +4 -9
  49. package/src/commands/PublishCommand.ts +6 -6
  50. package/src/commands/init/checkIfProjectPathExists.ts +13 -9
  51. package/src/commands/init/createProject.ts +69 -36
  52. package/src/commands/init/packageManager.ts +22 -3
  53. package/src/commands/init/vsCodeInit.ts +9 -1
  54. package/src/git.ts +3 -3
  55. package/src/prompt.ts +1 -1
@@ -1,3 +1,4 @@
1
+ import { assertObject } from "complete-common";
1
2
  import { $, $q, commandExists, getJSONC, isFile } from "complete-node";
2
3
  import path from "node:path";
3
4
  import { getInputYesNo, promptError, promptLog } from "../../prompt.js";
@@ -18,6 +19,8 @@ export async function vsCodeInit(projectPath, vscode, yes) {
18
19
  }
19
20
  async function getVSCodeCommand() {
20
21
  for (const command of VS_CODE_COMMANDS) {
22
+ // We want to only check for one command at a time, since it is unlikely that the special VSCode
23
+ // commands will exist.
21
24
  // eslint-disable-next-line no-await-in-loop
22
25
  const exists = await commandExists(command);
23
26
  if (exists) {
@@ -38,10 +41,12 @@ async function installVSCodeExtensions(projectPath, vsCodeCommand) {
38
41
  }
39
42
  async function getExtensionsFromJSON(projectPath) {
40
43
  const extensionsJSONPath = path.join(projectPath, ".vscode", "extensions.json");
41
- if (!isFile(extensionsJSONPath)) {
44
+ const extensionsJSONExists = await isFile(extensionsJSONPath);
45
+ if (!extensionsJSONExists) {
42
46
  return [];
43
47
  }
44
48
  const extensionsJSON = await getJSONC(extensionsJSONPath);
49
+ assertObject(extensionsJSON, `The "${extensionsJSONPath}" file is not an object.`);
45
50
  const { recommendations } = extensionsJSON;
46
51
  if (!Array.isArray(recommendations)) {
47
52
  promptError('The "recommendations" field in the "extensions.json" file is not an array.');
@@ -76,3 +81,4 @@ async function promptVSCode(projectPath, VSCodeCommand, vscode, yes) {
76
81
  async function openVSCode(projectPath, VSCodeCommand) {
77
82
  await $ `${VSCodeCommand} ${projectPath}`;
78
83
  }
84
+ //# sourceMappingURL=vsCodeInit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vsCodeInit.js","sourceRoot":"","sources":["../../../../../src/commands/init/vsCodeInit.ts"],"names":[],"mappings":"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"}
package/dist/constants.js CHANGED
@@ -14,3 +14,4 @@ export const TEMPLATES_STATIC_DIR = path.join(TEMPLATES_DIR, "static");
14
14
  export const TEMPLATES_DYNAMIC_DIR = path.join(TEMPLATES_DIR, "dynamic");
15
15
  export const ACTION_YML = "action.yml";
16
16
  export const ACTION_YML_TEMPLATE_PATH = path.join(TEMPLATES_DYNAMIC_DIR, ".github", "workflows", "setup", ACTION_YML);
17
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,cAAc,EACd,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAEzD,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;AAErC,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;AAC3C,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,6BAA6B,CAC3D,WAAW,EACX,MAAM,EACN,SAAS,CACV,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AACjC,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC;AAEvC,MAAM,CAAC,MAAM,uBAAuB,GAAG,cAAc,CAAC,GAAG,CAAC;AAE1D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;AACvE,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;AAEzE,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAC;AACvC,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC,IAAI,CAC/C,qBAAqB,EACrB,SAAS,EACT,WAAW,EACX,OAAO,EACP,UAAU,CACX,CAAC"}
package/dist/git.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import chalk from "chalk";
2
- import { $q, commandExists, isFileAsync, readFileAsync } from "complete-node";
2
+ import { $q, commandExists, isFile, readFile } from "complete-node";
3
3
  import path from "node:path";
4
4
  import yaml from "yaml";
5
5
  import { HOME_DIR, PROJECT_NAME, PROJECT_VERSION } from "./constants.js";
@@ -17,11 +17,11 @@ export async function getGitHubUsername() {
17
17
  if (githubCLIHostsPath === undefined) {
18
18
  return undefined;
19
19
  }
20
- const hostsPathExists = await isFileAsync(githubCLIHostsPath);
20
+ const hostsPathExists = await isFile(githubCLIHostsPath);
21
21
  if (!hostsPathExists) {
22
22
  return undefined;
23
23
  }
24
- const configYAMLRaw = await readFileAsync(githubCLIHostsPath);
24
+ const configYAMLRaw = await readFile(githubCLIHostsPath);
25
25
  const configYAML = yaml.parse(configYAMLRaw);
26
26
  const githubCom = configYAML["github.com"];
27
27
  if (githubCom === undefined) {
@@ -135,3 +135,4 @@ async function isGitNameAndEmailConfigured() {
135
135
  const { exitCode: emailExitCode } = await $q `git config --global user.email`;
136
136
  return nameExitCode === 0 && emailExitCode === 0;
137
137
  }
138
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/git.ts"],"names":[],"mappings":"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"}
@@ -1 +1,2 @@
1
1
  export {};
2
+ //# sourceMappingURL=GitHubCLIHostsYAML.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitHubCLIHostsYAML.js","sourceRoot":"","sources":["../../../../src/interfaces/GitHubCLIHostsYAML.ts"],"names":[],"mappings":""}
package/dist/main.js CHANGED
@@ -25,3 +25,4 @@ async function main() {
25
25
  cli.register(Builtins.VersionCommand);
26
26
  await cli.runExit(args);
27
27
  }
28
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/main.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE/D,MAAM,IAAI,EAAE,CAAC;AAEb,KAAK,UAAU,IAAI;IACjB,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAE5C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC;QAClB,WAAW,EAAE,YAAY;QACzB,UAAU,EAAE,YAAY;QACxB,aAAa,EAAE,eAAe;KAC/B,CAAC,CAAC;IAEH,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC3B,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC1B,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC9B,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC1B,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC7B,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAE5B,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACnC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAEtC,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
package/dist/prompt.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // Both the Inquirer.js library and the Prompts library have a bug where text is duplicated in a Git
2
2
  // Bash terminal. Thus, we revert to using the simpler Prompt library.
3
- import { cancel, confirm, intro, isCancel, log, outro, spinner, text, } from "@zamiell/clack-prompts";
3
+ import { cancel, confirm, intro, isCancel, log, outro, spinner, text, } from "@clack/prompts";
4
4
  import chalk from "chalk";
5
5
  import { PROJECT_NAME } from "./constants.js";
6
6
  export function promptStart() {
@@ -53,3 +53,4 @@ export function promptError(msg) {
53
53
  cancel(msg);
54
54
  process.exit(1);
55
55
  }
56
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../src/prompt.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,sEAAsE;AAEtE,OAAO,EACL,MAAM,EACN,OAAO,EACP,KAAK,EACL,QAAQ,EACR,GAAG,EACH,KAAK,EACL,OAAO,EACP,IAAI,GACL,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,UAAU,WAAW;IACzB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,KAAK,CAAC,GAAG,CAAC,CAAC;IACX,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAW,EACX,YAAY,GAAG,IAAI;IAEnB,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC;QAC1B,OAAO,EAAE,GAAG;QACZ,YAAY,EAAE,YAAY;KAC3B,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,CAAC,WAAW,CAAC,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6BAA6B;AAC7B,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAW,EACX,YAAqB;IAErB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC;QACvB,OAAO,EAAE,GAAG;QACZ,YAAY,EAAE,YAAY;KAC3B,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,CAAC,WAAW,CAAC,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,kGAAkG;IAClG,SAAS;IACT,uEAAuE;IACvE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC/C,WAAW,CAAC,mCAAmC,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,kCAAkC;AACnD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,MAAM,CAAC,GAAG,OAAO,CAAC;QAChB,SAAS,EAAE,OAAO;KACnB,CAAC,CAAC;IACH,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACb,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,CAAC,GAAG,CAAC,CAAC;IACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -3,7 +3,7 @@ runs:
3
3
 
4
4
  steps:
5
5
  - name: Setup Node.js
6
- uses: actions/setup-node@v4
6
+ uses: actions/setup-node@v5
7
7
  with:
8
8
  node-version: lts/*
9
9
  cache: PACKAGE_MANAGER_NAME
@@ -81,6 +81,7 @@ out
81
81
  # Nuxt.js build / generate output
82
82
  .nuxt
83
83
  dist
84
+ .output
84
85
 
85
86
  # Gatsby files
86
87
  .cache/
@@ -134,6 +135,7 @@ dist
134
135
  !.yarn/sdks
135
136
  !.yarn/versions
136
137
 
137
- # Vite logs files
138
+ # Vite files
138
139
  vite.config.js.timestamp-*
139
140
  vite.config.ts.timestamp-*
141
+ .vite/
@@ -1,8 +1,7 @@
1
1
  {
2
2
  "name": "project-name",
3
3
  "version": "0.0.0",
4
- "description": "",
5
- "keywords": [],
4
+ "description": "A TypeScript project.",
6
5
  "homepage": "https://github.com/author-name/project-name",
7
6
  "bugs": {
8
7
  "url": "https://github.com/author-name/project-name/issues"
@@ -15,10 +14,7 @@
15
14
  "author": "author-name",
16
15
  "type": "module",
17
16
  "files": [
18
- "dist",
19
- "LICENSE",
20
- "package.json",
21
- "README.md"
17
+ "dist"
22
18
  ],
23
19
  "scripts": {
24
20
  "build": "tsx ./scripts/build.ts",
@@ -4,9 +4,9 @@
4
4
  // @ts-check
5
5
 
6
6
  import { completeConfigBase } from "eslint-config-complete";
7
- import tseslint from "typescript-eslint";
7
+ import { defineConfig } from "eslint/config";
8
8
 
9
- export default tseslint.config(
9
+ export default defineConfig(
10
10
  // https://github.com/complete-ts/complete/blob/main/packages/eslint-config-complete/src/base.js
11
11
  ...completeConfigBase,
12
12
 
@@ -23,7 +23,7 @@ await lintScript(async () => {
23
23
 
24
24
  // Use CSpell to spell check every file.
25
25
  // - "--no-progress" and "--no-summary" make it only output errors.
26
- $`cspell --no-progress --no-summary .`,
26
+ $`cspell --no-progress --no-summary`,
27
27
 
28
28
  // Check for unused words in the CSpell configuration file.
29
29
  $`cspell-check-unused-words`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "complete-cli",
3
- "version": "1.3.2",
3
+ "version": "1.3.4",
4
4
  "description": "A command line tool for bootstrapping TypeScript projects.",
5
5
  "keywords": [
6
6
  "typescript"
@@ -22,10 +22,7 @@
22
22
  "files": [
23
23
  "dist",
24
24
  "file-templates",
25
- "src",
26
- "LICENSE",
27
- "package.json",
28
- "README.md"
25
+ "src"
29
26
  ],
30
27
  "scripts": {
31
28
  "build": "tsx ./scripts/build.ts",
@@ -34,22 +31,22 @@
34
31
  "test": "tsx --test"
35
32
  },
36
33
  "dependencies": {
37
- "@zamiell/clack-prompts": "0.10.2",
38
- "chalk": "5.5.0",
34
+ "@clack/prompts": "0.11.0",
35
+ "chalk": "5.6.0",
39
36
  "clipanion": "4.0.0-rc.4",
40
37
  "complete-common": "2.5.0",
41
- "complete-node": "7.4.6",
38
+ "complete-node": "9.3.1",
42
39
  "klaw-sync": "7.0.0",
43
40
  "yaml": "2.8.1"
44
41
  },
45
42
  "devDependencies": {
46
43
  "@types/klaw-sync": "6.0.5",
47
- "@types/node": "24.2.0",
48
- "ts-loader": "9.5.2",
44
+ "@types/node": "24.3.1",
45
+ "ts-loader": "9.5.4",
49
46
  "tsconfig-paths-webpack-plugin": "4.2.0",
50
47
  "typescript": "5.9.2",
51
- "typescript-eslint": "8.39.0",
52
- "webpack": "5.101.0",
48
+ "typescript-eslint": "8.42.0",
49
+ "webpack": "5.101.3",
53
50
  "webpack-cli": "6.0.1",
54
51
  "webpack-shebang-plugin": "1.1.8"
55
52
  },
@@ -3,12 +3,12 @@ import { Command, Option } from "clipanion";
3
3
  import { ReadonlySet } from "complete-common";
4
4
  import {
5
5
  $,
6
- deleteFileOrDirectoryAsync,
6
+ deleteFileOrDirectory,
7
7
  fatalError,
8
8
  isDirectory,
9
- isFileAsync,
10
- readFileAsync,
11
- writeFileAsync,
9
+ isFile,
10
+ readFile,
11
+ writeFile,
12
12
  } from "complete-node";
13
13
  import klawSync from "klaw-sync";
14
14
  import os from "node:os";
@@ -80,10 +80,14 @@ async function checkTemplateDirectory(
80
80
  ): Promise<boolean> {
81
81
  let oneOrMoreErrors = false;
82
82
 
83
- for (const klawItem of klawSync(templateDirectory)) {
83
+ // We use `klawSync` instead of `klaw` so that the output will be deterministic.
84
+ const klawItems = klawSync(templateDirectory);
85
+ for (const klawItem of klawItems) {
84
86
  const templateFilePath = klawItem.path;
85
87
 
86
- if (isDirectory(templateFilePath)) {
88
+ // eslint-disable-next-line no-await-in-loop
89
+ const templateExists = await isDirectory(templateFilePath);
90
+ if (templateExists) {
87
91
  continue;
88
92
  }
89
93
 
@@ -171,7 +175,7 @@ async function compareTextFiles(
171
175
  templateFilePath: string,
172
176
  verbose: boolean,
173
177
  ): Promise<boolean> {
174
- const fileExists = await isFileAsync(projectFilePath);
178
+ const fileExists = await isFile(projectFilePath);
175
179
  if (!fileExists) {
176
180
  console.log(`Failed to find the following file: ${projectFilePath}`);
177
181
  printTemplateLocation(templateFilePath);
@@ -203,8 +207,8 @@ async function compareTextFiles(
203
207
  printTemplateLocation(templateFilePath);
204
208
 
205
209
  if (verbose) {
206
- const originalTemplateFile = await readFileAsync(templateFilePath);
207
- const originalProjectFile = await readFileAsync(projectFilePath);
210
+ const originalTemplateFile = await readFile(templateFilePath);
211
+ const originalProjectFile = await readFile(projectFilePath);
208
212
 
209
213
  console.log("--- Original template file: ---\n");
210
214
  console.log(originalTemplateFile);
@@ -224,8 +228,8 @@ async function compareTextFiles(
224
228
  const tempProjectFilePath = path.join(tempDir, "tempProjectFile.txt");
225
229
  const tempTemplateFilePath = path.join(tempDir, "tempTemplateFile.txt");
226
230
 
227
- await writeFileAsync(tempProjectFilePath, projectFileObject.text);
228
- await writeFileAsync(tempTemplateFilePath, templateFileObject.text);
231
+ await writeFile(tempProjectFilePath, projectFileObject.text);
232
+ await writeFile(tempTemplateFilePath, templateFileObject.text);
229
233
 
230
234
  try {
231
235
  await $`diff ${tempProjectFilePath} ${tempTemplateFilePath} --ignore-blank-lines`;
@@ -233,8 +237,8 @@ async function compareTextFiles(
233
237
  // `diff` will exit with a non-zero code if the files are different, which is expected.
234
238
  }
235
239
 
236
- await deleteFileOrDirectoryAsync(tempProjectFilePath);
237
- await deleteFileOrDirectoryAsync(tempTemplateFilePath);
240
+ await deleteFileOrDirectory(tempProjectFilePath);
241
+ await deleteFileOrDirectory(tempTemplateFilePath);
238
242
 
239
243
  return false;
240
244
  }
@@ -245,7 +249,7 @@ async function getTruncatedFileText(
245
249
  linesBeforeIgnore: ReadonlySet<string>,
246
250
  ) {
247
251
  const fileName = path.basename(filePath);
248
- const fileContents = await readFileAsync(filePath);
252
+ const fileContents = await readFile(filePath);
249
253
 
250
254
  return getTruncatedText(
251
255
  fileName,
@@ -1,11 +1,6 @@
1
1
  import { Command, Option } from "clipanion";
2
2
  import { assertObject, isObject } from "complete-common";
3
- import {
4
- getFilePath,
5
- isFileAsync,
6
- readFileAsync,
7
- writeFileAsync,
8
- } from "complete-node";
3
+ import { getFilePath, isFile, readFile, writeFile } from "complete-node";
9
4
  import path from "node:path";
10
5
 
11
6
  export class MetadataCommand extends Command {
@@ -29,11 +24,11 @@ export class MetadataCommand extends Command {
29
24
  const packageJSONPath = await getFilePath("package.json", undefined);
30
25
  const packageRoot = path.dirname(packageJSONPath);
31
26
  const packageMetadataPath = path.join(packageRoot, "package-metadata.json");
32
- const packageMetadataExists = await isFileAsync(packageMetadataPath);
27
+ const packageMetadataExists = await isFile(packageMetadataPath);
33
28
 
34
29
  let packageMetadata: Record<string, unknown>;
35
30
  if (packageMetadataExists) {
36
- const packageMetadataContents = await readFileAsync(packageMetadataPath);
31
+ const packageMetadataContents = await readFile(packageMetadataPath);
37
32
  const packageMetadataUnknown = JSON.parse(
38
33
  packageMetadataContents,
39
34
  ) as unknown;
@@ -61,7 +56,7 @@ export class MetadataCommand extends Command {
61
56
  };
62
57
 
63
58
  const packageMetadataJSON = JSON.stringify(packageMetadata, undefined, 2);
64
- await writeFileAsync(packageMetadataPath, packageMetadataJSON);
59
+ await writeFile(packageMetadataPath, packageMetadataJSON);
65
60
 
66
61
  const verb = packageMetadataExists ? "modified" : "created";
67
62
  console.log(`Successfully ${verb}: ${packageMetadataPath}`);
@@ -8,13 +8,13 @@ import {
8
8
  getPackageManagerInstallCommand,
9
9
  getPackageManagerLockFileName,
10
10
  getPackageManagersForProject,
11
- isFileAsync,
11
+ isFile,
12
12
  isGitRepository,
13
13
  isGitRepositoryClean,
14
14
  isLoggedInToNPM,
15
15
  readFile,
16
16
  updatePackageJSONDependencies,
17
- writeFileAsync,
17
+ writeFile,
18
18
  } from "complete-node";
19
19
  import path from "node:path";
20
20
  import { CWD, DEFAULT_PACKAGE_MANAGER } from "../constants.js";
@@ -70,7 +70,7 @@ async function validate() {
70
70
  );
71
71
  }
72
72
 
73
- const packageJSONExists = await isFileAsync("package.json");
73
+ const packageJSONExists = await isFile("package.json");
74
74
  if (!packageJSONExists) {
75
75
  fatalError(
76
76
  'Failed to find the "package.json" file in the current working directory.',
@@ -190,16 +190,16 @@ async function incrementVersion(versionBumpType: string) {
190
190
 
191
191
  async function unsetDevelopmentConstants() {
192
192
  const constantsTSPath = path.join(CWD, "src", "constants.ts");
193
- const constantsTSExists = await isFileAsync(constantsTSPath);
193
+ const constantsTSExists = await isFile(constantsTSPath);
194
194
  if (!constantsTSExists) {
195
195
  return;
196
196
  }
197
197
 
198
- const constantsTS = readFile(constantsTSPath);
198
+ const constantsTS = await readFile(constantsTSPath);
199
199
  const newConstantsTS = constantsTS
200
200
  .replace("const IS_DEV = true", "const IS_DEV = false")
201
201
  .replace("const DEBUG = true", "const DEBUG = false");
202
- await writeFileAsync(constantsTSPath, newConstantsTS);
202
+ await writeFile(constantsTSPath, newConstantsTS);
203
203
  }
204
204
 
205
205
  async function tryRunNPMScript(scriptName: string) {
@@ -1,24 +1,28 @@
1
1
  import chalk from "chalk";
2
- import {
3
- deleteFileOrDirectory,
4
- fileOrDirectoryExists,
5
- isDirectory,
6
- } from "complete-node";
2
+ import { deleteFileOrDirectory, isDirectory, isFile } from "complete-node";
7
3
  import { CWD } from "../../constants.js";
8
4
  import { getInputYesNo, promptEnd, promptLog } from "../../prompt.js";
9
5
 
6
+ /** @throws If the project path is not a file or a directory. */
10
7
  export async function checkIfProjectPathExists(
11
8
  projectPath: string,
12
9
  yes: boolean,
13
10
  ): Promise<void> {
14
- if (projectPath === CWD || !fileOrDirectoryExists(projectPath)) {
11
+ if (projectPath === CWD) {
15
12
  return;
16
13
  }
17
14
 
18
- const fileType = isDirectory(projectPath) ? "directory" : "file";
15
+ const file = await isFile(projectPath);
16
+ const directory = await isDirectory(projectPath);
17
+ if (!file && !directory) {
18
+ throw new Error(
19
+ `Failed to detect if the path was a file or a directory: ${projectPath}`,
20
+ );
21
+ }
22
+ const fileType = file ? "file" : "directory";
19
23
 
20
24
  if (yes) {
21
- deleteFileOrDirectory(projectPath);
25
+ await deleteFileOrDirectory(projectPath);
22
26
  promptLog(`Deleted ${fileType}: ${chalk.green(projectPath)}`);
23
27
  return;
24
28
  }
@@ -32,5 +36,5 @@ export async function checkIfProjectPathExists(
32
36
  promptEnd("Ok then. Goodbye.");
33
37
  }
34
38
 
35
- deleteFileOrDirectory(projectPath);
39
+ await deleteFileOrDirectory(projectPath);
36
40
  }