mushroom-cli 1.1.1 → 1.1.2
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/.vscode/settings.json +3 -0
- package/README.md +91 -91
- package/check-update.js +9 -9
- package/common.js +237 -236
- package/config.js +475 -445
- package/docs/doc-mt.js +526 -421
- package/docs/docs.html +5380 -5129
- package/docs/mt-dom-1.0.js +1398 -1269
- package/docs/mt.extension.js +199 -174
- package/gen/gen-api-docs.js +157 -123
- package/gen/gen-csharp.js +1687 -1410
- package/gen/gen-db-docs.js +238 -222
- package/gen/gen-js-driver-tarball.js +119 -99
- package/gen/gen-js-driver.js +154 -133
- package/gen/gen-ts-driver.js +482 -451
- package/gen.js +146 -119
- package/help.js +51 -55
- package/init/init-json.js +110 -104
- package/init/init-netcore.js +37 -32
- package/init.js +27 -28
- package/master-file/master-file.js +254 -233
- package/mr.js +80 -78
- package/package.json +27 -27
- package/update/tsCode.js +90 -85
- package/update.js +24 -24
- package/sonarqube.yml +0 -18
package/gen/gen-csharp.js
CHANGED
|
@@ -1,1410 +1,1687 @@
|
|
|
1
|
-
const fs = require("fs");
|
|
2
|
-
const common = require("../common.js");
|
|
3
|
-
const package_json = require("./../package.json");
|
|
4
|
-
|
|
5
|
-
//#region shared function
|
|
6
|
-
const newLine = `
|
|
7
|
-
`;
|
|
8
|
-
const header = `// NOTE: Please do not modify this file
|
|
9
|
-
// NOTE: Version and compatibility information: please see in Info.cs file
|
|
10
|
-
|
|
11
|
-
// ReSharper disable CheckNamespace
|
|
12
|
-
// ReSharper disable CommentTypo
|
|
13
|
-
// ReSharper disable EmptyNamespace
|
|
14
|
-
// ReSharper disable IdentifierTypo
|
|
15
|
-
// ReSharper disable InconsistentNaming
|
|
16
|
-
// ReSharper disable PartialTypeWithSinglePart
|
|
17
|
-
// ReSharper disable RedundantUsingDirective
|
|
18
|
-
// ReSharper disable StringLiteralTypo
|
|
19
|
-
// ReSharper disable UnusedMember.Global
|
|
20
|
-
// ReSharper disable UnusedMember.Local
|
|
21
|
-
// ReSharper disable UnusedParameter.Local
|
|
22
|
-
// ReSharper disable UnusedTypeParameter
|
|
23
|
-
`;
|
|
24
|
-
|
|
25
|
-
function singleLine(str) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
function getCSharpInitValue(csType, value) {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
validation.codeHint
|
|
124
|
-
|
|
125
|
-
validation.codeHint.validValues
|
|
126
|
-
|
|
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
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
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
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
if (
|
|
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
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
const
|
|
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
|
-
|
|
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
|
-
}
|
|
555
|
-
|
|
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
|
-
|
|
692
|
-
}
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
if (
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
}
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
let
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
{
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
}
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
}
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
{
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
{
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
{
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
${
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
{
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
}
|
|
1
|
+
const fs = require("fs");
|
|
2
|
+
const common = require("../common.js");
|
|
3
|
+
const package_json = require("./../package.json");
|
|
4
|
+
|
|
5
|
+
//#region shared function
|
|
6
|
+
const newLine = `
|
|
7
|
+
`;
|
|
8
|
+
const header = `// NOTE: Please do not modify this file
|
|
9
|
+
// NOTE: Version and compatibility information: please see in Info.cs file
|
|
10
|
+
|
|
11
|
+
// ReSharper disable CheckNamespace
|
|
12
|
+
// ReSharper disable CommentTypo
|
|
13
|
+
// ReSharper disable EmptyNamespace
|
|
14
|
+
// ReSharper disable IdentifierTypo
|
|
15
|
+
// ReSharper disable InconsistentNaming
|
|
16
|
+
// ReSharper disable PartialTypeWithSinglePart
|
|
17
|
+
// ReSharper disable RedundantUsingDirective
|
|
18
|
+
// ReSharper disable StringLiteralTypo
|
|
19
|
+
// ReSharper disable UnusedMember.Global
|
|
20
|
+
// ReSharper disable UnusedMember.Local
|
|
21
|
+
// ReSharper disable UnusedParameter.Local
|
|
22
|
+
// ReSharper disable UnusedTypeParameter
|
|
23
|
+
`;
|
|
24
|
+
|
|
25
|
+
function singleLine(str) {
|
|
26
|
+
if (!str) return "";
|
|
27
|
+
return str.replace(/\r/g, "").replace(/\n/g, "<br/>");
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function toVietnameseNonTongue(str) {
|
|
31
|
+
const signText =
|
|
32
|
+
"ăâđêôơưàảãạáằẳẵặắầẩẫậấèẻẽẹéềểễệếìỉĩịíòỏõọóồổỗộốờởỡợớùủũụúừửữựứỳỷỹỵýĂÂĐÐÊÔƠƯÀẢÃẠÁẰẲẴẶẮẦẨẪẬẤÈẺẼẸÉỀỂỄỆẾÌỈĨỊÍÒỎÕỌÓỒỔỖỘỐỜỞỠỢỚÙỦŨỤÚỪỬỮỰỨỲỶỸỴÝ";
|
|
33
|
+
const unsignedText =
|
|
34
|
+
"aadeoouaaaaaaaaaaaaaaaeeeeeeeeeeiiiiiooooooooooooooouuuuuuuuuuyyyyyAADDEOOUAAAAAAAAAAAAAAAEEEEEEEEEEIIIIIOOOOOOOOOOOOOOOUUUUUUUUUUYYYYY";
|
|
35
|
+
let returnValue = "";
|
|
36
|
+
for (let i = 0; i < str.length; i++) {
|
|
37
|
+
const index = signText.indexOf(str.charAt(i));
|
|
38
|
+
returnValue += index !== -1 ? unsignedText.charAt(index) : str.charAt(i);
|
|
39
|
+
}
|
|
40
|
+
return returnValue;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function toCSharpName(str) {
|
|
44
|
+
if (!str) return "_";
|
|
45
|
+
const name = toVietnameseNonTongue(str).replace(/\W/g, "_");
|
|
46
|
+
const c = name.charAt(0);
|
|
47
|
+
return (
|
|
48
|
+
("0" <= c && c <= "9" ? "_" : "") + c.toUpperCase() + name.substring(1)
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function getCSharpTypeFromMushroomType(source, type, required) {
|
|
53
|
+
switch (type) {
|
|
54
|
+
case "string":
|
|
55
|
+
return "string";
|
|
56
|
+
case "object":
|
|
57
|
+
return "";
|
|
58
|
+
case "boolean":
|
|
59
|
+
return required ? "bool" : "bool?";
|
|
60
|
+
case "integer":
|
|
61
|
+
return required ? "int" : "int?";
|
|
62
|
+
case "long":
|
|
63
|
+
return required ? "long" : "long?";
|
|
64
|
+
case "double":
|
|
65
|
+
return required ? "double" : "double?";
|
|
66
|
+
case "array":
|
|
67
|
+
return "";
|
|
68
|
+
case "datetime":
|
|
69
|
+
return required ? "System.DateTime" : "System.DateTime?";
|
|
70
|
+
case "IdRef":
|
|
71
|
+
case "AutoId":
|
|
72
|
+
if (source.idType === "ObjectId" || source.idType === "GUID")
|
|
73
|
+
return "string";
|
|
74
|
+
if (source.idType === "AutoIncInt") return "int";
|
|
75
|
+
if (source.idType === "AutoIncLong") return "long";
|
|
76
|
+
}
|
|
77
|
+
return "UNKNOWN_TYPE";
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function getCSharpInitValue(csType, value) {
|
|
81
|
+
switch (csType) {
|
|
82
|
+
case "string":
|
|
83
|
+
return JSON.stringify(value);
|
|
84
|
+
case "int":
|
|
85
|
+
return parseInt(Number(value));
|
|
86
|
+
case "long":
|
|
87
|
+
return parseInt(Number(value)) + "L";
|
|
88
|
+
case "double":
|
|
89
|
+
return Number(value);
|
|
90
|
+
case "bool":
|
|
91
|
+
if (value === "false") return false;
|
|
92
|
+
if (value === "true") return true;
|
|
93
|
+
return "NotABoolean";
|
|
94
|
+
case "datetime":
|
|
95
|
+
return `System.DateTime.Parse(${JSON.stringify(value)})`;
|
|
96
|
+
default:
|
|
97
|
+
return "UNSUPPORTED";
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function generateEnumClass(source, out, field, defaultClassName) {
|
|
102
|
+
if (!out) return "";
|
|
103
|
+
|
|
104
|
+
let strEnumClasses = "";
|
|
105
|
+
const validation =
|
|
106
|
+
field.type === "array" ? field.items.validation : field.validation;
|
|
107
|
+
if (!validation) return "";
|
|
108
|
+
|
|
109
|
+
if (!validation.validValues) return "";
|
|
110
|
+
|
|
111
|
+
const mrType = field.type === "array" ? field.items.type : field.type;
|
|
112
|
+
if (mrType == "object" || mrType == "array") {
|
|
113
|
+
console.log("Unsuported enum type for type ", mrType, field);
|
|
114
|
+
return "";
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const type = getCSharpTypeFromMushroomType(source, mrType, true);
|
|
118
|
+
|
|
119
|
+
validation.codeHint = validation.codeHint || {};
|
|
120
|
+
if (validation.validValues) {
|
|
121
|
+
validation.codeHint.validValues = validation.codeHint.validValues || {};
|
|
122
|
+
|
|
123
|
+
if (!validation.codeHint.validValues.disabled) {
|
|
124
|
+
const enumClassName =
|
|
125
|
+
validation.codeHint.validValues.className || defaultClassName;
|
|
126
|
+
|
|
127
|
+
out.arrEnumClassNames = out.arrEnumClassNames || [];
|
|
128
|
+
|
|
129
|
+
if (out.arrEnumClassNames.indexOf(enumClassName) === -1) {
|
|
130
|
+
out.arrEnumClassNames.push(enumClassName);
|
|
131
|
+
strEnumClasses += ` /// <summary>
|
|
132
|
+
/// ${singleLine(validation.codeHint.validValues.description || field.description)}
|
|
133
|
+
/// </summary>
|
|
134
|
+
public class ${enumClassName}
|
|
135
|
+
{
|
|
136
|
+
private ${enumClassName}() { }
|
|
137
|
+
|
|
138
|
+
`;
|
|
139
|
+
const enumProperties =
|
|
140
|
+
validation.codeHint.validValues.nameMap || validation.validValues;
|
|
141
|
+
for (
|
|
142
|
+
let i = 0;
|
|
143
|
+
i < enumProperties.length && i < validation.validValues.length;
|
|
144
|
+
i++
|
|
145
|
+
) {
|
|
146
|
+
strEnumClasses += ` public const ${type} ${toCSharpName(enumProperties[i])} = ${getCSharpInitValue(type, validation.validValues[i])};
|
|
147
|
+
`;
|
|
148
|
+
}
|
|
149
|
+
strEnumClasses += ` }
|
|
150
|
+
|
|
151
|
+
`;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
return strEnumClasses;
|
|
157
|
+
}
|
|
158
|
+
//#endregion
|
|
159
|
+
|
|
160
|
+
//#region CSharp MongoDb Classes
|
|
161
|
+
function generateCSharpClassMongoDb(
|
|
162
|
+
source,
|
|
163
|
+
className,
|
|
164
|
+
fields,
|
|
165
|
+
isRoot,
|
|
166
|
+
description,
|
|
167
|
+
out,
|
|
168
|
+
) {
|
|
169
|
+
let strClasses = "";
|
|
170
|
+
let strEnumClasses = "";
|
|
171
|
+
let content = "";
|
|
172
|
+
if (description) {
|
|
173
|
+
content += ` /// <summary>
|
|
174
|
+
/// ${singleLine(description)}
|
|
175
|
+
/// </summary>
|
|
176
|
+
`;
|
|
177
|
+
}
|
|
178
|
+
let supperClass = "";
|
|
179
|
+
if (isRoot) {
|
|
180
|
+
// thêm cho trường hợp không khai báo id hoặc id.type
|
|
181
|
+
if (!fields.id) {
|
|
182
|
+
fields.id = {
|
|
183
|
+
type: "AutoId",
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
if (!fields.id.type) fields.id.type = "AutoId";
|
|
187
|
+
|
|
188
|
+
supperClass =
|
|
189
|
+
" : Mushroom.Models.IResource<" +
|
|
190
|
+
getCSharpTypeFromMushroomType(source, fields.id.type, true) +
|
|
191
|
+
">";
|
|
192
|
+
}
|
|
193
|
+
content += ` public class ${className}${supperClass}
|
|
194
|
+
{
|
|
195
|
+
`;
|
|
196
|
+
for (const fieldName in fields) {
|
|
197
|
+
if (!fields.hasOwnProperty(fieldName)) continue;
|
|
198
|
+
|
|
199
|
+
const field = fields[fieldName];
|
|
200
|
+
let type;
|
|
201
|
+
const propertyName = toCSharpName(fieldName);
|
|
202
|
+
if (field.codeHint && field.codeHint.type && field.codeHint.type.csharp) {
|
|
203
|
+
type = field.codeHint.type.csharp;
|
|
204
|
+
} else if (field.type === "object") {
|
|
205
|
+
strClasses +=
|
|
206
|
+
generateCSharpClassMongoDb(
|
|
207
|
+
source,
|
|
208
|
+
className + "_" + propertyName,
|
|
209
|
+
field.fields,
|
|
210
|
+
false,
|
|
211
|
+
null,
|
|
212
|
+
out,
|
|
213
|
+
) + newLine;
|
|
214
|
+
type = className + "_" + propertyName;
|
|
215
|
+
} else if (field.type === "array") {
|
|
216
|
+
if (field.items.type === "object") {
|
|
217
|
+
strClasses +=
|
|
218
|
+
generateCSharpClassMongoDb(
|
|
219
|
+
source,
|
|
220
|
+
className + "_" + propertyName,
|
|
221
|
+
field.items.fields,
|
|
222
|
+
false,
|
|
223
|
+
null,
|
|
224
|
+
out,
|
|
225
|
+
) + newLine;
|
|
226
|
+
type = `System.Collections.Generic.List<${className}_${propertyName}>`;
|
|
227
|
+
} else {
|
|
228
|
+
type = `System.Collections.Generic.List<${getCSharpTypeFromMushroomType(source, field.items.type, field.items.validation && field.items.validation.required)}>`;
|
|
229
|
+
}
|
|
230
|
+
} else
|
|
231
|
+
type = getCSharpTypeFromMushroomType(
|
|
232
|
+
source,
|
|
233
|
+
field.type,
|
|
234
|
+
field.validation && field.validation.required,
|
|
235
|
+
);
|
|
236
|
+
content += ` /// <summary>
|
|
237
|
+
/// ${singleLine(field.description)}
|
|
238
|
+
/// </summary>
|
|
239
|
+
`;
|
|
240
|
+
|
|
241
|
+
if (isRoot && fieldName === "id") {
|
|
242
|
+
content += ` [MongoDB.Bson.Serialization.Attributes.BsonId${field.type === "AutoId" && source.idType === "GUID" ? "(IdGenerator = typeof(MongoDB.Bson.Serialization.IdGenerators.GuidGenerator))" : ""}]${newLine}`;
|
|
243
|
+
}
|
|
244
|
+
content += ` [MongoDB.Bson.Serialization.Attributes.BsonElement("${isRoot && fieldName === "id" ? "_id" : fieldName}")]
|
|
245
|
+
[MongoDB.Bson.Serialization.Attributes.BsonIgnoreIfNull]
|
|
246
|
+
[Newtonsoft.Json.JsonProperty(PropertyName = "${fieldName}", NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore${type === "System.DateTime" ? ", DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Ignore" : ""})]
|
|
247
|
+
`;
|
|
248
|
+
if (
|
|
249
|
+
(field.type === "AutoId" || field.type === "IdRef") &&
|
|
250
|
+
source.idType === "ObjectId"
|
|
251
|
+
) {
|
|
252
|
+
content +=
|
|
253
|
+
" [MongoDB.Bson.Serialization.Attributes.BsonRepresentation(MongoDB.Bson.BsonType.ObjectId)]" +
|
|
254
|
+
newLine;
|
|
255
|
+
}
|
|
256
|
+
if (field.type === "AutoId" && source.idType === "GUID") {
|
|
257
|
+
content +=
|
|
258
|
+
" [MongoDB.Bson.Serialization.Attributes.BsonRepresentation(MongoDB.Bson.BsonType.String)]" +
|
|
259
|
+
newLine;
|
|
260
|
+
}
|
|
261
|
+
if (field.type === "datetime") {
|
|
262
|
+
content +=
|
|
263
|
+
" [MongoDB.Bson.Serialization.Attributes.BsonDateTimeOptions(Kind = System.DateTimeKind.Local)]" +
|
|
264
|
+
newLine;
|
|
265
|
+
}
|
|
266
|
+
if (field.type === "array") {
|
|
267
|
+
if (
|
|
268
|
+
(field.items.type === "AutoId" || field.items.type === "IdRef") &&
|
|
269
|
+
source.idType === "ObjectId"
|
|
270
|
+
) {
|
|
271
|
+
content +=
|
|
272
|
+
" [MongoDB.Bson.Serialization.Attributes.BsonRepresentation(MongoDB.Bson.BsonType.ObjectId)]" +
|
|
273
|
+
newLine;
|
|
274
|
+
}
|
|
275
|
+
if (field.items.type === "AutoId" && source.idType === "GUID") {
|
|
276
|
+
content +=
|
|
277
|
+
" [MongoDB.Bson.Serialization.Attributes.BsonRepresentation(MongoDB.Bson.BsonType.String)]" +
|
|
278
|
+
newLine;
|
|
279
|
+
}
|
|
280
|
+
if (field.items.type === "datetime") {
|
|
281
|
+
content +=
|
|
282
|
+
" [MongoDB.Bson.Serialization.Attributes.BsonDateTimeOptions(Kind = System.DateTimeKind.Local)]" +
|
|
283
|
+
newLine;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
content += ` public ${type} ${propertyName} { get; set; }${newLine}${newLine}`;
|
|
288
|
+
|
|
289
|
+
strEnumClasses += generateEnumClass(
|
|
290
|
+
source,
|
|
291
|
+
out,
|
|
292
|
+
field,
|
|
293
|
+
`${className.toUpperCase()}_${propertyName.toUpperCase()}_ENUM`,
|
|
294
|
+
);
|
|
295
|
+
}
|
|
296
|
+
content += ` [MongoDB.Bson.Serialization.Attributes.BsonExtraElements]
|
|
297
|
+
public System.Collections.Generic.Dictionary<string, object> Mushroom_ExtraProperties { get; set; }
|
|
298
|
+
|
|
299
|
+
}
|
|
300
|
+
`;
|
|
301
|
+
if (strEnumClasses) {
|
|
302
|
+
out.strEnumClasses = out.strEnumClasses || "";
|
|
303
|
+
|
|
304
|
+
out.strEnumClasses += strEnumClasses;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
return strClasses + newLine + content;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
function getCSharpFunc(methodName, methodType) {
|
|
311
|
+
if (methodType === "static") return methodName;
|
|
312
|
+
const idx = methodName.lastIndexOf(".");
|
|
313
|
+
if (idx === -1) return methodName;
|
|
314
|
+
return `new ${methodName.substring(0, idx)}()${methodName.substring(idx)}`;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
function genCSharpMongoDbClasses(args, projectName, project, alias, source) {
|
|
318
|
+
const aliasProject = ((project.csharpMongo || {}).alias || {})[alias];
|
|
319
|
+
|
|
320
|
+
if (!aliasProject) {
|
|
321
|
+
throw new Error(
|
|
322
|
+
`Not found gen c#-mongo configuration. Please run 'npx mushroom-cli config ${projectName} gen c#-mongo OUTPUT_FILE.cs${alias === "default" ? "" : " alias " + alias}' first`,
|
|
323
|
+
);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
if (aliasProject.outputToFolder) {
|
|
327
|
+
genCSharpMongoDbClassesToFolder(projectName, alias, source, aliasProject);
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
const entities = common.getEntities(source, aliasProject.allowRoles, true);
|
|
332
|
+
|
|
333
|
+
const namespace = toCSharpName(source.name);
|
|
334
|
+
|
|
335
|
+
let strClasses = "";
|
|
336
|
+
let strEnumClasses = "";
|
|
337
|
+
let collectionNames = "";
|
|
338
|
+
let resourceNames = "";
|
|
339
|
+
let roleNames = "";
|
|
340
|
+
|
|
341
|
+
source.roles?.forEach((role) => {
|
|
342
|
+
if (!role.name) return;
|
|
343
|
+
roleNames += `
|
|
344
|
+
/// <summary>
|
|
345
|
+
/// ${role.description ?? ""}
|
|
346
|
+
/// </summary>
|
|
347
|
+
public static string ${toCSharpName(role.name)} => "${role.name}";
|
|
348
|
+
`;
|
|
349
|
+
});
|
|
350
|
+
|
|
351
|
+
const out = {};
|
|
352
|
+
for (let entityName in entities) {
|
|
353
|
+
if (!entities.hasOwnProperty(entityName)) continue;
|
|
354
|
+
|
|
355
|
+
const className = toCSharpName(entityName);
|
|
356
|
+
collectionNames += ` public static string ${className}CollectionName => "${entities[entityName].storageName}";
|
|
357
|
+
public static IMongoCollection<Resources.${className}> ${className}Collection => GetDatabase().GetCollection<Resources.${className}>(${className}CollectionName);
|
|
358
|
+
`;
|
|
359
|
+
resourceNames += ` public static string ${className} => "${entityName}";${newLine}`;
|
|
360
|
+
strClasses += generateCSharpClassMongoDb(
|
|
361
|
+
source,
|
|
362
|
+
className,
|
|
363
|
+
entities[entityName].fields,
|
|
364
|
+
true,
|
|
365
|
+
entities[entityName].description,
|
|
366
|
+
out,
|
|
367
|
+
);
|
|
368
|
+
|
|
369
|
+
const actions = entities[entityName].actions || {};
|
|
370
|
+
for (let actionName in actions) {
|
|
371
|
+
const action = actions[actionName];
|
|
372
|
+
if (!Array.isArray(action)) continue;
|
|
373
|
+
|
|
374
|
+
action.forEach((a) => {
|
|
375
|
+
if (!a) return;
|
|
376
|
+
if (
|
|
377
|
+
typeof a.delegator === "string" &&
|
|
378
|
+
a.delegator.indexOf("lib:") === 0
|
|
379
|
+
) {
|
|
380
|
+
out.delegators = out.delegators || [];
|
|
381
|
+
const method = a.delegator.substring(4);
|
|
382
|
+
let type =
|
|
383
|
+
a.codeHint && a.codeHint.delegator && a.codeHint.delegator.csharp
|
|
384
|
+
? a.codeHint.delegator.csharp.methodType
|
|
385
|
+
: null;
|
|
386
|
+
if (type !== "non-static") type = "static";
|
|
387
|
+
out.delegators.push({
|
|
388
|
+
method: method,
|
|
389
|
+
source: `entity: ${entityName}, action: ${actionName}, grant: ${a.grant}`,
|
|
390
|
+
type: type,
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
if (!a.events && typeof a.events !== "object") return;
|
|
395
|
+
|
|
396
|
+
for (let eventName in a.events) {
|
|
397
|
+
if (!Array.isArray(a.events[eventName])) return;
|
|
398
|
+
|
|
399
|
+
out.eventHandlers = out.eventHandlers || [];
|
|
400
|
+
a.events[eventName].forEach((ev, i) => {
|
|
401
|
+
if (typeof ev !== "string" || ev.indexOf("lib:") !== 0) return;
|
|
402
|
+
const method = ev.substring(4);
|
|
403
|
+
let type =
|
|
404
|
+
a.codeHint &&
|
|
405
|
+
a.codeHint.events &&
|
|
406
|
+
Array.isArray(a.codeHint.events[eventName]) &&
|
|
407
|
+
a.codeHint.events[eventName][i] &&
|
|
408
|
+
a.codeHint.events[eventName][i].csharp
|
|
409
|
+
? a.codeHint.events[eventName][i].csharp.methodType
|
|
410
|
+
: null;
|
|
411
|
+
if (type !== "non-static") type = "static";
|
|
412
|
+
out.eventHandlers.push({
|
|
413
|
+
method: method,
|
|
414
|
+
source: `entity: ${entityName}, action: ${actionName}, grant: ${a.grant}, event: ${eventName}`,
|
|
415
|
+
type: type,
|
|
416
|
+
});
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
const views = entities[entityName].views || {};
|
|
423
|
+
for (let viewName in views) {
|
|
424
|
+
const view = views[viewName];
|
|
425
|
+
if (!Array.isArray(view)) continue;
|
|
426
|
+
|
|
427
|
+
view.forEach((v) => {
|
|
428
|
+
if (!v) return;
|
|
429
|
+
|
|
430
|
+
if (typeof v.query === "string" && v.query.indexOf("lib:") === 0) {
|
|
431
|
+
out.viewHandlers = out.viewHandlers || [];
|
|
432
|
+
const method = v.query.substring(4);
|
|
433
|
+
let type =
|
|
434
|
+
v.codeHint && v.codeHint.query && v.codeHint.query.csharp
|
|
435
|
+
? v.codeHint.query.csharp.methodType
|
|
436
|
+
: null;
|
|
437
|
+
if (type !== "non-static") type = "static";
|
|
438
|
+
out.viewHandlers.push({
|
|
439
|
+
method: method,
|
|
440
|
+
source: `entity: ${entityName}, view: ${viewName}, grant: ${v.grant}`,
|
|
441
|
+
type: type,
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
const channels = entities[entityName].features?.vn_text?.channels;
|
|
448
|
+
if (channels != null) {
|
|
449
|
+
channels.forEach((channel) => {
|
|
450
|
+
if (
|
|
451
|
+
!channel.nativeBuilder ||
|
|
452
|
+
typeof channel.nativeBuilder !== "string" ||
|
|
453
|
+
channel.nativeBuilder.indexOf("lib:") !== 0
|
|
454
|
+
)
|
|
455
|
+
return;
|
|
456
|
+
|
|
457
|
+
out.vnTextChannels = out.vnTextChannels || [];
|
|
458
|
+
const method = channel.nativeBuilder.substring(4);
|
|
459
|
+
let type =
|
|
460
|
+
channel.codeHint &&
|
|
461
|
+
channel.codeHint.nativeBuilder &&
|
|
462
|
+
channel.codeHint.nativeBuilder.csharp
|
|
463
|
+
? channel.codeHint.nativeBuilder.csharp.methodType
|
|
464
|
+
: null;
|
|
465
|
+
if (type !== "non-static") type = "static";
|
|
466
|
+
out.vnTextChannels.push({
|
|
467
|
+
method: method,
|
|
468
|
+
source: `entity: ${entityName}, feature: vn_text, channel: ${channel.name}`,
|
|
469
|
+
type: type,
|
|
470
|
+
});
|
|
471
|
+
});
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
if (out.strEnumClasses) strEnumClasses += out.strEnumClasses;
|
|
476
|
+
|
|
477
|
+
const delegators = (out.delegators || []).reduce((prev, cur) => {
|
|
478
|
+
if (cur.method in prev) {
|
|
479
|
+
if (prev[cur.method].indexOf(cur.source) === -1) {
|
|
480
|
+
prev[cur.method].push(cur);
|
|
481
|
+
}
|
|
482
|
+
} else {
|
|
483
|
+
prev[cur.method] = [cur];
|
|
484
|
+
}
|
|
485
|
+
return prev;
|
|
486
|
+
}, {});
|
|
487
|
+
const strDelegatorReferences = Object.keys(delegators)
|
|
488
|
+
.map(
|
|
489
|
+
(method) =>
|
|
490
|
+
delegators[method]
|
|
491
|
+
.map((ev) => ` // ${ev.source}`)
|
|
492
|
+
.join(newLine) +
|
|
493
|
+
newLine +
|
|
494
|
+
` RegisterCustomMethod(${getCSharpFunc(method, delegators[method][0].type)});`,
|
|
495
|
+
)
|
|
496
|
+
.join(newLine);
|
|
497
|
+
|
|
498
|
+
const viewHandlers = (out.viewHandlers || []).reduce((prev, cur) => {
|
|
499
|
+
if (cur.method in prev) {
|
|
500
|
+
if (prev[cur.method].indexOf(cur.source) === -1) {
|
|
501
|
+
prev[cur.method].push(cur);
|
|
502
|
+
}
|
|
503
|
+
} else {
|
|
504
|
+
prev[cur.method] = [cur];
|
|
505
|
+
}
|
|
506
|
+
return prev;
|
|
507
|
+
}, {});
|
|
508
|
+
const strViewHandlerReferences = Object.keys(viewHandlers)
|
|
509
|
+
.map(
|
|
510
|
+
(method) =>
|
|
511
|
+
viewHandlers[method]
|
|
512
|
+
.map((ev) => ` // ${ev.source}`)
|
|
513
|
+
.join(newLine) +
|
|
514
|
+
newLine +
|
|
515
|
+
` RegisterCustomViewMethod(${getCSharpFunc(method, viewHandlers[method][0].type)});`,
|
|
516
|
+
)
|
|
517
|
+
.join(newLine);
|
|
518
|
+
|
|
519
|
+
const vnTextChannels = (out.vnTextChannels || []).reduce((prev, cur) => {
|
|
520
|
+
if (cur.method in prev) {
|
|
521
|
+
if (prev[cur.method].indexOf(cur.source) === -1) {
|
|
522
|
+
prev[cur.method].push(cur);
|
|
523
|
+
}
|
|
524
|
+
} else {
|
|
525
|
+
prev[cur.method] = [cur];
|
|
526
|
+
}
|
|
527
|
+
return prev;
|
|
528
|
+
}, {});
|
|
529
|
+
const strVnTextChannels = Object.keys(vnTextChannels)
|
|
530
|
+
.map(
|
|
531
|
+
(method) =>
|
|
532
|
+
vnTextChannels[method]
|
|
533
|
+
.map((channel) => ` // ${channel.source}`)
|
|
534
|
+
.join(newLine) +
|
|
535
|
+
newLine +
|
|
536
|
+
` RegisterCustomVnTextBuilderMethod(${getCSharpFunc(method, vnTextChannels[method][0].type)});`,
|
|
537
|
+
)
|
|
538
|
+
.join(newLine);
|
|
539
|
+
|
|
540
|
+
const eventHandlers = (out.eventHandlers || []).reduce((prev, cur) => {
|
|
541
|
+
if (cur.method in prev) {
|
|
542
|
+
if (prev[cur.method].indexOf(cur.source) === -1) {
|
|
543
|
+
prev[cur.method].push(cur);
|
|
544
|
+
}
|
|
545
|
+
} else {
|
|
546
|
+
prev[cur.method] = [cur];
|
|
547
|
+
}
|
|
548
|
+
return prev;
|
|
549
|
+
}, {});
|
|
550
|
+
const strEventHandlerReferences = Object.keys(eventHandlers)
|
|
551
|
+
.map(
|
|
552
|
+
(method) =>
|
|
553
|
+
eventHandlers[method]
|
|
554
|
+
.map((ev) => ` // ${ev.source}`)
|
|
555
|
+
.join(newLine) +
|
|
556
|
+
newLine +
|
|
557
|
+
` RegisterEvent(${getCSharpFunc(method, eventHandlers[method][0].type)});`,
|
|
558
|
+
)
|
|
559
|
+
.join(newLine);
|
|
560
|
+
|
|
561
|
+
const strJobReferences = Array.isArray(source.jobs)
|
|
562
|
+
? source.jobs
|
|
563
|
+
.filter(
|
|
564
|
+
(job) =>
|
|
565
|
+
job !== null &&
|
|
566
|
+
typeof job === "object" &&
|
|
567
|
+
job.action &&
|
|
568
|
+
typeof job.action === "string" &&
|
|
569
|
+
job.action.indexOf("lib:") === 0,
|
|
570
|
+
)
|
|
571
|
+
.map(
|
|
572
|
+
(job) =>
|
|
573
|
+
` RegisterJob<${job.action.substring(4).split(",")[0]}>();`,
|
|
574
|
+
)
|
|
575
|
+
.join(newLine)
|
|
576
|
+
: "";
|
|
577
|
+
|
|
578
|
+
const code = `// This file was generated by Mushroom CLI ${package_json.version} (https://www.npmjs.com/package/mushroom-cli), please do not modify
|
|
579
|
+
|
|
580
|
+
// NOTE: Compatible with Mushroom Server version 0.2.18 or higher (https://www.nuget.org/packages/Mushroom/)
|
|
581
|
+
|
|
582
|
+
// ReSharper disable RedundantUsingDirective
|
|
583
|
+
// ReSharper disable InconsistentNaming
|
|
584
|
+
// ReSharper disable PartialTypeWithSinglePart
|
|
585
|
+
// ReSharper disable UnusedMember.Global
|
|
586
|
+
// ReSharper disable UnusedMember.Local
|
|
587
|
+
// ReSharper disable UnusedParameter.Local
|
|
588
|
+
// ReSharper disable IdentifierTypo
|
|
589
|
+
// ReSharper disable StringLiteralTypo
|
|
590
|
+
// ReSharper disable CommentTypo
|
|
591
|
+
// ReSharper disable EmptyNamespace
|
|
592
|
+
|
|
593
|
+
namespace ${namespace}
|
|
594
|
+
{
|
|
595
|
+
using MongoDB.Driver;
|
|
596
|
+
|
|
597
|
+
public static class DbConnector
|
|
598
|
+
{
|
|
599
|
+
${collectionNames}
|
|
600
|
+
public static IMongoDatabase GetDatabase() => Mushroom.MushroomDaoFactory.GetDbAdapter() as IMongoDatabase;
|
|
601
|
+
|
|
602
|
+
public static async System.Threading.Tasks.Task<T> FindByIdAsync<T, TId>(this IMongoCollection<T> collection, TId id) where T : Mushroom.Models.IResource<TId>
|
|
603
|
+
{
|
|
604
|
+
return await (await collection.FindAsync(Builders<T>.Filter.Eq(doc => doc.Id, id))).FirstOrDefaultAsync();
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
public static async System.Threading.Tasks.Task<T> FindByIdAsync<T, TId>(this IMongoCollection<T> collection, TId id, FindOptions<T> findOptions) where T : Mushroom.Models.IResource<TId>
|
|
608
|
+
{
|
|
609
|
+
return await (await collection.FindAsync(Builders<T>.Filter.Eq(doc => doc.Id, id), findOptions)).FirstOrDefaultAsync();
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
public static async System.Threading.Tasks.Task<T> FindByIdAsync<T, TId>(this IMongoCollection<T> collection, TId id, ProjectionDefinition<T> projection) where T : Mushroom.Models.IResource<TId>
|
|
613
|
+
{
|
|
614
|
+
return await (await collection.FindAsync(Builders<T>.Filter.Eq(doc => doc.Id, id), new FindOptions<T> { Projection = projection })).FirstOrDefaultAsync();
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
public class ResourceNames
|
|
619
|
+
{
|
|
620
|
+
private ResourceNames() { }
|
|
621
|
+
|
|
622
|
+
${resourceNames}
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
public class RoleNames {
|
|
626
|
+
private RoleNames() { }
|
|
627
|
+
|
|
628
|
+
${roleNames}
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
namespace ${namespace}.Resources
|
|
633
|
+
{
|
|
634
|
+
${strClasses}
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
namespace ${namespace}.Enums
|
|
638
|
+
{
|
|
639
|
+
${strEnumClasses}
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
#if DEBUG
|
|
643
|
+
namespace ${namespace}.CodeHelper
|
|
644
|
+
{
|
|
645
|
+
class RefactorHelper
|
|
646
|
+
{
|
|
647
|
+
private RefactorHelper() { }
|
|
648
|
+
private void RegisterCustomMethod(System.Func<Mushroom.ActionArguments, System.Threading.Tasks.Task> fn) { }
|
|
649
|
+
private void RegisterCustomMethod(System.Action<Mushroom.ActionArguments> fn) { }
|
|
650
|
+
private void RegisterCustomViewMethod(System.Func<Mushroom.ViewArguments, System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<object>>> fn) { }
|
|
651
|
+
private void RegisterCustomViewMethod(System.Action<Mushroom.ViewArguments> fn) { }
|
|
652
|
+
private void RegisterCustomVnTextBuilderMethod(System.Func<System.Collections.Generic.IEnumerable<string>, System.Collections.Generic.IEnumerable<string>> fn) { }
|
|
653
|
+
private void RegisterEvent(System.Func<object, Mushroom.ActionArguments, System.Threading.Tasks.Task> fn) { }
|
|
654
|
+
private void RegisterEvent(System.Action<object, Mushroom.ActionArguments> fn) { }
|
|
655
|
+
private void RegisterJob<T>() where T : Mushroom.Job.JobBase { }
|
|
656
|
+
private void Help()
|
|
657
|
+
{
|
|
658
|
+
${strDelegatorReferences}
|
|
659
|
+
${strViewHandlerReferences}
|
|
660
|
+
${strVnTextChannels}
|
|
661
|
+
${strEventHandlerReferences}
|
|
662
|
+
${strJobReferences}
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
#endif
|
|
667
|
+
`;
|
|
668
|
+
|
|
669
|
+
common.ensureFolder(aliasProject.output);
|
|
670
|
+
|
|
671
|
+
fs.writeFile(aliasProject.output, code, (err) => {
|
|
672
|
+
if (err) throw err;
|
|
673
|
+
console.log(
|
|
674
|
+
`Generated CSharp MongoDb Classes for ${projectName}@${alias} to ${aliasProject.output}`,
|
|
675
|
+
);
|
|
676
|
+
});
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
function generateCSharpClassMongoDbToFolder(
|
|
680
|
+
source,
|
|
681
|
+
className,
|
|
682
|
+
fields,
|
|
683
|
+
isRoot,
|
|
684
|
+
description,
|
|
685
|
+
out,
|
|
686
|
+
aliasProject,
|
|
687
|
+
) {
|
|
688
|
+
let content = "";
|
|
689
|
+
const namespace = toCSharpName(source.name);
|
|
690
|
+
if (description) {
|
|
691
|
+
content += ` /// <summary>
|
|
692
|
+
/// ${singleLine(description)}
|
|
693
|
+
/// </summary>
|
|
694
|
+
`;
|
|
695
|
+
}
|
|
696
|
+
let supperClass = "";
|
|
697
|
+
if (isRoot) {
|
|
698
|
+
// thêm cho trường hợp không khai báo id hoặc id.type
|
|
699
|
+
if (!fields.id) {
|
|
700
|
+
fields.id = {
|
|
701
|
+
type: "AutoId",
|
|
702
|
+
};
|
|
703
|
+
}
|
|
704
|
+
if (!fields.id.type) fields.id.type = "AutoId";
|
|
705
|
+
|
|
706
|
+
supperClass =
|
|
707
|
+
" : Mushroom.Models.IResource<" +
|
|
708
|
+
getCSharpTypeFromMushroomType(source, fields.id.type, true) +
|
|
709
|
+
">";
|
|
710
|
+
}
|
|
711
|
+
content += ` public class ${className}${supperClass}
|
|
712
|
+
{
|
|
713
|
+
`;
|
|
714
|
+
for (const fieldName in fields) {
|
|
715
|
+
if (!fields.hasOwnProperty(fieldName)) continue;
|
|
716
|
+
|
|
717
|
+
const field = fields[fieldName];
|
|
718
|
+
let type;
|
|
719
|
+
const propertyName = toCSharpName(fieldName);
|
|
720
|
+
if (field.codeHint && field.codeHint.type && field.codeHint.type.csharp) {
|
|
721
|
+
type = field.codeHint.type.csharp;
|
|
722
|
+
} else if (field.type === "object") {
|
|
723
|
+
generateCSharpClassMongoDbToFolder(
|
|
724
|
+
source,
|
|
725
|
+
className + "_" + propertyName,
|
|
726
|
+
field.fields,
|
|
727
|
+
false,
|
|
728
|
+
null,
|
|
729
|
+
out,
|
|
730
|
+
aliasProject,
|
|
731
|
+
);
|
|
732
|
+
type = className + "_" + propertyName;
|
|
733
|
+
} else if (field.type === "array") {
|
|
734
|
+
if (field.items.type === "object") {
|
|
735
|
+
generateCSharpClassMongoDbToFolder(
|
|
736
|
+
source,
|
|
737
|
+
className + "_" + propertyName,
|
|
738
|
+
field.items.fields,
|
|
739
|
+
false,
|
|
740
|
+
null,
|
|
741
|
+
out,
|
|
742
|
+
aliasProject,
|
|
743
|
+
);
|
|
744
|
+
type = `System.Collections.Generic.List<${className}_${propertyName}>`;
|
|
745
|
+
} else {
|
|
746
|
+
type = `System.Collections.Generic.List<${getCSharpTypeFromMushroomType(source, field.items.type, field.items.validation && field.items.validation.required)}>`;
|
|
747
|
+
}
|
|
748
|
+
} else
|
|
749
|
+
type = getCSharpTypeFromMushroomType(
|
|
750
|
+
source,
|
|
751
|
+
field.type,
|
|
752
|
+
field.validation && field.validation.required,
|
|
753
|
+
);
|
|
754
|
+
content += ` /// <summary>
|
|
755
|
+
/// ${singleLine(field.description)}
|
|
756
|
+
/// </summary>
|
|
757
|
+
`;
|
|
758
|
+
|
|
759
|
+
if (isRoot && fieldName === "id") {
|
|
760
|
+
content += ` [MongoDB.Bson.Serialization.Attributes.BsonId${field.type === "AutoId" && source.idType === "GUID" ? "(IdGenerator = typeof(MongoDB.Bson.Serialization.IdGenerators.GuidGenerator))" : ""}]${newLine}`;
|
|
761
|
+
}
|
|
762
|
+
content += ` [MongoDB.Bson.Serialization.Attributes.BsonElement("${isRoot && fieldName === "id" ? "_id" : fieldName}")]
|
|
763
|
+
[MongoDB.Bson.Serialization.Attributes.BsonIgnoreIfNull]
|
|
764
|
+
[Newtonsoft.Json.JsonProperty(PropertyName = "${fieldName}", NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore${type === "System.DateTime" ? ", DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Ignore" : ""})]
|
|
765
|
+
`;
|
|
766
|
+
if (
|
|
767
|
+
(field.type === "AutoId" || field.type === "IdRef") &&
|
|
768
|
+
source.idType === "ObjectId"
|
|
769
|
+
) {
|
|
770
|
+
content +=
|
|
771
|
+
" [MongoDB.Bson.Serialization.Attributes.BsonRepresentation(MongoDB.Bson.BsonType.ObjectId)]" +
|
|
772
|
+
newLine;
|
|
773
|
+
}
|
|
774
|
+
if (field.type === "AutoId" && source.idType === "GUID") {
|
|
775
|
+
content +=
|
|
776
|
+
" [MongoDB.Bson.Serialization.Attributes.BsonRepresentation(MongoDB.Bson.BsonType.String)]" +
|
|
777
|
+
newLine;
|
|
778
|
+
}
|
|
779
|
+
if (field.type === "datetime") {
|
|
780
|
+
content +=
|
|
781
|
+
" [MongoDB.Bson.Serialization.Attributes.BsonDateTimeOptions(Kind = System.DateTimeKind.Local)]" +
|
|
782
|
+
newLine;
|
|
783
|
+
}
|
|
784
|
+
if (field.type === "array") {
|
|
785
|
+
if (
|
|
786
|
+
(field.items.type === "AutoId" || field.items.type === "IdRef") &&
|
|
787
|
+
source.idType === "ObjectId"
|
|
788
|
+
) {
|
|
789
|
+
content +=
|
|
790
|
+
" [MongoDB.Bson.Serialization.Attributes.BsonRepresentation(MongoDB.Bson.BsonType.ObjectId)]" +
|
|
791
|
+
newLine;
|
|
792
|
+
}
|
|
793
|
+
if (field.items.type === "AutoId" && source.idType === "GUID") {
|
|
794
|
+
content +=
|
|
795
|
+
" [MongoDB.Bson.Serialization.Attributes.BsonRepresentation(MongoDB.Bson.BsonType.String)]" +
|
|
796
|
+
newLine;
|
|
797
|
+
}
|
|
798
|
+
if (field.items.type === "datetime") {
|
|
799
|
+
content +=
|
|
800
|
+
" [MongoDB.Bson.Serialization.Attributes.BsonDateTimeOptions(Kind = System.DateTimeKind.Local)]" +
|
|
801
|
+
newLine;
|
|
802
|
+
}
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
content += ` public ${type} ${propertyName} { get; set; }
|
|
806
|
+
|
|
807
|
+
`;
|
|
808
|
+
|
|
809
|
+
let strEnumClasses = generateEnumClass(
|
|
810
|
+
source,
|
|
811
|
+
{},
|
|
812
|
+
field,
|
|
813
|
+
`${className.toUpperCase()}_${propertyName.toUpperCase()}_ENUM`,
|
|
814
|
+
);
|
|
815
|
+
|
|
816
|
+
const match = strEnumClasses.match(/public class\s+(\w+)/);
|
|
817
|
+
if (!match) continue;
|
|
818
|
+
common.ensureFolder(aliasProject.output + "/Enums", true);
|
|
819
|
+
strEnumClasses = `${header}
|
|
820
|
+
|
|
821
|
+
namespace ${namespace}.Enums
|
|
822
|
+
{
|
|
823
|
+
${strEnumClasses}
|
|
824
|
+
}
|
|
825
|
+
`;
|
|
826
|
+
|
|
827
|
+
fs.writeFileSync(
|
|
828
|
+
aliasProject.output + "/Enums/" + match[1] + ".cs",
|
|
829
|
+
strEnumClasses,
|
|
830
|
+
);
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
content += ` [MongoDB.Bson.Serialization.Attributes.BsonExtraElements]
|
|
834
|
+
[Newtonsoft.Json.JsonIgnore]
|
|
835
|
+
public System.Collections.Generic.Dictionary<string, object> Mushroom_ExtraProperties { get; set; }
|
|
836
|
+
|
|
837
|
+
}
|
|
838
|
+
`;
|
|
839
|
+
|
|
840
|
+
common.ensureFolder(aliasProject.output + "/Resources", true);
|
|
841
|
+
|
|
842
|
+
content = `${header}
|
|
843
|
+
|
|
844
|
+
namespace ${namespace}.Resources
|
|
845
|
+
{
|
|
846
|
+
${content}
|
|
847
|
+
}
|
|
848
|
+
`;
|
|
849
|
+
|
|
850
|
+
out.allClasses = out.allClasses || [];
|
|
851
|
+
|
|
852
|
+
const normalizedName = className.toLowerCase();
|
|
853
|
+
const duplicate = out.allClasses.find(
|
|
854
|
+
(c) => c.normalizedName == normalizedName,
|
|
855
|
+
);
|
|
856
|
+
if (duplicate) {
|
|
857
|
+
fs.appendFileSync(
|
|
858
|
+
aliasProject.output + "/Resources/" + duplicate.className + ".cs",
|
|
859
|
+
content,
|
|
860
|
+
);
|
|
861
|
+
} else {
|
|
862
|
+
out.allClasses.push({
|
|
863
|
+
className,
|
|
864
|
+
normalizedName,
|
|
865
|
+
});
|
|
866
|
+
fs.writeFileSync(
|
|
867
|
+
aliasProject.output + "/Resources/" + className + ".cs",
|
|
868
|
+
content,
|
|
869
|
+
);
|
|
870
|
+
}
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
function genCSharpMongoDbClassesToFolder(
|
|
874
|
+
projectName,
|
|
875
|
+
alias,
|
|
876
|
+
source,
|
|
877
|
+
aliasProject,
|
|
878
|
+
) {
|
|
879
|
+
if (fs.existsSync(aliasProject.output)) {
|
|
880
|
+
try {
|
|
881
|
+
fs.unlinkSync(aliasProject.output); // xóa file nếu có
|
|
882
|
+
} catch (e) {}
|
|
883
|
+
try {
|
|
884
|
+
fs.rmSync(aliasProject.output, { recursive: true, force: true }); // xóa thư mục nếu có
|
|
885
|
+
} catch (e) {}
|
|
886
|
+
}
|
|
887
|
+
fs.mkdirSync(aliasProject.output, { recursive: true, mode: 493 }); // 493 = 755 in octa
|
|
888
|
+
|
|
889
|
+
const entities = common.getEntities(source, aliasProject.allowRoles, true);
|
|
890
|
+
|
|
891
|
+
const namespace = toCSharpName(source.name);
|
|
892
|
+
|
|
893
|
+
let collectionNames = "";
|
|
894
|
+
let resourceNames = "";
|
|
895
|
+
let roleNames = "";
|
|
896
|
+
|
|
897
|
+
source.roles?.forEach((role) => {
|
|
898
|
+
if (!role.name) return;
|
|
899
|
+
roleNames += `
|
|
900
|
+
/// <summary>
|
|
901
|
+
/// ${role.description ?? ""}
|
|
902
|
+
/// </summary>
|
|
903
|
+
public static string ${toCSharpName(role.name)} => "${role.name}";
|
|
904
|
+
`;
|
|
905
|
+
});
|
|
906
|
+
|
|
907
|
+
const out = {};
|
|
908
|
+
for (let entityName in entities) {
|
|
909
|
+
if (!entities.hasOwnProperty(entityName)) continue;
|
|
910
|
+
|
|
911
|
+
const className = toCSharpName(entityName);
|
|
912
|
+
collectionNames += ` public static string ${className}CollectionName => "${entities[entityName].storageName}";
|
|
913
|
+
public static IMongoCollection<Resources.${className}> ${className}Collection => GetDatabase().GetCollection<Resources.${className}>(${className}CollectionName);
|
|
914
|
+
`;
|
|
915
|
+
resourceNames += ` public static string ${className} => "${entityName}";
|
|
916
|
+
`;
|
|
917
|
+
|
|
918
|
+
generateCSharpClassMongoDbToFolder(
|
|
919
|
+
source,
|
|
920
|
+
className,
|
|
921
|
+
entities[entityName].fields,
|
|
922
|
+
true,
|
|
923
|
+
entities[entityName].description,
|
|
924
|
+
out,
|
|
925
|
+
aliasProject,
|
|
926
|
+
);
|
|
927
|
+
|
|
928
|
+
const actions = entities[entityName].actions || {};
|
|
929
|
+
for (let actionName in actions) {
|
|
930
|
+
const action = actions[actionName];
|
|
931
|
+
if (!Array.isArray(action)) continue;
|
|
932
|
+
|
|
933
|
+
action.forEach((a) => {
|
|
934
|
+
if (!a) return;
|
|
935
|
+
if (
|
|
936
|
+
typeof a.delegator === "string" &&
|
|
937
|
+
a.delegator.indexOf("lib:") === 0
|
|
938
|
+
) {
|
|
939
|
+
out.delegators = out.delegators || [];
|
|
940
|
+
const method = a.delegator.substring(4);
|
|
941
|
+
let type =
|
|
942
|
+
a.codeHint && a.codeHint.delegator && a.codeHint.delegator.csharp
|
|
943
|
+
? a.codeHint.delegator.csharp.methodType
|
|
944
|
+
: null;
|
|
945
|
+
if (type !== "non-static") type = "static";
|
|
946
|
+
out.delegators.push({
|
|
947
|
+
method: method,
|
|
948
|
+
source: `entity: ${entityName}, action: ${actionName}, grant: ${a.grant}`,
|
|
949
|
+
type: type,
|
|
950
|
+
});
|
|
951
|
+
}
|
|
952
|
+
|
|
953
|
+
if (!a.events && typeof a.events !== "object") return;
|
|
954
|
+
|
|
955
|
+
for (let eventName in a.events) {
|
|
956
|
+
if (!Array.isArray(a.events[eventName])) return;
|
|
957
|
+
|
|
958
|
+
out.eventHandlers = out.eventHandlers || [];
|
|
959
|
+
a.events[eventName].forEach((ev, i) => {
|
|
960
|
+
if (typeof ev !== "string" || ev.indexOf("lib:") !== 0) return;
|
|
961
|
+
const method = ev.substring(4);
|
|
962
|
+
let type =
|
|
963
|
+
a.codeHint &&
|
|
964
|
+
a.codeHint.events &&
|
|
965
|
+
Array.isArray(a.codeHint.events[eventName]) &&
|
|
966
|
+
a.codeHint.events[eventName][i] &&
|
|
967
|
+
a.codeHint.events[eventName][i].csharp
|
|
968
|
+
? a.codeHint.events[eventName][i].csharp.methodType
|
|
969
|
+
: null;
|
|
970
|
+
if (type !== "non-static") type = "static";
|
|
971
|
+
out.eventHandlers.push({
|
|
972
|
+
method: method,
|
|
973
|
+
source: `entity: ${entityName}, action: ${actionName}, grant: ${a.grant}, event: ${eventName}`,
|
|
974
|
+
type: type,
|
|
975
|
+
});
|
|
976
|
+
});
|
|
977
|
+
}
|
|
978
|
+
});
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
const views = entities[entityName].views || {};
|
|
982
|
+
for (let viewName in views) {
|
|
983
|
+
const view = views[viewName];
|
|
984
|
+
if (!Array.isArray(view)) continue;
|
|
985
|
+
|
|
986
|
+
view.forEach((v) => {
|
|
987
|
+
if (!v) return;
|
|
988
|
+
|
|
989
|
+
if (typeof v.query === "string" && v.query.indexOf("lib:") === 0) {
|
|
990
|
+
out.viewHandlers = out.viewHandlers || [];
|
|
991
|
+
const method = v.query.substring(4);
|
|
992
|
+
let type =
|
|
993
|
+
v.codeHint && v.codeHint.query && v.codeHint.query.csharp
|
|
994
|
+
? v.codeHint.query.csharp.methodType
|
|
995
|
+
: null;
|
|
996
|
+
if (type !== "non-static") type = "static";
|
|
997
|
+
out.viewHandlers.push({
|
|
998
|
+
method: method,
|
|
999
|
+
source: `entity: ${entityName}, view: ${viewName}, grant: ${v.grant}`,
|
|
1000
|
+
type: type,
|
|
1001
|
+
});
|
|
1002
|
+
}
|
|
1003
|
+
});
|
|
1004
|
+
}
|
|
1005
|
+
|
|
1006
|
+
const channels = entities[entityName].features?.vn_text?.channels;
|
|
1007
|
+
if (channels != null) {
|
|
1008
|
+
channels.forEach((channel) => {
|
|
1009
|
+
if (
|
|
1010
|
+
!channel.nativeBuilder ||
|
|
1011
|
+
typeof channel.nativeBuilder !== "string" ||
|
|
1012
|
+
channel.nativeBuilder.indexOf("lib:") !== 0
|
|
1013
|
+
)
|
|
1014
|
+
return;
|
|
1015
|
+
|
|
1016
|
+
out.vnTextChannels = out.vnTextChannels || [];
|
|
1017
|
+
const method = channel.nativeBuilder.substring(4);
|
|
1018
|
+
let type =
|
|
1019
|
+
channel.codeHint &&
|
|
1020
|
+
channel.codeHint.nativeBuilder &&
|
|
1021
|
+
channel.codeHint.nativeBuilder.csharp
|
|
1022
|
+
? channel.codeHint.nativeBuilder.csharp.methodType
|
|
1023
|
+
: null;
|
|
1024
|
+
if (type !== "non-static") type = "static";
|
|
1025
|
+
out.vnTextChannels.push({
|
|
1026
|
+
method: method,
|
|
1027
|
+
source: `entity: ${entityName}, feature: vn_text, channel: ${channel.name}`,
|
|
1028
|
+
type: type,
|
|
1029
|
+
});
|
|
1030
|
+
});
|
|
1031
|
+
}
|
|
1032
|
+
}
|
|
1033
|
+
|
|
1034
|
+
const delegators = (out.delegators || []).reduce((prev, cur) => {
|
|
1035
|
+
if (cur.method in prev) {
|
|
1036
|
+
if (prev[cur.method].indexOf(cur.source) === -1) {
|
|
1037
|
+
prev[cur.method].push(cur);
|
|
1038
|
+
}
|
|
1039
|
+
} else {
|
|
1040
|
+
prev[cur.method] = [cur];
|
|
1041
|
+
}
|
|
1042
|
+
return prev;
|
|
1043
|
+
}, {});
|
|
1044
|
+
const strDelegatorReferences = Object.keys(delegators)
|
|
1045
|
+
.map(
|
|
1046
|
+
(method) =>
|
|
1047
|
+
delegators[method]
|
|
1048
|
+
.map((ev) => ` // ${ev.source}`)
|
|
1049
|
+
.join(newLine) +
|
|
1050
|
+
newLine +
|
|
1051
|
+
` RegisterCustomMethod(${getCSharpFunc(method, delegators[method][0].type)});`,
|
|
1052
|
+
)
|
|
1053
|
+
.join(newLine);
|
|
1054
|
+
|
|
1055
|
+
const viewHandlers = (out.viewHandlers || []).reduce((prev, cur) => {
|
|
1056
|
+
if (cur.method in prev) {
|
|
1057
|
+
if (prev[cur.method].indexOf(cur.source) === -1) {
|
|
1058
|
+
prev[cur.method].push(cur);
|
|
1059
|
+
}
|
|
1060
|
+
} else {
|
|
1061
|
+
prev[cur.method] = [cur];
|
|
1062
|
+
}
|
|
1063
|
+
return prev;
|
|
1064
|
+
}, {});
|
|
1065
|
+
const strViewHandlerReferences = Object.keys(viewHandlers)
|
|
1066
|
+
.map(
|
|
1067
|
+
(method) =>
|
|
1068
|
+
viewHandlers[method]
|
|
1069
|
+
.map((ev) => ` // ${ev.source}`)
|
|
1070
|
+
.join(newLine) +
|
|
1071
|
+
newLine +
|
|
1072
|
+
` RegisterCustomViewMethod(${getCSharpFunc(method, viewHandlers[method][0].type)});`,
|
|
1073
|
+
)
|
|
1074
|
+
.join(newLine);
|
|
1075
|
+
|
|
1076
|
+
const vnTextChannels = (out.vnTextChannels || []).reduce((prev, cur) => {
|
|
1077
|
+
if (cur.method in prev) {
|
|
1078
|
+
if (prev[cur.method].indexOf(cur.source) === -1) {
|
|
1079
|
+
prev[cur.method].push(cur);
|
|
1080
|
+
}
|
|
1081
|
+
} else {
|
|
1082
|
+
prev[cur.method] = [cur];
|
|
1083
|
+
}
|
|
1084
|
+
return prev;
|
|
1085
|
+
}, {});
|
|
1086
|
+
const strVnTextChannels = Object.keys(vnTextChannels)
|
|
1087
|
+
.map(
|
|
1088
|
+
(method) =>
|
|
1089
|
+
vnTextChannels[method]
|
|
1090
|
+
.map((channel) => ` // ${channel.source}`)
|
|
1091
|
+
.join(newLine) +
|
|
1092
|
+
newLine +
|
|
1093
|
+
` RegisterCustomVnTextBuilderMethod(${getCSharpFunc(method, vnTextChannels[method][0].type)});`,
|
|
1094
|
+
)
|
|
1095
|
+
.join(newLine);
|
|
1096
|
+
|
|
1097
|
+
const eventHandlers = (out.eventHandlers || []).reduce((prev, cur) => {
|
|
1098
|
+
if (cur.method in prev) {
|
|
1099
|
+
if (prev[cur.method].indexOf(cur.source) === -1) {
|
|
1100
|
+
prev[cur.method].push(cur);
|
|
1101
|
+
}
|
|
1102
|
+
} else {
|
|
1103
|
+
prev[cur.method] = [cur];
|
|
1104
|
+
}
|
|
1105
|
+
return prev;
|
|
1106
|
+
}, {});
|
|
1107
|
+
const strEventHandlerReferences = Object.keys(eventHandlers)
|
|
1108
|
+
.map(
|
|
1109
|
+
(method) =>
|
|
1110
|
+
eventHandlers[method]
|
|
1111
|
+
.map((ev) => ` // ${ev.source}`)
|
|
1112
|
+
.join(newLine) +
|
|
1113
|
+
newLine +
|
|
1114
|
+
` RegisterEvent(${getCSharpFunc(method, eventHandlers[method][0].type)});`,
|
|
1115
|
+
)
|
|
1116
|
+
.join(newLine);
|
|
1117
|
+
|
|
1118
|
+
const strJobReferences = Array.isArray(source.jobs)
|
|
1119
|
+
? source.jobs
|
|
1120
|
+
.filter(
|
|
1121
|
+
(job) =>
|
|
1122
|
+
job !== null &&
|
|
1123
|
+
typeof job === "object" &&
|
|
1124
|
+
job.action &&
|
|
1125
|
+
typeof job.action === "string" &&
|
|
1126
|
+
job.action.indexOf("lib:") === 0,
|
|
1127
|
+
)
|
|
1128
|
+
.map(
|
|
1129
|
+
(job) =>
|
|
1130
|
+
` RegisterJob<${job.action.substring(4).split(",")[0]}>();`,
|
|
1131
|
+
)
|
|
1132
|
+
.join(newLine)
|
|
1133
|
+
: "";
|
|
1134
|
+
|
|
1135
|
+
const dbConnectorFileContent = `${header}
|
|
1136
|
+
using MongoDB.Driver;
|
|
1137
|
+
|
|
1138
|
+
namespace ${namespace}
|
|
1139
|
+
{
|
|
1140
|
+
public static class DbConnector
|
|
1141
|
+
{
|
|
1142
|
+
${collectionNames}
|
|
1143
|
+
public static IMongoDatabase GetDatabase() => Mushroom.MushroomDaoFactory.GetDbAdapter() as IMongoDatabase;
|
|
1144
|
+
}
|
|
1145
|
+
}
|
|
1146
|
+
`;
|
|
1147
|
+
|
|
1148
|
+
const resourceNamesFileContent = `${header}
|
|
1149
|
+
|
|
1150
|
+
namespace ${namespace}
|
|
1151
|
+
{
|
|
1152
|
+
public class ResourceNames
|
|
1153
|
+
{
|
|
1154
|
+
private ResourceNames() { }
|
|
1155
|
+
|
|
1156
|
+
${resourceNames}
|
|
1157
|
+
}
|
|
1158
|
+
}
|
|
1159
|
+
`;
|
|
1160
|
+
|
|
1161
|
+
const roleNamesFileContent = `${header}
|
|
1162
|
+
|
|
1163
|
+
namespace ${namespace}
|
|
1164
|
+
{
|
|
1165
|
+
public class RoleNames
|
|
1166
|
+
{
|
|
1167
|
+
private RoleNames() { }
|
|
1168
|
+
|
|
1169
|
+
${roleNames}
|
|
1170
|
+
}
|
|
1171
|
+
}
|
|
1172
|
+
`;
|
|
1173
|
+
|
|
1174
|
+
const refactorHelperFileContent = `${header}
|
|
1175
|
+
|
|
1176
|
+
#if DEBUG
|
|
1177
|
+
namespace ${namespace}
|
|
1178
|
+
{
|
|
1179
|
+
class RefactorHelper
|
|
1180
|
+
{
|
|
1181
|
+
private RefactorHelper() { }
|
|
1182
|
+
private void RegisterCustomMethod(System.Func<Mushroom.ActionArguments, System.Threading.Tasks.Task> fn) { }
|
|
1183
|
+
private void RegisterCustomMethod(System.Action<Mushroom.ActionArguments> fn) { }
|
|
1184
|
+
private void RegisterCustomViewMethod(System.Func<Mushroom.ViewArguments, System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<object>>> fn) { }
|
|
1185
|
+
private void RegisterCustomViewMethod(System.Action<Mushroom.ViewArguments> fn) { }
|
|
1186
|
+
private void RegisterCustomVnTextBuilderMethod(System.Func<System.Collections.Generic.IEnumerable<string>, System.Collections.Generic.IEnumerable<string>> fn) { }
|
|
1187
|
+
private void RegisterEvent(System.Func<object, Mushroom.ActionArguments, System.Threading.Tasks.Task> fn) { }
|
|
1188
|
+
private void RegisterEvent(System.Action<object, Mushroom.ActionArguments> fn) { }
|
|
1189
|
+
private void RegisterJob<T>() where T : Mushroom.Job.JobBase { }
|
|
1190
|
+
private void Help()
|
|
1191
|
+
{
|
|
1192
|
+
${strDelegatorReferences}
|
|
1193
|
+
${strViewHandlerReferences}
|
|
1194
|
+
${strVnTextChannels}
|
|
1195
|
+
${strEventHandlerReferences}
|
|
1196
|
+
${strJobReferences}
|
|
1197
|
+
}
|
|
1198
|
+
}
|
|
1199
|
+
}
|
|
1200
|
+
#endif
|
|
1201
|
+
`;
|
|
1202
|
+
|
|
1203
|
+
const infoFileContent = `// Mushroom CLI version: ${package_json.version}${newLine}// Compatible with Mushroom Server version: 0.2.25.4 or higher (https://www.nuget.org/packages/Mushroom/)
|
|
1204
|
+
// For Mushroom Server 0.2.18 to 0.2.25.4: Please remove all FindById methods in DbConnector.cs`;
|
|
1205
|
+
|
|
1206
|
+
fs.writeFileSync(
|
|
1207
|
+
aliasProject.output + "/DbConnector.cs",
|
|
1208
|
+
dbConnectorFileContent,
|
|
1209
|
+
);
|
|
1210
|
+
fs.writeFileSync(
|
|
1211
|
+
aliasProject.output + "/ResourceNames.cs",
|
|
1212
|
+
resourceNamesFileContent,
|
|
1213
|
+
);
|
|
1214
|
+
fs.writeFileSync(aliasProject.output + "/RoleNames.cs", roleNamesFileContent);
|
|
1215
|
+
fs.writeFileSync(
|
|
1216
|
+
aliasProject.output + "/RefactorHelper.cs",
|
|
1217
|
+
refactorHelperFileContent,
|
|
1218
|
+
);
|
|
1219
|
+
fs.writeFileSync(aliasProject.output + "/Info.cs", infoFileContent);
|
|
1220
|
+
|
|
1221
|
+
console.log(
|
|
1222
|
+
`Generated CSharp MongoDb Classes for ${projectName}@${alias} to folder ${aliasProject.output}`,
|
|
1223
|
+
);
|
|
1224
|
+
}
|
|
1225
|
+
//#endregion
|
|
1226
|
+
|
|
1227
|
+
//#region CSharp Driver
|
|
1228
|
+
function generateCSharpClassDriver(
|
|
1229
|
+
source,
|
|
1230
|
+
className,
|
|
1231
|
+
fields,
|
|
1232
|
+
description,
|
|
1233
|
+
out,
|
|
1234
|
+
) {
|
|
1235
|
+
let strClasses = "";
|
|
1236
|
+
let strEnumClasses = "";
|
|
1237
|
+
let content = "";
|
|
1238
|
+
if (description) {
|
|
1239
|
+
content += ` /// <summary>
|
|
1240
|
+
/// ${singleLine(description)}
|
|
1241
|
+
/// </summary>
|
|
1242
|
+
`;
|
|
1243
|
+
}
|
|
1244
|
+
content += ` public partial class ${className}
|
|
1245
|
+
{
|
|
1246
|
+
`;
|
|
1247
|
+
|
|
1248
|
+
for (let fieldName in fields) {
|
|
1249
|
+
if (!fields.hasOwnProperty(fieldName)) continue;
|
|
1250
|
+
|
|
1251
|
+
const field = fields[fieldName];
|
|
1252
|
+
|
|
1253
|
+
const propertyName = toCSharpName(fieldName);
|
|
1254
|
+
let type;
|
|
1255
|
+
if (field.type === "object") {
|
|
1256
|
+
strClasses +=
|
|
1257
|
+
generateCSharpClassDriver(
|
|
1258
|
+
source,
|
|
1259
|
+
className + "_" + propertyName,
|
|
1260
|
+
field.fields,
|
|
1261
|
+
null,
|
|
1262
|
+
out,
|
|
1263
|
+
) + newLine;
|
|
1264
|
+
type = className + "_" + propertyName;
|
|
1265
|
+
} else if (field.type === "array") {
|
|
1266
|
+
if (field.items.type === "object") {
|
|
1267
|
+
strClasses +=
|
|
1268
|
+
generateCSharpClassDriver(
|
|
1269
|
+
source,
|
|
1270
|
+
className + "_" + propertyName,
|
|
1271
|
+
field.items.fields,
|
|
1272
|
+
null,
|
|
1273
|
+
out,
|
|
1274
|
+
) + newLine;
|
|
1275
|
+
type = `System.Collections.Generic.List<${className}_${propertyName}>`;
|
|
1276
|
+
} else {
|
|
1277
|
+
type = `System.Collections.Generic.List<${getCSharpTypeFromMushroomType(source, field.items.type, field.items.validation && field.items.validation.required)}>`;
|
|
1278
|
+
}
|
|
1279
|
+
} else
|
|
1280
|
+
type = getCSharpTypeFromMushroomType(
|
|
1281
|
+
source,
|
|
1282
|
+
field.type,
|
|
1283
|
+
field.validation && field.validation.required,
|
|
1284
|
+
);
|
|
1285
|
+
content += ` /// <summary>
|
|
1286
|
+
/// ${singleLine(field.description)}
|
|
1287
|
+
/// </summary>
|
|
1288
|
+
[Newtonsoft.Json.JsonProperty(PropertyName ="${fieldName}", NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore${type === "System.Datetime" ? ", DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Ignore" : ""})]
|
|
1289
|
+
public ${type} ${propertyName} { get; set; }
|
|
1290
|
+
|
|
1291
|
+
`;
|
|
1292
|
+
strEnumClasses += generateEnumClass(
|
|
1293
|
+
source,
|
|
1294
|
+
out,
|
|
1295
|
+
field,
|
|
1296
|
+
`${className.toUpperCase()}_${propertyName.toUpperCase()}_ENUM`,
|
|
1297
|
+
);
|
|
1298
|
+
}
|
|
1299
|
+
|
|
1300
|
+
if (strEnumClasses) {
|
|
1301
|
+
out.strEnumClasses = out.strEnumClasses || "";
|
|
1302
|
+
|
|
1303
|
+
out.strEnumClasses += strEnumClasses;
|
|
1304
|
+
}
|
|
1305
|
+
|
|
1306
|
+
content += " }" + newLine;
|
|
1307
|
+
return strClasses + newLine + content;
|
|
1308
|
+
}
|
|
1309
|
+
|
|
1310
|
+
function genCSharpDriver(args, projectName, project, alias, source) {
|
|
1311
|
+
const aliasProject = ((project.csharpDriver || {}).alias || {})[alias];
|
|
1312
|
+
|
|
1313
|
+
if (!aliasProject) {
|
|
1314
|
+
throw new Error(
|
|
1315
|
+
`Not found gen c#-driver configuration. Please run 'npx mushroom-cli config ${projectName} gen c#-driver OUTPUT_FILE.cs${alias === "default" ? "" : " alias " + alias}' first`,
|
|
1316
|
+
);
|
|
1317
|
+
}
|
|
1318
|
+
|
|
1319
|
+
const entities = common.getEntities(source, aliasProject.allowRoles);
|
|
1320
|
+
|
|
1321
|
+
const namespace = toCSharpName(source.name);
|
|
1322
|
+
|
|
1323
|
+
let strClasses = "";
|
|
1324
|
+
let strEnumClasses = "";
|
|
1325
|
+
let codeStaticCtor = "";
|
|
1326
|
+
let codeStaticProperties = "";
|
|
1327
|
+
let codeConnectors = "";
|
|
1328
|
+
let codeExtraClasses = "";
|
|
1329
|
+
|
|
1330
|
+
const out = {};
|
|
1331
|
+
|
|
1332
|
+
let accessModifier = aliasProject.accessModifier || "internal";
|
|
1333
|
+
|
|
1334
|
+
for (const entityName in entities) {
|
|
1335
|
+
if (!entities.hasOwnProperty(entityName)) continue;
|
|
1336
|
+
|
|
1337
|
+
const className = toCSharpName(entityName);
|
|
1338
|
+
|
|
1339
|
+
strClasses += generateCSharpClassDriver(
|
|
1340
|
+
source,
|
|
1341
|
+
className,
|
|
1342
|
+
entities[entityName].fields,
|
|
1343
|
+
entities[entityName].description,
|
|
1344
|
+
out,
|
|
1345
|
+
);
|
|
1346
|
+
codeStaticCtor += ` ${className} = new ${className}Connector(client);${newLine}`;
|
|
1347
|
+
codeStaticProperties += ` public static ${className}Connector ${className} { get; }${newLine}${newLine}`;
|
|
1348
|
+
|
|
1349
|
+
const entity = entities[entityName];
|
|
1350
|
+
|
|
1351
|
+
codeConnectors += ` ${accessModifier} partial class ${className}Connector : MushroomDriver.MushroomResourceConnector<${className}>
|
|
1352
|
+
{
|
|
1353
|
+
protected override string Resource { get; } = ${JSON.stringify(entityName)};
|
|
1354
|
+
|
|
1355
|
+
`;
|
|
1356
|
+
|
|
1357
|
+
if (Object.keys(entity.views).length) {
|
|
1358
|
+
codeConnectors += ` public ${className}Connector(MushroomDriver.MushroomClient client) : base(client)
|
|
1359
|
+
{
|
|
1360
|
+
Views = new ${className}Views(Client, () => Resource);
|
|
1361
|
+
}
|
|
1362
|
+
|
|
1363
|
+
`;
|
|
1364
|
+
} else {
|
|
1365
|
+
codeConnectors += ` public ${className}Connector(MushroomDriver.MushroomClient client) : base(client) { }
|
|
1366
|
+
|
|
1367
|
+
`;
|
|
1368
|
+
}
|
|
1369
|
+
|
|
1370
|
+
for (const actionName in entity.actions) {
|
|
1371
|
+
if (!entity.actions.hasOwnProperty(actionName)) continue;
|
|
1372
|
+
|
|
1373
|
+
switch (actionName) {
|
|
1374
|
+
case "findMany":
|
|
1375
|
+
codeConnectors += ` public System.Threading.Tasks.Task<System.Collections.Generic.List<${className}>> List(MushroomDriver.ListArg arg = null)
|
|
1376
|
+
{
|
|
1377
|
+
return InternalList(arg);
|
|
1378
|
+
}
|
|
1379
|
+
|
|
1380
|
+
`;
|
|
1381
|
+
break;
|
|
1382
|
+
case "findById":
|
|
1383
|
+
codeConnectors += ` public System.Threading.Tasks.Task<${className}> FindById(MushroomDriver.FindByIdArg arg)
|
|
1384
|
+
{
|
|
1385
|
+
return InternalFindById(arg);
|
|
1386
|
+
}
|
|
1387
|
+
|
|
1388
|
+
`;
|
|
1389
|
+
break;
|
|
1390
|
+
case "createOne":
|
|
1391
|
+
codeConnectors += ` public System.Threading.Tasks.Task<string> Create(MushroomDriver.CreateArg<${className}> arg)
|
|
1392
|
+
{
|
|
1393
|
+
return InternalCreate(arg);
|
|
1394
|
+
}
|
|
1395
|
+
|
|
1396
|
+
`;
|
|
1397
|
+
break;
|
|
1398
|
+
case "createMany":
|
|
1399
|
+
codeConnectors += ` public System.Threading.Tasks.Task<System.Collections.Generic.List<string>> Create(MushroomDriver.BatchCreateArg<${className}> arg)
|
|
1400
|
+
{
|
|
1401
|
+
return InternalCreate(arg);
|
|
1402
|
+
}
|
|
1403
|
+
|
|
1404
|
+
`;
|
|
1405
|
+
break;
|
|
1406
|
+
case "updateOne":
|
|
1407
|
+
codeConnectors += ` public System.Threading.Tasks.Task<string> Update(MushroomDriver.UpdateArg<${className}> arg)
|
|
1408
|
+
{
|
|
1409
|
+
return InternalUpdate(arg);
|
|
1410
|
+
}
|
|
1411
|
+
|
|
1412
|
+
`;
|
|
1413
|
+
break;
|
|
1414
|
+
case "updateMany":
|
|
1415
|
+
codeConnectors += ` public System.Threading.Tasks.Task<System.Collections.Generic.List<string>> Update(MushroomDriver.BatchUpdateArg<${className}> arg)
|
|
1416
|
+
{
|
|
1417
|
+
return InternalUpdate(arg);
|
|
1418
|
+
}
|
|
1419
|
+
|
|
1420
|
+
`;
|
|
1421
|
+
break;
|
|
1422
|
+
case "updatePartially":
|
|
1423
|
+
codeConnectors += ` public System.Threading.Tasks.Task<string> Update(MushroomDriver.PartialUpdateArg<${className}> arg)
|
|
1424
|
+
{
|
|
1425
|
+
return InternalUpdate(arg);
|
|
1426
|
+
}
|
|
1427
|
+
|
|
1428
|
+
public System.Threading.Tasks.Task<string> Update(MushroomDriver.PartialUpdateArg<System.Collections.Generic.Dictionary<string, object>> arg)
|
|
1429
|
+
{
|
|
1430
|
+
return InternalUpdate(arg);
|
|
1431
|
+
}
|
|
1432
|
+
|
|
1433
|
+
`;
|
|
1434
|
+
break;
|
|
1435
|
+
case "deleteOne":
|
|
1436
|
+
codeConnectors += ` public System.Threading.Tasks.Task<long> Delete(MushroomDriver.DeleteArg arg)
|
|
1437
|
+
{
|
|
1438
|
+
return InternalDelete(arg);
|
|
1439
|
+
}
|
|
1440
|
+
|
|
1441
|
+
`;
|
|
1442
|
+
break;
|
|
1443
|
+
case "deleteMany":
|
|
1444
|
+
codeConnectors += ` public System.Threading.Tasks.Task<long> Delete(MushroomDriver.BatchDeleteArg arg)
|
|
1445
|
+
{
|
|
1446
|
+
return InternalDelete(arg);
|
|
1447
|
+
}
|
|
1448
|
+
|
|
1449
|
+
`;
|
|
1450
|
+
break;
|
|
1451
|
+
default:
|
|
1452
|
+
// if not start with _raw_http_method_ --> break;
|
|
1453
|
+
if (actionName.indexOf("_raw_http_method_")) break;
|
|
1454
|
+
|
|
1455
|
+
const customMethod = toCSharpName(
|
|
1456
|
+
actionName.substring("_raw_http_method_".length),
|
|
1457
|
+
);
|
|
1458
|
+
|
|
1459
|
+
codeConnectors += ` public async System.Threading.Tasks.Task<${className}${customMethod}Result> ${customMethod}(${className}${customMethod}Arg arg)
|
|
1460
|
+
{
|
|
1461
|
+
if (arg == null)
|
|
1462
|
+
throw new System.ArgumentNullException(nameof(arg));
|
|
1463
|
+
|
|
1464
|
+
var request = new MushroomDriver.MushroomRequest
|
|
1465
|
+
{
|
|
1466
|
+
RootApiUrl = Client.RootApiUrl,
|
|
1467
|
+
Url = Client.RootApiUrl + arg.BuildUrl(),
|
|
1468
|
+
Method = arg.Method
|
|
1469
|
+
};
|
|
1470
|
+
var headers = new System.Collections.Generic.Dictionary<string, string>
|
|
1471
|
+
{
|
|
1472
|
+
{"X-Requested-With", "Mushroom Driver " + MushroomDriver.MushroomConnector.Version}
|
|
1473
|
+
};
|
|
1474
|
+
if (arg.UseXHttpMethodOverride)
|
|
1475
|
+
{
|
|
1476
|
+
headers["X-Http-Method-Override"] = request.Method;
|
|
1477
|
+
request.Method = "POST";
|
|
1478
|
+
}
|
|
1479
|
+
request.Headers = headers;
|
|
1480
|
+
request.Data = arg.CustomData ?? arg.Data;
|
|
1481
|
+
var response = await MushroomDriver.MushroomConnector.Execute(request);
|
|
1482
|
+
var result = response.GetResult<${className}${customMethod}Result>();
|
|
1483
|
+
result.MushroomResponseMetadata = response.Metadata;
|
|
1484
|
+
return result;
|
|
1485
|
+
}
|
|
1486
|
+
|
|
1487
|
+
`;
|
|
1488
|
+
|
|
1489
|
+
codeExtraClasses += ` ${accessModifier} partial class ${className}${customMethod}Result
|
|
1490
|
+
{
|
|
1491
|
+
public System.Collections.Generic.Dictionary<string, object> MushroomResponseMetadata { get; set; }
|
|
1492
|
+
}
|
|
1493
|
+
|
|
1494
|
+
${accessModifier} partial class ${className}${customMethod}Body { }
|
|
1495
|
+
|
|
1496
|
+
${accessModifier} partial class ${className}${customMethod}Arg : MushroomDriver.MushroomRequestArg
|
|
1497
|
+
{
|
|
1498
|
+
public override string BuildUrl()
|
|
1499
|
+
{
|
|
1500
|
+
BuildCustomUrl();
|
|
1501
|
+
return CustomUrl;
|
|
1502
|
+
}
|
|
1503
|
+
|
|
1504
|
+
partial void BuildCustomUrl();
|
|
1505
|
+
|
|
1506
|
+
private string OriginUrl => "${entityName}s/${actionName.substring("_raw_http_method_".length)}";
|
|
1507
|
+
|
|
1508
|
+
private string CustomUrl { get; set; } = "${entityName}s/${actionName.substring("_raw_http_method_".length)}";
|
|
1509
|
+
|
|
1510
|
+
public override string Method { get; } = "${actionName.substring("_raw_http_method_".length)}";
|
|
1511
|
+
|
|
1512
|
+
public ${className}${customMethod}Body Data { get; set; }
|
|
1513
|
+
|
|
1514
|
+
public object CustomData { get; set; }
|
|
1515
|
+
}
|
|
1516
|
+
|
|
1517
|
+
`;
|
|
1518
|
+
break;
|
|
1519
|
+
}
|
|
1520
|
+
}
|
|
1521
|
+
|
|
1522
|
+
if (Object.keys(entity.views).length) {
|
|
1523
|
+
codeConnectors += ` public ${className}Views Views { get; }
|
|
1524
|
+
|
|
1525
|
+
`;
|
|
1526
|
+
codeExtraClasses += ` ${accessModifier} partial class ${className}Views : MushroomDriver.MushroomViewConnector
|
|
1527
|
+
{
|
|
1528
|
+
protected System.Func<string> FnResource;
|
|
1529
|
+
|
|
1530
|
+
public ${className}Views(MushroomDriver.MushroomClient client, System.Func<string> fnResource) : base(client)
|
|
1531
|
+
{
|
|
1532
|
+
FnResource = fnResource;
|
|
1533
|
+
}
|
|
1534
|
+
|
|
1535
|
+
`;
|
|
1536
|
+
let viewExtraClass = "";
|
|
1537
|
+
for (let viewName in entity.views) {
|
|
1538
|
+
if (!entity.views.hasOwnProperty(viewName)) continue;
|
|
1539
|
+
|
|
1540
|
+
let viewMethodName = toCSharpName(viewName);
|
|
1541
|
+
|
|
1542
|
+
let hasNoParamView = false;
|
|
1543
|
+
entity.views[viewName].forEach((view) => {
|
|
1544
|
+
let role = view.grant === "*" ? "" : `_${toCSharpName(view.grant)}`;
|
|
1545
|
+
let hasParameter = view.parameters && view.parameters.length;
|
|
1546
|
+
if (hasParameter) {
|
|
1547
|
+
codeExtraClasses += ` public System.Threading.Tasks.Task<System.Collections.Generic.List<${className}View_${viewMethodName}Result>> ${viewMethodName}(${className}View${role}_${viewMethodName}Arg arg)
|
|
1548
|
+
{
|
|
1549
|
+
return InternalExecuteView<${className}View_${viewMethodName}Result>(new MushroomDriver.ViewArg<${className}View${role}_${viewMethodName}Arg> {
|
|
1550
|
+
Parameters = arg,
|
|
1551
|
+
Resource = FnResource?.Invoke(),
|
|
1552
|
+
ViewName = "${viewName}"
|
|
1553
|
+
});
|
|
1554
|
+
}
|
|
1555
|
+
|
|
1556
|
+
`;
|
|
1557
|
+
viewExtraClass += ` ${accessModifier} partial class ${className}View${role}_${viewMethodName}Arg
|
|
1558
|
+
{
|
|
1559
|
+
`;
|
|
1560
|
+
view.parameters.forEach((p) => {
|
|
1561
|
+
let type = getCSharpTypeFromMushroomType(
|
|
1562
|
+
source,
|
|
1563
|
+
p.type,
|
|
1564
|
+
p.validation && p.validation.required,
|
|
1565
|
+
);
|
|
1566
|
+
if (p.isArray) type = `System.Collections.Generic.List<${type}>`;
|
|
1567
|
+
viewExtraClass += ` [Newtonsoft.Json.JsonProperty(PropertyName = "${p.field}")]
|
|
1568
|
+
public ${type} ${toCSharpName(p.field)} { get; set; }
|
|
1569
|
+
|
|
1570
|
+
`;
|
|
1571
|
+
});
|
|
1572
|
+
viewExtraClass += ` }
|
|
1573
|
+
|
|
1574
|
+
`;
|
|
1575
|
+
} else if (!hasNoParamView) {
|
|
1576
|
+
hasNoParamView = true;
|
|
1577
|
+
codeExtraClasses += ` public System.Threading.Tasks.Task<System.Collections.Generic.List<${className}View_${viewMethodName}Result>> ${viewMethodName}()
|
|
1578
|
+
{
|
|
1579
|
+
return InternalExecuteView<${className}View_${viewMethodName}Result>(new MushroomDriver.ViewArg {
|
|
1580
|
+
Resource = FnResource?.Invoke(),
|
|
1581
|
+
ViewName = "${viewName}"
|
|
1582
|
+
});
|
|
1583
|
+
}
|
|
1584
|
+
|
|
1585
|
+
`;
|
|
1586
|
+
}
|
|
1587
|
+
});
|
|
1588
|
+
|
|
1589
|
+
viewExtraClass += ` ${accessModifier} partial class ${className}View_${viewMethodName}Result
|
|
1590
|
+
{
|
|
1591
|
+
|
|
1592
|
+
}
|
|
1593
|
+
|
|
1594
|
+
`;
|
|
1595
|
+
}
|
|
1596
|
+
codeExtraClasses += ` }
|
|
1597
|
+
|
|
1598
|
+
${viewExtraClass}`;
|
|
1599
|
+
}
|
|
1600
|
+
|
|
1601
|
+
codeConnectors += " }" + newLine + newLine;
|
|
1602
|
+
}
|
|
1603
|
+
|
|
1604
|
+
if (out.strEnumClasses) strEnumClasses += out.strEnumClasses;
|
|
1605
|
+
|
|
1606
|
+
const code = `// This file was generated by Mushroom CLI ${package_json.version} (https://www.npmjs.com/package/mushroom-cli), please do not modify
|
|
1607
|
+
|
|
1608
|
+
// Require package: Mushroom.Driver version 1.4.0 or later (https://www.nuget.org/packages/Mushroom.Driver/)
|
|
1609
|
+
|
|
1610
|
+
// ReSharper disable InconsistentNaming
|
|
1611
|
+
// ReSharper disable PartialTypeWithSinglePart
|
|
1612
|
+
// ReSharper disable PartialMethodWithSinglePart
|
|
1613
|
+
// ReSharper disable UnusedMember.Global
|
|
1614
|
+
// ReSharper disable UnusedMember.Local
|
|
1615
|
+
// ReSharper disable IdentifierTypo
|
|
1616
|
+
// ReSharper disable StringLiteralTypo
|
|
1617
|
+
// ReSharper disable CommentTypo
|
|
1618
|
+
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Local
|
|
1619
|
+
|
|
1620
|
+
|
|
1621
|
+
using JsonPropertyAttribute = Newtonsoft.Json.JsonPropertyAttribute;
|
|
1622
|
+
using NullValueHandling = Newtonsoft.Json.NullValueHandling;
|
|
1623
|
+
using ${namespace}.Resources;
|
|
1624
|
+
|
|
1625
|
+
namespace ${namespace}
|
|
1626
|
+
{
|
|
1627
|
+
${accessModifier} partial class API
|
|
1628
|
+
{
|
|
1629
|
+
static API()
|
|
1630
|
+
{
|
|
1631
|
+
CustomizeRootApiUrl();
|
|
1632
|
+
var client = new MushroomDriver.MushroomClient(_rootApiUrl);
|
|
1633
|
+
MushroomClient = client;
|
|
1634
|
+
|
|
1635
|
+
${Array.isArray(aliasProject.features) && aliasProject.features.indexOf("auth") !== -1 ? "Authentication = new MushroomDriver.Auth.Authentication(_rootApiUrl);" : ""}
|
|
1636
|
+
${Array.isArray(aliasProject.features) && aliasProject.features.indexOf("file") !== -1 ? "FileExtension = new MushroomDriver.File.FileExtension(_rootApiUrl);" : ""}
|
|
1637
|
+
|
|
1638
|
+
${codeStaticCtor}
|
|
1639
|
+
}
|
|
1640
|
+
|
|
1641
|
+
static partial void CustomizeRootApiUrl();
|
|
1642
|
+
|
|
1643
|
+
private static string _rootApiUrl = ${JSON.stringify(common.getRootUrl(source))};
|
|
1644
|
+
|
|
1645
|
+
public static MushroomDriver.MushroomClient MushroomClient { get; }
|
|
1646
|
+
|
|
1647
|
+
${Array.isArray(aliasProject.features) && aliasProject.features.indexOf("auth") !== -1 ? "public static MushroomDriver.Auth.Authentication Authentication { get; }" : ""}
|
|
1648
|
+
|
|
1649
|
+
${Array.isArray(aliasProject.features) && aliasProject.features.indexOf("file") !== -1 ? "public static MushroomDriver.File.FileExtension FileExtension { get; }" : ""}
|
|
1650
|
+
|
|
1651
|
+
${codeStaticProperties}
|
|
1652
|
+
}
|
|
1653
|
+
|
|
1654
|
+
/*${accessModifier} partial class API
|
|
1655
|
+
{
|
|
1656
|
+
static partial void CustomizeRootApiUrl()
|
|
1657
|
+
{
|
|
1658
|
+
_rootApiUrl = "your customized root api url";
|
|
1659
|
+
}
|
|
1660
|
+
}*/
|
|
1661
|
+
|
|
1662
|
+
${codeConnectors}${codeExtraClasses}
|
|
1663
|
+
}
|
|
1664
|
+
|
|
1665
|
+
namespace ${namespace}.Resources
|
|
1666
|
+
{
|
|
1667
|
+
${strClasses}
|
|
1668
|
+
}
|
|
1669
|
+
|
|
1670
|
+
namespace ${namespace}.Enums
|
|
1671
|
+
{
|
|
1672
|
+
${strEnumClasses}
|
|
1673
|
+
}`;
|
|
1674
|
+
|
|
1675
|
+
common.ensureFolder(aliasProject.output);
|
|
1676
|
+
|
|
1677
|
+
fs.writeFileSync(aliasProject.output, code);
|
|
1678
|
+
console.log(
|
|
1679
|
+
`Generated CSharp Driver for ${projectName}@${alias} to ${aliasProject.output}`,
|
|
1680
|
+
);
|
|
1681
|
+
}
|
|
1682
|
+
//#endregion
|
|
1683
|
+
|
|
1684
|
+
module.exports = {
|
|
1685
|
+
genCSharpMongoDbClasses: genCSharpMongoDbClasses,
|
|
1686
|
+
genCSharpDriver: genCSharpDriver,
|
|
1687
|
+
};
|