1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const normalization_1 = require("./normalization");
|
4 | const types_1 = require("@babel/types");
|
5 | const genericTypes_1 = require("./genericTypes");
|
6 | const types_2 = require("./types");
|
7 | const typeForExtendedFields = (fields) => types_1.TSTypeLiteral([...fields.map(propertySignatureForExtendedField).values()]);
|
8 | const typeForExtendedSelection = (selection) => types_1.TSUnionType([...selection.fields.map(typeForExtendedFields).values()]);
|
9 | const 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 | };
|
25 | const propertySignatureForExtendedField = (field, fieldName) => {
|
26 | return Object.assign({}, types_1.TSPropertySignature(types_1.identifier(fieldName), types_1.TSTypeAnnotation(typeForExtendedFieldType(field.type))), { optional: field.optional });
|
27 | };
|
28 | const normalizedDeclaration = (fields, __typename) => types_1.TSTypeAliasDeclaration(types_1.identifier(`Normalized${__typename}`), undefined, typeForExtendedFields(fields));
|
29 | exports.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 |
|
\ | No newline at end of file |