isaacscript 1.2.2 → 1.2.3
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/package.json +3 -3
- package/dist/src/commands/copy/copy.js +12 -10
- package/dist/src/commands/copy/copy.js.map +1 -1
- package/dist/src/commands/init/checkIfProjectPathExists.js +2 -2
- package/dist/src/commands/init/checkIfProjectPathExists.js.map +1 -1
- package/dist/src/commands/init/checkModTargetDirectory.js +2 -2
- package/dist/src/commands/init/checkModTargetDirectory.js.map +1 -1
- package/dist/src/commands/init/createMod.js +55 -34
- package/dist/src/commands/init/createMod.js.map +1 -1
- package/dist/src/commands/init/init.js +10 -8
- package/dist/src/commands/init/init.js.map +1 -1
- package/dist/src/commands/init/installVSCodeExtensions.js +3 -2
- package/dist/src/commands/init/installVSCodeExtensions.js.map +1 -1
- package/dist/src/commands/init/promptVSCode.js +7 -7
- package/dist/src/commands/init/promptVSCode.js.map +1 -1
- package/dist/src/commands/monitor/copyWatcherMod.js +7 -7
- package/dist/src/commands/monitor/copyWatcherMod.js.map +1 -1
- package/dist/src/commands/monitor/monitor.js +4 -3
- package/dist/src/commands/monitor/monitor.js.map +1 -1
- package/dist/src/commands/monitor/saveDatWriter/saveDatWriter.js +1 -1
- package/dist/src/commands/monitor/saveDatWriter/saveDatWriter.js.map +1 -1
- package/dist/src/commands/monitor/touchWatcherSaveDatFiles.js +3 -3
- package/dist/src/commands/monitor/touchWatcherSaveDatFiles.js.map +1 -1
- package/dist/src/commands/publish/publish.js +48 -46
- package/dist/src/commands/publish/publish.js.map +1 -1
- package/dist/src/configFile.js +4 -3
- package/dist/src/configFile.js.map +1 -1
- package/dist/src/exec.js +79 -0
- package/dist/src/exec.js.map +1 -0
- package/dist/src/file.js +35 -5
- package/dist/src/file.js.map +1 -1
- package/dist/src/main.js +1 -1
- package/dist/src/main.js.map +1 -1
- package/dist/src/monkeyPatch.js +4 -4
- package/dist/src/monkeyPatch.js.map +1 -1
- package/dist/src/parseArgs.js +20 -1
- package/dist/src/parseArgs.js.map +1 -1
- package/dist/src/util.js +22 -57
- package/dist/src/util.js.map +1 -1
- package/dist/src/validateNodeVersion.js +6 -24
- package/dist/src/validateNodeVersion.js.map +1 -1
- package/package.json +3 -3
- package/src/commands/copy/copy.ts +19 -10
- package/src/commands/init/checkIfProjectPathExists.ts +2 -1
- package/src/commands/init/checkModTargetDirectory.ts +2 -1
- package/src/commands/init/createMod.ts +87 -29
- package/src/commands/init/init.ts +15 -7
- package/src/commands/init/installVSCodeExtensions.ts +4 -2
- package/src/commands/init/promptVSCode.ts +12 -7
- package/src/commands/monitor/copyWatcherMod.ts +10 -7
- package/src/commands/monitor/monitor.ts +5 -3
- package/src/commands/monitor/saveDatWriter/saveDatWriter.ts +1 -1
- package/src/commands/monitor/touchWatcherSaveDatFiles.ts +6 -3
- package/src/commands/publish/publish.ts +65 -55
- package/src/configFile.ts +9 -3
- package/src/exec.ts +102 -0
- package/src/file.ts +48 -5
- package/src/main.ts +1 -1
- package/src/monkeyPatch.ts +4 -2
- package/src/parseArgs.ts +22 -1
- package/src/util.ts +29 -79
- package/src/validateNodeVersion.ts +7 -39
package/dist/src/parseArgs.js
CHANGED
|
@@ -27,6 +27,11 @@ function parseArgs() {
|
|
|
27
27
|
alias: "c",
|
|
28
28
|
type: "boolean",
|
|
29
29
|
description: "Enable crash debugging",
|
|
30
|
+
})
|
|
31
|
+
.option("verbose", {
|
|
32
|
+
alias: "v",
|
|
33
|
+
type: "boolean",
|
|
34
|
+
description: "Enable verbose output",
|
|
30
35
|
}))
|
|
31
36
|
.command("init [name]", `Initialize a new ${constants_1.PROJECT_NAME} mod.`, (builder) => builder
|
|
32
37
|
.option("use-current-dir", {
|
|
@@ -54,8 +59,17 @@ function parseArgs() {
|
|
|
54
59
|
alias: "i",
|
|
55
60
|
type: "boolean",
|
|
56
61
|
description: 'Don\'t automatically run "npm install" after initializing the project',
|
|
62
|
+
})
|
|
63
|
+
.option("verbose", {
|
|
64
|
+
alias: "v",
|
|
65
|
+
type: "boolean",
|
|
66
|
+
description: "Enable verbose output",
|
|
67
|
+
}))
|
|
68
|
+
.command("copy", "Only compile & copy the mod.", (builder) => builder.option("verbose", {
|
|
69
|
+
alias: "v",
|
|
70
|
+
type: "boolean",
|
|
71
|
+
description: "Enable verbose output",
|
|
57
72
|
}))
|
|
58
|
-
.command("copy", "Only compile & copy the mod.")
|
|
59
73
|
.command("publish", "Bump the version & automatically publish the new files using the steamcmd tool.", (builder) => builder
|
|
60
74
|
.option("skip", {
|
|
61
75
|
alias: "s",
|
|
@@ -76,6 +90,11 @@ function parseArgs() {
|
|
|
76
90
|
alias: "u",
|
|
77
91
|
type: "boolean",
|
|
78
92
|
description: "only upload the mod to the Steam Workshop (without doing anything else)",
|
|
93
|
+
})
|
|
94
|
+
.option("verbose", {
|
|
95
|
+
alias: "v",
|
|
96
|
+
type: "boolean",
|
|
97
|
+
description: "Enable verbose output",
|
|
79
98
|
}))
|
|
80
99
|
.alias("h", "help") // By default, only "--help" is enabled
|
|
81
100
|
.alias("v", "version"); // By default, only "--version" is enabled
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseArgs.js","sourceRoot":"","sources":["../../src/parseArgs.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,2CAA2C;AAE3C,SAAgB,SAAS;IACvB,MAAM,WAAW,GAAG,IAAA,eAAK,EAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC7C,MAAM,EAAE;SACR,KAAK,CAAC,wCAAwC,CAAC;SAC/C,UAAU,CAAC,aAAa,CAAC;SAEzB,OAAO,CAAC,SAAS,EAAE,0CAA0C,EAAE,CAAC,OAAO,EAAE,EAAE,CAC1E,OAAO;SACJ,MAAM,CAAC,gBAAgB,EAAE;QACxB,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,oDAAoD;KAClE,CAAC;SACD,MAAM,CAAC,WAAW,EAAE;QACnB,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAClB,WAAW,EAAE,oCAAoC;KAClD,CAAC;SACD,MAAM,CAAC,aAAa,EAAE;QACrB,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,wBAAwB;KACtC,CAAC,CACL;SAEA,OAAO,CACN,aAAa,EACb,oBAAoB,wBAAY,OAAO,EACvC,CAAC,OAAO,EAAE,EAAE,CACV,OAAO;SACJ,MAAM,CAAC,iBAAiB,EAAE;QACzB,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,SAAS;QACf,WAAW,EACT,uDAAuD;KAC1D,CAAC;SACD,MAAM,CAAC,gBAAgB,EAAE;QACxB,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,oDAAoD;KAClE,CAAC;SACD,MAAM,CAAC,WAAW,EAAE;QACnB,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAClB,WAAW,EAAE,oCAAoC;KAClD,CAAC;SACD,MAAM,CAAC,QAAQ,EAAE;QAChB,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,iDAAiD;KAC/D,CAAC;SACD,MAAM,CAAC,kBAAkB,EAAE;QAC1B,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,SAAS;QACf,WAAW,EACT,uEAAuE;KAC1E,CAAC,CACP;SAEA,OAAO,CAAC,MAAM,EAAE,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"parseArgs.js","sourceRoot":"","sources":["../../src/parseArgs.ts"],"names":[],"mappings":"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"}
|
package/dist/src/util.js
CHANGED
|
@@ -3,9 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
7
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
-
const child_process_1 = require("child_process");
|
|
6
|
+
exports.parseSemVer = exports.parseIntSafe = exports.hasWhiteSpace = exports.getTime = exports.getModTargetDirectoryName = exports.error = exports.ensureAllCases = void 0;
|
|
9
7
|
const moment_1 = __importDefault(require("moment"));
|
|
10
8
|
const constants_1 = require("./constants");
|
|
11
9
|
const ensureAllCases = (obj) => obj;
|
|
@@ -15,60 +13,6 @@ function error(...args) {
|
|
|
15
13
|
process.exit(1);
|
|
16
14
|
}
|
|
17
15
|
exports.error = error;
|
|
18
|
-
function execExe(path, cwd = constants_1.CWD) {
|
|
19
|
-
let stdout;
|
|
20
|
-
try {
|
|
21
|
-
const buffer = (0, child_process_1.execSync)(`"${path}"`, {
|
|
22
|
-
cwd,
|
|
23
|
-
});
|
|
24
|
-
stdout = buffer.toString().trim();
|
|
25
|
-
}
|
|
26
|
-
catch (err) {
|
|
27
|
-
console.error(`Failed to run "${chalk_1.default.green(path)}":`, err);
|
|
28
|
-
process.exit(1);
|
|
29
|
-
}
|
|
30
|
-
return stdout;
|
|
31
|
-
}
|
|
32
|
-
exports.execExe = execExe;
|
|
33
|
-
/** Returns an array of exit status and stdout. */
|
|
34
|
-
function execShell(command, args = [], allowFailure = false, cwd = constants_1.CWD) {
|
|
35
|
-
// On Windows, "spawnSync()" will not account for spaces in arguments
|
|
36
|
-
// Thus, wrap everything in a double quote
|
|
37
|
-
// This will cause arguments that naturally have double quotes to fail
|
|
38
|
-
if (command.includes('"')) {
|
|
39
|
-
throw new Error("execShell cannot execute commands with double quotes in the command.");
|
|
40
|
-
}
|
|
41
|
-
for (let i = 0; i < args.length; i++) {
|
|
42
|
-
if (args[i].includes('"')) {
|
|
43
|
-
throw new Error("execShell cannot execute commands with double quotes in the arguments.");
|
|
44
|
-
}
|
|
45
|
-
args[i] = `"${args[i]}"`; // eslint-disable-line no-param-reassign
|
|
46
|
-
}
|
|
47
|
-
const commandDescription = `${command} ${args.join(" ")}`.trim();
|
|
48
|
-
let spawnSyncReturns;
|
|
49
|
-
try {
|
|
50
|
-
spawnSyncReturns = (0, child_process_1.spawnSync)(command, args, {
|
|
51
|
-
shell: true,
|
|
52
|
-
cwd,
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
catch (err) {
|
|
56
|
-
error(`Failed to run the "${chalk_1.default.green(commandDescription)}" command:`, err);
|
|
57
|
-
}
|
|
58
|
-
const exitStatus = spawnSyncReturns.status;
|
|
59
|
-
const stdout = spawnSyncReturns.output.join("\n").trim();
|
|
60
|
-
if (exitStatus !== 0) {
|
|
61
|
-
if (allowFailure) {
|
|
62
|
-
return [exitStatus, stdout];
|
|
63
|
-
}
|
|
64
|
-
console.error(`Failed to run the "${chalk_1.default.green(commandDescription)}" command with an exit code of ${exitStatus}.`);
|
|
65
|
-
console.error("The output was as follows:");
|
|
66
|
-
console.error(stdout);
|
|
67
|
-
process.exit(1);
|
|
68
|
-
}
|
|
69
|
-
return [exitStatus, stdout];
|
|
70
|
-
}
|
|
71
|
-
exports.execShell = execShell;
|
|
72
16
|
function getModTargetDirectoryName(config) {
|
|
73
17
|
return config.customTargetModDirectoryName === undefined
|
|
74
18
|
? constants_1.CURRENT_DIRECTORY_NAME
|
|
@@ -110,4 +54,25 @@ function parseIntSafe(input) {
|
|
|
110
54
|
return parseInt(trimmedInput, 10);
|
|
111
55
|
}
|
|
112
56
|
exports.parseIntSafe = parseIntSafe;
|
|
57
|
+
function parseSemVer(versionString) {
|
|
58
|
+
const match = /^v*(\d+)\.(\d+)\.(\d+)/g.exec(versionString);
|
|
59
|
+
if (match === null) {
|
|
60
|
+
error(`Failed to parse the version string of: ${versionString}`);
|
|
61
|
+
}
|
|
62
|
+
const [, majorVersionString, minorVersionString, patchVersionString] = match;
|
|
63
|
+
const majorVersion = parseIntSafe(majorVersionString);
|
|
64
|
+
if (Number.isNaN(majorVersion)) {
|
|
65
|
+
error(`Failed to parse the major version number from: ${versionString}`);
|
|
66
|
+
}
|
|
67
|
+
const minorVersion = parseInt(minorVersionString, 10);
|
|
68
|
+
if (Number.isNaN(minorVersion)) {
|
|
69
|
+
error(`Failed to parse the minor version number from: ${versionString}`);
|
|
70
|
+
}
|
|
71
|
+
const patchVersion = parseInt(patchVersionString, 10);
|
|
72
|
+
if (Number.isNaN(patchVersion)) {
|
|
73
|
+
error(`Failed to parse the patch version number from: ${versionString}`);
|
|
74
|
+
}
|
|
75
|
+
return [majorVersion, minorVersion, patchVersion];
|
|
76
|
+
}
|
|
77
|
+
exports.parseSemVer = parseSemVer;
|
|
113
78
|
//# sourceMappingURL=util.js.map
|
package/dist/src/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,2CAAqD;AAG9C,MAAM,cAAc,GAAG,CAAC,GAAU,EAAS,EAAE,CAAC,GAAG,CAAC;AAA5C,QAAA,cAAc,kBAA8B;AAEzD,SAAgB,KAAK,CAAC,GAAG,IAAe;IACtC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAHD,sBAGC;AAED,SAAgB,yBAAyB,CAAC,MAAc;IACtD,OAAO,MAAM,CAAC,4BAA4B,KAAK,SAAS;QACtD,CAAC,CAAC,kCAAsB;QACxB,CAAC,CAAC,MAAM,CAAC,4BAA4B,CAAC;AAC1C,CAAC;AAJD,8DAIC;AAED,SAAgB,OAAO;IACrB,OAAO,IAAA,gBAAM,GAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,oBAAoB;AAC3D,CAAC;AAFD,0BAEC;AAED,sFAAsF;AACtF,SAAgB,aAAa,CAAC,CAAS;IACrC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAFD,sCAEC;AAED;;;GAGG;AACH,SAAgB,YAAY,CAAC,KAAa;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,OAAO,GAAG,CAAC;KACZ;IAED,6CAA6C;IAC7C,IAAI,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAEhC,MAAM,gBAAgB,GAAG,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACtD,IAAI,gBAAgB,EAAE;QACpB,uEAAuE;QACvE,YAAY,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;KAC1C;IAED,IAAI,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;QACvC,2CAA2C;QAC3C,OAAO,GAAG,CAAC;KACZ;IAED,IAAI,gBAAgB,EAAE;QACpB,kCAAkC;QAClC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;KACnC;IAED,OAAO,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AACpC,CAAC;AAzBD,oCAyBC;AAED,SAAgB,WAAW,CACzB,aAAqB;IAErB,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5D,IAAI,KAAK,KAAK,IAAI,EAAE;QAClB,KAAK,CAAC,0CAA0C,aAAa,EAAE,CAAC,CAAC;KAClE;IAED,MAAM,CAAC,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,GAAG,KAAK,CAAC;IAE7E,MAAM,YAAY,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;QAC9B,KAAK,CAAC,kDAAkD,aAAa,EAAE,CAAC,CAAC;KAC1E;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;QAC9B,KAAK,CAAC,kDAAkD,aAAa,EAAE,CAAC,CAAC;KAC1E;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;QAC9B,KAAK,CAAC,kDAAkD,aAAa,EAAE,CAAC,CAAC;KAC1E;IAED,OAAO,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;AACpD,CAAC;AA1BD,kCA0BC"}
|
|
@@ -7,36 +7,18 @@ exports.validateNodeVersion = void 0;
|
|
|
7
7
|
const chalk_1 = __importDefault(require("chalk"));
|
|
8
8
|
const constants_1 = require("./constants");
|
|
9
9
|
const util_1 = require("./util");
|
|
10
|
-
const
|
|
10
|
+
const REQUIRED_NODE_JS_MAJOR_VERSION = 16;
|
|
11
11
|
// This program requires Node to be at least v16.0.0,
|
|
12
12
|
// since that is the version that added the "fs.rmSync()" function
|
|
13
13
|
// (I tested on Node v15.0.0 and it failed)
|
|
14
14
|
function validateNodeVersion() {
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
if (
|
|
18
|
-
(0, util_1.error)(`Failed to parse your NodeJS version of: ${version}`);
|
|
19
|
-
}
|
|
20
|
-
const majorVersionString = match[1];
|
|
21
|
-
const majorVersion = parseInt(majorVersionString, 10);
|
|
22
|
-
if (Number.isNaN(majorVersion)) {
|
|
23
|
-
(0, util_1.error)(`Failed to parse the major version number from: ${majorVersionString}`);
|
|
24
|
-
}
|
|
25
|
-
const minorVersionString = match[2];
|
|
26
|
-
const minorVersion = parseInt(minorVersionString, 10);
|
|
27
|
-
if (Number.isNaN(minorVersion)) {
|
|
28
|
-
(0, util_1.error)(`Failed to parse the minor version number from: ${minorVersionString}`);
|
|
29
|
-
}
|
|
30
|
-
const patchVersionString = match[3];
|
|
31
|
-
const patchVersion = parseInt(patchVersionString, 10);
|
|
32
|
-
if (Number.isNaN(patchVersion)) {
|
|
33
|
-
(0, util_1.error)(`Failed to parse the patch version number from: ${patchVersionString}`);
|
|
34
|
-
}
|
|
35
|
-
if (majorVersion >= REQUIRED_MAJOR_VERSION) {
|
|
15
|
+
const nodeJSVersionString = process.version;
|
|
16
|
+
const [majorVersion] = (0, util_1.parseSemVer)(nodeJSVersionString);
|
|
17
|
+
if (majorVersion >= REQUIRED_NODE_JS_MAJOR_VERSION) {
|
|
36
18
|
return;
|
|
37
19
|
}
|
|
38
|
-
console.error(`Your Node.js version is: ${chalk_1.default.red(
|
|
39
|
-
console.error(`${constants_1.PROJECT_NAME} requires a Node.js version of ${chalk_1.default.red(
|
|
20
|
+
console.error(`Your Node.js version is: ${chalk_1.default.red(nodeJSVersionString)}`);
|
|
21
|
+
console.error(`${constants_1.PROJECT_NAME} requires a Node.js version of ${chalk_1.default.red(`${REQUIRED_NODE_JS_MAJOR_VERSION}.0.0`)} or greater.`);
|
|
40
22
|
console.error(`Please upgrade your version of Node.js before using ${constants_1.PROJECT_NAME}.`);
|
|
41
23
|
process.exit(1);
|
|
42
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateNodeVersion.js","sourceRoot":"","sources":["../../src/validateNodeVersion.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,2CAA2C;AAC3C,
|
|
1
|
+
{"version":3,"file":"validateNodeVersion.js","sourceRoot":"","sources":["../../src/validateNodeVersion.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,2CAA2C;AAC3C,iCAAqC;AAErC,MAAM,8BAA8B,GAAG,EAAE,CAAC;AAE1C,qDAAqD;AACrD,kEAAkE;AAClE,2CAA2C;AAC3C,SAAgB,mBAAmB;IACjC,MAAM,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IAC5C,MAAM,CAAC,YAAY,CAAC,GAAG,IAAA,kBAAW,EAAC,mBAAmB,CAAC,CAAC;IAExD,IAAI,YAAY,IAAI,8BAA8B,EAAE;QAClD,OAAO;KACR;IAED,OAAO,CAAC,KAAK,CAAC,4BAA4B,eAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;IAC5E,OAAO,CAAC,KAAK,CACX,GAAG,wBAAY,kCAAkC,eAAK,CAAC,GAAG,CACxD,GAAG,8BAA8B,MAAM,CACxC,cAAc,CAChB,CAAC;IACF,OAAO,CAAC,KAAK,CACX,uDAAuD,wBAAY,GAAG,CACvE,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAlBD,kDAkBC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "isaacscript",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.3",
|
|
4
4
|
"description": "A command line tool for managing Isaac mods written in TypeScript",
|
|
5
5
|
"homepage": "https://isaacscript.github.io/",
|
|
6
6
|
"bugs": {
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"isaacscript-tsconfig": "^1.1.8",
|
|
26
26
|
"jsonc-parser": "^3.0.0",
|
|
27
27
|
"moment": "^2.29.1",
|
|
28
|
-
"npm-check-updates": "^12.
|
|
28
|
+
"npm-check-updates": "^12.3.0",
|
|
29
29
|
"prompt": "^1.2.1",
|
|
30
30
|
"source-map": "^0.7.3",
|
|
31
31
|
"source-map-support": "^0.5.21",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"@types/command-exists": "^1.2.0",
|
|
40
40
|
"@types/figlet": "^1.5.4",
|
|
41
41
|
"@types/fs-extra": "^9.0.13",
|
|
42
|
-
"@types/node": "^17.0.
|
|
42
|
+
"@types/node": "^17.0.18",
|
|
43
43
|
"@types/prompt": "^1.1.2",
|
|
44
44
|
"@types/source-map-support": "^0.5.4",
|
|
45
45
|
"@types/update-notifier": "^5.1.0",
|
|
@@ -1,33 +1,42 @@
|
|
|
1
1
|
import path from "path";
|
|
2
2
|
import { MOD_SOURCE_PATH } from "../../constants";
|
|
3
|
+
import { execShell } from "../../exec";
|
|
3
4
|
import * as file from "../../file";
|
|
4
5
|
import { Config } from "../../types/Config";
|
|
5
|
-
import {
|
|
6
|
+
import { getModTargetDirectoryName } from "../../util";
|
|
7
|
+
|
|
8
|
+
export function copy(argv: Record<string, unknown>, config: Config): void {
|
|
9
|
+
const verbose = argv.verbose === true;
|
|
6
10
|
|
|
7
|
-
export function copy(config: Config): void {
|
|
8
11
|
const modTargetDirectoryName = getModTargetDirectoryName(config);
|
|
9
12
|
const modTargetPath = path.join(config.modsDirectory, modTargetDirectoryName);
|
|
10
|
-
|
|
13
|
+
|
|
14
|
+
compileAndCopy(MOD_SOURCE_PATH, modTargetPath, verbose);
|
|
11
15
|
}
|
|
12
16
|
|
|
13
17
|
export function compileAndCopy(
|
|
14
18
|
modSourcePath: string,
|
|
15
19
|
modTargetPath: string,
|
|
20
|
+
verbose: boolean,
|
|
16
21
|
): void {
|
|
17
|
-
compile();
|
|
22
|
+
compile(verbose);
|
|
18
23
|
// monkeyPatchMainLua(modSourcePath);
|
|
19
|
-
copyMod(modSourcePath, modTargetPath);
|
|
24
|
+
copyMod(modSourcePath, modTargetPath, verbose);
|
|
20
25
|
}
|
|
21
26
|
|
|
22
|
-
function compile() {
|
|
23
|
-
execShell("npx", ["tstl"]);
|
|
27
|
+
function compile(verbose: boolean) {
|
|
28
|
+
execShell("npx", ["tstl"], verbose);
|
|
24
29
|
console.log("Mod compiled successfully.");
|
|
25
30
|
}
|
|
26
31
|
|
|
27
|
-
function copyMod(
|
|
32
|
+
function copyMod(
|
|
33
|
+
modSourcePath: string,
|
|
34
|
+
modTargetPath: string,
|
|
35
|
+
verbose: boolean,
|
|
36
|
+
) {
|
|
28
37
|
if (file.exists(modTargetPath)) {
|
|
29
|
-
file.deleteFileOrDirectory(modTargetPath);
|
|
38
|
+
file.deleteFileOrDirectory(modTargetPath, verbose);
|
|
30
39
|
}
|
|
31
|
-
file.copy(modSourcePath, modTargetPath);
|
|
40
|
+
file.copy(modSourcePath, modTargetPath, verbose);
|
|
32
41
|
console.log("Mod copied successfully.");
|
|
33
42
|
}
|
|
@@ -6,6 +6,7 @@ import { error } from "../../util";
|
|
|
6
6
|
|
|
7
7
|
export async function checkIfProjectPathExists(
|
|
8
8
|
projectPath: string,
|
|
9
|
+
verbose: boolean,
|
|
9
10
|
): Promise<void> {
|
|
10
11
|
if (projectPath !== CWD && file.exists(projectPath)) {
|
|
11
12
|
const fileType = file.isDir(projectPath) ? "directory" : "file";
|
|
@@ -21,6 +22,6 @@ export async function checkIfProjectPathExists(
|
|
|
21
22
|
error("Ok then. Good-bye.");
|
|
22
23
|
}
|
|
23
24
|
|
|
24
|
-
file.deleteFileOrDirectory(projectPath);
|
|
25
|
+
file.deleteFileOrDirectory(projectPath, verbose);
|
|
25
26
|
}
|
|
26
27
|
}
|
|
@@ -8,6 +8,7 @@ import { error } from "../../util";
|
|
|
8
8
|
export async function checkModTargetDirectory(
|
|
9
9
|
modsDirectory: string,
|
|
10
10
|
projectName: string,
|
|
11
|
+
verbose: boolean,
|
|
11
12
|
): Promise<void> {
|
|
12
13
|
const modTargetPath = path.join(modsDirectory, projectName);
|
|
13
14
|
if (!file.exists(modTargetPath)) {
|
|
@@ -31,5 +32,5 @@ export async function checkModTargetDirectory(
|
|
|
31
32
|
error("Ok then. You delete it yourself. Good bye.");
|
|
32
33
|
}
|
|
33
34
|
|
|
34
|
-
file.deleteFileOrDirectory(modTargetPath);
|
|
35
|
+
file.deleteFileOrDirectory(modTargetPath, verbose);
|
|
35
36
|
}
|
|
@@ -19,10 +19,14 @@ import {
|
|
|
19
19
|
README_MD_TEMPLATES_PATH,
|
|
20
20
|
TEMPLATES_STATIC_DIR,
|
|
21
21
|
} from "../../constants";
|
|
22
|
+
import { execShell } from "../../exec";
|
|
22
23
|
import * as file from "../../file";
|
|
23
24
|
import { getInputString, getInputYesNo } from "../../prompt";
|
|
24
25
|
import { GitHubCLIHostsYAML } from "../../types/GitHubCLIHostsYAML";
|
|
25
|
-
import {
|
|
26
|
+
import { error, parseSemVer } from "../../util";
|
|
27
|
+
|
|
28
|
+
const REQUIRED_GIT_MAJOR_VERSION = 2;
|
|
29
|
+
const REQUIRED_GIT_MINOR_VERSION = 30;
|
|
26
30
|
|
|
27
31
|
export async function createMod(
|
|
28
32
|
projectName: string,
|
|
@@ -31,41 +35,42 @@ export async function createMod(
|
|
|
31
35
|
modsDirectory: string,
|
|
32
36
|
saveSlot: number,
|
|
33
37
|
skipNPMInstall: boolean,
|
|
38
|
+
verbose: boolean,
|
|
34
39
|
): Promise<void> {
|
|
35
40
|
if (createNewDir) {
|
|
36
|
-
file.makeDir(projectPath);
|
|
41
|
+
file.makeDir(projectPath, verbose);
|
|
37
42
|
}
|
|
38
43
|
|
|
39
44
|
const config = configFile.createObject(modsDirectory, saveSlot);
|
|
40
|
-
configFile.createFile(projectPath, config);
|
|
45
|
+
configFile.createFile(projectPath, config, verbose);
|
|
41
46
|
const targetModDirectory = path.join(config.modsDirectory, projectName);
|
|
42
47
|
|
|
43
|
-
makeSubdirectories(projectPath);
|
|
44
|
-
copyStaticFiles(projectPath);
|
|
45
|
-
copyDynamicFiles(projectName, projectPath, targetModDirectory);
|
|
46
|
-
updateNodeModules(projectPath);
|
|
47
|
-
await initGitRepository(projectPath, projectName);
|
|
48
|
-
installNodeModules(projectPath, skipNPMInstall);
|
|
48
|
+
makeSubdirectories(projectPath, verbose);
|
|
49
|
+
copyStaticFiles(projectPath, verbose);
|
|
50
|
+
copyDynamicFiles(projectName, projectPath, targetModDirectory, verbose);
|
|
51
|
+
updateNodeModules(projectPath, verbose);
|
|
52
|
+
await initGitRepository(projectPath, projectName, verbose);
|
|
53
|
+
installNodeModules(projectPath, skipNPMInstall, verbose);
|
|
49
54
|
|
|
50
55
|
console.log(`Successfully created mod: ${chalk.green(projectName)}`);
|
|
51
56
|
}
|
|
52
57
|
|
|
53
|
-
function makeSubdirectories(projectPath: string) {
|
|
58
|
+
function makeSubdirectories(projectPath: string, verbose: boolean) {
|
|
54
59
|
// The "src" directory is created during copying of static files
|
|
55
60
|
for (const subdirectory of ["mod"]) {
|
|
56
61
|
const srcPath = path.join(projectPath, subdirectory);
|
|
57
|
-
file.makeDir(srcPath);
|
|
62
|
+
file.makeDir(srcPath, verbose);
|
|
58
63
|
}
|
|
59
64
|
}
|
|
60
65
|
|
|
61
66
|
// Copy static files, like ".eslintrc.js", "tsconfig.json", etc.
|
|
62
|
-
function copyStaticFiles(projectPath: string) {
|
|
67
|
+
function copyStaticFiles(projectPath: string, verbose: boolean) {
|
|
63
68
|
const staticFileList = file.getDirList(TEMPLATES_STATIC_DIR);
|
|
64
69
|
staticFileList.forEach((fileName: string) => {
|
|
65
70
|
const templateFilePath = path.join(TEMPLATES_STATIC_DIR, fileName);
|
|
66
71
|
const destinationFilePath = path.join(projectPath, fileName);
|
|
67
72
|
if (!file.exists(destinationFilePath)) {
|
|
68
|
-
file.copy(templateFilePath, destinationFilePath);
|
|
73
|
+
file.copy(templateFilePath, destinationFilePath, verbose);
|
|
69
74
|
}
|
|
70
75
|
});
|
|
71
76
|
}
|
|
@@ -75,6 +80,7 @@ function copyDynamicFiles(
|
|
|
75
80
|
projectName: string,
|
|
76
81
|
projectPath: string,
|
|
77
82
|
targetModDirectory: string,
|
|
83
|
+
verbose: boolean,
|
|
78
84
|
) {
|
|
79
85
|
// ".gitignore"
|
|
80
86
|
{
|
|
@@ -92,7 +98,7 @@ function copyDynamicFiles(
|
|
|
92
98
|
const gitignore = gitignoreHeader + template;
|
|
93
99
|
|
|
94
100
|
const destinationPath = path.join(projectPath, `.${fileName}`); // We need to prepend a period
|
|
95
|
-
file.write(destinationPath, gitignore);
|
|
101
|
+
file.write(destinationPath, gitignore, verbose);
|
|
96
102
|
}
|
|
97
103
|
|
|
98
104
|
// "package.json"
|
|
@@ -103,7 +109,7 @@ function copyDynamicFiles(
|
|
|
103
109
|
const template = file.read(templatePath);
|
|
104
110
|
const packageJSON = template.replace(/MOD_NAME_TO_REPLACE/g, projectName);
|
|
105
111
|
const destinationPath = path.join(projectPath, fileName);
|
|
106
|
-
file.write(destinationPath, packageJSON);
|
|
112
|
+
file.write(destinationPath, packageJSON, verbose);
|
|
107
113
|
}
|
|
108
114
|
|
|
109
115
|
// "README.md"
|
|
@@ -113,7 +119,7 @@ function copyDynamicFiles(
|
|
|
113
119
|
const template = file.read(templatePath);
|
|
114
120
|
const readmeMD = template.replace(/MOD_NAME_TO_REPLACE/g, projectName);
|
|
115
121
|
const destinationPath = path.join(projectPath, fileName);
|
|
116
|
-
file.write(destinationPath, readmeMD);
|
|
122
|
+
file.write(destinationPath, readmeMD, verbose);
|
|
117
123
|
}
|
|
118
124
|
|
|
119
125
|
// "mod/metadata.xml"
|
|
@@ -124,7 +130,7 @@ function copyDynamicFiles(
|
|
|
124
130
|
const metadataXML = template.replace(/MOD_NAME_TO_REPLACE/g, projectName);
|
|
125
131
|
const modPath = path.join(projectPath, "mod");
|
|
126
132
|
const destinationPath = path.join(modPath, fileName);
|
|
127
|
-
file.write(destinationPath, metadataXML);
|
|
133
|
+
file.write(destinationPath, metadataXML, verbose);
|
|
128
134
|
}
|
|
129
135
|
|
|
130
136
|
// "mod/metadata.vdf"
|
|
@@ -135,7 +141,7 @@ function copyDynamicFiles(
|
|
|
135
141
|
const metadataVDF = template.replace(/MOD_TARGET_DIR/g, targetModDirectory);
|
|
136
142
|
const modPath = path.join(projectPath, "mod");
|
|
137
143
|
const destinationPath = path.join(modPath, fileName);
|
|
138
|
-
file.write(destinationPath, metadataVDF);
|
|
144
|
+
file.write(destinationPath, metadataVDF, verbose);
|
|
139
145
|
}
|
|
140
146
|
|
|
141
147
|
// "src/main.ts"
|
|
@@ -148,21 +154,26 @@ function copyDynamicFiles(
|
|
|
148
154
|
const template = file.read(templatePath);
|
|
149
155
|
const mainTS = template.replace(/MOD_NAME_TO_REPLACE/g, projectName);
|
|
150
156
|
const destinationPath = path.join(srcPath, fileName);
|
|
151
|
-
file.write(destinationPath, mainTS);
|
|
157
|
+
file.write(destinationPath, mainTS, verbose);
|
|
152
158
|
}
|
|
153
159
|
}
|
|
154
160
|
|
|
155
|
-
function updateNodeModules(projectPath: string) {
|
|
161
|
+
function updateNodeModules(projectPath: string, verbose: boolean) {
|
|
156
162
|
console.log("Finding out the latest versions of the NPM packages...");
|
|
157
163
|
execShell(
|
|
158
164
|
"npx",
|
|
159
165
|
["npm-check-updates", "--upgrade", "--packageFile", "package.json"],
|
|
166
|
+
verbose,
|
|
160
167
|
false,
|
|
161
168
|
projectPath,
|
|
162
169
|
);
|
|
163
170
|
}
|
|
164
171
|
|
|
165
|
-
async function initGitRepository(
|
|
172
|
+
async function initGitRepository(
|
|
173
|
+
projectPath: string,
|
|
174
|
+
projectName: string,
|
|
175
|
+
verbose: boolean,
|
|
176
|
+
) {
|
|
166
177
|
if (!commandExists.sync("git")) {
|
|
167
178
|
console.log(
|
|
168
179
|
'Git does not seem to be installed. (The "git" command is not in the path.) Skipping Git-related things.',
|
|
@@ -170,19 +181,28 @@ async function initGitRepository(projectPath: string, projectName: string) {
|
|
|
170
181
|
return;
|
|
171
182
|
}
|
|
172
183
|
|
|
184
|
+
checkOldGitVersion(verbose);
|
|
185
|
+
|
|
173
186
|
const remoteURL = await getGitRemoteURL(projectName);
|
|
174
187
|
if (remoteURL === "") {
|
|
175
188
|
return;
|
|
176
189
|
}
|
|
177
190
|
|
|
178
|
-
execShell("git", ["init"], false, projectPath);
|
|
179
|
-
execShell("git", ["branch", "-M", "main"], false, projectPath);
|
|
180
|
-
execShell(
|
|
181
|
-
|
|
182
|
-
|
|
191
|
+
execShell("git", ["init"], verbose, false, projectPath);
|
|
192
|
+
execShell("git", ["branch", "-M", "main"], verbose, false, projectPath);
|
|
193
|
+
execShell(
|
|
194
|
+
"git",
|
|
195
|
+
["remote", "add", "origin", remoteURL],
|
|
196
|
+
verbose,
|
|
197
|
+
false,
|
|
198
|
+
projectPath,
|
|
199
|
+
);
|
|
200
|
+
if (isGitNameAndEmailConfigured(verbose)) {
|
|
201
|
+
execShell("git", ["add", "--all"], verbose, false, projectPath);
|
|
183
202
|
execShell(
|
|
184
203
|
"git",
|
|
185
204
|
["commit", "--message", `${PROJECT_NAME} template`],
|
|
205
|
+
verbose,
|
|
186
206
|
false,
|
|
187
207
|
projectPath,
|
|
188
208
|
);
|
|
@@ -211,6 +231,38 @@ If you don't want to initialize a Git repository for this project, press enter t
|
|
|
211
231
|
`);
|
|
212
232
|
}
|
|
213
233
|
|
|
234
|
+
function checkOldGitVersion(verbose: boolean) {
|
|
235
|
+
const [, stdout] = execShell("git", ["--version"], verbose);
|
|
236
|
+
|
|
237
|
+
const outputPrefix = "git version ";
|
|
238
|
+
if (!stdout.startsWith(outputPrefix)) {
|
|
239
|
+
error(
|
|
240
|
+
`Failed to parse the output from the "git --version" command: ${stdout}`,
|
|
241
|
+
);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
const gitVersionString = stdout.slice(outputPrefix.length);
|
|
245
|
+
const [majorVersion, minorVersion] = parseSemVer(gitVersionString);
|
|
246
|
+
|
|
247
|
+
if (
|
|
248
|
+
majorVersion >= REQUIRED_GIT_MAJOR_VERSION &&
|
|
249
|
+
minorVersion >= REQUIRED_GIT_MINOR_VERSION
|
|
250
|
+
) {
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
console.error(`Your Git version is: ${chalk.red(gitVersionString)}`);
|
|
255
|
+
console.error(
|
|
256
|
+
`${PROJECT_NAME} requires a Git version of ${chalk.red(
|
|
257
|
+
`${REQUIRED_GIT_MAJOR_VERSION}.${REQUIRED_GIT_MINOR_VERSION}.0`,
|
|
258
|
+
)} or greater.`,
|
|
259
|
+
);
|
|
260
|
+
console.error(
|
|
261
|
+
`Please upgrade your version of Git before using ${PROJECT_NAME}.`,
|
|
262
|
+
);
|
|
263
|
+
process.exit(1);
|
|
264
|
+
}
|
|
265
|
+
|
|
214
266
|
function guessRemoteURL(projectName: string) {
|
|
215
267
|
const gitHubUsername = getGitHubUsername();
|
|
216
268
|
if (gitHubUsername === undefined) {
|
|
@@ -255,27 +307,33 @@ function getGitHubUsername() {
|
|
|
255
307
|
return user;
|
|
256
308
|
}
|
|
257
309
|
|
|
258
|
-
function isGitNameAndEmailConfigured() {
|
|
310
|
+
function isGitNameAndEmailConfigured(verbose: boolean) {
|
|
259
311
|
const [nameExitStatus] = execShell(
|
|
260
312
|
"git",
|
|
261
313
|
["config", "--global", "user.name"],
|
|
314
|
+
verbose,
|
|
262
315
|
true,
|
|
263
316
|
);
|
|
264
317
|
|
|
265
318
|
const [emailExitStatus] = execShell(
|
|
266
319
|
"git",
|
|
267
320
|
["config", "--global", "user.email"],
|
|
321
|
+
verbose,
|
|
268
322
|
true,
|
|
269
323
|
);
|
|
270
324
|
|
|
271
325
|
return nameExitStatus === 0 && emailExitStatus === 0;
|
|
272
326
|
}
|
|
273
327
|
|
|
274
|
-
function installNodeModules(
|
|
328
|
+
function installNodeModules(
|
|
329
|
+
projectPath: string,
|
|
330
|
+
skipNPMInstall: boolean,
|
|
331
|
+
verbose: boolean,
|
|
332
|
+
) {
|
|
275
333
|
if (skipNPMInstall) {
|
|
276
334
|
return;
|
|
277
335
|
}
|
|
278
336
|
|
|
279
337
|
console.log("Installing node modules... (This can take a long time.)");
|
|
280
|
-
execShell("npm", ["install"], false, projectPath);
|
|
338
|
+
execShell("npm", ["install"], verbose, false, projectPath);
|
|
281
339
|
}
|
|
@@ -13,15 +13,18 @@ import { promptSaveSlot } from "./promptSaveSlot";
|
|
|
13
13
|
import { promptVSCode } from "./promptVSCode";
|
|
14
14
|
|
|
15
15
|
export async function init(argv: Record<string, unknown>): Promise<void> {
|
|
16
|
+
const vscode = argv.vscode === true;
|
|
17
|
+
const skipNPMInstall = argv.skipNpmInstall === true;
|
|
18
|
+
const verbose = argv.verbose === true;
|
|
19
|
+
|
|
16
20
|
// Prompt the end-user for some information (and validate it as we go)
|
|
17
21
|
const [projectPath, createNewDir] = await getProjectPath(argv);
|
|
18
|
-
await checkIfProjectPathExists(projectPath);
|
|
22
|
+
await checkIfProjectPathExists(projectPath, verbose);
|
|
19
23
|
const modsDirectory = await getModsDir(argv);
|
|
20
24
|
checkModSubdirectory(projectPath, modsDirectory);
|
|
21
25
|
const projectName = path.basename(projectPath);
|
|
22
|
-
await checkModTargetDirectory(modsDirectory, projectName);
|
|
26
|
+
await checkModTargetDirectory(modsDirectory, projectName, verbose);
|
|
23
27
|
const saveSlot = await promptSaveSlot(argv);
|
|
24
|
-
const skipNPMInstall = argv.skipNpmInstall === true;
|
|
25
28
|
|
|
26
29
|
await createMod(
|
|
27
30
|
projectName,
|
|
@@ -30,12 +33,17 @@ export async function init(argv: Record<string, unknown>): Promise<void> {
|
|
|
30
33
|
modsDirectory,
|
|
31
34
|
saveSlot,
|
|
32
35
|
skipNPMInstall,
|
|
36
|
+
verbose,
|
|
33
37
|
);
|
|
34
|
-
await openVSCode(projectPath,
|
|
38
|
+
await openVSCode(projectPath, vscode, verbose);
|
|
35
39
|
printFinishMessage(projectPath, projectName);
|
|
36
40
|
}
|
|
37
41
|
|
|
38
|
-
async function openVSCode(
|
|
42
|
+
async function openVSCode(
|
|
43
|
+
projectPath: string,
|
|
44
|
+
vscode: boolean,
|
|
45
|
+
verbose: boolean,
|
|
46
|
+
) {
|
|
39
47
|
const VSCodeCommand = getVSCodeCommand();
|
|
40
48
|
if (VSCodeCommand === null) {
|
|
41
49
|
console.log(
|
|
@@ -44,8 +52,8 @@ async function openVSCode(projectPath: string, argv: Record<string, unknown>) {
|
|
|
44
52
|
return;
|
|
45
53
|
}
|
|
46
54
|
|
|
47
|
-
installVSCodeExtensions(projectPath, VSCodeCommand);
|
|
48
|
-
await promptVSCode(projectPath,
|
|
55
|
+
installVSCodeExtensions(projectPath, VSCodeCommand, verbose);
|
|
56
|
+
await promptVSCode(projectPath, VSCodeCommand, vscode, verbose);
|
|
49
57
|
}
|
|
50
58
|
|
|
51
59
|
function getVSCodeCommand() {
|