gamelet-cli 0.7.10 → 0.7.13

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 (51) hide show
  1. package/assets/package.json.twig +3 -3
  2. package/assets/server/static/js/monitor.js +6 -0
  3. package/assets/server/views/monitor.twig +1 -0
  4. package/assets/tsconfig.json.twig +1 -1
  5. package/build/package.json +67 -67
  6. package/build/src/gamelet/download.js +773 -737
  7. package/build/src/gamelet/merges.js +181 -179
  8. package/build/src/gamelet/prepare.js +276 -277
  9. package/build/src/gamelet/upload.js +280 -279
  10. package/build/src/index.js +86 -86
  11. package/build/src/server/Constant.js +9 -9
  12. package/build/src/server/entities/Client.js +78 -78
  13. package/build/src/server/entities/ClientOwner.js +67 -67
  14. package/build/src/server/entities/ClientProject.js +84 -84
  15. package/build/src/server/entities/Gameroom.js +89 -89
  16. package/build/src/server/entities/GameroomBase.js +276 -276
  17. package/build/src/server/entities/Gamezone.js +73 -73
  18. package/build/src/server/entities/ListFilter.js +193 -193
  19. package/build/src/server/entities/Monitor.js +94 -81
  20. package/build/src/server/entities/Player.js +140 -140
  21. package/build/src/server/managers/ApiManager.js +75 -75
  22. package/build/src/server/managers/ClientManager.js +64 -64
  23. package/build/src/server/managers/Database.js +627 -627
  24. package/build/src/server/managers/GameroomManager.js +392 -392
  25. package/build/src/server/managers/ManagerBase.js +17 -17
  26. package/build/src/server/managers/MonitorManager.js +73 -73
  27. package/build/src/server/managers/PlayerManager.js +108 -108
  28. package/build/src/server/managers/SocketManager.js +60 -60
  29. package/build/src/server/managers/UserManager.js +58 -58
  30. package/build/src/server/messages/Message.js +143 -143
  31. package/build/src/server/server.js +112 -113
  32. package/build/src/server/services/ServiceBase.js +25 -25
  33. package/build/src/server/services/clientService.js +23 -23
  34. package/build/src/server/services/gameroomService.js +121 -121
  35. package/build/src/server/services/gltserver.service.js +23 -23
  36. package/build/src/server/services/playerService.js +32 -32
  37. package/build/src/server/startServer.js +32 -33
  38. package/build/src/server/types/BadgeStatus.js +25 -25
  39. package/build/src/server/types/OrderType.js +38 -38
  40. package/build/src/server/types/SubmitType.js +24 -24
  41. package/build/src/server/types/TimeRange.js +26 -26
  42. package/build/src/server/utils/ArrayUtil.js +126 -126
  43. package/build/src/server/utils/IntUtil.js +9 -9
  44. package/build/src/server/utils/ObjectUtil.js +191 -191
  45. package/build/src/server/utils/StringUtil.js +37 -37
  46. package/build/src/utils/cli.js +53 -53
  47. package/build/src/utils/file.js +350 -337
  48. package/build/src/utils/init.js +57 -42
  49. package/build/src/utils/log.js +18 -17
  50. package/build/src/utils/net.js +43 -39
  51. package/package.json +2 -2
@@ -1,337 +1,350 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.isEmptyFolder = exports.copyFile = exports.rmdir = exports.getFileZip = exports.downloadFile = exports.renderTwig = exports.unlink = exports.vscodeLink = exports.saveData = exports.isGitCommitted = exports.fileSize = exports.fileStat = exports.moveFile = exports.fileExists = exports.listFiles = exports.getFileJson = exports.getFileString = exports.getFileData = exports.mkdir = exports.wait = exports.setFileCacheFolder = void 0;
7
- const axios_1 = __importDefault(require("axios"));
8
- const path_1 = __importDefault(require("path"));
9
- const mkdirp_1 = __importDefault(require("mkdirp"));
10
- const twig_1 = __importDefault(require("twig"));
11
- const fs_1 = __importDefault(require("fs"));
12
- const jszip_1 = __importDefault(require("jszip"));
13
- const simple_git_1 = __importDefault(require("simple-git"));
14
- const rimraf_1 = __importDefault(require("rimraf"));
15
- const md5_file_1 = __importDefault(require("md5-file"));
16
- const md5_1 = __importDefault(require("md5"));
17
- // const { default: axios } = require("axios");
18
- // const path = require("path");
19
- // const mkdirp = require("mkdirp");
20
- // const Twig = require("twig");
21
- // const fs = require("fs");
22
- // const JSZip = require("jszip");
23
- // const simpleGit = require('simple-git');
24
- // const rimraf = require("rimraf");
25
- // const md5File = require("md5-file");
26
- // const md5 = require('md5');
27
- let fileCacheFolder;
28
- exports.setFileCacheFolder = function (folder) {
29
- fileCacheFolder = folder && `${folder}/.cg/cache`;
30
- };
31
- exports.wait = function (duration) {
32
- return new Promise(resolve => {
33
- setTimeout(resolve, duration);
34
- });
35
- };
36
- exports.mkdir = function (filenameWithPath) {
37
- if (!filenameWithPath.endsWith('/')) {
38
- filenameWithPath = path_1.default.dirname(filenameWithPath);
39
- }
40
- return mkdirp_1.default(filenameWithPath);
41
- };
42
- exports.getFileData = function (filenameWithPath) {
43
- return new Promise((resolve, reject) => {
44
- fs_1.default.readFile(filenameWithPath, (err, data) => {
45
- if (err) {
46
- reject(err);
47
- }
48
- else {
49
- resolve(data);
50
- }
51
- });
52
- });
53
- };
54
- exports.getFileString = function (filenameWithPath, trimContent) {
55
- return exports.getFileData(filenameWithPath)
56
- .then(data => data.toString('utf8'))
57
- .then(str => {
58
- if (trimContent && str) {
59
- str = str.trim();
60
- }
61
- return str;
62
- });
63
- };
64
- exports.getFileJson = function (filenameWithPath, removeComments) {
65
- return exports.getFileString(filenameWithPath)
66
- .then(data => {
67
- if (removeComments) {
68
- data = data.replace(/(^|\n|\r)\s*?\/\/.*?(\n|\r|$)/gm, '');
69
- }
70
- return JSON.parse(data);
71
- });
72
- };
73
- exports.listFiles = function (folderPath) {
74
- return new Promise((resolve, reject) => {
75
- if (fs_1.default.existsSync(folderPath)) {
76
- fs_1.default.readdir(folderPath, (err, files) => {
77
- if (err) {
78
- reject(err);
79
- }
80
- else {
81
- resolve(files);
82
- }
83
- });
84
- }
85
- else {
86
- resolve([]);
87
- }
88
- });
89
- };
90
- exports.fileExists = function (filenameWithPath) {
91
- return fs_1.default.existsSync(filenameWithPath);
92
- };
93
- exports.moveFile = function (filenameWithPath, destFilenameWithPath, retries = 2) {
94
- return exports.mkdir(destFilenameWithPath)
95
- .then(() => {
96
- return new Promise((resolve, reject) => {
97
- fs_1.default.rename(filenameWithPath, destFilenameWithPath, err => {
98
- if (err) {
99
- if (retries > 0) {
100
- exports.wait(100)
101
- .then(() => exports.moveFile(filenameWithPath, destFilenameWithPath, retries - 1))
102
- .then(resolve)
103
- .catch(reject);
104
- }
105
- else {
106
- reject(err);
107
- }
108
- }
109
- else {
110
- resolve(1);
111
- }
112
- });
113
- });
114
- });
115
- };
116
- exports.fileStat = function (filenameWithPath) {
117
- return new Promise((resolve, reject) => {
118
- fs_1.default.stat(filenameWithPath, (err, stats) => {
119
- if (err) {
120
- reject(err);
121
- }
122
- else {
123
- resolve(stats);
124
- }
125
- });
126
- });
127
- };
128
- exports.fileSize = function (filenameWithPath) {
129
- return exports.fileStat(filenameWithPath).then(state => state.size);
130
- };
131
- exports.isGitCommitted = function (folder) {
132
- if (exports.fileExists(`${folder}/.git`)) {
133
- let git = simple_git_1.default({
134
- baseDir: folder,
135
- binary: 'git',
136
- maxConcurrentProcesses: 6,
137
- });
138
- return git.status()
139
- .then(status => {
140
- return status.files.length == 0;
141
- });
142
- }
143
- else {
144
- return Promise.resolve(true);
145
- }
146
- };
147
- exports.saveData = function (filenameWithPath, data) {
148
- return new Promise((resolve, reject) => {
149
- exports.mkdir(filenameWithPath)
150
- .then(() => {
151
- fs_1.default.writeFile(filenameWithPath, data, err => {
152
- if (err) {
153
- console.error('saveData: writeFile error: ', err);
154
- reject(err);
155
- }
156
- else {
157
- // sometimes the file is locked right after writeFile
158
- setTimeout(resolve, 300);
159
- }
160
- });
161
- });
162
- });
163
- };
164
- function checkCache(url, dest) {
165
- if (exports.fileExists(dest)) {
166
- let cacheFile = `${fileCacheFolder}/${md5_1.default(url.trim())}`;
167
- if (exports.fileExists(cacheFile)) {
168
- return exports.getFileString(cacheFile, true)
169
- .then(cachemd5 => {
170
- return md5_file_1.default(dest)
171
- .then(filemd5 => {
172
- return cachemd5 == filemd5;
173
- });
174
- })
175
- .catch(_err => false);
176
- }
177
- }
178
- return Promise.resolve(false);
179
- }
180
- function saveCache(url, dest) {
181
- let cacheFile = `${fileCacheFolder}/${md5_1.default(url.trim())}`;
182
- return md5_file_1.default(dest)
183
- .then(filemd5 => {
184
- return exports.saveData(cacheFile, filemd5);
185
- });
186
- }
187
- function vscodeLink(link, message) {
188
- if (link.startsWith('/')) {
189
- link = link.substr(1);
190
- }
191
- let line = `vscode://file/${link}`;
192
- if (message) {
193
- line = `${message} ${link}`;
194
- }
195
- return line;
196
- }
197
- exports.vscodeLink = vscodeLink;
198
- function unlink(filenameWithPath) {
199
- return new Promise((resolve, reject) => {
200
- fs_1.default.unlink(filenameWithPath, err => {
201
- if (err && err.code != 'ENOENT') {
202
- reject(err);
203
- }
204
- else {
205
- resolve(true);
206
- }
207
- });
208
- });
209
- }
210
- exports.unlink = unlink;
211
- function renderTwig(twigFile, args) {
212
- return new Promise((resolve, reject) => {
213
- twig_1.default.renderFile(twigFile, args, (err, content) => {
214
- if (err) {
215
- reject(err);
216
- }
217
- else {
218
- resolve(content);
219
- }
220
- });
221
- });
222
- }
223
- exports.renderTwig = renderTwig;
224
- /**
225
- *
226
- * @param {*} url
227
- * @param {*} dest
228
- * @param {*} progressBar
229
- * @param {*} options {dispName: string, tempFile: string}
230
- * @returns
231
- */
232
- function downloadFile(url, dest, progressBar, options) {
233
- options = options || {};
234
- let axiosSource = axios_1.default.CancelToken.source();
235
- return Promise.resolve()
236
- .then(() => options.noCache ? false : checkCache(url, dest))
237
- .then(result => {
238
- if (result) {
239
- return false;
240
- }
241
- return exports.mkdir(dest)
242
- .then(() => options.tempFile && exports.mkdir(options.tempFile))
243
- .then(() => axios_1.default.get(url, {
244
- responseType: 'stream',
245
- cancelToken: axiosSource.token,
246
- }))
247
- .then(response => {
248
- if (response) {
249
- if (progressBar) {
250
- let contentSize = Number(response.headers['content-length']);
251
- progressBar.start(contentSize, 0, { file: options.dispName || url });
252
- response.data.on('data', chunk => progressBar.increment(chunk.length));
253
- }
254
- let writer = fs_1.default.createWriteStream(options.tempFile || dest);
255
- response.data.pipe(writer);
256
- return new Promise((resolve, reject) => {
257
- writer.on('finish', resolve);
258
- writer.on('error', reject);
259
- })
260
- .then(() => {
261
- if (options.tempFile) {
262
- return exports.moveFile(options.tempFile, dest);
263
- }
264
- else {
265
- return Promise.resolve();
266
- }
267
- })
268
- .then(() => {
269
- if (options.modifyContent) {
270
- return exports.getFileString(dest)
271
- .then(content => options.modifyContent(content))
272
- .then(content => exports.saveData(dest, content));
273
- }
274
- else {
275
- return Promise.resolve();
276
- }
277
- })
278
- .then(() => saveCache(url, dest))
279
- .then(() => true);
280
- }
281
- else {
282
- return Promise.reject('File failed to download: ' + url);
283
- }
284
- })
285
- .catch(err => {
286
- if (axios_1.default.isCancel(err)) {
287
- // canceled
288
- }
289
- else {
290
- throw err;
291
- }
292
- });
293
- });
294
- }
295
- exports.downloadFile = downloadFile;
296
- function getFileZip(filename) {
297
- return exports.getFileData(filename)
298
- .then(data => {
299
- return new jszip_1.default().loadAsync(data);
300
- });
301
- }
302
- exports.getFileZip = getFileZip;
303
- function rmdir(folderPath) {
304
- return new Promise((resolve, reject) => {
305
- rimraf_1.default(folderPath, {}, err => {
306
- if (err && err.code != 'ENOENT') {
307
- reject(err);
308
- }
309
- else {
310
- resolve(true);
311
- }
312
- });
313
- });
314
- }
315
- exports.rmdir = rmdir;
316
- function copyFile(filenameWithPath, destFilenameWithPath) {
317
- return exports.mkdir(destFilenameWithPath)
318
- .then(() => {
319
- return new Promise((resolve, reject) => {
320
- fs_1.default.copyFile(filenameWithPath, destFilenameWithPath, err => {
321
- if (err) {
322
- reject(err);
323
- }
324
- else {
325
- resolve(true);
326
- }
327
- });
328
- });
329
- });
330
- }
331
- exports.copyFile = copyFile;
332
- function isEmptyFolder(folderPath) {
333
- return exports.listFiles(folderPath)
334
- .then(list => !list.length);
335
- }
336
- exports.isEmptyFolder = isEmptyFolder;
337
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGtEQUEwQjtBQUMxQixnREFBd0I7QUFDeEIsb0RBQTRCO0FBQzVCLGdEQUF3QjtBQUN4Qiw0Q0FBb0I7QUFDcEIsa0RBQTBCO0FBQzFCLDREQUFtQztBQUNuQyxvREFBNEI7QUFDNUIsd0RBQStCO0FBQy9CLDhDQUFzQjtBQUN0QiwrQ0FBK0M7QUFDL0MsZ0NBQWdDO0FBQ2hDLG9DQUFvQztBQUNwQyxnQ0FBZ0M7QUFDaEMsNEJBQTRCO0FBQzVCLGtDQUFrQztBQUNsQywyQ0FBMkM7QUFDM0Msb0NBQW9DO0FBQ3BDLHVDQUF1QztBQUN2Qyw4QkFBOEI7QUFFOUIsSUFBSSxlQUFlLENBQUM7QUFDUCxRQUFBLGtCQUFrQixHQUFHLFVBQVUsTUFBTTtJQUM5QyxlQUFlLEdBQUcsTUFBTSxJQUFJLEdBQUcsTUFBTSxZQUFZLENBQUM7QUFDdEQsQ0FBQyxDQUFBO0FBRVksUUFBQSxJQUFJLEdBQUcsVUFBVSxRQUFRO0lBQ2xDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDekIsVUFBVSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNsQyxDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQTtBQUVZLFFBQUEsS0FBSyxHQUFHLFVBQVUsZ0JBQWdCO0lBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDakMsZ0JBQWdCLEdBQUcsY0FBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0tBQ3JEO0lBQ0QsT0FBTyxnQkFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFBO0FBQ1ksUUFBQSxXQUFXLEdBQUcsVUFBVSxnQkFBZ0I7SUFDakQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFD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
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.saveData = exports.isGitCommitted = exports.fileSize = exports.fileStat = exports.moveFile = exports.fileExists = exports.listFiles = exports.getFileJson = exports.getFileString = exports.getFileData = exports.mkdir = exports.wait = exports.setFileCacheFolder = void 0;
7
+ exports.vscodeLink = vscodeLink;
8
+ exports.unlink = unlink;
9
+ exports.renderTwig = renderTwig;
10
+ exports.downloadFile = downloadFile;
11
+ exports.getFileZip = getFileZip;
12
+ exports.rmdir = rmdir;
13
+ exports.copyFile = copyFile;
14
+ exports.isEmptyFolder = isEmptyFolder;
15
+ const axios_1 = __importDefault(require("axios"));
16
+ const path_1 = __importDefault(require("path"));
17
+ const mkdirp_1 = __importDefault(require("mkdirp"));
18
+ const twig_1 = __importDefault(require("twig"));
19
+ const fs_1 = __importDefault(require("fs"));
20
+ const jszip_1 = __importDefault(require("jszip"));
21
+ const simple_git_1 = __importDefault(require("simple-git"));
22
+ const rimraf_1 = __importDefault(require("rimraf"));
23
+ const md5_file_1 = __importDefault(require("md5-file"));
24
+ const md5_1 = __importDefault(require("md5"));
25
+ // const { default: axios } = require("axios");
26
+ // const path = require("path");
27
+ // const mkdirp = require("mkdirp");
28
+ // const Twig = require("twig");
29
+ // const fs = require("fs");
30
+ // const JSZip = require("jszip");
31
+ // const simpleGit = require('simple-git');
32
+ // const rimraf = require("rimraf");
33
+ // const md5File = require("md5-file");
34
+ // const md5 = require('md5');
35
+ let fileCacheFolder;
36
+ const setFileCacheFolder = function (folder) {
37
+ fileCacheFolder = folder && `${folder}/.cg/cache`;
38
+ };
39
+ exports.setFileCacheFolder = setFileCacheFolder;
40
+ const wait = function (duration) {
41
+ return new Promise(resolve => {
42
+ setTimeout(resolve, duration);
43
+ });
44
+ };
45
+ exports.wait = wait;
46
+ const mkdir = function (filenameWithPath) {
47
+ if (!filenameWithPath.endsWith('/')) {
48
+ filenameWithPath = path_1.default.dirname(filenameWithPath);
49
+ }
50
+ return (0, mkdirp_1.default)(filenameWithPath);
51
+ };
52
+ exports.mkdir = mkdir;
53
+ const getFileData = function (filenameWithPath) {
54
+ return new Promise((resolve, reject) => {
55
+ fs_1.default.readFile(filenameWithPath, (err, data) => {
56
+ if (err) {
57
+ reject(err);
58
+ }
59
+ else {
60
+ resolve(data);
61
+ }
62
+ });
63
+ });
64
+ };
65
+ exports.getFileData = getFileData;
66
+ const getFileString = function (filenameWithPath, trimContent) {
67
+ return (0, exports.getFileData)(filenameWithPath)
68
+ .then(data => data.toString('utf8'))
69
+ .then(str => {
70
+ if (trimContent && str) {
71
+ str = str.trim();
72
+ }
73
+ return str;
74
+ });
75
+ };
76
+ exports.getFileString = getFileString;
77
+ const getFileJson = function (filenameWithPath, removeComments) {
78
+ return (0, exports.getFileString)(filenameWithPath)
79
+ .then(data => {
80
+ if (removeComments) {
81
+ data = data.replace(/(^|\n|\r)\s*?\/\/.*?(\n|\r|$)/gm, '');
82
+ }
83
+ return JSON.parse(data);
84
+ });
85
+ };
86
+ exports.getFileJson = getFileJson;
87
+ const listFiles = function (folderPath) {
88
+ return new Promise((resolve, reject) => {
89
+ if (fs_1.default.existsSync(folderPath)) {
90
+ fs_1.default.readdir(folderPath, (err, files) => {
91
+ if (err) {
92
+ reject(err);
93
+ }
94
+ else {
95
+ resolve(files);
96
+ }
97
+ });
98
+ }
99
+ else {
100
+ resolve([]);
101
+ }
102
+ });
103
+ };
104
+ exports.listFiles = listFiles;
105
+ const fileExists = function (filenameWithPath) {
106
+ return fs_1.default.existsSync(filenameWithPath);
107
+ };
108
+ exports.fileExists = fileExists;
109
+ const moveFile = function (filenameWithPath, destFilenameWithPath, retries = 2) {
110
+ return (0, exports.mkdir)(destFilenameWithPath)
111
+ .then(() => {
112
+ return new Promise((resolve, reject) => {
113
+ fs_1.default.rename(filenameWithPath, destFilenameWithPath, err => {
114
+ if (err) {
115
+ if (retries > 0) {
116
+ (0, exports.wait)(100)
117
+ .then(() => (0, exports.moveFile)(filenameWithPath, destFilenameWithPath, retries - 1))
118
+ .then(resolve)
119
+ .catch(reject);
120
+ }
121
+ else {
122
+ reject(err);
123
+ }
124
+ }
125
+ else {
126
+ resolve(1);
127
+ }
128
+ });
129
+ });
130
+ });
131
+ };
132
+ exports.moveFile = moveFile;
133
+ const fileStat = function (filenameWithPath) {
134
+ return new Promise((resolve, reject) => {
135
+ fs_1.default.stat(filenameWithPath, (err, stats) => {
136
+ if (err) {
137
+ reject(err);
138
+ }
139
+ else {
140
+ resolve(stats);
141
+ }
142
+ });
143
+ });
144
+ };
145
+ exports.fileStat = fileStat;
146
+ const fileSize = function (filenameWithPath) {
147
+ return (0, exports.fileStat)(filenameWithPath).then(state => state.size);
148
+ };
149
+ exports.fileSize = fileSize;
150
+ const isGitCommitted = function (folder) {
151
+ if ((0, exports.fileExists)(`${folder}/.git`)) {
152
+ let git = (0, simple_git_1.default)({
153
+ baseDir: folder,
154
+ binary: 'git',
155
+ maxConcurrentProcesses: 6,
156
+ });
157
+ return git.status()
158
+ .then(status => {
159
+ return status.files.length == 0;
160
+ });
161
+ }
162
+ else {
163
+ return Promise.resolve(true);
164
+ }
165
+ };
166
+ exports.isGitCommitted = isGitCommitted;
167
+ const saveData = function (filenameWithPath, data) {
168
+ return new Promise((resolve, reject) => {
169
+ (0, exports.mkdir)(filenameWithPath)
170
+ .then(() => {
171
+ fs_1.default.writeFile(filenameWithPath, data, err => {
172
+ if (err) {
173
+ console.error('saveData: writeFile error: ', err);
174
+ reject(err);
175
+ }
176
+ else {
177
+ // sometimes the file is locked right after writeFile
178
+ setTimeout(resolve, 300);
179
+ }
180
+ });
181
+ });
182
+ });
183
+ };
184
+ exports.saveData = saveData;
185
+ function checkCache(url, dest) {
186
+ if ((0, exports.fileExists)(dest)) {
187
+ let cacheFile = `${fileCacheFolder}/${(0, md5_1.default)(url.trim())}`;
188
+ if ((0, exports.fileExists)(cacheFile)) {
189
+ return (0, exports.getFileString)(cacheFile, true)
190
+ .then(cachemd5 => {
191
+ return (0, md5_file_1.default)(dest)
192
+ .then(filemd5 => {
193
+ return cachemd5 == filemd5;
194
+ });
195
+ })
196
+ .catch(_err => false);
197
+ }
198
+ }
199
+ return Promise.resolve(false);
200
+ }
201
+ function saveCache(url, dest) {
202
+ let cacheFile = `${fileCacheFolder}/${(0, md5_1.default)(url.trim())}`;
203
+ return (0, md5_file_1.default)(dest)
204
+ .then(filemd5 => {
205
+ return (0, exports.saveData)(cacheFile, filemd5);
206
+ });
207
+ }
208
+ function vscodeLink(link, message) {
209
+ if (link.startsWith('/')) {
210
+ link = link.substr(1);
211
+ }
212
+ let line = `vscode://file/${link}`;
213
+ if (message) {
214
+ line = `${message} ${link}`;
215
+ }
216
+ return line;
217
+ }
218
+ function unlink(filenameWithPath) {
219
+ return new Promise((resolve, reject) => {
220
+ fs_1.default.unlink(filenameWithPath, err => {
221
+ if (err && err.code != 'ENOENT') {
222
+ reject(err);
223
+ }
224
+ else {
225
+ resolve(true);
226
+ }
227
+ });
228
+ });
229
+ }
230
+ function renderTwig(twigFile, args) {
231
+ return new Promise((resolve, reject) => {
232
+ twig_1.default.renderFile(twigFile, args, (err, content) => {
233
+ if (err) {
234
+ reject(err);
235
+ }
236
+ else {
237
+ resolve(content);
238
+ }
239
+ });
240
+ });
241
+ }
242
+ /**
243
+ *
244
+ * @param {*} url
245
+ * @param {*} dest
246
+ * @param {*} progressBar
247
+ * @param {*} options {dispName: string, tempFile: string}
248
+ * @returns
249
+ */
250
+ function downloadFile(url, dest, progressBar, options) {
251
+ options = options || {};
252
+ let axiosSource = axios_1.default.CancelToken.source();
253
+ return Promise.resolve()
254
+ .then(() => options.noCache ? false : checkCache(url, dest))
255
+ .then(result => {
256
+ if (result) {
257
+ return false;
258
+ }
259
+ return (0, exports.mkdir)(dest)
260
+ .then(() => options.tempFile && (0, exports.mkdir)(options.tempFile))
261
+ .then(() => axios_1.default.get(url, {
262
+ responseType: 'stream',
263
+ cancelToken: axiosSource.token,
264
+ }))
265
+ .then(response => {
266
+ if (response) {
267
+ if (progressBar) {
268
+ let contentSize = Number(response.headers['content-length']);
269
+ progressBar.start(contentSize, 0, { file: options.dispName || url });
270
+ response.data.on('data', chunk => progressBar.increment(chunk.length));
271
+ }
272
+ let writer = fs_1.default.createWriteStream(options.tempFile || dest);
273
+ response.data.pipe(writer);
274
+ return new Promise((resolve, reject) => {
275
+ writer.on('finish', resolve);
276
+ writer.on('error', reject);
277
+ })
278
+ .then(() => {
279
+ if (options.tempFile) {
280
+ return (0, exports.moveFile)(options.tempFile, dest);
281
+ }
282
+ else {
283
+ return Promise.resolve();
284
+ }
285
+ })
286
+ .then(() => {
287
+ if (options.modifyContent) {
288
+ return (0, exports.getFileString)(dest)
289
+ .then(content => options.modifyContent(content))
290
+ .then(content => (0, exports.saveData)(dest, content));
291
+ }
292
+ else {
293
+ return Promise.resolve();
294
+ }
295
+ })
296
+ .then(() => saveCache(url, dest))
297
+ .then(() => true);
298
+ }
299
+ else {
300
+ return Promise.reject('File failed to download: ' + url);
301
+ }
302
+ })
303
+ .catch(err => {
304
+ if (axios_1.default.isCancel(err)) {
305
+ // canceled
306
+ }
307
+ else {
308
+ throw err;
309
+ }
310
+ });
311
+ });
312
+ }
313
+ function getFileZip(filename) {
314
+ return (0, exports.getFileData)(filename)
315
+ .then(data => {
316
+ return new jszip_1.default().loadAsync(data);
317
+ });
318
+ }
319
+ function rmdir(folderPath) {
320
+ return new Promise((resolve, reject) => {
321
+ (0, rimraf_1.default)(folderPath, {}, err => {
322
+ if (err && err.code != 'ENOENT') {
323
+ reject(err);
324
+ }
325
+ else {
326
+ resolve(true);
327
+ }
328
+ });
329
+ });
330
+ }
331
+ function copyFile(filenameWithPath, destFilenameWithPath) {
332
+ return (0, exports.mkdir)(destFilenameWithPath)
333
+ .then(() => {
334
+ return new Promise((resolve, reject) => {
335
+ fs_1.default.copyFile(filenameWithPath, destFilenameWithPath, err => {
336
+ if (err) {
337
+ reject(err);
338
+ }
339
+ else {
340
+ resolve(true);
341
+ }
342
+ });
343
+ });
344
+ });
345
+ }
346
+ function isEmptyFolder(folderPath) {
347
+ return (0, exports.listFiles)(folderPath)
348
+ .then(list => !list.length);
349
+ }
350
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQXlMQSxnQ0FTQztBQUNELHdCQVVDO0FBQ0QsZ0NBVUM7QUFVRCxvQ0EyREM7QUFFRCxnQ0FLQztBQUVELHNCQVVDO0FBRUQsNEJBYUM7QUFDRCxzQ0FHQztBQW5VRCxrREFBMEI7QUFDMUIsZ0RBQXdCO0FBQ3hCLG9EQUE0QjtBQUM1QixnREFBd0I7QUFDeEIsNENBQW9CO0FBQ3BCLGtEQUEwQjtBQUMxQiw0REFBbUM7QUFDbkMsb0RBQTRCO0FBQzVCLHdEQUErQjtBQUMvQiw4Q0FBc0I7QUFDdEIsK0NBQStDO0FBQy9DLGdDQUFnQztBQUNoQyxvQ0FBb0M7QUFDcEMsZ0NBQWdDO0FBQ2hDLDRCQUE0QjtBQUM1QixrQ0FBa0M7QUFDbEMsMkNBQTJDO0FBQzNDLG9DQUFvQztBQUNwQyx1Q0FBdUM7QUFDdkMsOEJBQThCO0FBRTlCLElBQUksZUFBZSxDQUFDO0FBQ2IsTUFBTSxrQkFBa0IsR0FBRyxVQUFVLE1BQU07SUFDOUMsZUFBZSxHQUFHLE1BQU0sSUFBSSxHQUFHLE1BQU0sWUFBWSxDQUFDO0FBQ3RELENBQUMsQ0FBQTtBQUZZLFFBQUEsa0JBQWtCLHNCQUU5QjtBQUVNLE1BQU0sSUFBSSxHQUFHLFVBQVUsUUFBUTtJQUNsQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3pCLFVBQVUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUE7QUFKWSxRQUFBLElBQUksUUFJaEI7QUFFTSxNQUFNLEtBQUssR0FBRyxVQUFVLGdCQUFnQjtJQUMzQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbEMsZ0JBQWdCLEdBQUcsY0FBSSxDQUFDLE9BQU8sQ0FB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