@@ -13,6 +13,7 @@ import {
1313 PrimitiveField ,
1414 SetField ,
1515} from './lib/dynamodb_item_field' ;
16+ import { warn } from './lib/logger' ;
1617
1718export default function transformer ( program : ts . Program ) : ts . TransformerFactory < ts . SourceFile > {
1819 return ( context : ts . TransformationContext ) => ( file : ts . SourceFile ) => visitNodeAndChildren ( file , program , context ) ;
@@ -85,12 +86,12 @@ function visitNode(node: ts.Node, program: ts.Program): ts.Node | undefined {
8586 const propName = prop . name ;
8687
8788 if ( prop . valueDeclaration . kind !== ts . SyntaxKind . Parameter ) {
89+ const msg = `unexpected error: a property "${ propName } " of the type "${ typeName } " doesn't have parameter kind` ;
8890 if ( shouldLenientTypeCheck ) {
91+ warn ( msg ) ;
8992 return undefined ;
9093 }
91- throw new Error (
92- `unexpected error: a property "${ propName } " of the type "${ typeName } " doesn't have parameter kind` ,
93- ) ;
94+ throw new Error ( msg ) ;
9495 }
9596
9697 const valueDeclSymbol = typeChecker . getTypeAtLocation ( prop . valueDeclaration ) . symbol ;
@@ -110,12 +111,12 @@ function visitNode(node: ts.Node, program: ts.Program): ts.Node | undefined {
110111 return new ArrayField ( propName , DynamodbPrimitiveTypes . Number ) ;
111112 }
112113
114+ const msg = `a property "${ propName } " of the type "${ typeName } " has unsupported type: "${ valueTypeName } "` ;
113115 if ( shouldLenientTypeCheck ) {
116+ warn ( msg ) ;
114117 return undefined ;
115118 }
116- throw new Error (
117- `a property "${ propName } " of the type "${ typeName } " has unsupported type: "${ valueTypeName } "` ,
118- ) ;
119+ throw new Error ( msg ) ;
119120 }
120121 return new ArrayField ( propName , valueType ) ;
121122 }
@@ -133,10 +134,12 @@ function visitNode(node: ts.Node, program: ts.Program): ts.Node | undefined {
133134 return new SetField ( propName , DynamodbPrimitiveTypes . Number , shouldLenientTypeCheck ) ;
134135 }
135136
137+ const msg = `a property "${ propName } " of the type "${ typeName } " has unsupported type: ${ valueTypeName } ` ;
136138 if ( shouldLenientTypeCheck ) {
139+ warn ( msg ) ;
137140 return undefined ;
138141 }
139- throw new Error ( `a property " ${ propName } " of the type " ${ typeName } " has unsupported type: ${ valueTypeName } ` ) ;
142+ throw new Error ( msg ) ;
140143 }
141144 return new SetField ( propName , valueType , shouldLenientTypeCheck ) ;
142145 }
@@ -147,10 +150,12 @@ function visitNode(node: ts.Node, program: ts.Program): ts.Node | undefined {
147150
148151 const keyType = dynamodbPrimitiveTypeFromTypeFlag ( typeArgs [ 0 ] ?. flags ) ;
149152 if ( keyType === undefined ) {
153+ const msg = `a Map type property "${ propName } " of the type "${ typeName } " has non-string key type` ;
150154 if ( shouldLenientTypeCheck ) {
155+ warn ( msg ) ;
151156 return undefined ;
152157 }
153- throw new Error ( `a Map type property " ${ propName } " of the type " ${ typeName } " has non-string key type` ) ;
158+ throw new Error ( msg ) ;
154159 }
155160
156161 const valueType = dynamodbPrimitiveTypeFromTypeFlag ( typeArgs [ 1 ] ?. flags ) ;
@@ -163,12 +168,12 @@ function visitNode(node: ts.Node, program: ts.Program): ts.Node | undefined {
163168 return new MapField ( propName , keyType , DynamodbPrimitiveTypes . Number , shouldLenientTypeCheck ) ;
164169 }
165170
171+ const msg = `a property "${ propName } " of the type "${ typeName } " has unsupported type: "${ valueTypeName } "` ;
166172 if ( shouldLenientTypeCheck ) {
173+ warn ( msg ) ;
167174 return undefined ;
168175 }
169- throw new Error (
170- `a property "${ propName } " of the type "${ typeName } " has unsupported type: "${ valueTypeName } "` ,
171- ) ;
176+ throw new Error ( msg ) ;
172177 }
173178
174179 return new MapField ( propName , keyType , valueType , shouldLenientTypeCheck ) ;
@@ -177,19 +182,26 @@ function visitNode(node: ts.Node, program: ts.Program): ts.Node | undefined {
177182 // for key-value pair map notation
178183 const kvType = extractKeyValueTypesFromKeyValuePairMapSyntax ( prop . valueDeclaration . getChildren ( ) ) ;
179184
180- const keyType = dynamodbPrimitiveTypeFromName ( kvType ?. [ 0 ] ) ;
185+ const keyTypeName = kvType ?. [ 0 ] ;
186+ const keyType = dynamodbPrimitiveTypeFromName ( keyTypeName ) ;
181187 if ( keyType === undefined ) {
188+ const msg = `a Map type property "${ propName } " of the type "${ typeName } " has non-string key type: "${ keyTypeName } "` ;
182189 if ( shouldLenientTypeCheck ) {
190+ warn ( msg ) ;
183191 return undefined ;
184192 }
185- throw new Error ( `a Map type property " ${ propName } " of the type " ${ typeName } " has non-string key type` ) ;
193+ throw new Error ( msg ) ;
186194 }
187- const valueType = dynamodbPrimitiveTypeFromName ( kvType ?. [ 1 ] ) ;
195+
196+ const valueTypeName = kvType ?. [ 1 ] ;
197+ const valueType = dynamodbPrimitiveTypeFromName ( valueTypeName ) ;
188198 if ( valueType === undefined ) {
199+ const msg = `a property "${ propName } " of the type "${ typeName } " has unsupported type: "${ valueTypeName } "` ;
189200 if ( shouldLenientTypeCheck ) {
201+ warn ( msg ) ;
190202 return undefined ;
191203 }
192- throw new Error ( `a property " ${ propName } " of the type " ${ typeName } " has unsupported type` ) ;
204+ throw new Error ( msg ) ;
193205 }
194206
195207 return new KeyValuePairMapField ( propName , keyType , valueType , shouldLenientTypeCheck ) ;
@@ -205,12 +217,12 @@ function visitNode(node: ts.Node, program: ts.Program): ts.Node | undefined {
205217 if ( colonTokenCame ) {
206218 const fieldType = dynamodbPrimitiveTypeFromName ( propNode . getText ( ) ) ;
207219 if ( fieldType === undefined ) {
220+ const msg = `a property "${ propName } " of the type "${ typeName } " has unsupported type: "${ propNode . getText ( ) } "` ;
208221 if ( shouldLenientTypeCheck ) {
222+ warn ( msg ) ;
209223 return undefined ;
210224 }
211- throw new Error (
212- `a property "${ propName } " of the type "${ typeName } " has unsupported type: "${ propNode . getText ( ) } "` ,
213- ) ;
225+ throw new Error ( msg ) ;
214226 }
215227 return new PrimitiveField ( propName , fieldType ) ;
216228 }
@@ -219,10 +231,12 @@ function visitNode(node: ts.Node, program: ts.Program): ts.Node | undefined {
219231
220232 // should never reach here
221233
234+ const msg = `unexpected error: a property "${ propName } " of the type "${ typeName } " has unsupported type` ;
222235 if ( shouldLenientTypeCheck ) {
236+ warn ( msg ) ;
223237 return undefined ;
224238 }
225- throw new Error ( `a property " ${ propName } " of the type " ${ typeName } " has unsupported type` ) ;
239+ throw new Error ( msg ) ;
226240 } )
227241 . map ( field => {
228242 return field ?. generateCode ( argVarNameIdent . text ) ;
0 commit comments