export function isSchemaType()

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;
}