Skip to content

Commit c807187

Browse files
committed
Add warn logs
Signed-off-by: moznion <moznion@mail.moznion.net>
1 parent eef8cab commit c807187

File tree

3 files changed

+46
-22
lines changed

3 files changed

+46
-22
lines changed

lib/dynamodb_item_field.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import ts from 'typescript';
22
import { DynamodbPrimitiveTypes } from './dynamodb_primitive_types';
3+
import { warn } from './logger';
34

45
export interface DynamodbItemField {
56
generateCode(argName: string): ts.ObjectLiteralElementLike | undefined;
@@ -65,10 +66,12 @@ export class SetField implements DynamodbItemField {
6566
this.valueType !== DynamodbPrimitiveTypes.Number &&
6667
this.valueType !== DynamodbPrimitiveTypes.Binary
6768
) {
69+
const msg = `a type parameter of the Set type property "${this.fieldName}" is unsupported one`;
6870
if (this.shouldLenientTypeCheck) {
71+
warn(msg);
6972
return undefined;
7073
}
71-
throw new Error(`a type parameter of the Set type property "${this.fieldName}" is unsupported one`);
74+
throw new Error(msg);
7275
}
7376
const mapToStr = this.valueType === DynamodbPrimitiveTypes.Number ? '.map(v => `${v}`)' : '';
7477

@@ -97,10 +100,12 @@ export class MapField implements DynamodbItemField {
97100

98101
generateCode(argName: string): ts.ObjectLiteralElementLike | undefined {
99102
if (this.keyValueType !== DynamodbPrimitiveTypes.String) {
103+
const msg = `a Map type property "${this.fieldName}" has non-string key type`;
100104
if (this.shouldLenientTypeCheck) {
105+
warn(msg);
101106
return undefined;
102107
}
103-
throw new Error(`a Map type property "${this.fieldName}" has non-string key type`);
108+
throw new Error(msg);
104109
}
105110

106111
const toStr = this.valueType === DynamodbPrimitiveTypes.Number ? '.toString()' : '';
@@ -161,10 +166,12 @@ export class KeyValuePairMapField implements DynamodbItemField {
161166

162167
generateCode(argName: string): ts.ObjectLiteralElementLike | undefined {
163168
if (this.keyValueType !== DynamodbPrimitiveTypes.String) {
169+
const msg = `a Map type property "${this.fieldName}" has non-string key type`;
164170
if (this.shouldLenientTypeCheck) {
171+
warn(msg);
165172
return undefined;
166173
}
167-
throw new Error(`a Map type property "${this.fieldName}" has non-string key type`);
174+
throw new Error(msg);
168175
}
169176

170177
const toStr = this.valueType === DynamodbPrimitiveTypes.Number ? '.toString()' : '';

lib/logger.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export function warn(msg: string) {
2+
console.error(`[warn] ${msg}`);
3+
}

transformer.ts

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
PrimitiveField,
1414
SetField,
1515
} from './lib/dynamodb_item_field';
16+
import { warn } from './lib/logger';
1617

1718
export 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

Comments
 (0)