flow-immutable-models
Version:
Generates model classes from Flow types using Immutable.js
48 lines (43 loc) • 2.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = getTypeAnnotationWithoutModelType;
var _withoutModelTypeSuffix = require('./withoutModelTypeSuffix');
function getTypeAnnotationWithoutModelType(j, value) {
var convertToImmutable = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
var type = value.type;
switch (type) {
case 'GenericTypeAnnotation':
{
if (value.id.type === 'Identifier') {
var nameWithoutSuffix = (0, _withoutModelTypeSuffix.withoutModelTypeSuffix)(value.id.name);
var typeId = void 0;
if (nameWithoutSuffix === 'Array' && convertToImmutable) {
typeId = j.qualifiedTypeIdentifier(j.identifier('Immutable'), j.identifier('List'));
} else {
typeId = j.identifier(nameWithoutSuffix);
}
return j.genericTypeAnnotation(typeId, value.typeParameters ? j.typeParameterInstantiation(value.typeParameters.params.map(function (typeParam) {
return getTypeAnnotationWithoutModelType(j, typeParam);
})) : null);
}
if (value.id.type === 'QualifiedTypeIdentifier') {
return j.genericTypeAnnotation(j.qualifiedTypeIdentifier(value.id.qualification, j.identifier((0, _withoutModelTypeSuffix.withoutModelTypeSuffix)(value.id.id.name))), j.typeParameterInstantiation(value.typeParameters.params.map(function (typeParam) {
return getTypeAnnotationWithoutModelType(j, typeParam);
})));
}
return value;
}
case 'NullableTypeAnnotation':
return j.nullableTypeAnnotation(getTypeAnnotationWithoutModelType(j, value.typeAnnotation, convertToImmutable));
case 'ObjectTypeAnnotation':
if (value.indexers.length > 0) {
var propIndexer = value.indexers[0];
return j.genericTypeAnnotation(j.qualifiedTypeIdentifier(j.identifier('Immutable'), j.identifier('Map')), j.typeParameterInstantiation([getTypeAnnotationWithoutModelType(j, propIndexer.key), getTypeAnnotationWithoutModelType(j, propIndexer.value, true)]));
}
return value;
default:
return value;
}
}