gamelet-cli 0.7.12 → 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 (49) hide show
  1. package/assets/package.json.twig +3 -3
  2. package/assets/tsconfig.json.twig +1 -1
  3. package/build/package.json +67 -67
  4. package/build/src/gamelet/download.js +773 -737
  5. package/build/src/gamelet/merges.js +181 -179
  6. package/build/src/gamelet/prepare.js +276 -277
  7. package/build/src/gamelet/upload.js +280 -279
  8. package/build/src/index.js +86 -86
  9. package/build/src/server/Constant.js +9 -9
  10. package/build/src/server/entities/Client.js +78 -78
  11. package/build/src/server/entities/ClientOwner.js +67 -67
  12. package/build/src/server/entities/ClientProject.js +84 -84
  13. package/build/src/server/entities/Gameroom.js +89 -89
  14. package/build/src/server/entities/GameroomBase.js +276 -276
  15. package/build/src/server/entities/Gamezone.js +73 -73
  16. package/build/src/server/entities/ListFilter.js +193 -193
  17. package/build/src/server/entities/Monitor.js +94 -94
  18. package/build/src/server/entities/Player.js +140 -140
  19. package/build/src/server/managers/ApiManager.js +75 -75
  20. package/build/src/server/managers/ClientManager.js +64 -64
  21. package/build/src/server/managers/Database.js +627 -627
  22. package/build/src/server/managers/GameroomManager.js +392 -392
  23. package/build/src/server/managers/ManagerBase.js +17 -17
  24. package/build/src/server/managers/MonitorManager.js +73 -73
  25. package/build/src/server/managers/PlayerManager.js +108 -108
  26. package/build/src/server/managers/SocketManager.js +60 -60
  27. package/build/src/server/managers/UserManager.js +58 -58
  28. package/build/src/server/messages/Message.js +143 -143
  29. package/build/src/server/server.js +112 -113
  30. package/build/src/server/services/ServiceBase.js +25 -25
  31. package/build/src/server/services/clientService.js +23 -23
  32. package/build/src/server/services/gameroomService.js +121 -121
  33. package/build/src/server/services/gltserver.service.js +23 -23
  34. package/build/src/server/services/playerService.js +32 -32
  35. package/build/src/server/startServer.js +32 -33
  36. package/build/src/server/types/BadgeStatus.js +25 -25
  37. package/build/src/server/types/OrderType.js +38 -38
  38. package/build/src/server/types/SubmitType.js +24 -24
  39. package/build/src/server/types/TimeRange.js +26 -26
  40. package/build/src/server/utils/ArrayUtil.js +126 -126
  41. package/build/src/server/utils/IntUtil.js +9 -9
  42. package/build/src/server/utils/ObjectUtil.js +191 -191
  43. package/build/src/server/utils/StringUtil.js +37 -37
  44. package/build/src/utils/cli.js +53 -53
  45. package/build/src/utils/file.js +350 -337
  46. package/build/src/utils/init.js +57 -42
  47. package/build/src/utils/log.js +18 -17
  48. package/build/src/utils/net.js +43 -39
  49. package/package.json +2 -2
@@ -1,279 +1,280 @@
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.upload = void 0;
7
- const file_1 = require("../utils/file");
8
- const net_1 = require("../utils/net");
9
- const merges_1 = require("./merges");
10
- const cli_progress_1 = __importDefault(require("cli-progress"));
11
- const inquirer_1 = __importDefault(require("inquirer"));
12
- const isbinaryfile_1 = require("isbinaryfile");
13
- const tempFolder = '/.temp';
14
- exports.upload = ({ projectCode, folder, token, debug }) => {
15
- if (debug) {
16
- console.log('debug = true');
17
- }
18
- let srcFolder = `${folder}/src`;
19
- net_1.apiSetToken(token);
20
- file_1.setFileCacheFolder(folder);
21
- if (!file_1.fileExists(srcFolder)) {
22
- return Promise.reject(`${srcFolder} does not exist`);
23
- }
24
- let zipFilename = folder + tempFolder + '/sources.zip';
25
- return Promise.resolve()
26
- .then(() => validateToken(projectCode, token))
27
- .then(() => validateGitCommit(folder))
28
- .then(() => checkSourcesMerged(zipFilename, projectCode, folder, token))
29
- .then(basezip => createUploadQueue(projectCode, basezip, folder))
30
- .then(queue => processUploadQueue(projectCode, queue, folder))
31
- .then(queue => queue.length && downloadBase(zipFilename, projectCode, folder, token))
32
- .then(() => file_1.rmdir(`${folder}${tempFolder}`).catch(_e => { }))
33
- .then(() => {
34
- console.log();
35
- console.log('done');
36
- })
37
- .catch(err => {
38
- console.log();
39
- console.error(err);
40
- })
41
- .then(() => console.log());
42
- };
43
- function validateGitCommit(folder) {
44
- return file_1.isGitCommitted(folder)
45
- .then(committed => {
46
- if (!committed) {
47
- return Promise.reject('Please commit your current sources first.');
48
- }
49
- else {
50
- return Promise.resolve();
51
- }
52
- });
53
- }
54
- function validateToken(projectCode, _token) {
55
- return net_1.apiGet(`/validate/local_dev_token/${projectCode}/edit`)
56
- .catch(_e => {
57
- console.error('Only the current Project Editor can do the upload');
58
- throw _e;
59
- });
60
- }
61
- function downloadBase(zipFilename, projectCode, folder, token) {
62
- let basezip = `${folder}/.cg/sources.base`;
63
- console.log(`update sources base ...`);
64
- return Promise.resolve()
65
- .then(() => {
66
- if (!file_1.fileExists(zipFilename)) {
67
- let progressBar = new cli_progress_1.default.SingleBar({}, cli_progress_1.default.Presets.shades_classic);
68
- return file_1.downloadFile(net_1.cgUrl(`/download/${projectCode}?token=${token}`), zipFilename, progressBar, { noCache: true })
69
- .then(() => progressBar && progressBar.stop());
70
- }
71
- else {
72
- return Promise.resolve();
73
- }
74
- })
75
- .then(() => file_1.moveFile(zipFilename, basezip));
76
- }
77
- let sourcesProcessing;
78
- function checkSourcesMerged(zipFilename, projectCode, folder, token) {
79
- let progressBar = new cli_progress_1.default.SingleBar({}, cli_progress_1.default.Presets.shades_classic);
80
- sourcesProcessing = [];
81
- let basezip = `${folder}/.cg/sources.base`;
82
- if (!file_1.fileExists(basezip)) {
83
- return Promise.reject('Cannot merge: source base missing.');
84
- }
85
- console.log(`prepare updates: download remote sources ...`);
86
- return file_1.downloadFile(net_1.cgUrl(`/download/${projectCode}?token=${token}`), zipFilename, progressBar, { noCache: true })
87
- .then(() => {
88
- progressBar.stop();
89
- return file_1.getFileZip(zipFilename);
90
- })
91
- .then(jszip => {
92
- return Promise.resolve()
93
- .then(() => file_1.rmdir(`${folder}${tempFolder}`).catch(_e => { }))
94
- .then(() => file_1.getFileZip(basezip))
95
- .then(basezip => {
96
- let saveSrcFiles = [];
97
- sourcesProcessing = [];
98
- console.log(`prepare updates: diff remote sources ...`);
99
- for (let filename in jszip.files) {
100
- if (filename.startsWith('src/')) {
101
- saveSrcFiles.push(checkSourceMerged(jszip.file(filename), basezip.file(filename), folder));
102
- }
103
- }
104
- return Promise.all(saveSrcFiles)
105
- .then(results => {
106
- if (results.find(result => !result)) {
107
- return Promise.reject(`Please do a merge before upload.\nRun the command "gamelet merge"`);
108
- }
109
- return basezip;
110
- });
111
- });
112
- });
113
- }
114
- function checkSourceMerged(file, base, folder) {
115
- if (sourcesProcessing.length > 19) {
116
- return file_1.wait(30).then(() => checkSourceMerged(file, base, folder));
117
- }
118
- sourcesProcessing.push(file);
119
- return merges_1.isSourceMerged(file.name, file, base, folder)
120
- .then(result => {
121
- let index = sourcesProcessing.indexOf(file);
122
- sourcesProcessing.splice(index, 1);
123
- return result;
124
- });
125
- }
126
- function processUploadQueue(projectCode, queue, _folder) {
127
- if (!queue.length) {
128
- console.log('nothing to upload');
129
- return Promise.resolve(queue);
130
- }
131
- return inquirer_1.default.prompt([
132
- {
133
- type: 'confirm',
134
- name: 'confirm',
135
- message: `${queue.length} item(s) to upload to "${projectCode}", Continue?`,
136
- }
137
- ])
138
- .then(result => {
139
- if (result.confirm) {
140
- sourcesProcessing = [];
141
- let progressBar = new cli_progress_1.default.SingleBar({}, cli_progress_1.default.Presets.shades_classic);
142
- progressBar.start(queue.length, 0);
143
- return Promise.all(queue.map(item => processUploadQueueItem(projectCode, item, progressBar)))
144
- .then(() => progressBar.stop());
145
- }
146
- else {
147
- queue.length = 0;
148
- }
149
- return Promise.resolve();
150
- })
151
- .then(() => queue);
152
- }
153
- function processUploadQueueItem(projectCode, queueItem, progressBar) {
154
- if (sourcesProcessing.length > 5) {
155
- return file_1.wait(30).then(() => processUploadQueueItem(projectCode, queueItem, progressBar));
156
- }
157
- sourcesProcessing.push(queueItem);
158
- return Promise.resolve()
159
- .then(() => {
160
- return net_1.apiPost(`/update/source/local_dev/${projectCode}/${queueItem.action}`, {
161
- path: queueItem.path,
162
- filename: queueItem.filename,
163
- content: queueItem.content || '',
164
- });
165
- })
166
- .then(() => {
167
- progressBar.increment(1);
168
- let index = sourcesProcessing.indexOf(queueItem);
169
- sourcesProcessing.splice(index, 1);
170
- });
171
- }
172
- function createUploadQueue(projectCode, basezip, folder) {
173
- sourcesProcessing = [];
174
- let srcFolder = `${folder}/src`;
175
- let queue = [];
176
- let filesToDelete = {};
177
- for (let filename in basezip.files) {
178
- let search = filename.match(/^src\/(.*\/)?([^\/]+)$/);
179
- if (search) {
180
- let path = search[1] ? search[1].substr(0, search[1].length - 1) : '';
181
- let fname = search[2];
182
- let fullpath = path ? `${path}/${fname}` : fname;
183
- filesToDelete[fullpath] = {
184
- path: path,
185
- filename: fname,
186
- };
187
- }
188
- }
189
- console.log('listing files to upload...');
190
- console.log('===============================');
191
- return file_1.listFiles(srcFolder)
192
- .then(files => {
193
- return Promise.all(files.map(file => updateSource(projectCode, srcFolder, '', file, basezip, queue, filesToDelete)));
194
- })
195
- .then(() => {
196
- sourcesProcessing = [];
197
- for (let key in filesToDelete) {
198
- let queueItem = Object.assign({
199
- action: 'delete',
200
- }, filesToDelete[key]);
201
- queue.push(queueItem);
202
- console.log(' - (delete) ' + key);
203
- }
204
- })
205
- .then(() => {
206
- if (queue.length) {
207
- console.log('-------------------------------');
208
- }
209
- return queue;
210
- });
211
- }
212
- function updateSource(projectCode, srcFolder, path, filename, basezip, queue, filesToDelete) {
213
- if (sourcesProcessing.length > 19) {
214
- return file_1.wait(30).then(() => updateSource(projectCode, srcFolder, path, filename, basezip, queue, filesToDelete));
215
- }
216
- let fullpathname = path ? `${path}/${filename}` : filename;
217
- sourcesProcessing.push(fullpathname);
218
- let localFilepath = `${srcFolder}/${fullpathname}`;
219
- delete filesToDelete[fullpathname];
220
- return file_1.fileStat(localFilepath)
221
- .then((stats) => {
222
- if (stats.isDirectory()) {
223
- return file_1.listFiles(localFilepath)
224
- .then(files => {
225
- let index = sourcesProcessing.indexOf(fullpathname);
226
- sourcesProcessing.splice(index, 1);
227
- return Promise.all(files.map(file => {
228
- return updateSource(projectCode, srcFolder, fullpathname, file, basezip, queue, filesToDelete);
229
- }));
230
- });
231
- }
232
- else if (stats.isFile()) {
233
- return isbinaryfile_1.isBinaryFile(localFilepath)
234
- .then(isBinary => {
235
- if (isBinary) {
236
- return Promise.reject(`${filename} is not a text file.`);
237
- }
238
- else {
239
- return file_1.getFileString(localFilepath)
240
- .then(content => {
241
- return getSourceAction(fullpathname, content, basezip)
242
- .then(action => {
243
- if (action) {
244
- queue.push({
245
- path: path,
246
- filename: filename,
247
- content: content,
248
- action: action,
249
- });
250
- let sign = action == 'create' ? '+' : '>';
251
- console.log(` ${sign} (${action}) ` + fullpathname);
252
- }
253
- });
254
- });
255
- }
256
- });
257
- }
258
- else {
259
- return Promise.resolve();
260
- }
261
- })
262
- .then(() => {
263
- let index = sourcesProcessing.indexOf(fullpathname);
264
- sourcesProcessing.splice(index, 1);
265
- });
266
- }
267
- function getSourceAction(sourcePathname, sourceContent, basezip) {
268
- let baseFile = basezip.file(`src/${sourcePathname}`);
269
- if (baseFile) {
270
- return baseFile.async('string')
271
- .then(baseContent => {
272
- return sourceContent != baseContent ? 'update' : '';
273
- });
274
- }
275
- else {
276
- return Promise.resolve('create');
277
- }
278
- }
279
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dhbWVsZXQvdXBsb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHdDQUFvSztBQUNwSyxzQ0FBbUU7QUFDbkUscUNBQTBDO0FBQzFDLGdFQUF1QztBQUN2Qyx3REFBZ0M7QUFDaEMsK0NBQTRDO0FBRTVDLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQztBQUVmLFFBQUEsTUFBTSxHQUFHLENBQUMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO0lBQzVELElBQUksS0FBSyxFQUFFO1FBQ1AsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztLQUMvQjtJQUNELElBQUksU0FBUyxHQUFHLEdBQUcsTUFBTSxNQUFNLENBQUM7SUFDaEMsaUJBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQix5QkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUUzQixJQUFJLENBQUMsaUJBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUN4QixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxTQUFTLGlCQUFpQixDQUFDLENBQUM7S0FDeEQ7SUFFRCxJQUFJLFdBQVcsR0FBRyxNQUFNLEdBQUcsVUFBVSxHQUFHLGNBQWMsQ0FBQztJQUV2RCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUU7U0FDbkIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDN0MsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN2RSxJQUFJLENBQUMsT0FB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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.upload = void 0;
7
+ const file_1 = require("../utils/file");
8
+ const net_1 = require("../utils/net");
9
+ const merges_1 = require("./merges");
10
+ const cli_progress_1 = __importDefault(require("cli-progress"));
11
+ const inquirer_1 = __importDefault(require("inquirer"));
12
+ const isbinaryfile_1 = require("isbinaryfile");
13
+ const tempFolder = '/.temp';
14
+ const upload = ({ projectCode, folder, token, debug }) => {
15
+ if (debug) {
16
+ console.log('debug = true');
17
+ }
18
+ let srcFolder = `${folder}/src`;
19
+ (0, net_1.apiSetToken)(token);
20
+ (0, file_1.setFileCacheFolder)(folder);
21
+ if (!(0, file_1.fileExists)(srcFolder)) {
22
+ return Promise.reject(`${srcFolder} does not exist`);
23
+ }
24
+ let zipFilename = folder + tempFolder + '/sources.zip';
25
+ return Promise.resolve()
26
+ .then(() => validateToken(projectCode, token))
27
+ .then(() => validateGitCommit(folder))
28
+ .then(() => checkSourcesMerged(zipFilename, projectCode, folder, token))
29
+ .then(basezip => createUploadQueue(projectCode, basezip, folder))
30
+ .then(queue => processUploadQueue(projectCode, queue, folder))
31
+ .then(queue => queue.length && downloadBase(zipFilename, projectCode, folder, token))
32
+ .then(() => (0, file_1.rmdir)(`${folder}${tempFolder}`).catch(_e => { }))
33
+ .then(() => {
34
+ console.log();
35
+ console.log('done');
36
+ })
37
+ .catch(err => {
38
+ console.log();
39
+ console.error(err);
40
+ })
41
+ .then(() => console.log());
42
+ };
43
+ exports.upload = upload;
44
+ function validateGitCommit(folder) {
45
+ return (0, file_1.isGitCommitted)(folder)
46
+ .then(committed => {
47
+ if (!committed) {
48
+ return Promise.reject('Please commit your current sources first.');
49
+ }
50
+ else {
51
+ return Promise.resolve();
52
+ }
53
+ });
54
+ }
55
+ function validateToken(projectCode, _token) {
56
+ return (0, net_1.apiGet)(`/validate/local_dev_token/${projectCode}/edit`)
57
+ .catch(_e => {
58
+ console.error('Only the current Project Editor can do the upload');
59
+ throw _e;
60
+ });
61
+ }
62
+ function downloadBase(zipFilename, projectCode, folder, token) {
63
+ let basezip = `${folder}/.cg/sources.base`;
64
+ console.log(`update sources base ...`);
65
+ return Promise.resolve()
66
+ .then(() => {
67
+ if (!(0, file_1.fileExists)(zipFilename)) {
68
+ let progressBar = new cli_progress_1.default.SingleBar({}, cli_progress_1.default.Presets.shades_classic);
69
+ return (0, file_1.downloadFile)((0, net_1.cgUrl)(`/download/${projectCode}?token=${token}`), zipFilename, progressBar, { noCache: true })
70
+ .then(() => progressBar && progressBar.stop());
71
+ }
72
+ else {
73
+ return Promise.resolve();
74
+ }
75
+ })
76
+ .then(() => (0, file_1.moveFile)(zipFilename, basezip));
77
+ }
78
+ let sourcesProcessing;
79
+ function checkSourcesMerged(zipFilename, projectCode, folder, token) {
80
+ let progressBar = new cli_progress_1.default.SingleBar({}, cli_progress_1.default.Presets.shades_classic);
81
+ sourcesProcessing = [];
82
+ let basezip = `${folder}/.cg/sources.base`;
83
+ if (!(0, file_1.fileExists)(basezip)) {
84
+ return Promise.reject('Cannot merge: source base missing.');
85
+ }
86
+ console.log(`prepare updates: download remote sources ...`);
87
+ return (0, file_1.downloadFile)((0, net_1.cgUrl)(`/download/${projectCode}?token=${token}`), zipFilename, progressBar, { noCache: true })
88
+ .then(() => {
89
+ progressBar.stop();
90
+ return (0, file_1.getFileZip)(zipFilename);
91
+ })
92
+ .then(jszip => {
93
+ return Promise.resolve()
94
+ .then(() => (0, file_1.rmdir)(`${folder}${tempFolder}`).catch(_e => { }))
95
+ .then(() => (0, file_1.getFileZip)(basezip))
96
+ .then(basezip => {
97
+ let saveSrcFiles = [];
98
+ sourcesProcessing = [];
99
+ console.log(`prepare updates: diff remote sources ...`);
100
+ for (let filename in jszip.files) {
101
+ if (filename.startsWith('src/')) {
102
+ saveSrcFiles.push(checkSourceMerged(jszip.file(filename), basezip.file(filename), folder));
103
+ }
104
+ }
105
+ return Promise.all(saveSrcFiles)
106
+ .then(results => {
107
+ if (results.find(result => !result)) {
108
+ return Promise.reject(`Please do a merge before upload.\nRun the command "gamelet merge"`);
109
+ }
110
+ return basezip;
111
+ });
112
+ });
113
+ });
114
+ }
115
+ function checkSourceMerged(file, base, folder) {
116
+ if (sourcesProcessing.length > 19) {
117
+ return (0, file_1.wait)(30).then(() => checkSourceMerged(file, base, folder));
118
+ }
119
+ sourcesProcessing.push(file);
120
+ return (0, merges_1.isSourceMerged)(file.name, file, base, folder)
121
+ .then(result => {
122
+ let index = sourcesProcessing.indexOf(file);
123
+ sourcesProcessing.splice(index, 1);
124
+ return result;
125
+ });
126
+ }
127
+ function processUploadQueue(projectCode, queue, _folder) {
128
+ if (!queue.length) {
129
+ console.log('nothing to upload');
130
+ return Promise.resolve(queue);
131
+ }
132
+ return inquirer_1.default.prompt([
133
+ {
134
+ type: 'confirm',
135
+ name: 'confirm',
136
+ message: `${queue.length} item(s) to upload to "${projectCode}", Continue?`,
137
+ }
138
+ ])
139
+ .then(result => {
140
+ if (result.confirm) {
141
+ sourcesProcessing = [];
142
+ let progressBar = new cli_progress_1.default.SingleBar({}, cli_progress_1.default.Presets.shades_classic);
143
+ progressBar.start(queue.length, 0);
144
+ return Promise.all(queue.map(item => processUploadQueueItem(projectCode, item, progressBar)))
145
+ .then(() => progressBar.stop());
146
+ }
147
+ else {
148
+ queue.length = 0;
149
+ }
150
+ return Promise.resolve();
151
+ })
152
+ .then(() => queue);
153
+ }
154
+ function processUploadQueueItem(projectCode, queueItem, progressBar) {
155
+ if (sourcesProcessing.length > 5) {
156
+ return (0, file_1.wait)(30).then(() => processUploadQueueItem(projectCode, queueItem, progressBar));
157
+ }
158
+ sourcesProcessing.push(queueItem);
159
+ return Promise.resolve()
160
+ .then(() => {
161
+ return (0, net_1.apiPost)(`/update/source/local_dev/${projectCode}/${queueItem.action}`, {
162
+ path: queueItem.path,
163
+ filename: queueItem.filename,
164
+ content: queueItem.content || '',
165
+ });
166
+ })
167
+ .then(() => {
168
+ progressBar.increment(1);
169
+ let index = sourcesProcessing.indexOf(queueItem);
170
+ sourcesProcessing.splice(index, 1);
171
+ });
172
+ }
173
+ function createUploadQueue(projectCode, basezip, folder) {
174
+ sourcesProcessing = [];
175
+ let srcFolder = `${folder}/src`;
176
+ let queue = [];
177
+ let filesToDelete = {};
178
+ for (let filename in basezip.files) {
179
+ let search = filename.match(/^src\/(.*\/)?([^\/]+)$/);
180
+ if (search) {
181
+ let path = search[1] ? search[1].substr(0, search[1].length - 1) : '';
182
+ let fname = search[2];
183
+ let fullpath = path ? `${path}/${fname}` : fname;
184
+ filesToDelete[fullpath] = {
185
+ path: path,
186
+ filename: fname,
187
+ };
188
+ }
189
+ }
190
+ console.log('listing files to upload...');
191
+ console.log('===============================');
192
+ return (0, file_1.listFiles)(srcFolder)
193
+ .then(files => {
194
+ return Promise.all(files.map(file => updateSource(projectCode, srcFolder, '', file, basezip, queue, filesToDelete)));
195
+ })
196
+ .then(() => {
197
+ sourcesProcessing = [];
198
+ for (let key in filesToDelete) {
199
+ let queueItem = Object.assign({
200
+ action: 'delete',
201
+ }, filesToDelete[key]);
202
+ queue.push(queueItem);
203
+ console.log(' - (delete) ' + key);
204
+ }
205
+ })
206
+ .then(() => {
207
+ if (queue.length) {
208
+ console.log('-------------------------------');
209
+ }
210
+ return queue;
211
+ });
212
+ }
213
+ function updateSource(projectCode, srcFolder, path, filename, basezip, queue, filesToDelete) {
214
+ if (sourcesProcessing.length > 19) {
215
+ return (0, file_1.wait)(30).then(() => updateSource(projectCode, srcFolder, path, filename, basezip, queue, filesToDelete));
216
+ }
217
+ let fullpathname = path ? `${path}/${filename}` : filename;
218
+ sourcesProcessing.push(fullpathname);
219
+ let localFilepath = `${srcFolder}/${fullpathname}`;
220
+ delete filesToDelete[fullpathname];
221
+ return (0, file_1.fileStat)(localFilepath)
222
+ .then((stats) => {
223
+ if (stats.isDirectory()) {
224
+ return (0, file_1.listFiles)(localFilepath)
225
+ .then(files => {
226
+ let index = sourcesProcessing.indexOf(fullpathname);
227
+ sourcesProcessing.splice(index, 1);
228
+ return Promise.all(files.map(file => {
229
+ return updateSource(projectCode, srcFolder, fullpathname, file, basezip, queue, filesToDelete);
230
+ }));
231
+ });
232
+ }
233
+ else if (stats.isFile()) {
234
+ return (0, isbinaryfile_1.isBinaryFile)(localFilepath)
235
+ .then(isBinary => {
236
+ if (isBinary) {
237
+ return Promise.reject(`${filename} is not a text file.`);
238
+ }
239
+ else {
240
+ return (0, file_1.getFileString)(localFilepath)
241
+ .then(content => {
242
+ return getSourceAction(fullpathname, content, basezip)
243
+ .then(action => {
244
+ if (action) {
245
+ queue.push({
246
+ path: path,
247
+ filename: filename,
248
+ content: content,
249
+ action: action,
250
+ });
251
+ let sign = action == 'create' ? '+' : '>';
252
+ console.log(` ${sign} (${action}) ` + fullpathname);
253
+ }
254
+ });
255
+ });
256
+ }
257
+ });
258
+ }
259
+ else {
260
+ return Promise.resolve();
261
+ }
262
+ })
263
+ .then(() => {
264
+ let index = sourcesProcessing.indexOf(fullpathname);
265
+ sourcesProcessing.splice(index, 1);
266
+ });
267
+ }
268
+ function getSourceAction(sourcePathname, sourceContent, basezip) {
269
+ let baseFile = basezip.file(`src/${sourcePathname}`);
270
+ if (baseFile) {
271
+ return baseFile.async('string')
272
+ .then(baseContent => {
273
+ return sourceContent != baseContent ? 'update' : '';
274
+ });
275
+ }
276
+ else {
277
+ return Promise.resolve('create');
278
+ }
279
+ }
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dhbWVsZXQvdXBsb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHdDQUFvSztBQUNwSyxzQ0FBbUU7QUFDbkUscUNBQTBDO0FBQzFDLGdFQUF1QztBQUN2Qyx3REFBZ0M7QUFDaEMsK0NBQTRDO0FBRTVDLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQztBQUVyQixNQUFNLE1BQU0sR0FBRyxDQUFDLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtJQUM1RCxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBSSxTQUFTLEdBQUcsR0FBRyxNQUFNLE1BQU0sQ0FBQztJQUNoQyxJQUFBLGlCQUFXLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkIsSUFBQSx5QkFBa0IsRUFBQyxNQUFNLENBQUMsQ0FBQztJQUUzQixJQUFJLENBQUMsSUFBQSxpQkFBVSxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDekIsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsU0FBUyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxJQUFJLFdBQVcsR0FBRyxNQUFNLEdBQUcsVUFBVSxHQUFHLGNBQWMsQ0FBQztJQUV2RCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUU7U0FDbkIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDN0MsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFB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