UNPKG

flow-immutable-models

Version:

Generates model classes from Flow types using Immutable.js

48 lines (43 loc) 2.18 kB
'use strict'; 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; } }