isaacscript 2.0.13-dev.0 → 2.0.14-dev.10
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/LICENSE +674 -0
- package/README.md +4 -6
- package/file-templates/dynamic/README.md +3 -0
- package/file-templates/dynamic/gitignore +144 -0
- package/file-templates/dynamic/main.ts +19 -0
- package/file-templates/dynamic/metadata.vdf +6 -0
- package/file-templates/dynamic/metadata.xml +8 -0
- package/file-templates/dynamic/package.json +20 -0
- package/file-templates/static/.cspell.json.template +21 -0
- package/file-templates/static/.env_template +2 -0
- package/file-templates/static/.eslintrc.js.template +24 -0
- package/file-templates/static/.gitattributes +9 -0
- package/file-templates/static/.github/workflows/ci.yml +54 -0
- package/file-templates/static/.prettierignore +14 -0
- package/file-templates/static/.prettierrc.js +42 -0
- package/file-templates/static/.vscode/extensions.json +10 -0
- package/file-templates/static/.vscode/settings.json +79 -0
- package/file-templates/static/LICENSE +674 -0
- package/file-templates/static/build.sh +15 -0
- package/file-templates/static/check-orphaned-words.sh +58 -0
- package/file-templates/static/lint.sh +39 -0
- package/file-templates/static/nuke.sh +18 -0
- package/file-templates/static/plugins/addCrashDebugStatements.ts +40 -0
- package/file-templates/static/plugins/addIsaacScriptCommentHeader.ts +37 -0
- package/file-templates/static/plugins/noExtendedEnums.ts +69 -0
- package/file-templates/static/publish.sh +10 -0
- package/file-templates/static/run.sh +10 -0
- package/file-templates/static/src/bundleEntry.ts +10 -0
- package/file-templates/static/tsconfig.eslint.json +11 -0
- package/file-templates/static/tsconfig.json +33 -0
- package/file-templates/static/update.sh +21 -0
- package/file-templates/static-alt/.prettierignore-base +5 -0
- package/file-templates/static-alt/.prettierrc-base.js +30 -0
- package/file-templates/static-alt/.vscode/extensions-typescript.json +9 -0
- package/file-templates/static-alt/.vscode/settings-typescript.json +66 -0
- package/file-templates/static-alt/check-file-updates.sh +67 -0
- package/isaacscript-watcher/.luacheckrc +96 -0
- package/isaacscript-watcher/README.md +8 -0
- package/isaacscript-watcher/main.lua +270 -0
- package/isaacscript-watcher/metadata.xml +7 -0
- package/isaacscript-watcher/resources/gfx/logo.anm2 +27 -0
- package/isaacscript-watcher/resources/gfx/logo.png +0 -0
- package/package.json +39 -2
- package/src/checkForWindowsTerminalBugs.js +75 -79
- package/src/checkForWindowsTerminalBugs.js.map +1 -1
- package/src/commands/copy/copy.js +32 -32
- package/src/commands/init/checkIfProjectPathExists.js +27 -29
- package/src/commands/init/checkIfProjectPathExists.js.map +1 -1
- package/src/commands/init/checkModSubdirectory.js +15 -15
- package/src/commands/init/checkModTargetDirectory.js +30 -32
- package/src/commands/init/checkModTargetDirectory.js.map +1 -1
- package/src/commands/init/createMod.js +142 -137
- package/src/commands/init/createMod.js.map +1 -1
- package/src/commands/init/getModsDir.js +55 -57
- package/src/commands/init/getModsDir.js.map +1 -1
- package/src/commands/init/getProjectPath.js +88 -92
- package/src/commands/init/getProjectPath.js.map +1 -1
- package/src/commands/init/git.js +150 -152
- package/src/commands/init/git.js.map +1 -1
- package/src/commands/init/init.js +65 -69
- package/src/commands/init/init.js.map +1 -1
- package/src/commands/init/installVSCodeExtensions.js +32 -32
- package/src/commands/init/promptSaveSlot.js +21 -24
- package/src/commands/init/promptSaveSlot.js.map +1 -1
- package/src/commands/init/promptVSCode.js +24 -26
- package/src/commands/init/promptVSCode.js.map +1 -1
- package/src/commands/monitor/constants.js +4 -4
- package/src/commands/monitor/copyWatcherMod.js +38 -38
- package/src/commands/monitor/modDirectorySyncer/modDirectorySyncer.js +49 -49
- package/src/commands/monitor/monitor.js +146 -146
- package/src/commands/monitor/notifyGame.js +57 -57
- package/src/commands/monitor/saveDatWriter/saveDatWriter.js +116 -116
- package/src/commands/monitor/saveDatWriter/types.js +2 -2
- package/src/commands/monitor/spawnSaveDatWriter.js +34 -34
- package/src/commands/monitor/touchWatcherSaveDatFiles.js +20 -20
- package/src/commands/publish/publish.js +220 -220
- package/src/configFile.js +63 -65
- package/src/configFile.js.map +1 -1
- package/src/constants.js +59 -59
- package/src/constants.js.map +1 -1
- package/src/exec.js +95 -95
- package/src/file.js +193 -193
- package/src/main.js +117 -121
- package/src/main.js.map +1 -1
- package/src/parseArgs.js +106 -106
- package/src/prompt.js +86 -92
- package/src/prompt.js.map +1 -1
- package/src/types/Command.js +4 -4
- package/src/types/Config.js +12 -12
- package/src/types/GitHubCLIHostsYAML.js +2 -2
- package/src/utils.js +81 -81
- package/src/validateInIsaacScriptProject.js +26 -26
- package/src/validateNodeVersion.js +24 -24
- package/src/validateOS.js +16 -16
- package/src/checkForWindowsTerminalBugs.d.ts +0 -5
- package/src/commands/copy/copy.d.ts +0 -3
- package/src/commands/init/checkIfProjectPathExists.d.ts +0 -1
- package/src/commands/init/checkModSubdirectory.d.ts +0 -1
- package/src/commands/init/checkModTargetDirectory.d.ts +0 -1
- package/src/commands/init/createMod.d.ts +0 -1
- package/src/commands/init/getModsDir.d.ts +0 -1
- package/src/commands/init/getProjectPath.d.ts +0 -1
- package/src/commands/init/git.d.ts +0 -4
- package/src/commands/init/init.d.ts +0 -1
- package/src/commands/init/installVSCodeExtensions.d.ts +0 -1
- package/src/commands/init/promptSaveSlot.d.ts +0 -1
- package/src/commands/init/promptVSCode.d.ts +0 -1
- package/src/commands/monitor/constants.d.ts +0 -1
- package/src/commands/monitor/copyWatcherMod.d.ts +0 -2
- package/src/commands/monitor/modDirectorySyncer/modDirectorySyncer.d.ts +0 -1
- package/src/commands/monitor/monitor.d.ts +0 -2
- package/src/commands/monitor/notifyGame.d.ts +0 -3
- package/src/commands/monitor/saveDatWriter/saveDatWriter.d.ts +0 -1
- package/src/commands/monitor/saveDatWriter/types.d.ts +0 -5
- package/src/commands/monitor/spawnSaveDatWriter.d.ts +0 -4
- package/src/commands/monitor/touchWatcherSaveDatFiles.d.ts +0 -2
- package/src/commands/publish/publish.d.ts +0 -2
- package/src/configFile.d.ts +0 -4
- package/src/constants.d.ts +0 -34
- package/src/exec.d.ts +0 -4
- package/src/file.d.ts +0 -12
- package/src/main.d.ts +0 -2
- package/src/parseArgs.d.ts +0 -1
- package/src/prompt.d.ts +0 -5
- package/src/types/Command.d.ts +0 -2
- package/src/types/Config.d.ts +0 -18
- package/src/types/GitHubCLIHostsYAML.d.ts +0 -7
- package/src/utils.d.ts +0 -13
- package/src/validateInIsaacScriptProject.d.ts +0 -1
- package/src/validateNodeVersion.d.ts +0 -5
- package/src/validateOS.d.ts +0 -1
package/src/file.js
CHANGED
|
@@ -1,194 +1,194 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.writeTry = exports.write = exports.touch = exports.rename = exports.read = exports.makeDir = exports.isSubDirOf = exports.isDir = exports.getDirList = exports.exists = exports.deleteFileOrDirectory = exports.copy = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
6
|
-
const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
|
|
7
|
-
const path_1 = tslib_1.__importDefault(require("path"));
|
|
8
|
-
const utils_1 = require("./utils");
|
|
9
|
-
function copy(srcPath, dstPath, verbose) {
|
|
10
|
-
if (verbose) {
|
|
11
|
-
console.log(`Copying: ${srcPath} --> ${dstPath}`);
|
|
12
|
-
}
|
|
13
|
-
try {
|
|
14
|
-
// `copySync` is a `fs-extra` method for copying directories recursively.
|
|
15
|
-
fs_extra_1.default.copySync(srcPath, dstPath, {
|
|
16
|
-
recursive: true,
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
catch (err) {
|
|
20
|
-
(0, utils_1.error)(`Failed to copy directory "${chalk_1.default.green(srcPath)}" to "${chalk_1.default.green(dstPath)}":`, err);
|
|
21
|
-
}
|
|
22
|
-
if (verbose) {
|
|
23
|
-
console.log(`Copied: ${srcPath} --> ${dstPath}`);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
exports.copy = copy;
|
|
27
|
-
function deleteFileOrDirectory(filePath, verbose) {
|
|
28
|
-
if (verbose) {
|
|
29
|
-
console.log(`Deleting: ${filePath}`);
|
|
30
|
-
}
|
|
31
|
-
try {
|
|
32
|
-
fs_extra_1.default.rmSync(filePath, {
|
|
33
|
-
recursive: true,
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
catch (err) {
|
|
37
|
-
(0, utils_1.error)(`Failed to delete file or directory "${chalk_1.default.green(filePath)}":`, err);
|
|
38
|
-
}
|
|
39
|
-
if (verbose) {
|
|
40
|
-
console.log(`Deleted: ${filePath}`);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
exports.deleteFileOrDirectory = deleteFileOrDirectory;
|
|
44
|
-
function exists(filePath, verbose) {
|
|
45
|
-
if (verbose) {
|
|
46
|
-
console.log(`Checking to see if the following path exists: ${filePath}`);
|
|
47
|
-
}
|
|
48
|
-
let pathExists;
|
|
49
|
-
try {
|
|
50
|
-
pathExists = fs_extra_1.default.existsSync(filePath);
|
|
51
|
-
}
|
|
52
|
-
catch (err) {
|
|
53
|
-
(0, utils_1.error)(`Failed to check if "${chalk_1.default.green(filePath)}" exists:`, err);
|
|
54
|
-
}
|
|
55
|
-
if (verbose) {
|
|
56
|
-
console.log(`Path exists: ${pathExists}`);
|
|
57
|
-
}
|
|
58
|
-
return pathExists;
|
|
59
|
-
}
|
|
60
|
-
exports.exists = exists;
|
|
61
|
-
function getDirList(dirPath, verbose) {
|
|
62
|
-
if (verbose) {
|
|
63
|
-
console.log(`Getting a directory list from: ${dirPath}`);
|
|
64
|
-
}
|
|
65
|
-
let fileList;
|
|
66
|
-
try {
|
|
67
|
-
fileList = fs_extra_1.default.readdirSync(dirPath);
|
|
68
|
-
}
|
|
69
|
-
catch (err) {
|
|
70
|
-
(0, utils_1.error)(`Failed to get the files in the "${chalk_1.default.green(dirPath)}" directory:`, err);
|
|
71
|
-
}
|
|
72
|
-
if (verbose) {
|
|
73
|
-
console.log(`Got a directory list from: ${dirPath}`);
|
|
74
|
-
}
|
|
75
|
-
return fileList;
|
|
76
|
-
}
|
|
77
|
-
exports.getDirList = getDirList;
|
|
78
|
-
function getFileStats(filePath, verbose) {
|
|
79
|
-
if (verbose) {
|
|
80
|
-
console.log(`Getting file stats from: ${filePath}`);
|
|
81
|
-
}
|
|
82
|
-
let fileStats;
|
|
83
|
-
try {
|
|
84
|
-
fileStats = fs_extra_1.default.statSync(filePath);
|
|
85
|
-
}
|
|
86
|
-
catch (err) {
|
|
87
|
-
(0, utils_1.error)(`Failed to get the file stats for "${chalk_1.default.green(filePath)}":`, err);
|
|
88
|
-
}
|
|
89
|
-
if (verbose) {
|
|
90
|
-
console.log(`Got file stats from: ${filePath}`);
|
|
91
|
-
}
|
|
92
|
-
return fileStats;
|
|
93
|
-
}
|
|
94
|
-
function isDir(filePath, verbose) {
|
|
95
|
-
const fileStats = getFileStats(filePath, verbose);
|
|
96
|
-
return fileStats.isDirectory();
|
|
97
|
-
}
|
|
98
|
-
exports.isDir = isDir;
|
|
99
|
-
function isSubDirOf(dir, parent) {
|
|
100
|
-
const relative = path_1.default.relative(parent, dir);
|
|
101
|
-
return (relative !== "" && !relative.startsWith("..") && !path_1.default.isAbsolute(relative));
|
|
102
|
-
}
|
|
103
|
-
exports.isSubDirOf = isSubDirOf;
|
|
104
|
-
function makeDir(dirPath, verbose) {
|
|
105
|
-
if (verbose) {
|
|
106
|
-
console.log(`Making a directory: ${dirPath}`);
|
|
107
|
-
}
|
|
108
|
-
try {
|
|
109
|
-
fs_extra_1.default.mkdirSync(dirPath, {
|
|
110
|
-
recursive: true,
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
catch (err) {
|
|
114
|
-
(0, utils_1.error)(`Failed to create the "${chalk_1.default.green(dirPath)}" directory:`, err);
|
|
115
|
-
}
|
|
116
|
-
if (verbose) {
|
|
117
|
-
console.log(`Made a directory: ${dirPath}`);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
exports.makeDir = makeDir;
|
|
121
|
-
function read(filePath, verbose) {
|
|
122
|
-
if (verbose) {
|
|
123
|
-
console.log(`Reading a file: ${filePath}`);
|
|
124
|
-
}
|
|
125
|
-
let fileContents;
|
|
126
|
-
try {
|
|
127
|
-
fileContents = fs_extra_1.default.readFileSync(filePath, "utf8");
|
|
128
|
-
}
|
|
129
|
-
catch (err) {
|
|
130
|
-
(0, utils_1.error)(`Failed to read the "${chalk_1.default.green(filePath)}" file:`, err);
|
|
131
|
-
}
|
|
132
|
-
if (verbose) {
|
|
133
|
-
console.log(`Read a file: ${filePath}`);
|
|
134
|
-
}
|
|
135
|
-
return fileContents;
|
|
136
|
-
}
|
|
137
|
-
exports.read = read;
|
|
138
|
-
function rename(srcPath, dstPath, verbose) {
|
|
139
|
-
if (verbose) {
|
|
140
|
-
console.log(`Renaming: ${srcPath} --> ${dstPath}`);
|
|
141
|
-
}
|
|
142
|
-
try {
|
|
143
|
-
fs_extra_1.default.renameSync(srcPath, dstPath);
|
|
144
|
-
}
|
|
145
|
-
catch (err) {
|
|
146
|
-
(0, utils_1.error)(`Failed to rename "${chalk_1.default.green(srcPath)}" to "${chalk_1.default.green(dstPath)}":`, err);
|
|
147
|
-
}
|
|
148
|
-
if (verbose) {
|
|
149
|
-
console.log(`Renamed: ${srcPath} --> ${dstPath}`);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
exports.rename = rename;
|
|
153
|
-
function touch(filePath, verbose) {
|
|
154
|
-
if (verbose) {
|
|
155
|
-
console.log(`Touching: ${filePath}`);
|
|
156
|
-
}
|
|
157
|
-
try {
|
|
158
|
-
const fileHandle = fs_extra_1.default.openSync(filePath, "w");
|
|
159
|
-
fs_extra_1.default.closeSync(fileHandle);
|
|
160
|
-
}
|
|
161
|
-
catch (err) {
|
|
162
|
-
(0, utils_1.error)(`Failed to touch the "${chalk_1.default.green(filePath)}" file:`, err);
|
|
163
|
-
}
|
|
164
|
-
if (verbose) {
|
|
165
|
-
console.log(`Touched: ${filePath}`);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
exports.touch = touch;
|
|
169
|
-
function write(filePath, data, verbose) {
|
|
170
|
-
if (verbose) {
|
|
171
|
-
console.log(`Writing data to: ${filePath}`);
|
|
172
|
-
}
|
|
173
|
-
try {
|
|
174
|
-
fs_extra_1.default.writeFileSync(filePath, data);
|
|
175
|
-
}
|
|
176
|
-
catch (err) {
|
|
177
|
-
(0, utils_1.error)(`Failed to write to the "${chalk_1.default.green(filePath)}" file:`, err);
|
|
178
|
-
}
|
|
179
|
-
if (verbose) {
|
|
180
|
-
console.log(`Wrote data to: ${filePath}`);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
exports.write = write;
|
|
184
|
-
function writeTry(filePath, data, verbose) {
|
|
185
|
-
if (verbose) {
|
|
186
|
-
console.log(`Writing data to: ${filePath}`);
|
|
187
|
-
}
|
|
188
|
-
fs_extra_1.default.writeFileSync(filePath, data);
|
|
189
|
-
if (verbose) {
|
|
190
|
-
console.log(`Wrote data to: ${filePath}`);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
exports.writeTry = writeTry;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.writeTry = exports.write = exports.touch = exports.rename = exports.read = exports.makeDir = exports.isSubDirOf = exports.isDir = exports.getDirList = exports.exists = exports.deleteFileOrDirectory = exports.copy = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
6
|
+
const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
|
|
7
|
+
const path_1 = tslib_1.__importDefault(require("path"));
|
|
8
|
+
const utils_1 = require("./utils");
|
|
9
|
+
function copy(srcPath, dstPath, verbose) {
|
|
10
|
+
if (verbose) {
|
|
11
|
+
console.log(`Copying: ${srcPath} --> ${dstPath}`);
|
|
12
|
+
}
|
|
13
|
+
try {
|
|
14
|
+
// `copySync` is a `fs-extra` method for copying directories recursively.
|
|
15
|
+
fs_extra_1.default.copySync(srcPath, dstPath, {
|
|
16
|
+
recursive: true,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
(0, utils_1.error)(`Failed to copy directory "${chalk_1.default.green(srcPath)}" to "${chalk_1.default.green(dstPath)}":`, err);
|
|
21
|
+
}
|
|
22
|
+
if (verbose) {
|
|
23
|
+
console.log(`Copied: ${srcPath} --> ${dstPath}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.copy = copy;
|
|
27
|
+
function deleteFileOrDirectory(filePath, verbose) {
|
|
28
|
+
if (verbose) {
|
|
29
|
+
console.log(`Deleting: ${filePath}`);
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
fs_extra_1.default.rmSync(filePath, {
|
|
33
|
+
recursive: true,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
(0, utils_1.error)(`Failed to delete file or directory "${chalk_1.default.green(filePath)}":`, err);
|
|
38
|
+
}
|
|
39
|
+
if (verbose) {
|
|
40
|
+
console.log(`Deleted: ${filePath}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.deleteFileOrDirectory = deleteFileOrDirectory;
|
|
44
|
+
function exists(filePath, verbose) {
|
|
45
|
+
if (verbose) {
|
|
46
|
+
console.log(`Checking to see if the following path exists: ${filePath}`);
|
|
47
|
+
}
|
|
48
|
+
let pathExists;
|
|
49
|
+
try {
|
|
50
|
+
pathExists = fs_extra_1.default.existsSync(filePath);
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
(0, utils_1.error)(`Failed to check if "${chalk_1.default.green(filePath)}" exists:`, err);
|
|
54
|
+
}
|
|
55
|
+
if (verbose) {
|
|
56
|
+
console.log(`Path exists: ${pathExists}`);
|
|
57
|
+
}
|
|
58
|
+
return pathExists;
|
|
59
|
+
}
|
|
60
|
+
exports.exists = exists;
|
|
61
|
+
function getDirList(dirPath, verbose) {
|
|
62
|
+
if (verbose) {
|
|
63
|
+
console.log(`Getting a directory list from: ${dirPath}`);
|
|
64
|
+
}
|
|
65
|
+
let fileList;
|
|
66
|
+
try {
|
|
67
|
+
fileList = fs_extra_1.default.readdirSync(dirPath);
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
(0, utils_1.error)(`Failed to get the files in the "${chalk_1.default.green(dirPath)}" directory:`, err);
|
|
71
|
+
}
|
|
72
|
+
if (verbose) {
|
|
73
|
+
console.log(`Got a directory list from: ${dirPath}`);
|
|
74
|
+
}
|
|
75
|
+
return fileList;
|
|
76
|
+
}
|
|
77
|
+
exports.getDirList = getDirList;
|
|
78
|
+
function getFileStats(filePath, verbose) {
|
|
79
|
+
if (verbose) {
|
|
80
|
+
console.log(`Getting file stats from: ${filePath}`);
|
|
81
|
+
}
|
|
82
|
+
let fileStats;
|
|
83
|
+
try {
|
|
84
|
+
fileStats = fs_extra_1.default.statSync(filePath);
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
(0, utils_1.error)(`Failed to get the file stats for "${chalk_1.default.green(filePath)}":`, err);
|
|
88
|
+
}
|
|
89
|
+
if (verbose) {
|
|
90
|
+
console.log(`Got file stats from: ${filePath}`);
|
|
91
|
+
}
|
|
92
|
+
return fileStats;
|
|
93
|
+
}
|
|
94
|
+
function isDir(filePath, verbose) {
|
|
95
|
+
const fileStats = getFileStats(filePath, verbose);
|
|
96
|
+
return fileStats.isDirectory();
|
|
97
|
+
}
|
|
98
|
+
exports.isDir = isDir;
|
|
99
|
+
function isSubDirOf(dir, parent) {
|
|
100
|
+
const relative = path_1.default.relative(parent, dir);
|
|
101
|
+
return (relative !== "" && !relative.startsWith("..") && !path_1.default.isAbsolute(relative));
|
|
102
|
+
}
|
|
103
|
+
exports.isSubDirOf = isSubDirOf;
|
|
104
|
+
function makeDir(dirPath, verbose) {
|
|
105
|
+
if (verbose) {
|
|
106
|
+
console.log(`Making a directory: ${dirPath}`);
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
fs_extra_1.default.mkdirSync(dirPath, {
|
|
110
|
+
recursive: true,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
(0, utils_1.error)(`Failed to create the "${chalk_1.default.green(dirPath)}" directory:`, err);
|
|
115
|
+
}
|
|
116
|
+
if (verbose) {
|
|
117
|
+
console.log(`Made a directory: ${dirPath}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
exports.makeDir = makeDir;
|
|
121
|
+
function read(filePath, verbose) {
|
|
122
|
+
if (verbose) {
|
|
123
|
+
console.log(`Reading a file: ${filePath}`);
|
|
124
|
+
}
|
|
125
|
+
let fileContents;
|
|
126
|
+
try {
|
|
127
|
+
fileContents = fs_extra_1.default.readFileSync(filePath, "utf8");
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
(0, utils_1.error)(`Failed to read the "${chalk_1.default.green(filePath)}" file:`, err);
|
|
131
|
+
}
|
|
132
|
+
if (verbose) {
|
|
133
|
+
console.log(`Read a file: ${filePath}`);
|
|
134
|
+
}
|
|
135
|
+
return fileContents;
|
|
136
|
+
}
|
|
137
|
+
exports.read = read;
|
|
138
|
+
function rename(srcPath, dstPath, verbose) {
|
|
139
|
+
if (verbose) {
|
|
140
|
+
console.log(`Renaming: ${srcPath} --> ${dstPath}`);
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
fs_extra_1.default.renameSync(srcPath, dstPath);
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
(0, utils_1.error)(`Failed to rename "${chalk_1.default.green(srcPath)}" to "${chalk_1.default.green(dstPath)}":`, err);
|
|
147
|
+
}
|
|
148
|
+
if (verbose) {
|
|
149
|
+
console.log(`Renamed: ${srcPath} --> ${dstPath}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
exports.rename = rename;
|
|
153
|
+
function touch(filePath, verbose) {
|
|
154
|
+
if (verbose) {
|
|
155
|
+
console.log(`Touching: ${filePath}`);
|
|
156
|
+
}
|
|
157
|
+
try {
|
|
158
|
+
const fileHandle = fs_extra_1.default.openSync(filePath, "w");
|
|
159
|
+
fs_extra_1.default.closeSync(fileHandle);
|
|
160
|
+
}
|
|
161
|
+
catch (err) {
|
|
162
|
+
(0, utils_1.error)(`Failed to touch the "${chalk_1.default.green(filePath)}" file:`, err);
|
|
163
|
+
}
|
|
164
|
+
if (verbose) {
|
|
165
|
+
console.log(`Touched: ${filePath}`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
exports.touch = touch;
|
|
169
|
+
function write(filePath, data, verbose) {
|
|
170
|
+
if (verbose) {
|
|
171
|
+
console.log(`Writing data to: ${filePath}`);
|
|
172
|
+
}
|
|
173
|
+
try {
|
|
174
|
+
fs_extra_1.default.writeFileSync(filePath, data);
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
(0, utils_1.error)(`Failed to write to the "${chalk_1.default.green(filePath)}" file:`, err);
|
|
178
|
+
}
|
|
179
|
+
if (verbose) {
|
|
180
|
+
console.log(`Wrote data to: ${filePath}`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
exports.write = write;
|
|
184
|
+
function writeTry(filePath, data, verbose) {
|
|
185
|
+
if (verbose) {
|
|
186
|
+
console.log(`Writing data to: ${filePath}`);
|
|
187
|
+
}
|
|
188
|
+
fs_extra_1.default.writeFileSync(filePath, data);
|
|
189
|
+
if (verbose) {
|
|
190
|
+
console.log(`Wrote data to: ${filePath}`);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
exports.writeTry = writeTry;
|
|
194
194
|
//# sourceMappingURL=file.js.map
|
package/src/main.js
CHANGED
|
@@ -1,122 +1,118 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
"use strict";
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
6
|
-
const dotenv = tslib_1.__importStar(require("dotenv"));
|
|
7
|
-
const figlet_1 = tslib_1.__importDefault(require("figlet"));
|
|
8
|
-
const path_1 = tslib_1.__importDefault(require("path"));
|
|
9
|
-
const source_map_support_1 = tslib_1.__importDefault(require("source-map-support"));
|
|
10
|
-
const update_notifier_1 = tslib_1.__importDefault(require("update-notifier"));
|
|
11
|
-
const package_json_1 = tslib_1.__importDefault(require("../package.json"));
|
|
12
|
-
const checkForWindowsTerminalBugs_1 = require("./checkForWindowsTerminalBugs");
|
|
13
|
-
const copy_1 = require("./commands/copy/copy");
|
|
14
|
-
const init_1 = require("./commands/init/init");
|
|
15
|
-
const monitor_1 = require("./commands/monitor/monitor");
|
|
16
|
-
const publish_1 = require("./commands/publish/publish");
|
|
17
|
-
const configFile = tslib_1.__importStar(require("./configFile"));
|
|
18
|
-
const constants_1 = require("./constants");
|
|
19
|
-
const exec_1 = require("./exec");
|
|
20
|
-
const file = tslib_1.__importStar(require("./file"));
|
|
21
|
-
const parseArgs_1 = require("./parseArgs");
|
|
22
|
-
const prompt_1 = require("./prompt");
|
|
23
|
-
const Command_1 = require("./types/Command");
|
|
24
|
-
const Config_1 = require("./types/Config");
|
|
25
|
-
const utils_1 = require("./utils");
|
|
26
|
-
const validateInIsaacScriptProject_1 = require("./validateInIsaacScriptProject");
|
|
27
|
-
const validateNodeVersion_1 = require("./validateNodeVersion");
|
|
28
|
-
const validateOS_1 = require("./validateOS");
|
|
29
|
-
main().catch((err) => {
|
|
30
|
-
(0, utils_1.error)(`${constants_1.PROJECT_NAME} failed:`, err);
|
|
31
|
-
});
|
|
32
|
-
function main() {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
const
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
// https://stackoverflow.com/questions/57016579/checking-if-package-json-dependencies-match-the-installed-dependencies
|
|
119
|
-
console.log('Running "npm install" to ensure that the project\'s dependencies are installed correctly.');
|
|
120
|
-
(0, exec_1.execShell)("npm", ["install"], verbose);
|
|
121
|
-
}
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
6
|
+
const dotenv = tslib_1.__importStar(require("dotenv"));
|
|
7
|
+
const figlet_1 = tslib_1.__importDefault(require("figlet"));
|
|
8
|
+
const path_1 = tslib_1.__importDefault(require("path"));
|
|
9
|
+
const source_map_support_1 = tslib_1.__importDefault(require("source-map-support"));
|
|
10
|
+
const update_notifier_1 = tslib_1.__importDefault(require("update-notifier"));
|
|
11
|
+
const package_json_1 = tslib_1.__importDefault(require("../package.json"));
|
|
12
|
+
const checkForWindowsTerminalBugs_1 = require("./checkForWindowsTerminalBugs");
|
|
13
|
+
const copy_1 = require("./commands/copy/copy");
|
|
14
|
+
const init_1 = require("./commands/init/init");
|
|
15
|
+
const monitor_1 = require("./commands/monitor/monitor");
|
|
16
|
+
const publish_1 = require("./commands/publish/publish");
|
|
17
|
+
const configFile = tslib_1.__importStar(require("./configFile"));
|
|
18
|
+
const constants_1 = require("./constants");
|
|
19
|
+
const exec_1 = require("./exec");
|
|
20
|
+
const file = tslib_1.__importStar(require("./file"));
|
|
21
|
+
const parseArgs_1 = require("./parseArgs");
|
|
22
|
+
const prompt_1 = require("./prompt");
|
|
23
|
+
const Command_1 = require("./types/Command");
|
|
24
|
+
const Config_1 = require("./types/Config");
|
|
25
|
+
const utils_1 = require("./utils");
|
|
26
|
+
const validateInIsaacScriptProject_1 = require("./validateInIsaacScriptProject");
|
|
27
|
+
const validateNodeVersion_1 = require("./validateNodeVersion");
|
|
28
|
+
const validateOS_1 = require("./validateOS");
|
|
29
|
+
main().catch((err) => {
|
|
30
|
+
(0, utils_1.error)(`${constants_1.PROJECT_NAME} failed:`, err);
|
|
31
|
+
});
|
|
32
|
+
async function main() {
|
|
33
|
+
source_map_support_1.default.install();
|
|
34
|
+
(0, prompt_1.promptInit)();
|
|
35
|
+
(0, validateNodeVersion_1.validateNodeVersion)();
|
|
36
|
+
(0, validateOS_1.validateOS)();
|
|
37
|
+
loadEnvironmentVariables();
|
|
38
|
+
// Get command line arguments.
|
|
39
|
+
const argv = (0, parseArgs_1.parseArgs)();
|
|
40
|
+
const verbose = argv["verbose"] === true;
|
|
41
|
+
printBanner();
|
|
42
|
+
// Check for a new version.
|
|
43
|
+
(0, update_notifier_1.default)({ pkg: package_json_1.default }).notify();
|
|
44
|
+
// Pre-flight checks.
|
|
45
|
+
await (0, checkForWindowsTerminalBugs_1.checkForWindowsTerminalBugs)(verbose);
|
|
46
|
+
await handleCommands(argv, verbose);
|
|
47
|
+
}
|
|
48
|
+
function loadEnvironmentVariables() {
|
|
49
|
+
const envFile = path_1.default.join(constants_1.CWD, ".env");
|
|
50
|
+
dotenv.config({ path: envFile });
|
|
51
|
+
}
|
|
52
|
+
function printBanner() {
|
|
53
|
+
const banner = figlet_1.default.textSync(constants_1.PROJECT_NAME);
|
|
54
|
+
console.log(chalk_1.default.green(banner));
|
|
55
|
+
const bannerLines = banner.split("\n");
|
|
56
|
+
const firstBannerLine = bannerLines[0];
|
|
57
|
+
if (firstBannerLine === undefined) {
|
|
58
|
+
throw new Error("Failed to get the first line of the banner text.");
|
|
59
|
+
}
|
|
60
|
+
const bannerLineLength = firstBannerLine.length;
|
|
61
|
+
const version = `v${package_json_1.default.version}`;
|
|
62
|
+
const leftPaddingAmount = Math.floor((bannerLineLength + version.length) / 2);
|
|
63
|
+
const versionLine = version.padStart(leftPaddingAmount);
|
|
64
|
+
console.log(versionLine);
|
|
65
|
+
console.log();
|
|
66
|
+
}
|
|
67
|
+
async function handleCommands(argv, verbose) {
|
|
68
|
+
const positionalArgs = argv["_"];
|
|
69
|
+
let command;
|
|
70
|
+
if (positionalArgs.length > 0) {
|
|
71
|
+
command = positionalArgs[0];
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
command = Command_1.DEFAULT_COMMAND;
|
|
75
|
+
}
|
|
76
|
+
let config = new Config_1.Config();
|
|
77
|
+
if (command !== "init") {
|
|
78
|
+
(0, validateInIsaacScriptProject_1.validateInIsaacScriptProject)(verbose);
|
|
79
|
+
config = await configFile.get(argv);
|
|
80
|
+
ensureDepsAreInstalled(verbose);
|
|
81
|
+
}
|
|
82
|
+
switch (command) {
|
|
83
|
+
case "monitor": {
|
|
84
|
+
(0, monitor_1.monitor)(argv, config);
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
case "init": {
|
|
88
|
+
await (0, init_1.init)(argv);
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
case "copy": {
|
|
92
|
+
(0, copy_1.copy)(argv, config);
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
case "publish": {
|
|
96
|
+
(0, publish_1.publish)(argv, config);
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
default: {
|
|
100
|
+
(0, utils_1.ensureAllCases)(command);
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (command !== "monitor") {
|
|
105
|
+
process.exit(0);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function ensureDepsAreInstalled(verbose) {
|
|
109
|
+
if (file.exists(constants_1.YARN_LOCK_PATH, verbose)) {
|
|
110
|
+
console.log('Running "yarn" to ensure that the project\'s dependencies are installed correctly.');
|
|
111
|
+
(0, exec_1.execShell)("yarn");
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
// https://stackoverflow.com/questions/57016579/checking-if-package-json-dependencies-match-the-installed-dependencies
|
|
115
|
+
console.log('Running "npm install" to ensure that the project\'s dependencies are installed correctly.');
|
|
116
|
+
(0, exec_1.execShell)("npm", ["install"], verbose);
|
|
117
|
+
}
|
|
122
118
|
//# sourceMappingURL=main.js.map
|
package/src/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../../packages/isaacscript-cli/src/main.ts"],"names":[],"mappings":";;;;AAEA,0DAA0B;AAC1B,uDAAiC;AACjC,4DAA4B;AAC5B,wDAAwB;AACxB,oFAAkD;AAClD,8EAA6C;AAC7C,2EAAkC;AAClC,+EAA4E;AAC5E,+CAA4C;AAC5C,+CAA4C;AAC5C,wDAAqD;AACrD,wDAAqD;AACrD,iEAA2C;AAC3C,2CAAgE;AAChE,iCAAmC;AACnC,qDAA+B;AAC/B,2CAAwC;AACxC,qCAAsC;AACtC,6CAA2D;AAC3D,2CAAwC;AACxC,mCAAgD;AAChD,iFAA8E;AAC9E,+DAA4D;AAC5D,6CAA0C;AAE1C,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,IAAA,aAAK,EAAC,GAAG,wBAAY,UAAU,EAAE,GAAG,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../../packages/isaacscript-cli/src/main.ts"],"names":[],"mappings":"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"}
|