in packages/dynamodb-data-marshaller/src/SchemaType.ts [326:370]
export function isSchemaType(
arg: any,
alreadyVisited: Set<any> = new Set()
): arg is SchemaType {
if (isBaseType(arg)) {
if (alreadyVisited.has(arg)) {
return true;
}
alreadyVisited.add(arg);
switch (arg.type) {
case 'Binary':
case 'Date':
case 'String':
return isKeyableType(arg);
case 'Custom':
return isKeyableType(arg)
&& typeof (arg as CustomType<any>).marshall === 'function'
&& typeof (arg as CustomType<any>).unmarshall === 'function'
&& [
void 0,
'S',
'N',
'B',
].indexOf((arg as CustomType<any>).attributeType) > -1;
case 'Document':
return isDocumentType(arg, alreadyVisited);
case 'List':
case 'Map':
return isSchemaType(
(arg as ListType).memberType,
alreadyVisited
);
case 'Number':
return isKeyableType(arg) && ['boolean', 'undefined']
.indexOf(typeof (arg as NumberType).versionAttribute) > -1;
case 'Tuple':
return isTupleType(arg, alreadyVisited);
default:
return true;
}
}
return false;
}