@@ -658,51 +658,55 @@ function checkServerNotification(
658
658
sdk = spec ;
659
659
spec = sdk ;
660
660
}
661
+ function checkLoggingLevel (
662
+ sdk : SDKTypes . LoggingLevel ,
663
+ spec : SpecTypes . LoggingLevel
664
+ ) {
665
+ sdk = spec ;
666
+ spec = sdk ;
667
+ }
661
668
662
- // TODO(bug): missing type in SDK. This dead code is checked by the test suite below.
663
- // function checkModelHint(
664
- // RemovePassthrough< sdk: SDKTypes.ModelHint>,
665
- // spec: SpecTypes.ModelHint
666
- // ) {
667
- // sdk = spec;
668
- // spec = sdk;
669
- // }
669
+ // This file is .gitignore'd, and fetched by `npm run fetch:spec-types` (called by `npm run test`)
670
+ const SPEC_TYPES_FILE = 'src/spec.types.ts' ;
671
+ const SDK_TYPES_FILE = 'src/types.ts' ;
670
672
671
- // TODO(bug): missing type in SDK. This dead code is checked by the test suite below.
672
- // function checkModelPreferences(
673
- // RemovePassthrough< sdk: SDKTypes.ModelPreferences>,
674
- // spec: SpecTypes.ModelPreferences
675
- // ) {
676
- // sdk = spec;
677
- // spec = sdk;
678
- // }
673
+ const MISSING_SDK_TYPES = [
674
+ // These are inlined in the SDK:
675
+ 'Role' ,
679
676
680
- // TODO(bug): missing type in SDK. This dead code is checked by the test suite below.
681
- // function checkAnnotations(
682
- // RemovePassthrough< sdk: SDKTypes.Annotations>,
683
- // spec: SpecTypes.Annotations
684
- // ) {
685
- // sdk = spec;
686
- // spec = sdk;
687
- // }
677
+ // These aren't supported by the SDK yet:
678
+ // TODO: Add definitions to the SDK
679
+ 'ModelHint' ,
680
+ 'ModelPreferences' ,
681
+ 'Annotations' ,
682
+ ]
688
683
689
- // This file is .gitignore'd, and fetched by `npm run fetch:spec-types` (called by `npm run test`)
690
- const SPEC_TYPES_FILE = 'src/spec.types.ts' ;
691
- const THIS_SOURCE_FILE = 'src/spec.types.test.ts' ;
684
+ function extractExportedTypes ( source : string ) : string [ ] {
685
+ return [ ... source . matchAll ( / e x p o r t \s + (?: i n t e r f a c e | c l a s s | t y p e ) \s + ( \w + ) \b / g ) ] . map ( m => m [ 1 ] ) ;
686
+ }
692
687
693
688
describe ( 'Spec Types' , ( ) => {
694
- const specTypesContent = fs . readFileSync ( SPEC_TYPES_FILE , 'utf-8' ) ;
695
- const typeNames = [ ... specTypesContent . matchAll ( / e x p o r t \s + i n t e r f a c e \s + ( \w + ) \b / g ) ] . map ( m => m [ 1 ] ) ;
696
- const testContent = fs . readFileSync ( THIS_SOURCE_FILE , 'utf-8' ) ;
689
+ const specTypes = extractExportedTypes ( fs . readFileSync ( SPEC_TYPES_FILE , 'utf-8' ) ) ;
690
+ const sdkTypes = extractExportedTypes ( fs . readFileSync ( SDK_TYPES_FILE , 'utf-8' ) ) ;
691
+ const testSource = fs . readFileSync ( __filename , 'utf-8' ) ;
697
692
698
693
it ( 'should define some expected types' , ( ) => {
699
- expect ( typeNames ) . toContain ( 'JSONRPCNotification' ) ;
700
- expect ( typeNames ) . toContain ( 'ElicitResult' ) ;
694
+ expect ( specTypes ) . toContain ( 'JSONRPCNotification' ) ;
695
+ expect ( specTypes ) . toContain ( 'ElicitResult' ) ;
696
+ } ) ;
697
+
698
+ it ( 'should have up to date list of missing sdk types' , ( ) => {
699
+ for ( const typeName of MISSING_SDK_TYPES ) {
700
+ expect ( sdkTypes ) . not . toContain ( typeName ) ;
701
+ }
701
702
} ) ;
702
703
703
- for ( const typeName of typeNames ) {
704
- it ( `${ typeName } should have a compatibility test` , ( ) => {
705
- expect ( testContent ) . toContain ( `function check${ typeName } (` ) ;
704
+ for ( const type of specTypes ) {
705
+ if ( MISSING_SDK_TYPES . includes ( type ) ) {
706
+ continue ; // Skip missing SDK types
707
+ }
708
+ it ( `${ type } should have a compatibility test` , ( ) => {
709
+ expect ( testSource ) . toContain ( `function check${ type } (` ) ;
706
710
} ) ;
707
711
}
708
712
} ) ;
0 commit comments