@contractkit/plugin-typescript 0.17.3 → 0.17.4

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.
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">87.5% </span>
26
+ <span class="strong">89.08% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>140/160</span>
28
+ <span class='fraction'>155/174</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">76.76% </span>
33
+ <span class="strong">78.37% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>76/99</span>
35
+ <span class='fraction'>87/111</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">92.85% </span>
40
+ <span class="strong">96.66% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>26/28</span>
42
+ <span class='fraction'>29/30</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">91.66% </span>
47
+ <span class="strong">92.3% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>121/132</span>
49
+ <span class='fraction'>132/143</span>
50
50
  </div>
51
51
 
52
52
 
@@ -335,7 +335,39 @@
335
335
  <a name='L270'></a><a href='#L270'>270</a>
336
336
  <a name='L271'></a><a href='#L271'>271</a>
337
337
  <a name='L272'></a><a href='#L272'>272</a>
338
- <a name='L273'></a><a href='#L273'>273</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
339
371
  <span class="cline-any cline-neutral">&nbsp;</span>
340
372
  <span class="cline-any cline-neutral">&nbsp;</span>
341
373
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -358,32 +390,32 @@
358
390
  <span class="cline-any cline-neutral">&nbsp;</span>
359
391
  <span class="cline-any cline-neutral">&nbsp;</span>
360
392
  <span class="cline-any cline-neutral">&nbsp;</span>
361
- <span class="cline-any cline-yes">60x</span>
362
- <span class="cline-any cline-yes">60x</span>
393
+ <span class="cline-any cline-yes">63x</span>
394
+ <span class="cline-any cline-yes">63x</span>
363
395
  <span class="cline-any cline-neutral">&nbsp;</span>
364
396
  <span class="cline-any cline-neutral">&nbsp;</span>
365
- <span class="cline-any cline-yes">60x</span>
366
- <span class="cline-any cline-yes">60x</span>
367
- <span class="cline-any cline-yes">60x</span>
397
+ <span class="cline-any cline-yes">63x</span>
398
+ <span class="cline-any cline-yes">63x</span>
399
+ <span class="cline-any cline-yes">63x</span>
368
400
  <span class="cline-any cline-neutral">&nbsp;</span>
369
401
  <span class="cline-any cline-neutral">&nbsp;</span>
370
- <span class="cline-any cline-yes">60x</span>
371
- <span class="cline-any cline-yes">60x</span>
372
- <span class="cline-any cline-yes">60x</span>
402
+ <span class="cline-any cline-yes">63x</span>
403
+ <span class="cline-any cline-yes">63x</span>
404
+ <span class="cline-any cline-yes">63x</span>
373
405
  <span class="cline-any cline-neutral">&nbsp;</span>
374
406
  <span class="cline-any cline-neutral">&nbsp;</span>
375
- <span class="cline-any cline-yes">60x</span>
376
- <span class="cline-any cline-yes">60x</span>
377
- <span class="cline-any cline-yes">60x</span>
407
+ <span class="cline-any cline-yes">63x</span>
408
+ <span class="cline-any cline-yes">63x</span>
409
+ <span class="cline-any cline-yes">63x</span>
378
410
  <span class="cline-any cline-neutral">&nbsp;</span>
379
411
  <span class="cline-any cline-neutral">&nbsp;</span>
380
- <span class="cline-any cline-yes">60x</span>
412
+ <span class="cline-any cline-yes">63x</span>
381
413
  <span class="cline-any cline-yes">19x</span>
382
414
  <span class="cline-any cline-yes">19x</span>
383
415
  <span class="cline-any cline-neutral">&nbsp;</span>
384
- <span class="cline-any cline-yes">60x</span>
416
+ <span class="cline-any cline-yes">63x</span>
385
417
  <span class="cline-any cline-neutral">&nbsp;</span>
386
- <span class="cline-any cline-yes">60x</span>
418
+ <span class="cline-any cline-yes">63x</span>
387
419
  <span class="cline-any cline-no">&nbsp;</span>
388
420
  <span class="cline-any cline-no">&nbsp;</span>
389
421
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -392,49 +424,81 @@
392
424
  <span class="cline-any cline-no">&nbsp;</span>
393
425
  <span class="cline-any cline-neutral">&nbsp;</span>
394
426
  <span class="cline-any cline-neutral">&nbsp;</span>
395
- <span class="cline-any cline-yes">60x</span>
396
- <span class="cline-any cline-yes">71x</span>
397
- <span class="cline-any cline-yes">71x</span>
427
+ <span class="cline-any cline-yes">78x</span>
398
428
  <span class="cline-any cline-neutral">&nbsp;</span>
429
+ <span class="cline-any cline-yes">63x</span>
430
+ <span class="cline-any cline-yes">78x</span>
431
+ <span class="cline-any cline-yes">78x</span>
399
432
  <span class="cline-any cline-neutral">&nbsp;</span>
400
- <span class="cline-any cline-yes">60x</span>
401
433
  <span class="cline-any cline-neutral">&nbsp;</span>
434
+ <span class="cline-any cline-yes">63x</span>
402
435
  <span class="cline-any cline-neutral">&nbsp;</span>
403
436
  <span class="cline-any cline-neutral">&nbsp;</span>
404
437
  <span class="cline-any cline-neutral">&nbsp;</span>
405
438
  <span class="cline-any cline-neutral">&nbsp;</span>
406
439
  <span class="cline-any cline-neutral">&nbsp;</span>
407
- <span class="cline-any cline-yes">71x</span>
440
+ <span class="cline-any cline-neutral">&nbsp;</span>
441
+ <span class="cline-any cline-neutral">&nbsp;</span>
442
+ <span class="cline-any cline-neutral">&nbsp;</span>
443
+ <span class="cline-any cline-neutral">&nbsp;</span>
444
+ <span class="cline-any cline-neutral">&nbsp;</span>
445
+ <span class="cline-any cline-neutral">&nbsp;</span>
446
+ <span class="cline-any cline-neutral">&nbsp;</span>
447
+ <span class="cline-any cline-yes">78x</span>
408
448
  <span class="cline-any cline-yes">5x</span>
409
449
  <span class="cline-any cline-neutral">&nbsp;</span>
410
450
  <span class="cline-any cline-neutral">&nbsp;</span>
411
451
  <span class="cline-any cline-neutral">&nbsp;</span>
412
452
  <span class="cline-any cline-neutral">&nbsp;</span>
413
- <span class="cline-any cline-yes">88x</span>
453
+ <span class="cline-any cline-yes">97x</span>
414
454
  <span class="cline-any cline-neutral">&nbsp;</span>
415
- <span class="cline-any cline-yes">71x</span>
455
+ <span class="cline-any cline-yes">78x</span>
416
456
  <span class="cline-any cline-neutral">&nbsp;</span>
417
- <span class="cline-any cline-yes">71x</span>
457
+ <span class="cline-any cline-yes">78x</span>
418
458
  <span class="cline-any cline-yes">3x</span>
419
459
  <span class="cline-any cline-yes">3x</span>
420
460
  <span class="cline-any cline-neutral">&nbsp;</span>
421
- <span class="cline-any cline-yes">66x</span>
461
+ <span class="cline-any cline-yes">73x</span>
462
+ <span class="cline-any cline-neutral">&nbsp;</span>
463
+ <span class="cline-any cline-neutral">&nbsp;</span>
464
+ <span class="cline-any cline-neutral">&nbsp;</span>
465
+ <span class="cline-any cline-neutral">&nbsp;</span>
466
+ <span class="cline-any cline-neutral">&nbsp;</span>
467
+ <span class="cline-any cline-neutral">&nbsp;</span>
468
+ <span class="cline-any cline-neutral">&nbsp;</span>
469
+ <span class="cline-any cline-yes">73x</span>
470
+ <span class="cline-any cline-yes">73x</span>
471
+ <span class="cline-any cline-yes">17x</span>
472
+ <span class="cline-any cline-yes">17x</span>
473
+ <span class="cline-any cline-yes">8x</span>
474
+ <span class="cline-any cline-yes">6x</span>
475
+ <span class="cline-any cline-neutral">&nbsp;</span>
476
+ <span class="cline-any cline-yes">73x</span>
477
+ <span class="cline-any cline-yes">73x</span>
478
+ <span class="cline-any cline-neutral">&nbsp;</span>
422
479
  <span class="cline-any cline-neutral">&nbsp;</span>
423
480
  <span class="cline-any cline-neutral">&nbsp;</span>
424
481
  <span class="cline-any cline-neutral">&nbsp;</span>
425
- <span class="cline-any cline-yes">71x</span>
426
- <span class="cline-any cline-yes">71x</span>
427
- <span class="cline-any cline-yes">71x</span>
482
+ <span class="cline-any cline-neutral">&nbsp;</span>
483
+ <span class="cline-any cline-neutral">&nbsp;</span>
484
+ <span class="cline-any cline-yes">73x</span>
485
+ <span class="cline-any cline-yes">109x</span>
486
+ <span class="cline-any cline-neutral">&nbsp;</span>
487
+ <span class="cline-any cline-neutral">&nbsp;</span>
488
+ <span class="cline-any cline-neutral">&nbsp;</span>
489
+ <span class="cline-any cline-yes">78x</span>
490
+ <span class="cline-any cline-yes">78x</span>
491
+ <span class="cline-any cline-yes">78x</span>
428
492
  <span class="cline-any cline-no">&nbsp;</span>
429
493
  <span class="cline-any cline-neutral">&nbsp;</span>
430
- <span class="cline-any cline-yes">71x</span>
494
+ <span class="cline-any cline-yes">78x</span>
431
495
  <span class="cline-any cline-yes">1x</span>
432
496
  <span class="cline-any cline-neutral">&nbsp;</span>
433
497
  <span class="cline-any cline-neutral">&nbsp;</span>
434
- <span class="cline-any cline-yes">71x</span>
435
- <span class="cline-any cline-yes">71x</span>
436
- <span class="cline-any cline-yes">71x</span>
437
- <span class="cline-any cline-yes">71x</span>
498
+ <span class="cline-any cline-yes">78x</span>
499
+ <span class="cline-any cline-yes">78x</span>
500
+ <span class="cline-any cline-yes">78x</span>
501
+ <span class="cline-any cline-yes">78x</span>
438
502
  <span class="cline-any cline-neutral">&nbsp;</span>
439
503
  <span class="cline-any cline-neutral">&nbsp;</span>
440
504
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -456,86 +520,86 @@
456
520
  <span class="cline-any cline-neutral">&nbsp;</span>
457
521
  <span class="cline-any cline-neutral">&nbsp;</span>
458
522
  <span class="cline-any cline-neutral">&nbsp;</span>
459
- <span class="cline-any cline-yes">82x</span>
460
- <span class="cline-any cline-yes">11x</span>
461
- <span class="cline-any cline-yes">3x</span>
462
- <span class="cline-any cline-yes">3x</span>
463
- <span class="cline-any cline-yes">2x</span>
523
+ <span class="cline-any cline-yes">91x</span>
524
+ <span class="cline-any cline-yes">16x</span>
525
+ <span class="cline-any cline-yes">7x</span>
526
+ <span class="cline-any cline-yes">7x</span>
527
+ <span class="cline-any cline-yes">6x</span>
464
528
  <span class="cline-any cline-neutral">&nbsp;</span>
465
529
  <span class="cline-any cline-neutral">&nbsp;</span>
466
530
  <span class="cline-any cline-neutral">&nbsp;</span>
467
- <span class="cline-any cline-yes">50x</span>
468
- <span class="cline-any cline-yes">50x</span>
531
+ <span class="cline-any cline-yes">55x</span>
532
+ <span class="cline-any cline-yes">55x</span>
469
533
  <span class="cline-any cline-neutral">&nbsp;</span>
470
- <span class="cline-any cline-yes">50x</span>
471
- <span class="cline-any cline-yes">71x</span>
472
- <span class="cline-any cline-yes">50x</span>
534
+ <span class="cline-any cline-yes">55x</span>
535
+ <span class="cline-any cline-yes">55x</span>
536
+ <span class="cline-any cline-yes">55x</span>
473
537
  <span class="cline-any cline-neutral">&nbsp;</span>
474
- <span class="cline-any cline-yes">50x</span>
475
- <span class="cline-any cline-yes">71x</span>
538
+ <span class="cline-any cline-yes">55x</span>
539
+ <span class="cline-any cline-yes">77x</span>
476
540
  <span class="cline-any cline-neutral">&nbsp;</span>
477
541
  <span class="cline-any cline-neutral">&nbsp;</span>
478
- <span class="cline-any cline-yes">50x</span>
479
- <span class="cline-any cline-yes">50x</span>
542
+ <span class="cline-any cline-yes">55x</span>
543
+ <span class="cline-any cline-yes">55x</span>
480
544
  <span class="cline-any cline-neutral">&nbsp;</span>
481
545
  <span class="cline-any cline-neutral">&nbsp;</span>
482
546
  <span class="cline-any cline-neutral">&nbsp;</span>
483
- <span class="cline-any cline-yes">16x</span>
484
- <span class="cline-any cline-yes">16x</span>
547
+ <span class="cline-any cline-yes">18x</span>
548
+ <span class="cline-any cline-yes">18x</span>
485
549
  <span class="cline-any cline-neutral">&nbsp;</span>
486
- <span class="cline-any cline-yes">16x</span>
487
- <span class="cline-any cline-yes">28x</span>
550
+ <span class="cline-any cline-yes">18x</span>
551
+ <span class="cline-any cline-yes">18x</span>
488
552
  <span class="cline-any cline-neutral">&nbsp;</span>
489
553
  <span class="cline-any cline-neutral">&nbsp;</span>
490
- <span class="cline-any cline-yes">28x</span>
491
- <span class="cline-any cline-yes">16x</span>
492
- <span class="cline-any cline-yes">16x</span>
493
- <span class="cline-any cline-yes">25x</span>
554
+ <span class="cline-any cline-yes">32x</span>
555
+ <span class="cline-any cline-yes">18x</span>
556
+ <span class="cline-any cline-yes">18x</span>
557
+ <span class="cline-any cline-yes">29x</span>
494
558
  <span class="cline-any cline-neutral">&nbsp;</span>
495
- <span class="cline-any cline-yes">16x</span>
496
- <span class="cline-any cline-yes">16x</span>
559
+ <span class="cline-any cline-yes">18x</span>
560
+ <span class="cline-any cline-yes">18x</span>
497
561
  <span class="cline-any cline-neutral">&nbsp;</span>
498
562
  <span class="cline-any cline-neutral">&nbsp;</span>
499
563
  <span class="cline-any cline-neutral">&nbsp;</span>
500
- <span class="cline-any cline-yes">28x</span>
501
- <span class="cline-any cline-yes">16x</span>
502
- <span class="cline-any cline-yes">16x</span>
503
- <span class="cline-any cline-yes">16x</span>
564
+ <span class="cline-any cline-yes">32x</span>
565
+ <span class="cline-any cline-yes">18x</span>
504
566
  <span class="cline-any cline-yes">18x</span>
567
+ <span class="cline-any cline-yes">18x</span>
568
+ <span class="cline-any cline-yes">21x</span>
505
569
  <span class="cline-any cline-neutral">&nbsp;</span>
506
- <span class="cline-any cline-yes">16x</span>
570
+ <span class="cline-any cline-yes">18x</span>
507
571
  <span class="cline-any cline-neutral">&nbsp;</span>
508
- <span class="cline-any cline-yes">16x</span>
572
+ <span class="cline-any cline-yes">18x</span>
509
573
  <span class="cline-any cline-neutral">&nbsp;</span>
510
574
  <span class="cline-any cline-neutral">&nbsp;</span>
511
575
  <span class="cline-any cline-neutral">&nbsp;</span>
512
576
  <span class="cline-any cline-neutral">&nbsp;</span>
513
577
  <span class="cline-any cline-neutral">&nbsp;</span>
514
- <span class="cline-any cline-yes">96x</span>
515
- <span class="cline-any cline-yes">96x</span>
516
- <span class="cline-any cline-yes">96x</span>
517
- <span class="cline-any cline-yes">96x</span>
518
- <span class="cline-any cline-yes">96x</span>
519
- <span class="cline-any cline-yes">96x</span>
520
- <span class="cline-any cline-yes">96x</span>
521
- <span class="cline-any cline-yes">96x</span>
578
+ <span class="cline-any cline-yes">106x</span>
579
+ <span class="cline-any cline-yes">106x</span>
580
+ <span class="cline-any cline-yes">106x</span>
581
+ <span class="cline-any cline-yes">106x</span>
582
+ <span class="cline-any cline-yes">106x</span>
583
+ <span class="cline-any cline-yes">106x</span>
584
+ <span class="cline-any cline-yes">106x</span>
585
+ <span class="cline-any cline-yes">106x</span>
522
586
  <span class="cline-any cline-no">&nbsp;</span>
523
587
  <span class="cline-any cline-neutral">&nbsp;</span>
524
- <span class="cline-any cline-yes">96x</span>
588
+ <span class="cline-any cline-yes">106x</span>
525
589
  <span class="cline-any cline-neutral">&nbsp;</span>
526
590
  <span class="cline-any cline-neutral">&nbsp;</span>
527
591
  <span class="cline-any cline-neutral">&nbsp;</span>
528
- <span class="cline-any cline-yes">18x</span>
529
- <span class="cline-any cline-yes">18x</span>
530
- <span class="cline-any cline-yes">18x</span>
531
- <span class="cline-any cline-yes">18x</span>
532
- <span class="cline-any cline-yes">18x</span>
533
- <span class="cline-any cline-yes">18x</span>
534
- <span class="cline-any cline-yes">18x</span>
535
- <span class="cline-any cline-yes">18x</span>
592
+ <span class="cline-any cline-yes">21x</span>
593
+ <span class="cline-any cline-yes">21x</span>
594
+ <span class="cline-any cline-yes">21x</span>
595
+ <span class="cline-any cline-yes">21x</span>
596
+ <span class="cline-any cline-yes">21x</span>
597
+ <span class="cline-any cline-yes">21x</span>
598
+ <span class="cline-any cline-yes">21x</span>
599
+ <span class="cline-any cline-yes">21x</span>
536
600
  <span class="cline-any cline-no">&nbsp;</span>
537
601
  <span class="cline-any cline-neutral">&nbsp;</span>
538
- <span class="cline-any cline-yes">18x</span>
602
+ <span class="cline-any cline-yes">21x</span>
539
603
  <span class="cline-any cline-neutral">&nbsp;</span>
540
604
  <span class="cline-any cline-neutral">&nbsp;</span>
541
605
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -663,9 +727,11 @@ export function generatePlainTypes(root: ContractRootNode, context?: ContractCod
663
727
  }
664
728
  <span class="cstat-no" title="statement not covered" > lines.push('');</span>
665
729
  }
730
+ &nbsp;
731
+ const modelMap = new Map(root.models.map(m =&gt; [m.name, m]));
666
732
  &nbsp;
667
733
  for (const model of topoSortModels(root.models)) {
668
- lines.push(...generateModel(model, context?.currentOutPath, allModelsWithInput, allModelsWithOutput));
734
+ lines.push(...generateModel(model, context?.currentOutPath, allModelsWithInput, allModelsWithOutput, modelMap));
669
735
  lines.push('');
670
736
  }
671
737
  &nbsp;
@@ -674,7 +740,13 @@ export function generatePlainTypes(root: ContractRootNode, context?: ContractCod
674
740
  &nbsp;
675
741
  // ─── Model ─────────────────────────────────────────────────────────────────
676
742
  &nbsp;
677
- function generateModel(model: ModelNode, outPath?: string, modelsWithInput?: Set&lt;string&gt;, modelsWithOutput?: Set&lt;string&gt;): string[] {
743
+ function generateModel(
744
+ model: ModelNode,
745
+ outPath?: string,
746
+ modelsWithInput?: Set&lt;string&gt;,
747
+ modelsWithOutput?: Set&lt;string&gt;,
748
+ modelMap?: Map&lt;string, ModelNode&gt;,
749
+ ): string[] {
678
750
  // Type alias: Name : typeExpression
679
751
  if (model.type) {
680
752
  return generateTypeAlias(model, outPath, modelsWithInput, modelsWithOutput);
@@ -684,7 +756,7 @@ function generateModel(model: ModelNode, outPath?: string, modelsWithInput?: Set
684
756
  // transitively references models that have Input variants (captured in modelsWithInput).
685
757
  const needsInputSplit = model.fields.some(f =&gt; f.visibility !== 'normal') || (modelsWithInput?.has(model.name) ?? <span class="branch-2 cbranch-no" title="branch not covered" >false</span>);
686
758
  &nbsp;
687
- const lines = needsInputSplit ? generateVisibilityModel(model, outPath, modelsWithInput) : generateSimpleModel(model, outPath);
759
+ const lines = needsInputSplit ? generateVisibilityModel(model, outPath, modelsWithInput, modelMap) : generateSimpleModel(model, outPath, modelMap);
688
760
  &nbsp;
689
761
  if (modelsWithOutput?.has(model.name)) {
690
762
  lines.push('');
@@ -693,6 +765,30 @@ function generateModel(model: ModelNode, outPath?: string, modelsWithInput?: Set
693
765
  return lines;
694
766
  }
695
767
  &nbsp;
768
+ /** Recursively collect every field name defined on `bases` and their ancestors. Used to detect
769
+ * fields that the child re-declares without an explicit `override` keyword — those still need an
770
+ * `Omit&lt;Base, …&gt;` wrap, otherwise the child's narrower/incompatible declaration collides with the
771
+ * inherited one. */
772
+ function collectInheritedFieldNames(bases: string[], modelMap: Map&lt;string, ModelNode&gt;): Set&lt;string&gt; {
773
+ const result = new Set&lt;string&gt;();
774
+ const visit = (name: string): void =&gt; {
775
+ const m = modelMap.get(name);
776
+ if (!m || m.type) return;
777
+ for (const f of m.fields) result.add(f.name);
778
+ for (const b of m.bases ?? []) visit(b);
779
+ };
780
+ for (const b of bases) visit(b);
781
+ return result;
782
+ }
783
+ &nbsp;
784
+ /** Names of fields the child declaration overrides — explicit `override` plus any field whose
785
+ * name shadows an inherited one. The latter catches single-base redeclarations that omit the
786
+ * `override` keyword (e.g. narrowing `kind: BusinessRoleKind` → `kind: 'employee'`). */
787
+ function computeOverrideNames(model: ModelNode, modelMap?: Map&lt;string, ModelNode&gt;): string[] {
788
+ const inherited = modelMap ? collectInheritedFieldNames(model.bases ?? [], modelMap) : <span class="branch-1 cbranch-no" title="branch not covered" >new Set&lt;string&gt;();</span>
789
+ return model.fields.filter(f =&gt; f.override || inherited.has(f.name)).map(f =&gt; f.name);
790
+ }
791
+ &nbsp;
696
792
  function generateComments(model: ModelNode, outPath?: string): string[] {
697
793
  const lines: string[] = [];
698
794
  lines.push('/**');
@@ -722,11 +818,11 @@ function generateTypeAlias(model: ModelNode, outPath?: string, modelsWithInput?:
722
818
  return lines;
723
819
  }
724
820
  &nbsp;
725
- /** Build the `extends` clause for a multi-base model.
726
- * Override-marked field names are wrapped in `Omit&lt;Base, 'name1' | 'name2'&gt;` per base so the
727
- * subclass can legally redeclare them with new types. TypeScript's `Omit&lt;T, K extends keyof any&gt;`
728
- * tolerates omit keys that don't appear on the base, so we omit unconditionally — no need to know
729
- * each base's actual field set. */
821
+ /** Build the `extends` clause for a model.
822
+ * Each entry in `overrideNames` is wrapped in `Omit&lt;Base, 'name1' | 'name2'&gt;` per base so the
823
+ * subclass can legally redeclare those fields with new (possibly incompatible) types.
824
+ * TypeScript's `Omit&lt;T, K extends keyof any&gt;` tolerates omit keys that don't appear on the base,
825
+ * so we apply the same omit list to every base without per-base field-set lookup. */
730
826
  function buildExtendsClause(bases: string[], overrideNames: string[], baseNameResolver: (b: string) =&gt; string): string {
731
827
  if (bases.length === 0) return '';
732
828
  if (overrideNames.length === 0) return ` extends ${bases.map(baseNameResolver).join(', ')}`;
@@ -735,12 +831,12 @@ function buildExtendsClause(bases: string[], overrideNames: string[], baseNameRe
735
831
  return ` extends ${wrapped.join(', ')}`;
736
832
  }
737
833
  &nbsp;
738
- function generateSimpleModel(model: ModelNode, outPath?: string): string[] {
834
+ function generateSimpleModel(model: ModelNode, outPath?: string, modelMap?: Map&lt;string, ModelNode&gt;): string[] {
739
835
  const lines: string[] = [];
740
836
  lines.push(...generateComments(model, outPath));
741
837
  &nbsp;
742
838
  const bases = model.bases ?? [];
743
- const overrideNames = model.fields.filter(f =&gt; f.override).map(f =&gt; f.name);
839
+ const overrideNames = computeOverrideNames(model, modelMap);
744
840
  lines.push(`export interface ${model.name}${buildExtendsClause(bases, overrideNames, b =&gt; b)} {`);
745
841
  &nbsp;
746
842
  for (const field of model.fields) {
@@ -751,12 +847,12 @@ function generateSimpleModel(model: ModelNode, outPath?: string): string[] {
751
847
  return lines;
752
848
  }
753
849
  &nbsp;
754
- function generateVisibilityModel(model: ModelNode, outPath?: string, modelsWithInput?: Set&lt;string&gt;): string[] {
850
+ function generateVisibilityModel(model: ModelNode, outPath?: string, modelsWithInput?: Set&lt;string&gt;, modelMap?: Map&lt;string, ModelNode&gt;): string[] {
755
851
  const lines: string[] = [];
756
852
  lines.push(...generateComments(model, outPath));
757
853
  &nbsp;
758
854
  const bases = model.bases ?? [];
759
- const overrideNames = model.fields.filter(f =&gt; f.override).map(<span class="fstat-no" title="function not covered" >f =&gt; <span class="cstat-no" title="statement not covered" >f</span>.name)</span>;
855
+ const overrideNames = computeOverrideNames(model, modelMap);
760
856
  &nbsp;
761
857
  // Read type — omit writeonly fields
762
858
  const readFields = model.fields.filter(f =&gt; f.visibility !== 'writeonly');
@@ -886,7 +982,7 @@ function renderOutputField(field: FieldNode, outputCase: 'camel' | 'snake' | 'pa
886
982
  <div class='footer quiet pad2 space-top1 center small'>
887
983
  Code coverage generated by
888
984
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
889
- at 2026-05-05T15:36:48.642Z
985
+ at 2026-05-05T15:55:20.433Z
890
986
  </div>
891
987
  <script src="../prettify.js"></script>
892
988
  <script>
@@ -2782,7 +2782,7 @@ export function generateSdkAggregator(clients: SdkClientInfo[], sdkOptionsImport
2782
2782
  <div class='footer quiet pad2 space-top1 center small'>
2783
2783
  Code coverage generated by
2784
2784
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2785
- at 2026-05-05T15:36:48.642Z
2785
+ at 2026-05-05T15:55:20.433Z
2786
2786
  </div>
2787
2787
  <script src="../prettify.js"></script>
2788
2788
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">77.35% </span>
26
+ <span class="strong">77.54% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>1670/2159</span>
28
+ <span class='fraction'>1685/2173</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">73.93% </span>
33
+ <span class="strong">74.08% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>1078/1458</span>
35
+ <span class='fraction'>1089/1470</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">81.51% </span>
40
+ <span class="strong">81.92% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>269/330</span>
42
+ <span class='fraction'>272/332</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">79.28% </span>
47
+ <span class="strong">79.4% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>1454/1834</span>
49
+ <span class='fraction'>1465/1845</span>
50
50
  </div>
51
51
 
52
52
 
@@ -110,17 +110,17 @@
110
110
 
111
111
  <tr>
112
112
  <td class="file high" data-value="codegen-plain-types.ts"><a href="codegen-plain-types.ts.html">codegen-plain-types.ts</a></td>
113
- <td data-value="87.5" class="pic high">
114
- <div class="chart"><div class="cover-fill" style="width: 87%"></div><div class="cover-empty" style="width: 13%"></div></div>
113
+ <td data-value="89.08" class="pic high">
114
+ <div class="chart"><div class="cover-fill" style="width: 89%"></div><div class="cover-empty" style="width: 11%"></div></div>
115
115
  </td>
116
- <td data-value="87.5" class="pct high">87.5%</td>
117
- <td data-value="160" class="abs high">140/160</td>
118
- <td data-value="76.76" class="pct medium">76.76%</td>
119
- <td data-value="99" class="abs medium">76/99</td>
120
- <td data-value="92.85" class="pct high">92.85%</td>
121
- <td data-value="28" class="abs high">26/28</td>
122
- <td data-value="91.66" class="pct high">91.66%</td>
123
- <td data-value="132" class="abs high">121/132</td>
116
+ <td data-value="89.08" class="pct high">89.08%</td>
117
+ <td data-value="174" class="abs high">155/174</td>
118
+ <td data-value="78.37" class="pct medium">78.37%</td>
119
+ <td data-value="111" class="abs medium">87/111</td>
120
+ <td data-value="96.66" class="pct high">96.66%</td>
121
+ <td data-value="30" class="abs high">29/30</td>
122
+ <td data-value="92.3" class="pct high">92.3%</td>
123
+ <td data-value="143" class="abs high">132/143</td>
124
124
  </tr>
125
125
 
126
126
  <tr>
@@ -191,7 +191,7 @@
191
191
  <div class='footer quiet pad2 space-top1 center small'>
192
192
  Code coverage generated by
193
193
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
194
- at 2026-05-05T15:36:48.642Z
194
+ at 2026-05-05T15:55:20.433Z
195
195
  </div>
196
196
  <script src="../prettify.js"></script>
197
197
  <script>
@@ -1345,7 +1345,7 @@ export function createTypescriptPlugin(config: TypescriptPluginConfig, rootDir:
1345
1345
  <div class='footer quiet pad2 space-top1 center small'>
1346
1346
  Code coverage generated by
1347
1347
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1348
- at 2026-05-05T15:36:48.642Z
1348
+ at 2026-05-05T15:55:20.433Z
1349
1349
  </div>
1350
1350
  <script src="../prettify.js"></script>
1351
1351
  <script>
@@ -634,7 +634,7 @@ export function <span class="fstat-no" title="function not covered" >computePubl
634
634
  <div class='footer quiet pad2 space-top1 center small'>
635
635
  Code coverage generated by
636
636
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
637
- at 2026-05-05T15:36:48.642Z
637
+ at 2026-05-05T15:55:20.433Z
638
638
  </div>
639
639
  <script src="../prettify.js"></script>
640
640
  <script>