UNPKG

2.12 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const normalization_1 = require("./normalization");
4const types_1 = require("@babel/types");
5const genericTypes_1 = require("./genericTypes");
6const types_2 = require("./types");
7const typeForExtendedFields = (fields) => types_1.TSTypeLiteral([...fields.map(propertySignatureForExtendedField).values()]);
8const typeForExtendedSelection = (selection) => types_1.TSUnionType([...selection.fields.map(typeForExtendedFields).values()]);
9const typeForExtendedFieldType = (type) => {
10 switch (type.kind) {
11 case "InlineSelection":
12 return typeForExtendedSelection(type);
13 case "List":
14 return types_1.TSArrayType(typeForExtendedFieldType(type.ofType));
15 case "Maybe":
16 return genericTypes_1.MaybeType(typeForExtendedFieldType(type.ofType));
17 case "Enum":
18 return types_2.typeReference(type.name);
19 case "Scalar":
20 return types_2.typeForScalar(type);
21 case "Typename":
22 return types_2.typeForTypename(type);
23 }
24};
25const propertySignatureForExtendedField = (field, fieldName) => {
26 return Object.assign({}, types_1.TSPropertySignature(types_1.identifier(fieldName), types_1.TSTypeAnnotation(typeForExtendedFieldType(field.type))), { optional: field.optional });
27};
28const normalizedDeclaration = (fields, __typename) => types_1.TSTypeAliasDeclaration(types_1.identifier(`Normalized${__typename}`), undefined, typeForExtendedFields(fields));
29exports.normalizedDataDeclarations = (context) => {
30 const types = normalization_1.normalizedTypes(context);
31 return [
32 ...types.map(normalizedDeclaration).values(),
33 types_1.TSTypeAliasDeclaration(types_1.identifier("NormalizedData"), undefined, types_1.TSTypeLiteral(types
34 .keySeq()
35 .map(__typename => types_1.TSPropertySignature(types_1.identifier(__typename), types_1.TSTypeAnnotation(genericTypes_1.ByIdType(types_2.typeReference(`Normalized${__typename}`)))))
36 .toArray()))
37 ];
38};
39//# sourceMappingURL=normalizedDataDeclaration.js.map
\No newline at end of file