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.
- package/assets/package.json.twig +3 -3
- package/assets/tsconfig.json.twig +1 -1
- package/build/package.json +67 -67
- package/build/src/gamelet/download.js +773 -737
- package/build/src/gamelet/merges.js +181 -179
- package/build/src/gamelet/prepare.js +276 -277
- package/build/src/gamelet/upload.js +280 -279
- package/build/src/index.js +86 -86
- package/build/src/server/Constant.js +9 -9
- package/build/src/server/entities/Client.js +78 -78
- package/build/src/server/entities/ClientOwner.js +67 -67
- package/build/src/server/entities/ClientProject.js +84 -84
- package/build/src/server/entities/Gameroom.js +89 -89
- package/build/src/server/entities/GameroomBase.js +276 -276
- package/build/src/server/entities/Gamezone.js +73 -73
- package/build/src/server/entities/ListFilter.js +193 -193
- package/build/src/server/entities/Monitor.js +94 -94
- package/build/src/server/entities/Player.js +140 -140
- package/build/src/server/managers/ApiManager.js +75 -75
- package/build/src/server/managers/ClientManager.js +64 -64
- package/build/src/server/managers/Database.js +627 -627
- package/build/src/server/managers/GameroomManager.js +392 -392
- package/build/src/server/managers/ManagerBase.js +17 -17
- package/build/src/server/managers/MonitorManager.js +73 -73
- package/build/src/server/managers/PlayerManager.js +108 -108
- package/build/src/server/managers/SocketManager.js +60 -60
- package/build/src/server/managers/UserManager.js +58 -58
- package/build/src/server/messages/Message.js +143 -143
- package/build/src/server/server.js +112 -113
- package/build/src/server/services/ServiceBase.js +25 -25
- package/build/src/server/services/clientService.js +23 -23
- package/build/src/server/services/gameroomService.js +121 -121
- package/build/src/server/services/gltserver.service.js +23 -23
- package/build/src/server/services/playerService.js +32 -32
- package/build/src/server/startServer.js +32 -33
- package/build/src/server/types/BadgeStatus.js +25 -25
- package/build/src/server/types/OrderType.js +38 -38
- package/build/src/server/types/SubmitType.js +24 -24
- package/build/src/server/types/TimeRange.js +26 -26
- package/build/src/server/utils/ArrayUtil.js +126 -126
- package/build/src/server/utils/IntUtil.js +9 -9
- package/build/src/server/utils/ObjectUtil.js +191 -191
- package/build/src/server/utils/StringUtil.js +37 -37
- package/build/src/utils/cli.js +53 -53
- package/build/src/utils/file.js +350 -337
- package/build/src/utils/init.js +57 -42
- package/build/src/utils/log.js +18 -17
- package/build/src/utils/net.js +43 -39
- package/package.json +2 -2
|
@@ -1,737 +1,773 @@
|
|
|
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.download = 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 ArrayUtil_1 = require("../server/utils/ArrayUtil");
|
|
13
|
-
const tempFolder = '/.temp';
|
|
14
|
-
const cliFolder = __dirname + '/../../..';
|
|
15
|
-
const dtsPrepend = "// @ts-nocheck\n";
|
|
16
|
-
|
|
17
|
-
let fullProject;
|
|
18
|
-
let engineInfo;
|
|
19
|
-
net_1.apiSetToken(token);
|
|
20
|
-
file_1.setFileCacheFolder(folder);
|
|
21
|
-
return Promise.resolve()
|
|
22
|
-
.then(() => {
|
|
23
|
-
if (!projectCode) {
|
|
24
|
-
return Promise.reject('Please specify a project code that is created on code.gamelet.com');
|
|
25
|
-
}
|
|
26
|
-
if (!folder) {
|
|
27
|
-
return Promise.reject('Please specify a folder to install');
|
|
28
|
-
}
|
|
29
|
-
if (!token) {
|
|
30
|
-
return Promise.reject('No valid token is provided');
|
|
31
|
-
}
|
|
32
|
-
return Promise.resolve();
|
|
33
|
-
})
|
|
34
|
-
.then(() => file_1.isEmptyFolder(folder))
|
|
35
|
-
.then(empty => {
|
|
36
|
-
if (sourceHandler == 'download') {
|
|
37
|
-
if (debug) {
|
|
38
|
-
// just do it
|
|
39
|
-
}
|
|
40
|
-
else if (!empty) {
|
|
41
|
-
return inquirer_1.default.prompt([
|
|
42
|
-
{
|
|
43
|
-
type: 'list',
|
|
44
|
-
name: 'confirm',
|
|
45
|
-
message: 'The folder is not empty!',
|
|
46
|
-
choices: [
|
|
47
|
-
'Quit',
|
|
48
|
-
'Force downloading project into this folder'
|
|
49
|
-
]
|
|
50
|
-
}
|
|
51
|
-
])
|
|
52
|
-
.then(choice => {
|
|
53
|
-
if (choice.confirm == 'Quit') {
|
|
54
|
-
return Promise.reject('Quit: The folder is not empty.');
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
return Promise.resolve();
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
console.log(`Create workspace in ${folder}/ ...`);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
console.log('sync workspace from CG ...');
|
|
67
|
-
}
|
|
68
|
-
})
|
|
69
|
-
.then(() => file_1.rmdir(`${folder}${tempFolder}`).catch(_e => { }))
|
|
70
|
-
.then(() => Promise.all([
|
|
71
|
-
getEngineInfo().then(info => (engineInfo = info)),
|
|
72
|
-
net_1.apiGet(`/get/full_project/${projectCode}`)
|
|
73
|
-
.then(json => fullProject = json),
|
|
74
|
-
]))
|
|
75
|
-
.then(() => updatePackageJsons(fullProject, folder))
|
|
76
|
-
.then(() => saveToken(fullProject, token, folder))
|
|
77
|
-
.then(() => secureSourcesBase(fullProject, folder, token))
|
|
78
|
-
.then(() => includeItem(targetItems, 'source') && downloadSources(fullProject, folder, token, sourceHandler, force))
|
|
79
|
-
.then(() => includeItem(targetItems, 'resource') && downloadResources(fullProject, folder, 3))
|
|
80
|
-
.then(() => (includeItem(targetItems, 'source') || includeItem(targetItems, 'resource')) &&
|
|
81
|
-
downloadStaticFiles(engineInfo, folder)
|
|
82
|
-
.then(() => adjustStaticFiles(fullProject, folder)))
|
|
83
|
-
.then(() => includeItem(targetItems, 'score') && downloadScoreModes(fullProject, folder))
|
|
84
|
-
.then(() => includeItem(targetItems, 'item') && downloadItems(fullProject, folder))
|
|
85
|
-
.then(() => includeItem(targetItems, 'badge') && downloadBadges(fullProject, folder))
|
|
86
|
-
.then(() => file_1.wait(300))
|
|
87
|
-
.then(() => file_1.rmdir(`${folder}${tempFolder}`).catch(_e => { }))
|
|
88
|
-
.then(() => {
|
|
89
|
-
console.log();
|
|
90
|
-
console.log('done');
|
|
91
|
-
})
|
|
92
|
-
.catch(err => {
|
|
93
|
-
console.log();
|
|
94
|
-
console.error(err);
|
|
95
|
-
})
|
|
96
|
-
.then(() => console.log());
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
let
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
.then(() =>
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
file_1.copyFile(cliFolder + '/assets/
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
let
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
let
|
|
171
|
-
let
|
|
172
|
-
|
|
173
|
-
srcJson.configurations.
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
let
|
|
198
|
-
verArr
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
.
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
})
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
if (
|
|
259
|
-
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
.
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
}
|
|
431
|
-
function
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
})
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
let
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
}
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
return
|
|
555
|
-
.then(
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
})
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
}
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
}
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
}
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
})
|
|
691
|
-
.then(() =>
|
|
692
|
-
}
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
}
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
}
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
}
|
|
737
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG93bmxvYWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZ2FtZWxldC9kb3dubG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx3Q0FBOE47QUFDOU4sc0NBQW1FO0FBQ25FLHFDQUEyRDtBQUMzRCxnRUFBdUM7QUFDdkMsd0RBQWdDO0FBQ2hDLHlEQUFzRDtBQUV0RCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUE7QUFDM0IsTUFBTSxTQUFTLEdBQUcsU0FBUyxHQUFHLFdBQVcsQ0FBQztBQUMxQyxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQztBQUV6QixRQUFBLFFBQVEsR0FBRyxDQUFDLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtJQUNqRyxJQUFJLFdBQVcsQ0FBQztJQUNoQixJQUFJLFVBQVUsQ0FBQztJQUNmLGlCQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkIseUJBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFM0IsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFO1NBQ25CLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDUCxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2QsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLG1FQUFtRSxDQUFDLENBQUM7U0FDOUY7UUFDRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7U0FDL0Q7UUFDRCxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1IsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLDRCQUE0QixDQUFDLENBQUM7U0FDdkQ7UUFDRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDLENBQUM7U0FDRCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsb0JB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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.download = 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 ArrayUtil_1 = require("../server/utils/ArrayUtil");
|
|
13
|
+
const tempFolder = '/.temp';
|
|
14
|
+
const cliFolder = __dirname + '/../../..';
|
|
15
|
+
const dtsPrepend = "// @ts-nocheck\n";
|
|
16
|
+
const download = ({ projectCode, folder, token, sourceHandler, targetItems, force, debug }) => {
|
|
17
|
+
let fullProject;
|
|
18
|
+
let engineInfo;
|
|
19
|
+
(0, net_1.apiSetToken)(token);
|
|
20
|
+
(0, file_1.setFileCacheFolder)(folder);
|
|
21
|
+
return Promise.resolve()
|
|
22
|
+
.then(() => {
|
|
23
|
+
if (!projectCode) {
|
|
24
|
+
return Promise.reject('Please specify a project code that is created on code.gamelet.com');
|
|
25
|
+
}
|
|
26
|
+
if (!folder) {
|
|
27
|
+
return Promise.reject('Please specify a folder to install');
|
|
28
|
+
}
|
|
29
|
+
if (!token) {
|
|
30
|
+
return Promise.reject('No valid token is provided');
|
|
31
|
+
}
|
|
32
|
+
return Promise.resolve();
|
|
33
|
+
})
|
|
34
|
+
.then(() => (0, file_1.isEmptyFolder)(folder))
|
|
35
|
+
.then(empty => {
|
|
36
|
+
if (sourceHandler == 'download') {
|
|
37
|
+
if (debug) {
|
|
38
|
+
// just do it
|
|
39
|
+
}
|
|
40
|
+
else if (!empty) {
|
|
41
|
+
return inquirer_1.default.prompt([
|
|
42
|
+
{
|
|
43
|
+
type: 'list',
|
|
44
|
+
name: 'confirm',
|
|
45
|
+
message: 'The folder is not empty!',
|
|
46
|
+
choices: [
|
|
47
|
+
'Quit',
|
|
48
|
+
'Force downloading project into this folder'
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
])
|
|
52
|
+
.then(choice => {
|
|
53
|
+
if (choice.confirm == 'Quit') {
|
|
54
|
+
return Promise.reject('Quit: The folder is not empty.');
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
return Promise.resolve();
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
console.log(`Create workspace in ${folder}/ ...`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
console.log('sync workspace from CG ...');
|
|
67
|
+
}
|
|
68
|
+
})
|
|
69
|
+
.then(() => (0, file_1.rmdir)(`${folder}${tempFolder}`).catch(_e => { }))
|
|
70
|
+
.then(() => Promise.all([
|
|
71
|
+
getEngineInfo().then(info => (engineInfo = info)),
|
|
72
|
+
(0, net_1.apiGet)(`/get/full_project/${projectCode}`)
|
|
73
|
+
.then(json => fullProject = json),
|
|
74
|
+
]))
|
|
75
|
+
.then(() => updatePackageJsons(fullProject, folder))
|
|
76
|
+
.then(() => saveToken(fullProject, token, folder))
|
|
77
|
+
.then(() => secureSourcesBase(fullProject, folder, token))
|
|
78
|
+
.then(() => includeItem(targetItems, 'source') && downloadSources(fullProject, folder, token, sourceHandler, force))
|
|
79
|
+
.then(() => includeItem(targetItems, 'resource') && downloadResources(fullProject, folder, 3))
|
|
80
|
+
.then(() => (includeItem(targetItems, 'source') || includeItem(targetItems, 'resource')) &&
|
|
81
|
+
downloadStaticFiles(engineInfo, folder)
|
|
82
|
+
.then(() => adjustStaticFiles(fullProject, folder)))
|
|
83
|
+
.then(() => includeItem(targetItems, 'score') && downloadScoreModes(fullProject, folder))
|
|
84
|
+
.then(() => includeItem(targetItems, 'item') && downloadItems(fullProject, folder))
|
|
85
|
+
.then(() => includeItem(targetItems, 'badge') && downloadBadges(fullProject, folder))
|
|
86
|
+
.then(() => (0, file_1.wait)(300))
|
|
87
|
+
.then(() => (0, file_1.rmdir)(`${folder}${tempFolder}`).catch(_e => { }))
|
|
88
|
+
.then(() => {
|
|
89
|
+
console.log();
|
|
90
|
+
console.log('done');
|
|
91
|
+
})
|
|
92
|
+
.catch(err => {
|
|
93
|
+
console.log();
|
|
94
|
+
console.error(err);
|
|
95
|
+
})
|
|
96
|
+
.then(() => console.log());
|
|
97
|
+
};
|
|
98
|
+
exports.download = download;
|
|
99
|
+
function secureSourcesBase(fullProject, folder, token) {
|
|
100
|
+
let basePath = getSourceBasePath(folder);
|
|
101
|
+
if (!(0, file_1.fileExists)(basePath)) {
|
|
102
|
+
let progressBar = new cli_progress_1.default.SingleBar({}, cli_progress_1.default.Presets.shades_classic);
|
|
103
|
+
console.log('Missing sources.base, downloading from CG ...');
|
|
104
|
+
let tempName = Date.now().toString(36) + '.' + Math.round(10 + Math.random() * 1000000).toString(36);
|
|
105
|
+
return (0, file_1.downloadFile)((0, net_1.cgUrl)(`/download/${fullProject.project.code}?token=${token}`), basePath, progressBar, {
|
|
106
|
+
tempFile: `${folder}${tempFolder}/${tempName}.zip`,
|
|
107
|
+
noCache: true,
|
|
108
|
+
})
|
|
109
|
+
.then(() => progressBar && progressBar.stop());
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
return Promise.resolve();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
function includeItem(targetItems, item) {
|
|
116
|
+
return !targetItems || targetItems.includes(item);
|
|
117
|
+
}
|
|
118
|
+
function saveToken(fullProject, token, folder) {
|
|
119
|
+
let filename = `${fullProject.project.code.toLowerCase()}.token`;
|
|
120
|
+
let fullpath = `${folder}/.cg/${filename}`;
|
|
121
|
+
return checkSavedToken(fullpath, token)
|
|
122
|
+
.then(saved => {
|
|
123
|
+
if (!saved) {
|
|
124
|
+
console.log(`Building workspace: saving access token ...`);
|
|
125
|
+
return (0, file_1.saveData)(fullpath, token)
|
|
126
|
+
.then(() => deleteOldTokens(folder, filename))
|
|
127
|
+
.then(() => { });
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
return Promise.resolve();
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
function deleteOldTokens(folder, currentTokenFile) {
|
|
135
|
+
let path = `${folder}/.cg`;
|
|
136
|
+
return (0, file_1.listFiles)(path)
|
|
137
|
+
.then(files => {
|
|
138
|
+
files = files.filter(f => f != currentTokenFile && f.toLowerCase().endsWith('.token'));
|
|
139
|
+
return Promise.all(files.map(f => (0, file_1.unlink)(`${path}/${f}`)));
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
function checkSavedToken(filename, token) {
|
|
143
|
+
if ((0, file_1.fileExists)(filename)) {
|
|
144
|
+
return (0, file_1.getFileString)(filename, true)
|
|
145
|
+
.then(savedToken => token == savedToken);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
return Promise.resolve(false);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
function getEngineInfo() {
|
|
152
|
+
return (0, net_1.apiGet)(`/get/engine_info`);
|
|
153
|
+
}
|
|
154
|
+
function updatePackageJsons(fullProject, folder) {
|
|
155
|
+
console.log(`Building workspace: update package configs ...`);
|
|
156
|
+
return Promise.all([
|
|
157
|
+
createPackageJson(fullProject.project, folder),
|
|
158
|
+
createTsconfig(fullProject.project, folder),
|
|
159
|
+
(0, file_1.copyFile)(cliFolder + '/assets/gitignore.txt', `${folder}/.gitignore`),
|
|
160
|
+
(0, file_1.copyFile)(cliFolder + '/assets/common.d.ts', `${folder}/typings/common.d.ts`),
|
|
161
|
+
mergeLaunchJson(folder),
|
|
162
|
+
]);
|
|
163
|
+
}
|
|
164
|
+
function mergeLaunchJson(folder) {
|
|
165
|
+
let srcFile = cliFolder + '/assets/launch.json';
|
|
166
|
+
let destFile = `${folder}/.vscode/launch.json`;
|
|
167
|
+
if ((0, file_1.fileExists)(destFile)) {
|
|
168
|
+
return Promise.all([(0, file_1.getFileJson)(srcFile, true), (0, file_1.getFileJson)(destFile, true)])
|
|
169
|
+
.then(results => {
|
|
170
|
+
let needSave = false;
|
|
171
|
+
let srcJson = results[0];
|
|
172
|
+
let destJson = results[1];
|
|
173
|
+
srcJson.configurations = srcJson.configurations || [];
|
|
174
|
+
srcJson.configurations.forEach(config => {
|
|
175
|
+
let search = destJson.configurations.find(c => c.name == config.name);
|
|
176
|
+
if (!search) {
|
|
177
|
+
destJson.configurations.push(config);
|
|
178
|
+
needSave = true;
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
if (needSave) {
|
|
182
|
+
return (0, file_1.saveData)(destFile, JSON.stringify(destJson, null, 4));
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
return Promise.resolve();
|
|
186
|
+
}
|
|
187
|
+
})
|
|
188
|
+
.catch(_e => {
|
|
189
|
+
return (0, file_1.copyFile)(srcFile, destFile);
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
return (0, file_1.copyFile)(srcFile, destFile);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
async function createPackageJson(projectJson, folder) {
|
|
197
|
+
let lastBuildVer = projectJson.lastBuildVer || '0.0.0';
|
|
198
|
+
let verArr = lastBuildVer.split('.').map(str => Number(str));
|
|
199
|
+
verArr[2]++;
|
|
200
|
+
let nextVer = verArr.join('.');
|
|
201
|
+
let content = await (0, file_1.renderTwig)(cliFolder + '/assets/package.json.twig', {
|
|
202
|
+
CG_URL: (0, net_1.cgUrl)(''),
|
|
203
|
+
project: projectJson,
|
|
204
|
+
version: nextVer,
|
|
205
|
+
});
|
|
206
|
+
if ((0, file_1.fileExists)(folder + '/package.json')) {
|
|
207
|
+
try {
|
|
208
|
+
const contentJson = JSON.parse(content);
|
|
209
|
+
let current = await (0, file_1.getFileJson)(folder + '/package.json', true);
|
|
210
|
+
contentJson.devDependencies = mergeDependencies(contentJson.devDependencies, current.devDependencies);
|
|
211
|
+
Object.assign(current, contentJson);
|
|
212
|
+
content = JSON.stringify(current, null, 4);
|
|
213
|
+
}
|
|
214
|
+
catch (e) {
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
await (0, file_1.saveData)(folder + '/package.json', content);
|
|
218
|
+
}
|
|
219
|
+
function mergeDependencies(list1, list2) {
|
|
220
|
+
const deps = [];
|
|
221
|
+
const codes1 = Object.keys(list1);
|
|
222
|
+
for (let lib in list1) {
|
|
223
|
+
deps.push({
|
|
224
|
+
lib: lib,
|
|
225
|
+
version: list1[lib],
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
for (let lib in list2) {
|
|
229
|
+
if (!codes1.includes(lib)) {
|
|
230
|
+
deps.push({
|
|
231
|
+
lib: lib,
|
|
232
|
+
version: list2[lib],
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
ArrayUtil_1.ArrayUtil.sortOn(deps, 'lib', true);
|
|
237
|
+
const result = {};
|
|
238
|
+
for (let dep of deps) {
|
|
239
|
+
result[dep.lib] = dep.version;
|
|
240
|
+
}
|
|
241
|
+
return result;
|
|
242
|
+
}
|
|
243
|
+
function createTsconfig(projectJson, folder) {
|
|
244
|
+
return (0, file_1.renderTwig)(cliFolder + '/assets/tsconfig.json.twig', {
|
|
245
|
+
CG_URL: (0, net_1.cgUrl)(''),
|
|
246
|
+
project: projectJson,
|
|
247
|
+
})
|
|
248
|
+
.then(content => (0, file_1.saveData)(folder + '/tsconfig.json', content));
|
|
249
|
+
}
|
|
250
|
+
let sourcesProcessing;
|
|
251
|
+
function downloadSources(fullProject, folder, token, sourceHandler, force) {
|
|
252
|
+
if (sourceHandler == 'skip') {
|
|
253
|
+
return Promise.resolve();
|
|
254
|
+
}
|
|
255
|
+
console.log(`Building workspace: download sources ...`);
|
|
256
|
+
return (0, file_1.isGitCommitted)(folder)
|
|
257
|
+
.then(committed => {
|
|
258
|
+
if (!committed && !force) {
|
|
259
|
+
return Promise.reject('Please commit your current sources first.');
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
return Promise.resolve();
|
|
263
|
+
}
|
|
264
|
+
})
|
|
265
|
+
.then(() => {
|
|
266
|
+
let zipFilename = folder + tempFolder + '/sources.zip';
|
|
267
|
+
let progressBar = new cli_progress_1.default.SingleBar({}, cli_progress_1.default.Presets.shades_classic);
|
|
268
|
+
sourcesProcessing = [];
|
|
269
|
+
return (0, file_1.downloadFile)((0, net_1.cgUrl)(`/download/${fullProject.project.code}?token=${token}`), zipFilename, progressBar, { noCache: true })
|
|
270
|
+
.then(() => {
|
|
271
|
+
progressBar.stop();
|
|
272
|
+
return (0, file_1.getFileZip)(zipFilename);
|
|
273
|
+
})
|
|
274
|
+
.then(jszip => {
|
|
275
|
+
if (sourceHandler == 'merge') {
|
|
276
|
+
return mergeSources(jszip, folder);
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
return overwriteSources(jszip, folder);
|
|
280
|
+
}
|
|
281
|
+
})
|
|
282
|
+
.then(result => result && (0, file_1.moveFile)(zipFilename, getSourceBasePath(folder)));
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
function getSourceBasePath(folder) {
|
|
286
|
+
return `${folder}/.cg/sources.base`;
|
|
287
|
+
}
|
|
288
|
+
function overwriteSources(jszip, folder) {
|
|
289
|
+
let saveSrcFiles = [];
|
|
290
|
+
let progressBar = new cli_progress_1.default.SingleBar({
|
|
291
|
+
format: ` {bar} {percentage}% | Overwriting ({value}/{total})`
|
|
292
|
+
}, cli_progress_1.default.Presets.shades_classic);
|
|
293
|
+
for (let filename in jszip.files) {
|
|
294
|
+
if (filename.startsWith('src/')) {
|
|
295
|
+
saveSrcFiles.push(saveSrcFile(jszip.file(filename), folder, progressBar));
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
progressBar.start(saveSrcFiles.length, 0);
|
|
299
|
+
return Promise.all(saveSrcFiles)
|
|
300
|
+
.then(() => {
|
|
301
|
+
progressBar && progressBar.stop();
|
|
302
|
+
return true;
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
function saveSrcFile(file, dest, progressBar) {
|
|
306
|
+
if (sourcesProcessing.length > 49) {
|
|
307
|
+
return (0, file_1.wait)(10).then(() => saveSrcFile(file, dest, progressBar));
|
|
308
|
+
}
|
|
309
|
+
sourcesProcessing.push(file);
|
|
310
|
+
return file.async('string')
|
|
311
|
+
.then(content => {
|
|
312
|
+
return (0, file_1.saveData)(dest + '/' + file.name, content);
|
|
313
|
+
})
|
|
314
|
+
.then(() => {
|
|
315
|
+
progressBar && progressBar.increment(1);
|
|
316
|
+
let index = sourcesProcessing.indexOf(file);
|
|
317
|
+
sourcesProcessing.splice(index, 1);
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
function mergeSources(jszip, folder) {
|
|
321
|
+
let basezip = getSourceBasePath(folder);
|
|
322
|
+
if (!(0, file_1.fileExists)(basezip)) {
|
|
323
|
+
return Promise.reject('Cannot merge: source base missing.');
|
|
324
|
+
}
|
|
325
|
+
return (0, file_1.getFileZip)(basezip)
|
|
326
|
+
.then(basezip => {
|
|
327
|
+
let saveSrcFiles = [];
|
|
328
|
+
let progressBar = new cli_progress_1.default.SingleBar({
|
|
329
|
+
format: ` {bar} {percentage}% | Merging ({value}/{total})`
|
|
330
|
+
}, cli_progress_1.default.Presets.shades_classic);
|
|
331
|
+
for (let filename in jszip.files) {
|
|
332
|
+
if (filename.startsWith('src/')) {
|
|
333
|
+
saveSrcFiles.push(mergeSrcFile(jszip.file(filename), basezip.file(filename), folder, progressBar));
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
return Promise.all(saveSrcFiles)
|
|
337
|
+
//.then(results => !results.find(result => !result))
|
|
338
|
+
.then(results => {
|
|
339
|
+
progressBar && progressBar.stop();
|
|
340
|
+
results.filter(result => result.name == 'deleted').forEach(result => {
|
|
341
|
+
console.log(`Source deleted: ${result.filename}`);
|
|
342
|
+
});
|
|
343
|
+
results.filter(result => result.name == 'added').forEach(result => {
|
|
344
|
+
console.log(`Source added: ${result.filename}`);
|
|
345
|
+
});
|
|
346
|
+
return true;
|
|
347
|
+
});
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
function mergeSrcFile(file, base, folder, progressBar) {
|
|
351
|
+
if (sourcesProcessing.length > 19) {
|
|
352
|
+
return (0, file_1.wait)(30).then(() => mergeSrcFile(file, base, folder, progressBar));
|
|
353
|
+
}
|
|
354
|
+
sourcesProcessing.push(file);
|
|
355
|
+
return Promise.all([fileToText(file), fileToText(base)])
|
|
356
|
+
.then(contents => {
|
|
357
|
+
return (0, merges_1.sourceMerge)(file.name, contents[0], contents[1], folder);
|
|
358
|
+
})
|
|
359
|
+
.then(result => {
|
|
360
|
+
progressBar && progressBar.increment(1);
|
|
361
|
+
let index = sourcesProcessing.indexOf(file);
|
|
362
|
+
sourcesProcessing.splice(index, 1);
|
|
363
|
+
return result;
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
function fileToText(file) {
|
|
367
|
+
if (file) {
|
|
368
|
+
return file.async('string');
|
|
369
|
+
}
|
|
370
|
+
else {
|
|
371
|
+
return Promise.resolve(null);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
function isLibArchive(resource, file) {
|
|
375
|
+
return resource.type.startsWith('build') && file.endsWith('archive.zip');
|
|
376
|
+
}
|
|
377
|
+
let resourceTotalBar;
|
|
378
|
+
let resourceBars;
|
|
379
|
+
function addResourceProgress() {
|
|
380
|
+
resourceTotalBar && resourceTotalBar.increment(1);
|
|
381
|
+
}
|
|
382
|
+
function downloadResources(fullProject, folder, concurrent) {
|
|
383
|
+
console.log(`Building workspace: download resources ...`);
|
|
384
|
+
return Promise.resolve()
|
|
385
|
+
.then(() => (0, file_1.listFiles)(`${folder}/resource`))
|
|
386
|
+
.then(oldDirs => {
|
|
387
|
+
let pack = fullProject.resourcePack;
|
|
388
|
+
let resToLoad = [];
|
|
389
|
+
let resIds = [];
|
|
390
|
+
for (let alias in pack.aliasMap) {
|
|
391
|
+
let resourceInfo = pack.aliasMap[alias];
|
|
392
|
+
let resource = pack.resourceMap[resourceInfo.resourceId];
|
|
393
|
+
resIds.push(resourceInfo.resourceId);
|
|
394
|
+
for (let file of resource.meta.files) {
|
|
395
|
+
let info = {
|
|
396
|
+
file: file,
|
|
397
|
+
resource: resource,
|
|
398
|
+
alias: alias,
|
|
399
|
+
};
|
|
400
|
+
if (file.endsWith('.d.ts') || !isLibArchive(resource, file)) {
|
|
401
|
+
resToLoad.push(info);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
let oldDirIndex = oldDirs.indexOf(resource.id.toString(36));
|
|
405
|
+
if (oldDirIndex != -1) {
|
|
406
|
+
oldDirs.splice(oldDirIndex, 1);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
resourceBars = new cli_progress_1.default.MultiBar({
|
|
410
|
+
clearOnComplete: false,
|
|
411
|
+
hideCursor: true,
|
|
412
|
+
format: ` {bar} {percentage}% | {file} ({value}/{total})`
|
|
413
|
+
}, cli_progress_1.default.Presets.shades_classic);
|
|
414
|
+
let collectInfo = {};
|
|
415
|
+
resourceTotalBar = resourceBars.create(resToLoad.length, 0, { file: 'Total' });
|
|
416
|
+
return startDownloadResources(collectInfo, resToLoad, folder, concurrent)
|
|
417
|
+
.then(() => resourceBars && resourceBars.stop())
|
|
418
|
+
.then(() => logDownloadResourceResult(collectInfo))
|
|
419
|
+
.then(() => deleteResDirs(folder, oldDirs))
|
|
420
|
+
.then(() => deleteOldDtses(folder, resIds));
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
function logDownloadResourceResult(collectInfo) {
|
|
424
|
+
let list = ArrayUtil_1.ArrayUtil.listValuesOfObject(collectInfo);
|
|
425
|
+
let files = 0;
|
|
426
|
+
for (let info of list) {
|
|
427
|
+
files += info.files.length;
|
|
428
|
+
}
|
|
429
|
+
console.log(` ${list.length} resource(s) added (${files} file(s))`);
|
|
430
|
+
}
|
|
431
|
+
function deleteOldDtses(folder, resIds) {
|
|
432
|
+
return (0, file_1.listFiles)(`${folder}/typings`)
|
|
433
|
+
.then(files => {
|
|
434
|
+
let filesToDelete = [];
|
|
435
|
+
files.forEach(f => {
|
|
436
|
+
let search = f.match(/\.cg_([a-z0-9]+)\.d\.ts$/);
|
|
437
|
+
if (search) {
|
|
438
|
+
let resId = parseInt(search[1], 36);
|
|
439
|
+
if (!resIds.includes(resId)) {
|
|
440
|
+
filesToDelete.push(f);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
});
|
|
444
|
+
sourcesProcessing = [];
|
|
445
|
+
return Promise.all(filesToDelete.map(f => deleteFile(`${folder}/typings/${f}`)))
|
|
446
|
+
.then(() => {
|
|
447
|
+
console.log(` ${filesToDelete.length} old Dts removed`);
|
|
448
|
+
});
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
function deleteFile(file) {
|
|
452
|
+
if (sourcesProcessing.length > 19) {
|
|
453
|
+
return (0, file_1.wait)(30).then(() => deleteFile(file));
|
|
454
|
+
}
|
|
455
|
+
sourcesProcessing.push(file);
|
|
456
|
+
return (0, file_1.unlink)(file)
|
|
457
|
+
.then(() => {
|
|
458
|
+
let index = sourcesProcessing.indexOf(file);
|
|
459
|
+
sourcesProcessing.splice(index, 1);
|
|
460
|
+
});
|
|
461
|
+
}
|
|
462
|
+
function deleteResDirs(folder, dirs) {
|
|
463
|
+
sourcesProcessing = [];
|
|
464
|
+
return Promise.all(dirs.map(dir => deleteResDir(folder, dir)))
|
|
465
|
+
.then(() => console.log(` ${dirs.length} old resource(s) removed`));
|
|
466
|
+
}
|
|
467
|
+
function deleteResDir(folder, dir) {
|
|
468
|
+
if (sourcesProcessing.length > 19) {
|
|
469
|
+
return (0, file_1.wait)(30).then(() => deleteResDir(dir));
|
|
470
|
+
}
|
|
471
|
+
sourcesProcessing.push(dir);
|
|
472
|
+
return (0, file_1.rmdir)(`${folder}/resource/${dir}`)
|
|
473
|
+
.then(() => {
|
|
474
|
+
let index = sourcesProcessing.indexOf(dir);
|
|
475
|
+
sourcesProcessing.splice(index, 1);
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
function startDownloadResources(collectInfo, resToLoad, folder, concurrent) {
|
|
479
|
+
return Promise.all(resToLoad.map(info => {
|
|
480
|
+
return downloadResource(collectInfo, info, folder, concurrent);
|
|
481
|
+
}));
|
|
482
|
+
}
|
|
483
|
+
function getResourceFolder(folder, resource) {
|
|
484
|
+
return `${folder}/resource/${resource.id.toString(36)}`;
|
|
485
|
+
}
|
|
486
|
+
function downloadResource(collectInfo, info, folder, concurrent) {
|
|
487
|
+
if (resourceBars.bars.length > concurrent) {
|
|
488
|
+
return (0, file_1.wait)(100).then(() => downloadResource(collectInfo, info, folder, concurrent));
|
|
489
|
+
}
|
|
490
|
+
let resource = info.resource;
|
|
491
|
+
let file = info.file;
|
|
492
|
+
let alias = info.alias;
|
|
493
|
+
let url = (0, net_1.cgUrl)(`${resource.url}${file}`);
|
|
494
|
+
let dest = getResourceFolder(folder, resource) + `/${file}`;
|
|
495
|
+
let dispName = alias;
|
|
496
|
+
let isDts = file.endsWith('.d.ts');
|
|
497
|
+
let modifyContent = null;
|
|
498
|
+
if (isDts) {
|
|
499
|
+
let destFile = file.split('/').pop().replace(/\.d\.ts$/, `.cg_${resource.id.toString(36)}.d.ts`);
|
|
500
|
+
dest = `${folder}/typings/${alias}_${destFile}`;
|
|
501
|
+
dispName += '.d.ts';
|
|
502
|
+
modifyContent = (content) => {
|
|
503
|
+
if (!content.startsWith(dtsPrepend)) {
|
|
504
|
+
content = dtsPrepend + content;
|
|
505
|
+
}
|
|
506
|
+
return content;
|
|
507
|
+
};
|
|
508
|
+
}
|
|
509
|
+
let resourceBar = resourceBars.create(100, 0, { file: dispName });
|
|
510
|
+
let tempName = Date.now().toString(36) + '.' + Math.round(10 + Math.random() * 1000000).toString(36);
|
|
511
|
+
let tempFile = `${folder}${tempFolder}/${tempName}`;
|
|
512
|
+
return (0, file_1.downloadFile)(url, dest, resourceBar, {
|
|
513
|
+
dispName: dispName,
|
|
514
|
+
tempFile: tempFile,
|
|
515
|
+
appendSize: isDts ? dtsPrepend.length : 0,
|
|
516
|
+
modifyContent: modifyContent,
|
|
517
|
+
})
|
|
518
|
+
.then(realDownload => {
|
|
519
|
+
if (realDownload) {
|
|
520
|
+
let resourceInfo = collectInfo[resource.id];
|
|
521
|
+
if (!resourceInfo) {
|
|
522
|
+
collectInfo[resource.id] = {
|
|
523
|
+
resource: resource,
|
|
524
|
+
files: [],
|
|
525
|
+
};
|
|
526
|
+
}
|
|
527
|
+
collectInfo[resource.id].files.push(file);
|
|
528
|
+
}
|
|
529
|
+
addResourceProgress();
|
|
530
|
+
resourceBars.remove(resourceBar);
|
|
531
|
+
});
|
|
532
|
+
}
|
|
533
|
+
let staticBar;
|
|
534
|
+
function downloadStaticFiles(engineInfo, folder) {
|
|
535
|
+
console.log(`Building workspace: download static files ...`);
|
|
536
|
+
let version = 'min';
|
|
537
|
+
//version = 'debug' + parseInt(engineInfo.version, 36).toString(24);
|
|
538
|
+
let tempStaticFolder = `${folder}/.cg/static`;
|
|
539
|
+
let promises = [
|
|
540
|
+
downloadStaticFile(`${engineInfo.url}static/css/preload.css`, `${folder}/static/css/preload.css`),
|
|
541
|
+
downloadStaticFile(`${engineInfo.url}static/img/logo_42.png`, `${folder}/static/img/logo_42.png`),
|
|
542
|
+
downloadStaticFile(`https://cdnjs.cloudflare.com/ajax/libs/pace/1.0.2/pace.min.js`, `${folder}/static/js/pace.min.js`),
|
|
543
|
+
downloadStaticFile(`${engineInfo.url}static/js/index.offline.html`, `${tempStaticFolder}/index.html`),
|
|
544
|
+
downloadStaticFile(`${engineInfo.url}static/js/systemjs-starter.offline.${version}.js`, `${tempStaticFolder}/systemjs-starter.offline.js`),
|
|
545
|
+
downloadStaticFile(`${engineInfo.url}static/js/systemjs-starter.offline-dev.${version}.js`, `${tempStaticFolder}/systemjs-starter.offline-dev.js`),
|
|
546
|
+
downloadStaticFile(`${engineInfo.url}static/js/boot.prod.${version}.js`, `${tempStaticFolder}/boot.prod.js`),
|
|
547
|
+
];
|
|
548
|
+
staticBar = new cli_progress_1.default.SingleBar({}, cli_progress_1.default.Presets.shades_classic);
|
|
549
|
+
staticBar.start(promises.length, 0);
|
|
550
|
+
return Promise.all(promises)
|
|
551
|
+
.then(() => staticBar && staticBar.stop());
|
|
552
|
+
}
|
|
553
|
+
function downloadStaticFile(url, dest) {
|
|
554
|
+
return (0, file_1.downloadFile)(url, dest)
|
|
555
|
+
.then(() => staticBar && staticBar.increment(1));
|
|
556
|
+
}
|
|
557
|
+
function adjustStaticFiles(fullProject, folder) {
|
|
558
|
+
return Promise.all([
|
|
559
|
+
adjustIndexHtml(fullProject, folder),
|
|
560
|
+
generateScriptJs(fullProject, folder),
|
|
561
|
+
])
|
|
562
|
+
.catch(err => {
|
|
563
|
+
console.error(err);
|
|
564
|
+
});
|
|
565
|
+
}
|
|
566
|
+
function adjustIndexHtml(fullProject, folder) {
|
|
567
|
+
let project = fullProject.project;
|
|
568
|
+
let filename = `${folder}/.cg/static/index.html`;
|
|
569
|
+
return (0, file_1.getFileString)(filename)
|
|
570
|
+
.then(text => {
|
|
571
|
+
text = text.replace('%appName%', project.name);
|
|
572
|
+
text = text.replace('</body>', ` <script src="output/build.js" type="text/javascript"></script>\n</body>`);
|
|
573
|
+
return (0, file_1.saveData)(`${folder}/index.html`, text);
|
|
574
|
+
});
|
|
575
|
+
}
|
|
576
|
+
function generateScriptJs(fullProject, folder) {
|
|
577
|
+
let project = fullProject.project;
|
|
578
|
+
let staticCacheFolder = `${folder}/.cg/static`;
|
|
579
|
+
let starterFilename = `${staticCacheFolder}/systemjs-starter.offline.js`;
|
|
580
|
+
let booterFilename = `${staticCacheFolder}/boot.prod.js`;
|
|
581
|
+
let devFilename = `${staticCacheFolder}/systemjs-starter.offline-dev.js`;
|
|
582
|
+
let starterScripts;
|
|
583
|
+
let scripts = '';
|
|
584
|
+
let appendScripts = (_scripts, text) => {
|
|
585
|
+
if (_scripts && !_scripts.endsWith(';')) {
|
|
586
|
+
_scripts += ';';
|
|
587
|
+
}
|
|
588
|
+
return _scripts + text.trim();
|
|
589
|
+
};
|
|
590
|
+
return (0, net_1.apiGet)(`/get/offlineDevRenderParameters/${project.code}`)
|
|
591
|
+
.then(renderParams => {
|
|
592
|
+
return Promise.resolve()
|
|
593
|
+
.then(() => {
|
|
594
|
+
return (0, file_1.getFileString)(starterFilename)
|
|
595
|
+
.then(content => {
|
|
596
|
+
starterScripts = content.replace('"%CG_CFG%"', JSON.stringify({ data: renderParams }));
|
|
597
|
+
});
|
|
598
|
+
})
|
|
599
|
+
.then(() => {
|
|
600
|
+
return (0, file_1.getFileString)(devFilename)
|
|
601
|
+
.then(content => {
|
|
602
|
+
scripts = appendScripts(scripts, content);
|
|
603
|
+
});
|
|
604
|
+
})
|
|
605
|
+
.then(() => {
|
|
606
|
+
return (0, file_1.getFileString)(booterFilename)
|
|
607
|
+
.then(content => {
|
|
608
|
+
scripts = appendScripts(scripts, content);
|
|
609
|
+
});
|
|
610
|
+
})
|
|
611
|
+
.then(() => {
|
|
612
|
+
return (0, net_1.apiGet)(`/list/resources/dependency/project/${project.code}`);
|
|
613
|
+
})
|
|
614
|
+
.then(data => {
|
|
615
|
+
let libs = data.list;
|
|
616
|
+
let libsPack = {};
|
|
617
|
+
return Promise.all(libs.map(lib => prepareLibContent(lib, libsPack, folder)))
|
|
618
|
+
.then(() => {
|
|
619
|
+
let systemBootFuncs = libs.map(lib => `function(){${libsPack[lib.id]};CgLibs.bootModule('${lib.meta.pcode}')}`);
|
|
620
|
+
systemBootFuncs.unshift(`function(){CgLibs.initBoots([${libs.map(lib => JSON.stringify(lib)).join(',')}])}`);
|
|
621
|
+
scripts = appendScripts(scripts, 'var __cgSystemBoots=[' + systemBootFuncs.join(',') + '];');
|
|
622
|
+
scripts = appendScripts(scripts, starterScripts);
|
|
623
|
+
});
|
|
624
|
+
})
|
|
625
|
+
.then(() => (0, file_1.saveData)(`${folder}/static/js/scripts.js`, scripts));
|
|
626
|
+
});
|
|
627
|
+
}
|
|
628
|
+
function prepareLibContent(lib, libsPack, folder) {
|
|
629
|
+
let file = `${folder}/resource/${lib.id.toString(36)}/${lib.meta.main}`;
|
|
630
|
+
return (0, file_1.getFileString)(file)
|
|
631
|
+
.then(content => {
|
|
632
|
+
libsPack[lib.id] = content;
|
|
633
|
+
});
|
|
634
|
+
}
|
|
635
|
+
function downloadBadges(fullProject, folder) {
|
|
636
|
+
console.log(`Building workspace: download badges ...`);
|
|
637
|
+
let project = fullProject.project;
|
|
638
|
+
let data;
|
|
639
|
+
return (0, net_1.apiPost)(`/glt/client/${project.code}`, {
|
|
640
|
+
api: '/list/game_badges',
|
|
641
|
+
data: {
|
|
642
|
+
start: 0,
|
|
643
|
+
length: 1000,
|
|
644
|
+
}
|
|
645
|
+
})
|
|
646
|
+
.then(_d => (data = _d))
|
|
647
|
+
.then(() => {
|
|
648
|
+
let list = data.list;
|
|
649
|
+
if (list.length) {
|
|
650
|
+
return downloadBadgeImages(list, folder, 3);
|
|
651
|
+
}
|
|
652
|
+
else {
|
|
653
|
+
console.log(' no badges found');
|
|
654
|
+
return Promise.resolve();
|
|
655
|
+
}
|
|
656
|
+
})
|
|
657
|
+
.then(() => (0, file_1.saveData)(`${folder}/static/json/badges.json`, JSON.stringify(data, null, 4)));
|
|
658
|
+
}
|
|
659
|
+
let badgeBars;
|
|
660
|
+
function downloadBadgeImages(badges, folder, concurrent) {
|
|
661
|
+
badgeBars = new cli_progress_1.default.MultiBar({
|
|
662
|
+
clearOnComplete: false,
|
|
663
|
+
hideCursor: true,
|
|
664
|
+
format: ` {bar} {percentage}% | {file} ({value}/{total})`
|
|
665
|
+
}, cli_progress_1.default.Presets.shades_classic);
|
|
666
|
+
let totalBar = badgeBars.create(badges.length, 0, { file: 'Total' });
|
|
667
|
+
return Promise.all(badges.map(badge => {
|
|
668
|
+
return downloadBadgeImage(badge, folder, concurrent)
|
|
669
|
+
.then(() => totalBar && totalBar.increment(1));
|
|
670
|
+
}))
|
|
671
|
+
.then(() => badgeBars && badgeBars.stop());
|
|
672
|
+
}
|
|
673
|
+
function downloadBadgeImage(badge, folder, concurrent) {
|
|
674
|
+
if (badgeBars.bars.length > concurrent) {
|
|
675
|
+
return (0, file_1.wait)(100).then(() => downloadBadgeImage(badge, folder, concurrent));
|
|
676
|
+
}
|
|
677
|
+
let url = badge.iconUrl;
|
|
678
|
+
let ext = url.split('.').pop();
|
|
679
|
+
let dispName = badge.code;
|
|
680
|
+
let localUri = `/static/img/badge/${badge.code}.${ext}`;
|
|
681
|
+
let dest = `${folder}${localUri}`;
|
|
682
|
+
badge.iconUrl = localUri;
|
|
683
|
+
badge.aquired = 0;
|
|
684
|
+
let badgeBar = badgeBars.create(100, 0, { file: dispName });
|
|
685
|
+
let tempName = Date.now().toString(36) + '.' + Math.round(10 + Math.random() * 1000000).toString(36);
|
|
686
|
+
let tempFile = `${folder}${tempFolder}/${tempName}`;
|
|
687
|
+
return (0, file_1.downloadFile)(url, dest, badgeBar, {
|
|
688
|
+
dispName: dispName,
|
|
689
|
+
tempFile: tempFile,
|
|
690
|
+
})
|
|
691
|
+
.then(() => badgeBars.remove(badgeBar));
|
|
692
|
+
}
|
|
693
|
+
function downloadItems(fullProject, folder) {
|
|
694
|
+
console.log(`Building workspace: download items ...`);
|
|
695
|
+
let project = fullProject.project;
|
|
696
|
+
let pack = fullProject.resourcePack;
|
|
697
|
+
let refPcodes = [];
|
|
698
|
+
let data;
|
|
699
|
+
for (let id in pack.resourceMap) {
|
|
700
|
+
let resource = pack.resourceMap[id];
|
|
701
|
+
if (resource.type == 'buildLib' && resource.meta.gitems) {
|
|
702
|
+
let pcode = resource.meta.pcode;
|
|
703
|
+
if (!refPcodes.includes(pcode)) {
|
|
704
|
+
refPcodes.push(pcode);
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
return (0, net_1.apiPost)(`/glt/client/${project.code}`, {
|
|
709
|
+
api: '/list/game_items',
|
|
710
|
+
data: {
|
|
711
|
+
refPcodes: refPcodes.join(','),
|
|
712
|
+
start: 0,
|
|
713
|
+
length: 1000,
|
|
714
|
+
}
|
|
715
|
+
})
|
|
716
|
+
.then(_d => (data = _d))
|
|
717
|
+
.then(() => {
|
|
718
|
+
let list = data.list;
|
|
719
|
+
if (list.length) {
|
|
720
|
+
return downloadItemImages(list, folder, 3);
|
|
721
|
+
}
|
|
722
|
+
else {
|
|
723
|
+
console.log(' no items found');
|
|
724
|
+
return Promise.resolve();
|
|
725
|
+
}
|
|
726
|
+
})
|
|
727
|
+
.then(() => (0, file_1.saveData)(`${folder}/static/json/items.json`, JSON.stringify(data, null, 4)));
|
|
728
|
+
}
|
|
729
|
+
let itemBars;
|
|
730
|
+
function downloadItemImages(items, folder, concurrent) {
|
|
731
|
+
itemBars = new cli_progress_1.default.MultiBar({
|
|
732
|
+
clearOnComplete: false,
|
|
733
|
+
hideCursor: true,
|
|
734
|
+
format: ` {bar} {percentage}% | {file} ({value}/{total})`
|
|
735
|
+
}, cli_progress_1.default.Presets.shades_classic);
|
|
736
|
+
let totalBar = itemBars.create(items.length, 0, { file: 'Total' });
|
|
737
|
+
return Promise.all(items.map(item => {
|
|
738
|
+
return downloadItemImage(item, folder, concurrent)
|
|
739
|
+
.then(() => totalBar && totalBar.increment(1));
|
|
740
|
+
}))
|
|
741
|
+
.then(() => itemBars && itemBars.stop());
|
|
742
|
+
}
|
|
743
|
+
function downloadItemImage(item, folder, concurrent) {
|
|
744
|
+
if (itemBars.bars.length > concurrent) {
|
|
745
|
+
return (0, file_1.wait)(100).then(() => downloadItemImage(item, folder, concurrent));
|
|
746
|
+
}
|
|
747
|
+
let url = item.iconUrl;
|
|
748
|
+
let ext = url.split('.').pop();
|
|
749
|
+
let dispName = item.code;
|
|
750
|
+
let localUri = `/static/img/item/${item.code}.${ext}`;
|
|
751
|
+
let dest = `${folder}${localUri}`;
|
|
752
|
+
item.iconUrl = localUri;
|
|
753
|
+
let itemBar = itemBars.create(100, 0, { file: dispName });
|
|
754
|
+
let tempName = Date.now().toString(36) + '.' + Math.round(10 + Math.random() * 1000000).toString(36);
|
|
755
|
+
let tempFile = `${folder}${tempFolder}/${tempName}`;
|
|
756
|
+
return (0, file_1.downloadFile)(url, dest, itemBar, {
|
|
757
|
+
dispName: dispName,
|
|
758
|
+
tempFile: tempFile,
|
|
759
|
+
})
|
|
760
|
+
.then(() => itemBars.remove(itemBar));
|
|
761
|
+
}
|
|
762
|
+
function downloadScoreModes(fullProject, folder) {
|
|
763
|
+
console.log(`Building workspace: download score modes ...`);
|
|
764
|
+
let project = fullProject.project;
|
|
765
|
+
let data;
|
|
766
|
+
return (0, net_1.apiPost)(`/glt/client/${project.code}`, {
|
|
767
|
+
api: '/list/score_modes',
|
|
768
|
+
data: {}
|
|
769
|
+
})
|
|
770
|
+
.then(_d => (data = _d))
|
|
771
|
+
.then(() => (0, file_1.saveData)(`${folder}/static/json/score_modes.json`, JSON.stringify(data, null, 4)));
|
|
772
|
+
}
|
|
773
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG93bmxvYWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZ2FtZWxldC9kb3dubG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx3Q0FBOE47QUFDOU4sc0NBQW1FO0FBQ25FLHFDQUEyRDtBQUMzRCxnRUFBdUM7QUFDdkMsd0RBQWdDO0FBQ2hDLHlEQUFzRDtBQUV0RCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUE7QUFDM0IsTUFBTSxTQUFTLEdBQUcsU0FBUyxHQUFHLFdBQVcsQ0FBQztBQUMxQyxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQztBQUUvQixNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtJQUNqRyxJQUFJLFdBQVcsQ0FBQztJQUNoQixJQUFJLFVBQVUsQ0FBQztJQUNmLElBQUEsaUJBQVcsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUNuQixJQUFBLHlCQUFrQixFQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTNCLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRTtTQUNuQixJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ1AsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2YsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLG1FQUFtRSxDQUFDLENBQUM7UUFDL0YsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNWLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDVCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0IsQ0FB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
|