@@ -11,7 +11,7 @@ import {
1111} from "openapi3-ts/oas30" ;
1212import { singular } from "pluralize" ;
1313import { isValidIdentifier } from "tsutils" ;
14- import ts , { factory as f } from "typescript" ;
14+ import ts , { factory as f , isIdentifierStart } from "typescript" ;
1515import { getReferenceSchema } from "./getReference" ;
1616
1717type RemoveIndex < T > = {
@@ -56,11 +56,24 @@ export const schemaToTypeAliasDeclaration = (
5656 const jsDocNode = isSchemaObject ( schema )
5757 ? getJSDocComment ( schema , context )
5858 : undefined ;
59+
60+ let identifier = pascal ( name ) ;
61+
62+ // If the identifier does not start with a valid character, prefix it with an underscore.
63+ if ( ! isIdentifierStart ( identifier . charCodeAt ( 0 ) , ts . ScriptTarget . Latest ) ) {
64+ identifier = `_${ identifier } ` ;
65+ }
66+
67+ // If the identifier is still not valid, remove invalid characters.
68+ if ( ! isValidIdentifier ( identifier ) ) {
69+ identifier = identifier . replace ( / [ ^ a - z A - Z 0 - 9 _ ] / g, "" ) ;
70+ }
71+
5972 const declarationNode = f . createTypeAliasDeclaration (
6073 [ f . createModifier ( ts . SyntaxKind . ExportKeyword ) ] ,
61- pascal ( name ) ,
74+ identifier ,
6275 undefined ,
63- getType ( schema , context , name )
76+ getType ( schema , context , identifier )
6477 ) ;
6578
6679 return jsDocNode ? [ jsDocNode , declarationNode ] : [ declarationNode ] ;
@@ -89,10 +102,10 @@ export const getType = (
89102
90103 let refNode : ts . TypeNode = f . createTypeReferenceNode (
91104 namespace === context . currentComponent
92- ? f . createIdentifier ( pascal ( name ) )
105+ ? f . createIdentifier ( name )
93106 : f . createQualifiedName (
94107 f . createIdentifier ( pascal ( namespace ) ) ,
95- f . createIdentifier ( pascal ( name ) )
108+ f . createIdentifier ( name )
96109 )
97110 ) ;
98111
@@ -173,7 +186,7 @@ export const getType = (
173186
174187 if ( schema . enum ) {
175188 if ( isNodeEnum ) {
176- return f . createTypeReferenceNode ( f . createIdentifier ( pascal ( name || "" ) ) ) ;
189+ return f . createTypeReferenceNode ( f . createIdentifier ( name || "" ) ) ;
177190 }
178191
179192 const unionTypes = f . createUnionTypeNode ( [
0 commit comments