complete-cli 1.4.1 → 1.5.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.
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataCommand.js","sourceRoot":"","sources":["../../../../src/commands/MetadataCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,OAAO,eAAgB,SAAQ,OAAO;IAC1C,MAAM,CAAU,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAE9C,iCAAiC;IACjC,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IAEH,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACrB,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IAEH,MAAM,CAAU,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACpC,WAAW,EACT,wIAAwI;KAC3I,CAAC,CAAC;IAEH,KAAK,CAAC,OAAO;QACX,MAAM,eAAe,GAAG,MAAM,WAAW,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QACrE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAClD,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC;QAC5E,MAAM,qBAAqB,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAEhE,IAAI,eAAwC,CAAC;QAC7C,IAAI,qBAAqB,EAAE,CAAC;YAC1B,MAAM,uBAAuB,GAAG,MAAM,QAAQ,CAAC,mBAAmB,CAAC,CAAC;YACpE,MAAM,sBAAsB,GAAG,IAAI,CAAC,KAAK,CACvC,uBAAuB,CACb,CAAC;YACb,YAAY,CACV,sBAAsB,EACtB,yCAAyC,mBAAmB,EAAE,CAC/D,CAAC;YACF,eAAe,GAAG,sBAAsB,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,eAAe,GAAG;gBAChB,SAAS,EACP,mIAAmI;aACtI,CAAC;QACJ,CAAC;QAED,IAAI,YAAqC,CAAC;QAC1C,IAAI,QAAQ,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;YAC9C,mEAAmE;YACnE,YAAY,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,YAAY,GAAG,EAAE,CAAC;YAClB,eAAe,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC;QACjD,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG;YAClC,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;SACjC,CAAC;QAEF,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAC1E,MAAM,SAAS,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;QAE1D,MAAM,IAAI,GAAG,qBAAqB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,KAAK,mBAAmB,EAAE,CAAC,CAAC;IAC9D,CAAC"}
1
+ {"version":3,"file":"MetadataCommand.js","sourceRoot":"","sources":["../../../../src/commands/MetadataCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,OAAO,eAAgB,SAAQ,OAAO;IAC1C,MAAM,CAAU,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAE9C,iCAAiC;IACjC,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IAEH,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACrB,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IAEH,MAAM,CAAU,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACpC,WAAW,EACT,wIAAwI;KAC3I,CAAC,CAAC;IAEH,KAAK,CAAC,OAAO;QACX,MAAM,eAAe,GAAG,MAAM,WAAW,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QACrE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAClD,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC;QAC5E,MAAM,qBAAqB,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAEhE,IAAI,eAAwC,CAAC;QAC7C,IAAI,qBAAqB,EAAE,CAAC;YAC1B,MAAM,uBAAuB,GAAG,MAAM,QAAQ,CAAC,mBAAmB,CAAC,CAAC;YACpE,MAAM,sBAAsB,GAAY,IAAI,CAAC,KAAK,CAChD,uBAAuB,CACxB,CAAC;YACF,YAAY,CACV,sBAAsB,EACtB,yCAAyC,mBAAmB,EAAE,CAC/D,CAAC;YACF,eAAe,GAAG,sBAAsB,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,eAAe,GAAG;gBAChB,SAAS,EACP,mIAAmI;aACtI,CAAC;QACJ,CAAC;QAED,IAAI,YAAqC,CAAC;QAC1C,IAAI,QAAQ,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;YAC9C,mEAAmE;YACnE,YAAY,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,YAAY,GAAG,EAAE,CAAC;YAClB,eAAe,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC;QACjD,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG;YAClC,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;SACjC,CAAC;QAEF,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAC1E,MAAM,SAAS,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;QAE1D,MAAM,IAAI,GAAG,qBAAqB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,KAAK,mBAAmB,EAAE,CAAC,CAAC;IAC9D,CAAC"}
@@ -1,4 +1,4 @@
1
- import { assertObject } from "complete-common";
1
+ import { assertObject, isArrayString } from "complete-common";
2
2
  import { $, $q, commandExists, getJSONC, isFile } from "complete-node";
3
3
  import path from "node:path";
4
4
  import { getInputYesNo, promptError, promptLog } from "../../prompt.js";
@@ -48,13 +48,8 @@ async function getExtensionsFromJSON(projectPath) {
48
48
  const extensionsJSON = await getJSONC(extensionsJSONPath);
49
49
  assertObject(extensionsJSON, `The "${extensionsJSONPath}" file is not an object.`);
50
50
  const { recommendations } = extensionsJSON;
51
- if (!Array.isArray(recommendations)) {
52
- promptError('The "recommendations" field in the "extensions.json" file is not an array.');
53
- }
54
- for (const recommendation of recommendations) {
55
- if (typeof recommendation !== "string") {
56
- promptError('One of the entries in the "recommendations" field in the "extensions.json" file is not a string.');
57
- }
51
+ if (!isArrayString(recommendations)) {
52
+ promptError('The "recommendations" field in the "extensions.json" file is not an array of strings.');
58
53
  }
59
54
  return recommendations;
60
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"vsCodeInit.js","sourceRoot":"","sources":["../../../../../src/commands/init/vsCodeInit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vsCodeInit.js","sourceRoot":"","sources":["../../../../../src/commands/init/vsCodeInit.ts"],"names":[],"mappings":"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"}
@@ -12,9 +12,12 @@
12
12
  ".env*": "shellscript", // e.g. ".env.example" is the same as ".env".
13
13
  },
14
14
 
15
- // We want to always use "lf" to be consistent with all platforms.
15
+ // Always use "lf" to be consistent with all platforms.
16
16
  "files.eol": "\n",
17
17
 
18
+ // Automatically insert a trailing newline when saving a file to match the POSIX standard.
19
+ "files.insertFinalNewline": true,
20
+
18
21
  // Automatically remove all trailing whitespace when saving a file.
19
22
  "files.trimTrailingWhitespace": true,
20
23
 
@@ -14,11 +14,9 @@ await lintCommands(import.meta.dirname, [
14
14
  "prettier --log-level=warn --check .",
15
15
 
16
16
  // Use Knip to check for unused files, exports, and dependencies.
17
- // - "--no-progress" - Don't show dynamic progress updates. Progress is automatically disabled in
18
- // CI environments.
19
17
  // - "--treat-config-hints-as-errors" - Exit with non-zero code (1) if there are any configuration
20
18
  // hints.
21
- "knip --no-progress --treat-config-hints-as-errors",
19
+ "knip --treat-config-hints-as-errors",
22
20
 
23
21
  // Use CSpell to spell check every file.
24
22
  // - "--no-progress" and "--no-summary" make it only output errors.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "complete-cli",
3
- "version": "1.4.1",
3
+ "version": "1.5.0",
4
4
  "description": "A command line tool for bootstrapping TypeScript projects.",
5
5
  "keywords": [
6
6
  "typescript"
@@ -34,20 +34,20 @@
34
34
  "@clack/prompts": "0.11.0",
35
35
  "chalk": "5.6.2",
36
36
  "clipanion": "4.0.0-rc.4",
37
- "complete-common": "2.5.0",
38
- "complete-node": "12.2.0",
37
+ "complete-common": "2.8.0",
38
+ "complete-node": "12.2.1",
39
39
  "klaw-sync": "7.0.0",
40
40
  "source-map-support": "0.5.21",
41
41
  "yaml": "2.8.1"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@types/klaw-sync": "6.0.5",
45
- "@types/node": "24.7.1",
45
+ "@types/node": "24.7.2",
46
46
  "@types/source-map-support": "0.5.10",
47
47
  "ts-loader": "9.5.4",
48
48
  "tsconfig-paths-webpack-plugin": "4.2.0",
49
49
  "typescript": "5.9.3",
50
- "typescript-eslint": "8.46.0",
50
+ "typescript-eslint": "8.46.1",
51
51
  "webpack": "5.102.1",
52
52
  "webpack-cli": "6.0.1",
53
53
  "webpack-shebang-plugin": "1.1.8"
@@ -29,9 +29,9 @@ export class MetadataCommand extends Command {
29
29
  let packageMetadata: Record<string, unknown>;
30
30
  if (packageMetadataExists) {
31
31
  const packageMetadataContents = await readFile(packageMetadataPath);
32
- const packageMetadataUnknown = JSON.parse(
32
+ const packageMetadataUnknown: unknown = JSON.parse(
33
33
  packageMetadataContents,
34
- ) as unknown;
34
+ );
35
35
  assertObject(
36
36
  packageMetadataUnknown,
37
37
  `Failed to parse the metadata file at: ${packageMetadataPath}`,
@@ -1,4 +1,4 @@
1
- import { assertObject } from "complete-common";
1
+ import { assertObject, isArrayString } from "complete-common";
2
2
  import { $, $q, commandExists, getJSONC, isFile } from "complete-node";
3
3
  import path from "node:path";
4
4
  import { getInputYesNo, promptError, promptLog } from "../../prompt.js";
@@ -82,21 +82,13 @@ async function getExtensionsFromJSON(
82
82
  );
83
83
 
84
84
  const { recommendations } = extensionsJSON;
85
- if (!Array.isArray(recommendations)) {
85
+ if (!isArrayString(recommendations)) {
86
86
  promptError(
87
- 'The "recommendations" field in the "extensions.json" file is not an array.',
87
+ 'The "recommendations" field in the "extensions.json" file is not an array of strings.',
88
88
  );
89
89
  }
90
90
 
91
- for (const recommendation of recommendations) {
92
- if (typeof recommendation !== "string") {
93
- promptError(
94
- 'One of the entries in the "recommendations" field in the "extensions.json" file is not a string.',
95
- );
96
- }
97
- }
98
-
99
- return recommendations as string[];
91
+ return recommendations;
100
92
  }
101
93
 
102
94
  async function promptVSCode(