isaacscript 2.0.11 → 2.0.14-dev.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.
Files changed (137) hide show
  1. package/README.md +8 -4
  2. package/package.json +2 -53
  3. package/src/checkForWindowsTerminalBugs.d.ts +5 -0
  4. package/src/checkForWindowsTerminalBugs.js +80 -0
  5. package/src/checkForWindowsTerminalBugs.js.map +1 -0
  6. package/src/commands/copy/copy.d.ts +3 -0
  7. package/src/commands/copy/copy.js +33 -0
  8. package/src/commands/copy/copy.js.map +1 -0
  9. package/src/commands/init/checkIfProjectPathExists.d.ts +1 -0
  10. package/src/commands/init/checkIfProjectPathExists.js +30 -0
  11. package/src/commands/init/checkIfProjectPathExists.js.map +1 -0
  12. package/src/commands/init/checkModSubdirectory.d.ts +1 -0
  13. package/src/commands/init/checkModSubdirectory.js +16 -0
  14. package/src/commands/init/checkModSubdirectory.js.map +1 -0
  15. package/src/commands/init/checkModTargetDirectory.d.ts +1 -0
  16. package/src/commands/init/checkModTargetDirectory.js +33 -0
  17. package/src/commands/init/checkModTargetDirectory.js.map +1 -0
  18. package/src/commands/init/createMod.d.ts +1 -0
  19. package/{dist/src → src}/commands/init/createMod.js +137 -162
  20. package/src/commands/init/createMod.js.map +1 -0
  21. package/src/commands/init/getModsDir.d.ts +1 -0
  22. package/src/commands/init/getModsDir.js +58 -0
  23. package/src/commands/init/getModsDir.js.map +1 -0
  24. package/src/commands/init/getProjectPath.d.ts +1 -0
  25. package/src/commands/init/getProjectPath.js +93 -0
  26. package/src/commands/init/getProjectPath.js.map +1 -0
  27. package/src/commands/init/git.d.ts +4 -0
  28. package/{dist/src → src}/commands/init/git.js +152 -175
  29. package/src/commands/init/git.js.map +1 -0
  30. package/src/commands/init/init.d.ts +1 -0
  31. package/src/commands/init/init.js +70 -0
  32. package/src/commands/init/init.js.map +1 -0
  33. package/src/commands/init/installVSCodeExtensions.d.ts +1 -0
  34. package/src/commands/init/installVSCodeExtensions.js +33 -0
  35. package/src/commands/init/installVSCodeExtensions.js.map +1 -0
  36. package/src/commands/init/promptSaveSlot.d.ts +1 -0
  37. package/src/commands/init/promptSaveSlot.js +25 -0
  38. package/src/commands/init/promptSaveSlot.js.map +1 -0
  39. package/src/commands/init/promptVSCode.d.ts +1 -0
  40. package/src/commands/init/promptVSCode.js +27 -0
  41. package/src/commands/init/promptVSCode.js.map +1 -0
  42. package/src/commands/monitor/constants.d.ts +1 -0
  43. package/{dist/src → src}/commands/monitor/constants.js +4 -4
  44. package/src/commands/monitor/constants.js.map +1 -0
  45. package/src/commands/monitor/copyWatcherMod.d.ts +2 -0
  46. package/{dist/src → src}/commands/monitor/copyWatcherMod.js +38 -63
  47. package/src/commands/monitor/copyWatcherMod.js.map +1 -0
  48. package/src/commands/monitor/modDirectorySyncer/modDirectorySyncer.d.ts +1 -0
  49. package/{dist/src → src}/commands/monitor/modDirectorySyncer/modDirectorySyncer.js +49 -51
  50. package/src/commands/monitor/modDirectorySyncer/modDirectorySyncer.js.map +1 -0
  51. package/src/commands/monitor/monitor.d.ts +2 -0
  52. package/{dist/src → src}/commands/monitor/monitor.js +146 -171
  53. package/src/commands/monitor/monitor.js.map +1 -0
  54. package/src/commands/monitor/notifyGame.d.ts +3 -0
  55. package/{dist/src → src}/commands/monitor/notifyGame.js +57 -59
  56. package/src/commands/monitor/notifyGame.js.map +1 -0
  57. package/src/commands/monitor/saveDatWriter/saveDatWriter.d.ts +1 -0
  58. package/{dist/src → src}/commands/monitor/saveDatWriter/saveDatWriter.js +116 -141
  59. package/src/commands/monitor/saveDatWriter/saveDatWriter.js.map +1 -0
  60. package/src/commands/monitor/saveDatWriter/types.d.ts +5 -0
  61. package/{dist/src → src}/commands/monitor/saveDatWriter/types.js +2 -2
  62. package/src/commands/monitor/saveDatWriter/types.js.map +1 -0
  63. package/src/commands/monitor/spawnSaveDatWriter.d.ts +4 -0
  64. package/{dist/src → src}/commands/monitor/spawnSaveDatWriter.js +34 -36
  65. package/src/commands/monitor/spawnSaveDatWriter.js.map +1 -0
  66. package/src/commands/monitor/touchWatcherSaveDatFiles.d.ts +2 -0
  67. package/src/commands/monitor/touchWatcherSaveDatFiles.js +21 -0
  68. package/src/commands/monitor/touchWatcherSaveDatFiles.js.map +1 -0
  69. package/src/commands/publish/publish.d.ts +2 -0
  70. package/{dist/src → src}/commands/publish/publish.js +220 -260
  71. package/src/commands/publish/publish.js.map +1 -0
  72. package/src/configFile.d.ts +4 -0
  73. package/src/configFile.js +66 -0
  74. package/src/configFile.js.map +1 -0
  75. package/src/constants.d.ts +34 -0
  76. package/{dist/src → src}/constants.js +59 -61
  77. package/src/constants.js.map +1 -0
  78. package/src/exec.d.ts +4 -0
  79. package/{dist/src → src}/exec.js +95 -97
  80. package/src/exec.js.map +1 -0
  81. package/src/file.d.ts +12 -0
  82. package/{dist/src → src}/file.js +193 -195
  83. package/src/file.js.map +1 -0
  84. package/src/main.d.ts +2 -0
  85. package/src/main.js +122 -0
  86. package/src/main.js.map +1 -0
  87. package/src/parseArgs.d.ts +1 -0
  88. package/{dist/src → src}/parseArgs.js +106 -108
  89. package/src/parseArgs.js.map +1 -0
  90. package/src/prompt.d.ts +5 -0
  91. package/src/prompt.js +93 -0
  92. package/src/prompt.js.map +1 -0
  93. package/src/types/Command.d.ts +2 -0
  94. package/{dist/src → src}/types/Command.js +4 -4
  95. package/src/types/Command.js.map +1 -0
  96. package/src/types/Config.d.ts +18 -0
  97. package/{dist/src → src}/types/Config.js +12 -12
  98. package/src/types/Config.js.map +1 -0
  99. package/src/types/GitHubCLIHostsYAML.d.ts +7 -0
  100. package/{dist/src → src}/types/GitHubCLIHostsYAML.js +2 -2
  101. package/src/types/GitHubCLIHostsYAML.js.map +1 -0
  102. package/src/utils.d.ts +13 -0
  103. package/{dist/src → src}/utils.js +81 -83
  104. package/src/utils.js.map +1 -0
  105. package/src/validateInIsaacScriptProject.d.ts +1 -0
  106. package/src/validateInIsaacScriptProject.js +27 -0
  107. package/src/validateInIsaacScriptProject.js.map +1 -0
  108. package/src/validateNodeVersion.d.ts +5 -0
  109. package/{dist/src → src}/validateNodeVersion.js +24 -26
  110. package/src/validateNodeVersion.js.map +1 -0
  111. package/src/validateOS.d.ts +1 -0
  112. package/{dist/src → src}/validateOS.js +16 -18
  113. package/src/validateOS.js.map +1 -0
  114. package/LICENSE +0 -674
  115. package/dist/package.json +0 -57
  116. package/dist/src/checkForWindowsTerminalBugs.js +0 -101
  117. package/dist/src/commands/copy/copy.js +0 -58
  118. package/dist/src/commands/init/checkIfProjectPathExists.js +0 -53
  119. package/dist/src/commands/init/checkModSubdirectory.js +0 -41
  120. package/dist/src/commands/init/checkModTargetDirectory.js +0 -56
  121. package/dist/src/commands/init/getModsDir.js +0 -81
  122. package/dist/src/commands/init/getProjectPath.js +0 -91
  123. package/dist/src/commands/init/init.js +0 -68
  124. package/dist/src/commands/init/installVSCodeExtensions.js +0 -58
  125. package/dist/src/commands/init/promptSaveSlot.js +0 -22
  126. package/dist/src/commands/init/promptVSCode.js +0 -27
  127. package/dist/src/commands/monitor/touchWatcherSaveDatFiles.js +0 -46
  128. package/dist/src/configFile.js +0 -89
  129. package/dist/src/main.js +0 -136
  130. package/dist/src/prompt.js +0 -89
  131. package/dist/src/validateInIsaacScriptProject.js +0 -52
  132. package/isaacscript-watcher/.luacheckrc +0 -96
  133. package/isaacscript-watcher/README.md +0 -8
  134. package/isaacscript-watcher/main.lua +0 -270
  135. package/isaacscript-watcher/metadata.xml +0 -7
  136. package/isaacscript-watcher/resources/gfx/logo.anm2 +0 -27
  137. package/isaacscript-watcher/resources/gfx/logo.png +0 -0
@@ -1,261 +1,221 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.publish = void 0;
30
- const chalk_1 = __importDefault(require("chalk"));
31
- const path_1 = __importDefault(require("path"));
32
- const constants_1 = require("../../constants");
33
- const exec_1 = require("../../exec");
34
- const file = __importStar(require("../../file"));
35
- const utils_1 = require("../../utils");
36
- const copy_1 = require("../copy/copy");
37
- const git_1 = require("../init/git");
38
- const UPDATE_SCRIPT_NAME = "update.sh";
39
- function publish(argv, config) {
40
- const skipVersionIncrement = argv["skip"] === true;
41
- const setVersion = argv["setVersion"];
42
- const dryRun = argv["dryRun"] === true;
43
- const onlyUpload = argv["onlyUpload"] === true;
44
- const verbose = argv["verbose"] === true;
45
- const modTargetDirectoryName = (0, utils_1.getModTargetDirectoryName)(config);
46
- const modTargetPath = path_1.default.join(config.modsDirectory, modTargetDirectoryName);
47
- validateVersion(setVersion);
48
- validateGitNotDirty(verbose);
49
- validateIsaacScriptOtherCopiesNotRunning(verbose);
50
- if (onlyUpload) {
51
- uploadMod(modTargetPath, config.steamCmdPath, verbose);
52
- return;
53
- }
54
- startPublish(constants_1.MOD_SOURCE_PATH, modTargetPath, skipVersionIncrement, setVersion, config.steamCmdPath, dryRun, verbose);
55
- }
56
- exports.publish = publish;
57
- function validateVersion(setVersion) {
58
- if (setVersion !== undefined && /^\d+\.\d+\.\d+$/.exec(setVersion) === null) {
59
- (0, utils_1.error)(chalk_1.default.red(`The version of "${setVersion}" does not match the semantic versioning format.`));
60
- }
61
- }
62
- function validateGitNotDirty(verbose) {
63
- if ((0, git_1.isGitDirty)(verbose)) {
64
- (0, utils_1.error)(chalk_1.default.red("Before publishing, you must push your current changes to git. (Version commits should be not contain any code changes.)"));
65
- }
66
- }
67
- function validateIsaacScriptOtherCopiesNotRunning(verbose) {
68
- if (process.platform !== "win32") {
69
- return;
70
- }
71
- // From: https://securityboulevard.com/2020/01/get-process-list-with-command-line-arguments/
72
- const stdout = (0, exec_1.execPowershell)("Get-WmiObject Win32_Process -Filter \"name = 'node.exe'\" | Select-Object -ExpandProperty CommandLine", verbose);
73
- const lines = stdout.split("\r\n");
74
- const otherCopiesOfRunningIsaacScript = lines.filter((line) => line.includes("node.exe") &&
75
- line.includes("isaacscript") &&
76
- !line.includes("isaacscript publish"));
77
- if (otherCopiesOfRunningIsaacScript.length > 0) {
78
- (0, utils_1.error)(chalk_1.default.red(`Other copies of ${constants_1.PROJECT_NAME} appear to be running. You must close those copies before publishing.`));
79
- }
80
- }
81
- function startPublish(modSourcePath, modTargetPath, skipVersionIncrement, setVersion, steamCmdPath, dryRun, verbose) {
82
- updateDeps(verbose);
83
- let version = setVersion === undefined ? getVersionFromPackageJSON(verbose) : setVersion;
84
- if (!skipVersionIncrement && setVersion === undefined) {
85
- version = bumpVersionInPackageJSON(version, verbose);
86
- }
87
- else if (setVersion !== undefined) {
88
- writeVersionInPackageJSON(version, verbose);
89
- }
90
- writeVersionToConstantsTS(version, verbose);
91
- writeVersionToMetadataXML(version, verbose);
92
- writeVersionToVersionTXT(version, verbose);
93
- runReleaseScriptPreCopy(verbose);
94
- (0, copy_1.compileAndCopy)(modSourcePath, modTargetPath, verbose);
95
- purgeRoomXMLs(modTargetPath, verbose);
96
- runReleaseScriptPostCopy(verbose);
97
- if (!dryRun) {
98
- (0, git_1.gitCommitIfChanges)(version, verbose);
99
- uploadMod(modTargetPath, steamCmdPath, verbose);
100
- }
101
- const dryRunSuffix = dryRun ? " (dry run)" : "";
102
- console.log(`\nPublished version ${version} successfully${dryRunSuffix}.`);
103
- }
104
- function updateDeps(verbose) {
105
- if (!file.exists(UPDATE_SCRIPT_NAME, verbose)) {
106
- (0, utils_1.error)(`The "${UPDATE_SCRIPT_NAME}" script does not exist in the current working directory.`);
107
- }
108
- (0, exec_1.execShell)("bash", [UPDATE_SCRIPT_NAME], verbose);
109
- }
110
- function getVersionFromPackageJSON(verbose) {
111
- if (!file.exists(constants_1.PACKAGE_JSON_PATH, verbose)) {
112
- (0, utils_1.error)(chalk_1.default.red(`A "${constants_1.PACKAGE_JSON_PATH}" was not found in the current directory.`));
113
- }
114
- const packageJSONRaw = file.read(constants_1.PACKAGE_JSON_PATH, verbose);
115
- let packageJSON;
116
- try {
117
- packageJSON = JSON.parse(packageJSONRaw);
118
- }
119
- catch (err) {
120
- (0, utils_1.error)(`Failed to parse "${chalk_1.default.green(constants_1.PACKAGE_JSON_PATH)}":`, err);
121
- }
122
- if (!Object.prototype.hasOwnProperty.call(packageJSON, "version")) {
123
- (0, utils_1.error)(`The "${chalk_1.default.green(constants_1.PACKAGE_JSON_PATH)}" file does not have a "version" field.`);
124
- }
125
- if (typeof packageJSON["version"] !== "string") {
126
- (0, utils_1.error)(`The "${chalk_1.default.green(constants_1.PACKAGE_JSON_PATH)}" file has a "version" field that is not a string.`);
127
- }
128
- return packageJSON["version"];
129
- }
130
- function bumpVersionInPackageJSON(version, verbose) {
131
- // Get the patch version (i.e. the third number)
132
- const matches = /(\d+\.\d+\.)(\d+)/.exec(version);
133
- if (matches === null) {
134
- (0, utils_1.error)(`Failed to parse the version of: ${version}`);
135
- }
136
- const versionPrefix = matches[1];
137
- if (versionPrefix === undefined) {
138
- (0, utils_1.error)(`Failed to parse the first part of the version: ${version}`);
139
- }
140
- const patchVersionString = matches[2];
141
- if (patchVersionString === undefined) {
142
- (0, utils_1.error)(`Failed to parse the second part of the version: ${version}`);
143
- }
144
- const patchVersion = (0, utils_1.parseIntSafe)(patchVersionString);
145
- if (Number.isNaN(patchVersion)) {
146
- (0, utils_1.error)(`Failed to convert "${patchVersionString}" to a number.`);
147
- }
148
- const incrementedPatchVersion = patchVersion + 1;
149
- const incrementedVersion = `${versionPrefix}${incrementedPatchVersion}`;
150
- const packageJSON = file.read(constants_1.PACKAGE_JSON_PATH, verbose);
151
- const newPackageJSON = packageJSON.replace(/"version": ".+",/, `"version": "${incrementedVersion}",`);
152
- file.write(constants_1.PACKAGE_JSON_PATH, newPackageJSON, verbose);
153
- console.log(`The version of ${incrementedVersion} was written to: ${constants_1.PACKAGE_JSON_PATH}`);
154
- return incrementedVersion;
155
- }
156
- function writeVersionInPackageJSON(version, verbose) {
157
- const packageJSON = file.read(constants_1.PACKAGE_JSON_PATH, verbose);
158
- const newPackageJSON = packageJSON.replace(/"version": ".+",/, `"version": "${version}",`);
159
- file.write(constants_1.PACKAGE_JSON_PATH, newPackageJSON, verbose);
160
- console.log(`The version of ${version} was written to: ${constants_1.PACKAGE_JSON_PATH}`);
161
- }
162
- function writeVersionToConstantsTS(version, verbose) {
163
- if (!file.exists(constants_1.CONSTANTS_TS_PATH, verbose)) {
164
- console.log('Skipping writing the version to "constants.ts" since it was not found.');
165
- return;
166
- }
167
- const constantsTS = file.read(constants_1.CONSTANTS_TS_PATH, verbose);
168
- const newConstantsTS = constantsTS.replace(/const VERSION = ".+"/, `const VERSION = "${version}"`);
169
- file.write(constants_1.CONSTANTS_TS_PATH, newConstantsTS, verbose);
170
- console.log(`The version of ${version} was written to: ${constants_1.CONSTANTS_TS_PATH}`);
171
- }
172
- function writeVersionToMetadataXML(version, verbose) {
173
- const metadataXML = file.read(constants_1.METADATA_XML_PATH, verbose);
174
- const newMetadataXML = metadataXML.replace(/<version>.+<\/version>/, `<version>${version}</version>`);
175
- file.write(constants_1.METADATA_XML_PATH, newMetadataXML, verbose);
176
- console.log(`The version of ${version} was written to: ${constants_1.METADATA_XML_PATH}`);
177
- }
178
- function writeVersionToVersionTXT(version, verbose) {
179
- file.write(constants_1.VERSION_TXT_PATH, version, verbose);
180
- console.log(`The version of ${version} was written to: ${constants_1.VERSION_TXT_PATH}`);
181
- }
182
- function runReleaseScriptPreCopy(verbose) {
183
- if (!file.exists(constants_1.PUBLISH_PRE_COPY_PY_PATH, verbose)) {
184
- return;
185
- }
186
- console.log(`Running the "${constants_1.PUBLISH_PRE_COPY_PY_PATH}" script.`);
187
- let [, stdout] = (0, exec_1.execShell)("python", [constants_1.PUBLISH_PRE_COPY_PY_PATH], verbose);
188
- stdout = stdout.trim();
189
- if (stdout.length > 0) {
190
- console.log(stdout);
191
- }
192
- }
193
- function runReleaseScriptPostCopy(verbose) {
194
- if (!file.exists(constants_1.PUBLISH_POST_COPY_PY_PATH, verbose)) {
195
- return;
196
- }
197
- console.log(`Running the "${constants_1.PUBLISH_POST_COPY_PY_PATH}" script.`);
198
- let [, stdout] = (0, exec_1.execShell)("python", [constants_1.PUBLISH_POST_COPY_PY_PATH], verbose);
199
- stdout = stdout.trim();
200
- if (stdout.length > 0) {
201
- console.log(stdout);
202
- }
203
- }
204
- function purgeRoomXMLs(modTargetPath, verbose) {
205
- const roomsPath = path_1.default.join(modTargetPath, "resources", "rooms");
206
- if (!file.exists(roomsPath, verbose) || !file.isDir(roomsPath, verbose)) {
207
- return;
208
- }
209
- const roomFileList = file.getDirList(roomsPath, verbose);
210
- roomFileList.forEach((fileName) => {
211
- if (path_1.default.extname(fileName) === ".xml") {
212
- const roomFilePath = path_1.default.join(roomsPath, fileName);
213
- file.deleteFileOrDirectory(roomFilePath, verbose);
214
- }
215
- });
216
- }
217
- function uploadMod(modTargetPath, steamCmdPath, verbose) {
218
- if (steamCmdPath === undefined) {
219
- console.log(`The "steamCmdPath" property was not found in the "${chalk_1.default.green(constants_1.CONFIG_FILE_NAME)}" file; assuming that we want to use the ModUploader tool.`);
220
- (0, exec_1.execExe)(constants_1.MOD_UPLOADER_PATH, verbose, modTargetPath);
221
- }
222
- else {
223
- runSteamCmd(modTargetPath, steamCmdPath, verbose);
224
- }
225
- }
226
- function runSteamCmd(modTargetPath, steamCmdPath, verbose) {
227
- if (!file.exists(steamCmdPath, verbose)) {
228
- (0, utils_1.error)(chalk_1.default.red(`The path provided for "steamCmdPath" is "${steamCmdPath}", but that does not exist.`));
229
- }
230
- const metadataVDFPath = path_1.default.join(modTargetPath, "metadata.vdf");
231
- if (!file.exists(metadataVDFPath, verbose)) {
232
- console.error(chalk_1.default.red(`A "metadata.vdf" file was not found in your mod directory. You must create this file in order for "steamcmd.exe" to work. Please see the ${constants_1.PROJECT_NAME} docs:`));
233
- (0, utils_1.error)(getIsaacScriptDocs());
234
- }
235
- const usernameVar = "STEAM_USERNAME";
236
- const username = process.env[usernameVar];
237
- if (username === undefined || username === "") {
238
- console.error(chalk_1.default.red(`Failed to read the "${usernameVar}" environment variable from the ".env" file. Please see the ${constants_1.PROJECT_NAME} docs:`));
239
- (0, utils_1.error)(getIsaacScriptDocs());
240
- }
241
- const passwordVar = "STEAM_PASSWORD";
242
- const password = process.env[passwordVar];
243
- if (password === undefined || password === "") {
244
- console.error(chalk_1.default.red(`Failed to read the "${passwordVar}" environment variable from the ".env" file. Please see the ${constants_1.PROJECT_NAME} docs:`));
245
- (0, utils_1.error)(getIsaacScriptDocs());
246
- }
247
- console.log("Uploading the mod to the Steam Workshop...");
248
- (0, exec_1.execShell)(steamCmdPath, [
249
- "+login",
250
- username,
251
- password,
252
- "+workshop_build_item",
253
- metadataVDFPath,
254
- "+quit",
255
- ], verbose);
256
- console.log("Mod uploaded successfully.");
257
- }
258
- function getIsaacScriptDocs() {
259
- return chalk_1.default.red("https://isaacscript.github.io/docs/publishing-to-the-workshop/#metadatavdf");
260
- }
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.publish = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const chalk_1 = tslib_1.__importDefault(require("chalk"));
6
+ const path_1 = tslib_1.__importDefault(require("path"));
7
+ const constants_1 = require("../../constants");
8
+ const exec_1 = require("../../exec");
9
+ const file = tslib_1.__importStar(require("../../file"));
10
+ const utils_1 = require("../../utils");
11
+ const copy_1 = require("../copy/copy");
12
+ const git_1 = require("../init/git");
13
+ const UPDATE_SCRIPT_NAME = "update.sh";
14
+ function publish(argv, config) {
15
+ const skipVersionIncrement = argv["skip"] === true;
16
+ const setVersion = argv["setVersion"];
17
+ const dryRun = argv["dryRun"] === true;
18
+ const onlyUpload = argv["onlyUpload"] === true;
19
+ const verbose = argv["verbose"] === true;
20
+ const modTargetDirectoryName = (0, utils_1.getModTargetDirectoryName)(config);
21
+ const modTargetPath = path_1.default.join(config.modsDirectory, modTargetDirectoryName);
22
+ validateVersion(setVersion);
23
+ validateGitNotDirty(verbose);
24
+ validateIsaacScriptOtherCopiesNotRunning(verbose);
25
+ if (onlyUpload) {
26
+ uploadMod(modTargetPath, config.steamCmdPath, verbose);
27
+ return;
28
+ }
29
+ startPublish(constants_1.MOD_SOURCE_PATH, modTargetPath, skipVersionIncrement, setVersion, config.steamCmdPath, dryRun, verbose);
30
+ }
31
+ exports.publish = publish;
32
+ function validateVersion(setVersion) {
33
+ if (setVersion !== undefined && /^\d+\.\d+\.\d+$/.exec(setVersion) === null) {
34
+ (0, utils_1.error)(chalk_1.default.red(`The version of "${setVersion}" does not match the semantic versioning format.`));
35
+ }
36
+ }
37
+ function validateGitNotDirty(verbose) {
38
+ if ((0, git_1.isGitDirty)(verbose)) {
39
+ (0, utils_1.error)(chalk_1.default.red("Before publishing, you must push your current changes to git. (Version commits should be not contain any code changes.)"));
40
+ }
41
+ }
42
+ function validateIsaacScriptOtherCopiesNotRunning(verbose) {
43
+ if (process.platform !== "win32") {
44
+ return;
45
+ }
46
+ // From: https://securityboulevard.com/2020/01/get-process-list-with-command-line-arguments/
47
+ const stdout = (0, exec_1.execPowershell)("Get-WmiObject Win32_Process -Filter \"name = 'node.exe'\" | Select-Object -ExpandProperty CommandLine", verbose);
48
+ const lines = stdout.split("\r\n");
49
+ const otherCopiesOfRunningIsaacScript = lines.filter((line) => line.includes("node.exe") &&
50
+ line.includes("isaacscript") &&
51
+ !line.includes("isaacscript publish"));
52
+ if (otherCopiesOfRunningIsaacScript.length > 0) {
53
+ (0, utils_1.error)(chalk_1.default.red(`Other copies of ${constants_1.PROJECT_NAME} appear to be running. You must close those copies before publishing.`));
54
+ }
55
+ }
56
+ function startPublish(modSourcePath, modTargetPath, skipVersionIncrement, setVersion, steamCmdPath, dryRun, verbose) {
57
+ updateDeps(verbose);
58
+ let version = setVersion === undefined ? getVersionFromPackageJSON(verbose) : setVersion;
59
+ if (!skipVersionIncrement && setVersion === undefined) {
60
+ version = bumpVersionInPackageJSON(version, verbose);
61
+ }
62
+ else if (setVersion !== undefined) {
63
+ writeVersionInPackageJSON(version, verbose);
64
+ }
65
+ writeVersionToConstantsTS(version, verbose);
66
+ writeVersionToMetadataXML(version, verbose);
67
+ writeVersionToVersionTXT(version, verbose);
68
+ runReleaseScriptPreCopy(verbose);
69
+ (0, copy_1.compileAndCopy)(modSourcePath, modTargetPath, verbose);
70
+ purgeRoomXMLs(modTargetPath, verbose);
71
+ runReleaseScriptPostCopy(verbose);
72
+ if (!dryRun) {
73
+ (0, git_1.gitCommitIfChanges)(version, verbose);
74
+ uploadMod(modTargetPath, steamCmdPath, verbose);
75
+ }
76
+ const dryRunSuffix = dryRun ? " (dry run)" : "";
77
+ console.log(`\nPublished version ${version} successfully${dryRunSuffix}.`);
78
+ }
79
+ function updateDeps(verbose) {
80
+ if (!file.exists(UPDATE_SCRIPT_NAME, verbose)) {
81
+ (0, utils_1.error)(`The "${UPDATE_SCRIPT_NAME}" script does not exist in the current working directory.`);
82
+ }
83
+ (0, exec_1.execShell)("bash", [UPDATE_SCRIPT_NAME], verbose);
84
+ }
85
+ function getVersionFromPackageJSON(verbose) {
86
+ if (!file.exists(constants_1.PACKAGE_JSON_PATH, verbose)) {
87
+ (0, utils_1.error)(chalk_1.default.red(`A "${constants_1.PACKAGE_JSON_PATH}" was not found in the current directory.`));
88
+ }
89
+ const packageJSONString = file.read(constants_1.PACKAGE_JSON_PATH, verbose);
90
+ let packageJSON;
91
+ try {
92
+ packageJSON = JSON.parse(packageJSONString);
93
+ }
94
+ catch (err) {
95
+ (0, utils_1.error)(`Failed to parse "${chalk_1.default.green(constants_1.PACKAGE_JSON_PATH)}":`, err);
96
+ }
97
+ if (!Object.prototype.hasOwnProperty.call(packageJSON, "version")) {
98
+ (0, utils_1.error)(`The "${chalk_1.default.green(constants_1.PACKAGE_JSON_PATH)}" file does not have a "version" field.`);
99
+ }
100
+ if (typeof packageJSON["version"] !== "string") {
101
+ (0, utils_1.error)(`The "${chalk_1.default.green(constants_1.PACKAGE_JSON_PATH)}" file has a "version" field that is not a string.`);
102
+ }
103
+ return packageJSON["version"];
104
+ }
105
+ function bumpVersionInPackageJSON(version, verbose) {
106
+ // Get the patch version (i.e. the third number)
107
+ const [majorVersion, minorVersion, patchVersion] = (0, utils_1.parseSemVer)(version);
108
+ const incrementedPatchVersion = patchVersion + 1;
109
+ const incrementedVersion = `${majorVersion}.${minorVersion}.${incrementedPatchVersion}`;
110
+ const packageJSON = file.read(constants_1.PACKAGE_JSON_PATH, verbose);
111
+ const newPackageJSON = packageJSON.replace(/"version": ".+",/, `"version": "${incrementedVersion}",`);
112
+ file.write(constants_1.PACKAGE_JSON_PATH, newPackageJSON, verbose);
113
+ console.log(`The version of ${incrementedVersion} was written to: ${constants_1.PACKAGE_JSON_PATH}`);
114
+ return incrementedVersion;
115
+ }
116
+ function writeVersionInPackageJSON(version, verbose) {
117
+ const packageJSON = file.read(constants_1.PACKAGE_JSON_PATH, verbose);
118
+ const newPackageJSON = packageJSON.replace(/"version": ".+",/, `"version": "${version}",`);
119
+ file.write(constants_1.PACKAGE_JSON_PATH, newPackageJSON, verbose);
120
+ console.log(`The version of ${version} was written to: ${constants_1.PACKAGE_JSON_PATH}`);
121
+ }
122
+ function writeVersionToConstantsTS(version, verbose) {
123
+ if (!file.exists(constants_1.CONSTANTS_TS_PATH, verbose)) {
124
+ console.log('Skipping writing the version to "constants.ts" since it was not found.');
125
+ return;
126
+ }
127
+ const constantsTS = file.read(constants_1.CONSTANTS_TS_PATH, verbose);
128
+ const newConstantsTS = constantsTS.replace(/const VERSION = ".+"/, `const VERSION = "${version}"`);
129
+ file.write(constants_1.CONSTANTS_TS_PATH, newConstantsTS, verbose);
130
+ console.log(`The version of ${version} was written to: ${constants_1.CONSTANTS_TS_PATH}`);
131
+ }
132
+ function writeVersionToMetadataXML(version, verbose) {
133
+ const metadataXML = file.read(constants_1.METADATA_XML_PATH, verbose);
134
+ const newMetadataXML = metadataXML.replace(/<version>.+<\/version>/, `<version>${version}</version>`);
135
+ file.write(constants_1.METADATA_XML_PATH, newMetadataXML, verbose);
136
+ console.log(`The version of ${version} was written to: ${constants_1.METADATA_XML_PATH}`);
137
+ }
138
+ function writeVersionToVersionTXT(version, verbose) {
139
+ file.write(constants_1.VERSION_TXT_PATH, version, verbose);
140
+ console.log(`The version of ${version} was written to: ${constants_1.VERSION_TXT_PATH}`);
141
+ }
142
+ function runReleaseScriptPreCopy(verbose) {
143
+ if (!file.exists(constants_1.PUBLISH_PRE_COPY_PY_PATH, verbose)) {
144
+ return;
145
+ }
146
+ console.log(`Running the "${constants_1.PUBLISH_PRE_COPY_PY_PATH}" script.`);
147
+ let [, stdout] = (0, exec_1.execShell)("python", [constants_1.PUBLISH_PRE_COPY_PY_PATH], verbose);
148
+ stdout = stdout.trim();
149
+ if (stdout.length > 0) {
150
+ console.log(stdout);
151
+ }
152
+ }
153
+ function runReleaseScriptPostCopy(verbose) {
154
+ if (!file.exists(constants_1.PUBLISH_POST_COPY_PY_PATH, verbose)) {
155
+ return;
156
+ }
157
+ console.log(`Running the "${constants_1.PUBLISH_POST_COPY_PY_PATH}" script.`);
158
+ let [, stdout] = (0, exec_1.execShell)("python", [constants_1.PUBLISH_POST_COPY_PY_PATH], verbose);
159
+ stdout = stdout.trim();
160
+ if (stdout.length > 0) {
161
+ console.log(stdout);
162
+ }
163
+ }
164
+ function purgeRoomXMLs(modTargetPath, verbose) {
165
+ const roomsPath = path_1.default.join(modTargetPath, "resources", "rooms");
166
+ if (!file.exists(roomsPath, verbose) || !file.isDir(roomsPath, verbose)) {
167
+ return;
168
+ }
169
+ const roomFileList = file.getDirList(roomsPath, verbose);
170
+ roomFileList.forEach((fileName) => {
171
+ if (path_1.default.extname(fileName) === ".xml") {
172
+ const roomFilePath = path_1.default.join(roomsPath, fileName);
173
+ file.deleteFileOrDirectory(roomFilePath, verbose);
174
+ }
175
+ });
176
+ }
177
+ function uploadMod(modTargetPath, steamCmdPath, verbose) {
178
+ if (steamCmdPath === undefined) {
179
+ console.log(`The "steamCmdPath" property was not found in the "${chalk_1.default.green(constants_1.CONFIG_FILE_NAME)}" file; assuming that we want to use the ModUploader tool.`);
180
+ (0, exec_1.execExe)(constants_1.MOD_UPLOADER_PATH, verbose, modTargetPath);
181
+ }
182
+ else {
183
+ runSteamCmd(modTargetPath, steamCmdPath, verbose);
184
+ }
185
+ }
186
+ function runSteamCmd(modTargetPath, steamCmdPath, verbose) {
187
+ if (!file.exists(steamCmdPath, verbose)) {
188
+ (0, utils_1.error)(chalk_1.default.red(`The path provided for "steamCmdPath" is "${steamCmdPath}", but that does not exist.`));
189
+ }
190
+ const metadataVDFPath = path_1.default.join(modTargetPath, "metadata.vdf");
191
+ if (!file.exists(metadataVDFPath, verbose)) {
192
+ console.error(chalk_1.default.red(`A "metadata.vdf" file was not found in your mod directory. You must create this file in order for "steamcmd.exe" to work. Please see the ${constants_1.PROJECT_NAME} docs:`));
193
+ (0, utils_1.error)(getIsaacScriptDocs());
194
+ }
195
+ const usernameVar = "STEAM_USERNAME";
196
+ const username = process.env[usernameVar];
197
+ if (username === undefined || username === "") {
198
+ console.error(chalk_1.default.red(`Failed to read the "${usernameVar}" environment variable from the ".env" file. Please see the ${constants_1.PROJECT_NAME} docs:`));
199
+ (0, utils_1.error)(getIsaacScriptDocs());
200
+ }
201
+ const passwordVar = "STEAM_PASSWORD";
202
+ const password = process.env[passwordVar];
203
+ if (password === undefined || password === "") {
204
+ console.error(chalk_1.default.red(`Failed to read the "${passwordVar}" environment variable from the ".env" file. Please see the ${constants_1.PROJECT_NAME} docs:`));
205
+ (0, utils_1.error)(getIsaacScriptDocs());
206
+ }
207
+ console.log("Uploading the mod to the Steam Workshop...");
208
+ (0, exec_1.execShell)(steamCmdPath, [
209
+ "+login",
210
+ username,
211
+ password,
212
+ "+workshop_build_item",
213
+ metadataVDFPath,
214
+ "+quit",
215
+ ], verbose);
216
+ console.log("Mod uploaded successfully.");
217
+ }
218
+ function getIsaacScriptDocs() {
219
+ return chalk_1.default.red("https://isaacscript.github.io/docs/publishing-to-the-workshop/#metadatavdf");
220
+ }
261
221
  //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../../../../packages/isaacscript-cli/src/commands/publish/publish.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Config } from "./types/Config";
2
+ export declare function get(argv: Record<string, unknown>): Promise<Config>;
3
+ export declare function createObject(modsDirectory: string, saveSlot: number): Config;
4
+ export declare function createFile(projectPath: string, config: Config, verbose: boolean): void;
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createFile = exports.createObject = exports.get = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const chalk_1 = tslib_1.__importDefault(require("chalk"));
6
+ const JSONC = tslib_1.__importStar(require("jsonc-parser"));
7
+ const path_1 = tslib_1.__importDefault(require("path"));
8
+ const getModsDir_1 = require("./commands/init/getModsDir");
9
+ const promptSaveSlot_1 = require("./commands/init/promptSaveSlot");
10
+ const constants_1 = require("./constants");
11
+ const file = tslib_1.__importStar(require("./file"));
12
+ const utils_1 = require("./utils");
13
+ function get(argv) {
14
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
15
+ const verbose = argv["verbose"] === true;
16
+ const yes = argv["yes"] === true;
17
+ const existingConfig = readExistingConfig(verbose);
18
+ if (existingConfig !== undefined) {
19
+ return existingConfig;
20
+ }
21
+ // No config file exists, so prompt the user for some information and create one.
22
+ const modsDirectory = yield (0, getModsDir_1.getModsDir)(argv, verbose);
23
+ const saveSlot = yield (0, promptSaveSlot_1.promptSaveSlot)(argv, yes);
24
+ const config = createObject(modsDirectory, saveSlot);
25
+ createFile(constants_1.CWD, config, verbose);
26
+ return config;
27
+ });
28
+ }
29
+ exports.get = get;
30
+ function readExistingConfig(verbose) {
31
+ if (!file.exists(constants_1.CONFIG_FILE_PATH, verbose)) {
32
+ return undefined;
33
+ }
34
+ const configRaw = file.read(constants_1.CONFIG_FILE_PATH, verbose);
35
+ let config;
36
+ try {
37
+ config = JSONC.parse(configRaw);
38
+ }
39
+ catch (err) {
40
+ (0, utils_1.error)(`Failed to parse the "${chalk_1.default.green(constants_1.CONFIG_FILE_PATH)}" file:`, err);
41
+ }
42
+ if (config.modsDirectory === undefined) {
43
+ errorMissing("modsDirectory", "This should be equal to the directory where Isaac mods live on your system.");
44
+ }
45
+ if (config.saveSlot === undefined) {
46
+ errorMissing("saveSlot", "This should be equal to the save slot that you test your mods on.");
47
+ }
48
+ return config;
49
+ }
50
+ function errorMissing(field, description) {
51
+ (0, utils_1.error)(`The "${constants_1.CONFIG_FILE_NAME}" file is missing a "${field}" value. ${description} Please add it.`);
52
+ }
53
+ function createObject(modsDirectory, saveSlot) {
54
+ return {
55
+ modsDirectory,
56
+ saveSlot,
57
+ };
58
+ }
59
+ exports.createObject = createObject;
60
+ function createFile(projectPath, config, verbose) {
61
+ const configFilePath = path_1.default.join(projectPath, constants_1.CONFIG_FILE_NAME);
62
+ const configContents = JSON.stringify(config, null, 2);
63
+ file.write(configFilePath, configContents, verbose);
64
+ }
65
+ exports.createFile = createFile;
66
+ //# sourceMappingURL=configFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configFile.js","sourceRoot":"","sources":["../../../../packages/isaacscript-cli/src/configFile.ts"],"names":[],"mappings":";;;;AAAA,0DAA0B;AAC1B,4DAAsC;AACtC,wDAAwB;AACxB,2DAAwD;AACxD,mEAAgE;AAChE,2CAAsE;AACtE,qDAA+B;AAE/B,mCAAgC;AAEhC,SAAsB,GAAG,CAAC,IAA6B;;QACrD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;QAEjC,MAAM,cAAc,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,cAAc,KAAK,SAAS,EAAE;YAChC,OAAO,cAAc,CAAC;SACvB;QAED,iFAAiF;QACjF,MAAM,aAAa,GAAG,MAAM,IAAA,uBAAU,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,MAAM,IAAA,+BAAc,EAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QACrD,UAAU,CAAC,eAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAEjC,OAAO,MAAM,CAAC;IAChB,CAAC;CAAA;AAhBD,kBAgBC;AAED,SAAS,kBAAkB,CAAC,OAAgB;IAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,4BAAgB,EAAE,OAAO,CAAC,EAAE;QAC3C,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,4BAAgB,EAAE,OAAO,CAAC,CAAC;IACvD,IAAI,MAAc,CAAC;IACnB,IAAI;QACF,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAW,CAAC;KAC3C;IAAC,OAAO,GAAG,EAAE;QACZ,IAAA,aAAK,EAAC,wBAAwB,eAAK,CAAC,KAAK,CAAC,4BAAgB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;KAC5E;IAED,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE;QACtC,YAAY,CACV,eAAe,EACf,6EAA6E,CAC9E,CAAC;KACH;IAED,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE;QACjC,YAAY,CACV,UAAU,EACV,mEAAmE,CACpE,CAAC;KACH;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,WAAmB;IACtD,IAAA,aAAK,EACH,QAAQ,4BAAgB,wBAAwB,KAAK,YAAY,WAAW,iBAAiB,CAC9F,CAAC;AACJ,CAAC;AAED,SAAgB,YAAY,CAAC,aAAqB,EAAE,QAAgB;IAClE,OAAO;QACL,aAAa;QACb,QAAQ;KACT,CAAC;AACJ,CAAC;AALD,oCAKC;AAED,SAAgB,UAAU,CACxB,WAAmB,EACnB,MAAc,EACd,OAAgB;IAEhB,MAAM,cAAc,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,4BAAgB,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvD,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;AACtD,CAAC;AARD,gCAQC"}