Last active
October 24, 2019 22:18
-
-
Save janicduplessis/6c134b4c21168aa28b81e3fd818ec9bd to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"use strict"; | |
var __assign = (this && this.__assign) || function () { | |
__assign = Object.assign || function(t) { | |
for (var s, i = 1, n = arguments.length; i < n; i++) { | |
s = arguments[i]; | |
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) | |
t[p] = s[p]; | |
} | |
return t; | |
}; | |
return __assign.apply(this, arguments); | |
}; | |
var __read = (this && this.__read) || function (o, n) { | |
var m = typeof Symbol === "function" && o[Symbol.iterator]; | |
if (!m) return o; | |
var i = m.call(o), r, ar = [], e; | |
try { | |
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); | |
} | |
catch (error) { e = { error: error }; } | |
finally { | |
try { | |
if (r && !r.done && (m = i["return"])) m.call(i); | |
} | |
finally { if (e) throw e.error; } | |
} | |
return ar; | |
}; | |
var __spread = (this && this.__spread) || function () { | |
for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); | |
return ar; | |
}; | |
var __values = (this && this.__values) || function (o) { | |
var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; | |
if (m) return m.call(o); | |
return { | |
next: function () { | |
if (o && i >= o.length) o = void 0; | |
return { value: o && o[i++], done: !o }; | |
} | |
}; | |
}; | |
Object.defineProperty(exports, "__esModule", { value: true }); | |
var relay_compiler_1 = require("relay-compiler"); | |
var ConnectionFieldTransform = require("relay-compiler/lib/transforms/ConnectionFieldTransform"); | |
var FlattenTransform = require("relay-compiler/lib/transforms/FlattenTransform"); | |
var RelayMaskTransform = require("relay-compiler/lib/transforms/MaskTransform"); | |
var RelayMatchTransform = require("relay-compiler/lib/transforms/MatchTransform"); | |
var RelayRefetchableFragmentTransform = require("relay-compiler/lib/transforms/RefetchableFragmentTransform"); | |
var RelayRelayDirectiveTransform = require("relay-compiler/lib/transforms/RelayDirectiveTransform"); | |
var graphql_1 = require("graphql"); | |
var ts = require("typescript"); | |
var TypeScriptTypeTransformers_1 = require("./TypeScriptTypeTransformers"); | |
var isAbstractType = relay_compiler_1.SchemaUtils.isAbstractType; | |
var REF_TYPE = " $refType"; | |
var FRAGMENT_REFS = " $fragmentRefs"; | |
var FRAGMENT_REFS_TYPE_NAME = "FragmentRefs"; | |
var MODULE_IMPORT_FIELD = "MODULE_IMPORT_FIELD"; | |
var DIRECTIVE_NAME = "raw_response_type"; | |
exports.generate = function (schema, node, options) { | |
var ast = relay_compiler_1.IRVisitor.visit(node, createVisitor(schema, options)); | |
var printer = ts.createPrinter({ | |
newLine: ts.NewLineKind.LineFeed | |
}); | |
var resultFile = ts.createSourceFile("grapghql-def.ts", "", ts.ScriptTarget.Latest, | |
/*setParentNodes*/ false, ts.ScriptKind.TS); | |
var fullProgramAst = ts.updateSourceFileNode(resultFile, ast); | |
return printer.printNode(ts.EmitHint.SourceFile, fullProgramAst, resultFile); | |
}; | |
function nullthrows(obj) { | |
if (obj == null) { | |
throw new Error("Obj is null"); | |
} | |
return obj; | |
} | |
function makeProp(schema, selection, state, unmasked, concreteType) { | |
var value = selection.value; | |
var key = selection.key, schemaName = selection.schemaName, conditional = selection.conditional, nodeType = selection.nodeType, nodeSelections = selection.nodeSelections; | |
if (nodeType) { | |
value = TypeScriptTypeTransformers_1.transformScalarType(schema, nodeType, state, selectionsToAST(schema, [Array.from(nullthrows(nodeSelections).values())], state, unmasked)); | |
} | |
if (schemaName === "__typename" && concreteType) { | |
value = ts.createLiteralTypeNode(ts.createLiteral(concreteType)); | |
} | |
return objectTypeProperty(key, value, { optional: conditional }); | |
} | |
var isTypenameSelection = function (selection) { | |
return selection.schemaName === "__typename"; | |
}; | |
var hasTypenameSelection = function (selections) { | |
return selections.some(isTypenameSelection); | |
}; | |
var onlySelectsTypename = function (selections) { | |
return selections.every(isTypenameSelection); | |
}; | |
function selectionsToAST(schema, selections, state, unmasked, fragmentTypeName) { | |
var baseFields = new Map(); | |
var byConcreteType = {}; | |
flattenArray(selections).forEach(function (selection) { | |
var concreteType = selection.concreteType; | |
if (concreteType) { | |
byConcreteType[concreteType] = byConcreteType[concreteType] || []; | |
byConcreteType[concreteType].push(selection); | |
} | |
else { | |
var previousSel = baseFields.get(selection.key); | |
baseFields.set(selection.key, previousSel ? mergeSelection(selection, previousSel) : selection); | |
} | |
}); | |
var types = []; | |
if (Object.keys(byConcreteType).length > 0 && | |
onlySelectsTypename(Array.from(baseFields.values())) && | |
(hasTypenameSelection(Array.from(baseFields.values())) || | |
Object.keys(byConcreteType).every(function (type) { | |
return hasTypenameSelection(byConcreteType[type]); | |
}))) { | |
var typenameAliases_1 = new Set(); | |
var _loop_1 = function (concreteType) { | |
types.push(groupRefs(__spread(Array.from(baseFields.values()), byConcreteType[concreteType])).map(function (selection) { | |
if (selection.schemaName === "__typename") { | |
typenameAliases_1.add(selection.key); | |
} | |
return makeProp(schema, selection, state, unmasked, concreteType); | |
})); | |
}; | |
for (var concreteType in byConcreteType) { | |
_loop_1(concreteType); | |
} | |
// It might be some other type then the listed concrete types. Ideally, we | |
// would set the type to diff(string, set of listed concrete types), but | |
// this doesn't exist in Flow at the time. | |
types.push(Array.from(typenameAliases_1).map(function (typenameAlias) { | |
var otherProp = objectTypeProperty(typenameAlias, ts.createLiteralTypeNode(ts.createLiteral("%other"))); | |
var otherPropWithComment = ts.addSyntheticLeadingComment(otherProp, ts.SyntaxKind.MultiLineCommentTrivia, "This will never be '%other', but we need some\n" + | |
"value in case none of the concrete values match.", true); | |
return otherPropWithComment; | |
})); | |
} | |
else { | |
var selectionMap = selectionsToMap(Array.from(baseFields.values())); | |
for (var concreteType in byConcreteType) { | |
selectionMap = mergeSelections(selectionMap, selectionsToMap(byConcreteType[concreteType].map(function (sel) { return (__assign({}, sel, { conditional: true })); }))); | |
} | |
var selectionMapValues = groupRefs(Array.from(selectionMap.values())).map(function (sel) { | |
return isTypenameSelection(sel) && sel.concreteType | |
? makeProp(schema, __assign({}, sel, { conditional: false }), state, unmasked, sel.concreteType) | |
: makeProp(schema, sel, state, unmasked); | |
}); | |
types.push(selectionMapValues); | |
} | |
var typeElements = types.map(function (props) { | |
if (fragmentTypeName) { | |
props.push(objectTypeProperty(REF_TYPE, ts.createLiteralTypeNode(ts.createStringLiteral(fragmentTypeName)))); | |
} | |
return unmasked | |
? ts.createTypeLiteralNode(props) | |
: exactObjectTypeAnnotation(props); | |
}); | |
if (typeElements.length === 1) { | |
return typeElements[0]; | |
} | |
return ts.createUnionTypeNode(typeElements); | |
} | |
// We don't have exact object types in typescript. | |
function exactObjectTypeAnnotation(properties) { | |
return ts.createTypeLiteralNode(properties); | |
} | |
var idRegex = /^[$a-zA-Z_][$a-z0-9A-Z_]*$/; | |
function objectTypeProperty(propertyName, type, options) { | |
if (options === void 0) { options = {}; } | |
var optional = options.optional, _a = options.readonly, readonly = _a === void 0 ? true : _a; | |
var modifiers = readonly | |
? [ts.createToken(ts.SyntaxKind.ReadonlyKeyword)] | |
: undefined; | |
return ts.createPropertySignature(modifiers, idRegex.test(propertyName) | |
? ts.createIdentifier(propertyName) | |
: ts.createLiteral(propertyName), optional ? ts.createToken(ts.SyntaxKind.QuestionToken) : undefined, type, undefined); | |
} | |
function mergeSelection(a, b, shouldSetConditional) { | |
if (shouldSetConditional === void 0) { shouldSetConditional = true; } | |
if (!a) { | |
if (shouldSetConditional) { | |
return __assign({}, b, { conditional: true }); | |
} | |
return b; | |
} | |
return __assign({}, a, { nodeSelections: a.nodeSelections | |
? mergeSelections(a.nodeSelections, nullthrows(b.nodeSelections), shouldSetConditional) | |
: null, conditional: a.conditional && b.conditional }); | |
} | |
function mergeSelections(a, b, shouldSetConditional) { | |
var e_1, _a, e_2, _b; | |
if (shouldSetConditional === void 0) { shouldSetConditional = true; } | |
var merged = new Map(); | |
try { | |
for (var _c = __values(Array.from(a.entries())), _d = _c.next(); !_d.done; _d = _c.next()) { | |
var _e = __read(_d.value, 2), key = _e[0], value = _e[1]; | |
merged.set(key, value); | |
} | |
} | |
catch (e_1_1) { e_1 = { error: e_1_1 }; } | |
finally { | |
try { | |
if (_d && !_d.done && (_a = _c.return)) _a.call(_c); | |
} | |
finally { if (e_1) throw e_1.error; } | |
} | |
try { | |
for (var _f = __values(Array.from(b.entries())), _g = _f.next(); !_g.done; _g = _f.next()) { | |
var _h = __read(_g.value, 2), key = _h[0], value = _h[1]; | |
merged.set(key, mergeSelection(a.get(key), value, shouldSetConditional)); | |
} | |
} | |
catch (e_2_1) { e_2 = { error: e_2_1 }; } | |
finally { | |
try { | |
if (_g && !_g.done && (_b = _f.return)) _b.call(_f); | |
} | |
finally { if (e_2) throw e_2.error; } | |
} | |
return merged; | |
} | |
function isPlural(node) { | |
return Boolean(node.metadata && node.metadata.plural); | |
} | |
function exportType(name, type) { | |
return ts.createTypeAliasDeclaration(undefined, [ts.createToken(ts.SyntaxKind.ExportKeyword)], ts.createIdentifier(name), undefined, type); | |
} | |
function importTypes(names, fromModule) { | |
return ts.createImportDeclaration(undefined, undefined, ts.createImportClause(undefined, ts.createNamedImports(names.map(function (name) { | |
return ts.createImportSpecifier(undefined, ts.createIdentifier(name)); | |
}))), ts.createLiteral(fromModule)); | |
} | |
function createVisitor(schema, options) { | |
var state = { | |
customScalars: options.customScalars, | |
enumsHasteModule: options.enumsHasteModule, | |
existingFragmentNames: options.existingFragmentNames, | |
generatedInputObjectTypes: {}, | |
generatedFragments: new Set(), | |
optionalInputFields: options.optionalInputFields, | |
usedEnums: {}, | |
usedFragments: new Set(), | |
useHaste: options.useHaste, | |
useSingleArtifactDirectory: options.useSingleArtifactDirectory, | |
noFutureProofEnums: options.noFutureProofEnums, | |
matchFields: new Map() | |
}; | |
return { | |
leave: { | |
Root: function (node) { | |
var e_3, _a; | |
var inputVariablesType = generateInputVariablesType(schema, node, state); | |
var inputObjectTypes = generateInputObjectTypes(state); | |
var responseType = exportType(node.name + "Response", selectionsToAST( | |
schema, | |
/* $FlowFixMe: selections have already been transformed */ | |
node.selections, state, false)); | |
var operationTypes = [ | |
objectTypeProperty("response", ts.createTypeReferenceNode(responseType.name, undefined)), | |
objectTypeProperty("variables", ts.createTypeReferenceNode(inputVariablesType.name, undefined)) | |
]; | |
// Generate raw response type | |
var rawResponseType; | |
var normalizationIR = options.normalizationIR; | |
if (normalizationIR && | |
node.directives.some(function (d) { return d.name === DIRECTIVE_NAME; })) { | |
rawResponseType = relay_compiler_1.IRVisitor.visit(normalizationIR, createRawResponseTypeVisitor(state)); | |
} | |
var nodes = __spread(getFragmentRefsTypeImport(state), getEnumDefinitions(schema, state), inputObjectTypes, [ | |
inputVariablesType, | |
responseType | |
]); | |
if (rawResponseType) { | |
try { | |
for (var _b = __values(state.matchFields), _c = _b.next(); !_c.done; _c = _b.next()) { | |
var _d = __read(_c.value, 2), key = _d[0], ast = _d[1]; | |
nodes.push(ts.createTypeAliasDeclaration(undefined, undefined, key, undefined, ast)); | |
} | |
} | |
catch (e_3_1) { e_3 = { error: e_3_1 }; } | |
finally { | |
try { | |
if (_c && !_c.done && (_a = _b.return)) _a.call(_b); | |
} | |
finally { if (e_3) throw e_3.error; } | |
} | |
operationTypes.push(objectTypeProperty("rawResponse", ts.createTypeReferenceNode(node.name + "RawResponse", undefined))); | |
nodes.push(rawResponseType); | |
} | |
nodes.push(exportType(node.name, exactObjectTypeAnnotation(operationTypes))); | |
return nodes; | |
}, | |
Fragment: function (node) { | |
var flattenedSelections = flattenArray( | |
/* $FlowFixMe: selections have already been transformed */ | |
node.selections); | |
var numConcreteSelections = flattenedSelections.filter(function (s) { return s.concreteType; }).length; | |
var selections = flattenedSelections.map(function (selection) { | |
if (numConcreteSelections <= 1 && | |
isTypenameSelection(selection) && | |
!isAbstractType(node.type)) { | |
return [ | |
__assign({}, selection, { concreteType: node.type.toString() }) | |
]; | |
} | |
return [selection]; | |
}); | |
state.generatedFragments.add(node.name); | |
var unmasked = node.metadata != null && node.metadata.mask === false; | |
var baseType = selectionsToAST(schema, selections, state, unmasked, unmasked ? undefined : node.name); | |
var type = isPlural(node) | |
? ts.createTypeReferenceNode(ts.createIdentifier("ReadonlyArray"), [ | |
baseType | |
]) | |
: baseType; | |
return __spread(getFragmentRefsTypeImport(state), getEnumDefinitions(schema, state), [ | |
exportType(node.name, type) | |
]); | |
}, | |
InlineFragment: function (node) { | |
var typeCondition = node.typeCondition; | |
return flattenArray( | |
/* $FlowFixMe: selections have already been transformed */ | |
node.selections).map(function (typeSelection) { | |
return isAbstractType(typeCondition) | |
? __assign({}, typeSelection, { conditional: true }) : __assign({}, typeSelection, { concreteType: typeCondition.toString() }); | |
}); | |
}, | |
Condition: visitCondition, | |
// TODO: Why not inline it like others? | |
ScalarField: function (node) { | |
return visitScalarField(schema, node, state); | |
}, | |
LinkedField: visitLinkedField, | |
ConnectionField: visitConnectionField, | |
ModuleImport: function (node) { | |
return [ | |
{ | |
key: "__fragmentPropName", | |
conditional: true, | |
value: TypeScriptTypeTransformers_1.transformScalarType(schema, graphql_1.GraphQLString, state) | |
}, | |
{ | |
key: "__module_component", | |
conditional: true, | |
value: TypeScriptTypeTransformers_1.transformScalarType(schema, graphql_1.GraphQLString, state) | |
}, | |
{ | |
key: "__fragments_" + node.name, | |
ref: node.name | |
} | |
]; | |
}, | |
FragmentSpread: function (node) { | |
state.usedFragments.add(node.name); | |
return [ | |
{ | |
key: "__fragments_" + node.name, | |
ref: node.name | |
} | |
]; | |
} | |
} | |
}; | |
} | |
function visitCondition(node) { | |
return flattenArray( | |
/* $FlowFixMe: selections have already been transformed */ | |
node.selections).map(function (selection) { | |
return __assign({}, selection, { conditional: true }); | |
}); | |
} | |
function visitScalarField(schema, node, state) { | |
return [ | |
{ | |
key: node.alias || node.name, | |
schemaName: node.name, | |
value: TypeScriptTypeTransformers_1.transformScalarType(schema, node.type, state) | |
} | |
]; | |
} | |
function visitLinkedField(node) { | |
return [ | |
{ | |
key: node.alias || node.name, | |
schemaName: node.name, | |
nodeType: node.type, | |
nodeSelections: selectionsToMap(flattenArray( | |
/* $FlowFixMe: selections have already been transformed */ | |
node.selections), | |
/* | |
* append concreteType to key so overlapping fields with different | |
* concreteTypes don't get overwritten by each other | |
*/ | |
true) | |
} | |
]; | |
} | |
function visitConnectionField(node) { | |
return [ | |
{ | |
key: node.alias, | |
schemaName: node.name, | |
nodeType: node.type, | |
nodeSelections: selectionsToMap(flattenArray( | |
/* $FlowFixMe: selections have already been transformed */ | |
node.selections), | |
/* | |
* append concreteType to key so overlapping fields with different | |
* concreteTypes don't get overwritten by each other | |
*/ | |
true) | |
} | |
]; | |
} | |
function makeRawResponseProp(schema, _a, state, concreteType) { | |
var key = _a.key, schemaName = _a.schemaName, value = _a.value, conditional = _a.conditional, nodeType = _a.nodeType, nodeSelections = _a.nodeSelections; | |
if (nodeType) { | |
if (nodeType === MODULE_IMPORT_FIELD) { | |
// TODO: In flow one can extend an object type with spread, with TS we need an intersection (&) | |
// return ts.createSpread(ts.createIdentifier(key)); | |
throw new Error("TODO!"); | |
} | |
value = TypeScriptTypeTransformers_1.transformScalarType(schema, nodeType, state, selectionsToRawResponseBabel([Array.from(nullthrows(nodeSelections).values())], state, isAbstractType(nodeType) ? null : nodeType.name)); | |
} | |
if (schemaName === "__typename" && concreteType) { | |
value = ts.createLiteralTypeNode(ts.createLiteral(concreteType)); | |
} | |
var typeProperty = objectTypeProperty(key, value); | |
if (conditional) { | |
typeProperty.questionToken = ts.createToken(ts.SyntaxKind.QuestionToken); | |
} | |
return typeProperty; | |
} | |
function selectionsToMap(selections, appendType) { | |
var map = new Map(); | |
selections.forEach(function (selection) { | |
var key = appendType && selection.concreteType | |
? selection.key + "::" + selection.concreteType | |
: selection.key; | |
var previousSel = map.get(key); | |
map.set(key, previousSel ? mergeSelection(previousSel, selection) : selection); | |
}); | |
return map; | |
} | |
// Transform the codegen IR selections into TS types | |
function selectionsToRawResponseBabel(selections, state, nodeTypeName) { | |
var baseFields = []; | |
var byConcreteType = {}; | |
flattenArray(selections).forEach(function (selection) { | |
var concreteType = selection.concreteType; | |
if (concreteType) { | |
byConcreteType[concreteType] = byConcreteType[concreteType] || []; | |
byConcreteType[concreteType].push(selection); | |
} | |
else { | |
baseFields.push(selection); | |
} | |
}); | |
var types = []; | |
if (Object.keys(byConcreteType).length) { | |
var baseFieldsMap = selectionsToMap(baseFields); | |
var _loop_2 = function (concreteType) { | |
types.push(Array.from(mergeSelections(baseFieldsMap, selectionsToMap(byConcreteType[concreteType]), false).values()).map(function (selection) { | |
if (isTypenameSelection(selection)) { | |
return makeRawResponseProp(schema, __assign({}, selection, { conditional: false }), state, concreteType); | |
} | |
return makeRawResponseProp(schema, selection, state, concreteType); | |
})); | |
}; | |
for (var concreteType in byConcreteType) { | |
_loop_2(concreteType); | |
} | |
} | |
if (baseFields.length) { | |
types.push(baseFields.map(function (selection) { | |
if (isTypenameSelection(selection)) { | |
return makeRawResponseProp(schema, __assign({}, selection, { conditional: false }), state, nodeTypeName); | |
} | |
return makeRawResponseProp(schema, selection, state, null); | |
})); | |
} | |
return ts.createUnionTypeNode(types.map(function (props) { return exactObjectTypeAnnotation(props); })); | |
} | |
// Visitor for generating raw response type | |
function createRawResponseTypeVisitor(state) { | |
return { | |
leave: { | |
Root: function (node) { | |
return exportType(node.name + "RawResponse", selectionsToRawResponseBabel( | |
/* $FlowFixMe: selections have already been transformed */ | |
node.selections, state, null)); | |
}, | |
InlineFragment: function (node) { | |
var typeCondition = node.typeCondition; | |
return flattenArray( | |
/* $FlowFixMe: selections have already been transformed */ | |
node.selections).map(function (typeSelection) { | |
return isAbstractType(typeCondition) | |
? typeSelection | |
: __assign({}, typeSelection, { concreteType: typeCondition.toString() }); | |
}); | |
}, | |
Condition: visitCondition, | |
ScalarField: function (node) { | |
return visitScalarField(schema, node, state); | |
}, | |
ConnectionField: visitConnectionField, | |
LinkedField: visitLinkedField, | |
ClientExtension: function (node) { | |
return flattenArray( | |
/* $FlowFixMe: selections have already been transformed */ | |
node.selections).map(function (sel) { return (__assign({}, sel, { conditional: true })); }); | |
}, | |
Defer: function (node) { | |
return flattenArray( | |
/* $FlowFixMe: selections have already been transformed */ | |
node.selections); | |
}, | |
Stream: function (node) { | |
return flattenArray( | |
/* $FlowFixMe: selections have already been transformed */ | |
node.selections); | |
}, | |
ModuleImport: function (node) { | |
return visitRawResponseModuleImport(node, state); | |
}, | |
FragmentSpread: function (_node) { | |
throw new Error("A fragment spread is found when traversing the AST, " + | |
"make sure you are passing the codegen IR"); | |
} | |
} | |
}; | |
} | |
// Dedupe the generated type of module selections to reduce file size | |
function visitRawResponseModuleImport(node, state) { | |
var selections = node.selections, key = node.name; | |
var moduleSelections = selections | |
.filter(function (sel) { return sel.length && sel[0].schemaName === "js"; }) | |
.map(function (arr) { return arr[0]; }); | |
if (!state.matchFields.has(key)) { | |
var ast = selectionsToRawResponseBabel(node.selections.filter(function (sel) { return sel.length > 1 || sel[0].schemaName !== "js"; }), state, null); | |
state.matchFields.set(key, ast); | |
} | |
return __spread(moduleSelections, [ | |
{ | |
key: key, | |
nodeType: MODULE_IMPORT_FIELD | |
} | |
]); | |
} | |
function flattenArray(arrayOfArrays) { | |
var result = []; | |
arrayOfArrays.forEach(function (array) { return result.push.apply(result, __spread(array)); }); | |
return result; | |
} | |
function generateInputObjectTypes(state) { | |
return Object.keys(state.generatedInputObjectTypes).map(function (typeIdentifier) { | |
var inputObjectType = state.generatedInputObjectTypes[typeIdentifier]; | |
if (inputObjectType === "pending") { | |
throw new Error("TypeScriptGenerator: Expected input object type to have been" + | |
" defined before calling `generateInputObjectTypes`"); | |
} | |
else { | |
return exportType(typeIdentifier, inputObjectType); | |
} | |
}); | |
} | |
function generateInputVariablesType(schema, node, state) { | |
return exportType(node.name + "Variables", exactObjectTypeAnnotation(node.argumentDefinitions.map(function (arg) { | |
return objectTypeProperty(arg.name, TypeScriptTypeTransformers_1.transformInputType(schema, arg.type, state), { readonly: false, optional: !(arg.type instanceof graphql_1.GraphQLNonNull) }); | |
}))); | |
} | |
function groupRefs(props) { | |
var result = []; | |
var refs = []; | |
props.forEach(function (prop) { | |
if (prop.ref) { | |
refs.push(prop.ref); | |
} | |
else { | |
result.push(prop); | |
} | |
}); | |
if (refs.length > 0) { | |
var refTypes = ts.createUnionTypeNode(refs.map(function (ref) { return ts.createLiteralTypeNode(ts.createStringLiteral(ref)); })); | |
result.push({ | |
key: FRAGMENT_REFS, | |
conditional: false, | |
value: ts.createTypeReferenceNode(FRAGMENT_REFS_TYPE_NAME, [refTypes]) | |
}); | |
} | |
return result; | |
} | |
function getFragmentRefsTypeImport(state) { | |
if (state.usedFragments.size > 0) { | |
return [ | |
ts.createImportDeclaration(undefined, undefined, ts.createImportClause(undefined, ts.createNamedImports([ | |
ts.createImportSpecifier(undefined, ts.createIdentifier("FragmentRefs")) | |
])), ts.createStringLiteral("relay-runtime")) | |
]; | |
} | |
return []; | |
} | |
function getEnumDefinitions(schema, _a) { | |
var enumsHasteModule = _a.enumsHasteModule, usedEnums = _a.usedEnums, noFutureProofEnums = _a.noFutureProofEnums; | |
var enumNames = Object.keys(usedEnums).sort(); | |
if (enumNames.length === 0) { | |
return []; | |
} | |
if (typeof enumsHasteModule === "string") { | |
return [importTypes(enumNames, enumsHasteModule)]; | |
} | |
if (typeof enumsHasteModule === "function") { | |
return enumNames.map(function (enumName) { | |
return importTypes([enumName], enumsHasteModule(enumName)); | |
}); | |
} | |
return enumNames.map(function (name) { | |
var values = schema.getEnumValues(usedEnums[name]); | |
values.sort(); | |
if (!noFutureProofEnums) { | |
values.push("%future added value"); | |
} | |
return exportType(name, ts.createUnionTypeNode(values.map(function (value) { return stringLiteralTypeAnnotation(value); }))); | |
}); | |
} | |
function stringLiteralTypeAnnotation(name) { | |
return ts.createLiteralTypeNode(ts.createLiteral(name)); | |
} | |
// Should match FLOW_TRANSFORMS array | |
// https://github.com/facebook/relay/blob/v6.0.0/packages/relay-compiler/language/javascript/RelayFlowGenerator.js#L621-L627 | |
exports.transforms = [ | |
RelayRelayDirectiveTransform.transform, | |
RelayMaskTransform.transform, | |
ConnectionFieldTransform.transform, | |
RelayMatchTransform.transform, | |
FlattenTransform.transformWithOptions({}), | |
RelayRefetchableFragmentTransform.transform | |
]; | |
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHlwZVNjcmlwdEdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9UeXBlU2NyaXB0R2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFTd0I7QUFJeEIsaUdBQW1HO0FBQ25HLGlGQUFtRjtBQUNuRixxRkFBdUY7QUFDdkYsdUZBQXlGO0FBQ3pGLG1IQUFxSDtBQUNySCx5R0FBMkc7QUFFM0csbUNBQXdEO0FBQ3hELCtCQUFpQztBQUNqQywyRUFJc0M7QUFFOUIsSUFBQSw0REFBYyxDQUFpQjtBQUV2QyxJQUFNLFFBQVEsR0FBRyxXQUFXLENBQUM7QUFDN0IsSUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUM7QUFDdkMsSUFBTSx1QkFBdUIsR0FBRyxjQUFjLENBQUM7QUFDL0MsSUFBTSxtQkFBbUIsR0FBRyxxQkFBcUIsQ0FBQztBQUNsRCxJQUFNLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQztBQUU5QixRQUFBLFFBQVEsR0FBOEIsVUFBQyxJQUFJLEVBQUUsT0FBTztJQUMvRCxJQUFNLEdBQUcsR0FBbUIsMEJBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzFFLElBQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUM7UUFDL0IsT0FBTyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUTtLQUNqQyxDQUFDLENBQUM7SUFDSCxJQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQ3BDLGlCQUFpQixFQUNqQixFQUFFLEVBQ0YsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNO0lBQ3RCLGtCQUFrQixDQUFDLEtBQUssRUFDeEIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQ2pCLENBQUM7SUFDRixJQUFNLGNBQWMsR0FBRyxFQUFFLENBQUMsb0JB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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"use strict"; | |
Object.defineProperty(exports, "__esModule", { value: true }); | |
var graphql_1 = require("graphql"); | |
var ts = require("typescript"); | |
function getInputObjectTypeIdentifier(type) { | |
return type.name; | |
} | |
function transformScalarType(schema, type, state, objectProps) { | |
if (schema.isNonNull(type)) { | |
return transformNonNullableScalarType(schema, type.ofType, state, objectProps); | |
} | |
else { | |
return ts.createUnionTypeNode([ | |
transformNonNullableScalarType(schema, type, state, objectProps), | |
ts.createKeywordTypeNode(ts.SyntaxKind.NullKeyword) | |
]); | |
} | |
} | |
exports.transformScalarType = transformScalarType; | |
function transformNonNullableScalarType(schema, type, state, objectProps) { | |
if (schema.isList(type)) { | |
return ts.createTypeReferenceNode(ts.createIdentifier("ReadonlyArray"), [ | |
transformScalarType(schema, type.ofType, state, objectProps) | |
]); | |
} | |
else if (schema.isObject(type) || | |
schema.isUnion(type) || | |
schema.isInterface(type)) { | |
return objectProps; | |
} | |
else if (schema.isScalar(type)) { | |
return transformGraphQLScalarType(type, state); | |
} | |
else if (schema.isEnum(type)) { | |
return transformGraphQLEnumType(type, state); | |
} | |
else { | |
throw new Error("Could not convert from GraphQL type " + type.toString()); | |
} | |
} | |
function transformGraphQLScalarType(type, state) { | |
var customType = state.customScalars[type.name]; | |
switch (customType || type.name) { | |
case "ID": | |
case "String": | |
case "Url": | |
return ts.createKeywordTypeNode(ts.SyntaxKind.StringKeyword); | |
case "Float": | |
case "Int": | |
return ts.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword); | |
case "Boolean": | |
return ts.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword); | |
default: | |
return customType | |
? ts.createTypeReferenceNode(customType, undefined) | |
: ts.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword); | |
} | |
} | |
function transformGraphQLEnumType(type, state) { | |
state.usedEnums[type.name] = type; | |
return ts.createTypeReferenceNode(ts.createIdentifier(type.name), []); | |
} | |
function transformInputType(schema, type, state) { | |
if (schema.isNonNull(type)) { | |
return transformNonNullableInputType(schema, type.ofType, state); | |
} | |
else { | |
return ts.createUnionTypeNode([ | |
transformNonNullableInputType(schema, type, state), | |
ts.createKeywordTypeNode(ts.SyntaxKind.NullKeyword) | |
]); | |
} | |
} | |
exports.transformInputType = transformInputType; | |
function transformNonNullableInputType(schema, type, state) { | |
if (schema.isList(type)) { | |
return ts.createTypeReferenceNode(ts.createIdentifier("ReadonlyArray"), [ | |
transformInputType(schema, type.ofType, state) | |
]); | |
} | |
else if (schema.isScalar(type)) { | |
return transformGraphQLScalarType(type, state); | |
} | |
else if (schema.isEnum(type)) { | |
return transformGraphQLEnumType(type, state); | |
} | |
else if (schema.isInputObject(type)) { | |
var typeIdentifier = getInputObjectTypeIdentifier(type); | |
if (state.generatedInputObjectTypes[typeIdentifier]) { | |
return ts.createTypeReferenceNode(ts.createIdentifier(typeIdentifier), []); | |
} | |
state.generatedInputObjectTypes[typeIdentifier] = "pending"; | |
var fields_1 = schema.getFields(type); | |
var props = Object.keys(fields_1) | |
.map(function (key) { return fields_1[key]; }) | |
.filter(function (field) { | |
return state.optionalInputFields && | |
state.optionalInputFields.indexOf(field.name) < 0; | |
}) | |
.map(function (field) { | |
var property = ts.createPropertySignature([ts.createToken(ts.SyntaxKind.ReadonlyKeyword)], ts.createIdentifier(field.name), !(field.type instanceof graphql_1.GraphQLNonNull) | |
? ts.createToken(ts.SyntaxKind.QuestionToken) | |
: undefined, transformInputType(schema, field.type, state), undefined); | |
return property; | |
}); | |
state.generatedInputObjectTypes[typeIdentifier] = ts.createTypeLiteralNode(props); | |
return ts.createTypeReferenceNode(ts.createIdentifier(typeIdentifier), []); | |
} | |
else { | |
throw new Error("Could not convert from GraphQL type " + type.toString()); | |
} | |
} | |
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHlwZVNjcmlwdFR5cGVUcmFuc2Zvcm1lcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvVHlwZVNjcmlwdFR5cGVUcmFuc2Zvcm1lcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxtQ0FXaUI7QUFFakIsK0JBQWlDO0FBZ0JqQyxTQUFTLDRCQUE0QixDQUFDLElBQTRCO0lBQ2hFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztBQUNuQixDQUFDO0FBRUQsU0FBZ0IsbUJBQW1CLENBQ2pDLElBQWlCLEVBQ2pCLEtBQVksRUFDWixXQUF5QjtJQUV6QixJQUFJLElBQUksWUFBWSx3QkFBYyxFQUFFO1FBQ2xDLE9BQU8sOEJBQThCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7S0FDeEU7U0FBTTtRQUNMLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixDQUFDO1lBQzVCLDhCQUE4QixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDO1lBQ3hELEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztTQUNwRCxDQUFDLENBQUM7S0FDSjtBQUNILENBQUM7QUFiRCxrREFhQztBQUVELFNBQVMsOEJBQThCLENBQ3JDLElBQWlCLEVBQ2pCLEtBQVksRUFDWixXQUF5QjtJQUV6QixJQUFJLElBQUksWUFBWSxxQkFBVyxFQUFFO1FBQy9CLE9BQU8sRUFBRSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUN0RSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUM7U0FDckQsQ0FBQyxDQUFDO0tBQ0o7U0FBTSxJQUNMLElBQUksWUFBWSwyQkFBaUI7UUFDakMsSUFBSSxZQUFZLDBCQUFnQjtRQUNoQyxJQUFJLFlBQVksOEJBQW9CLEVBQ3BDO1FBQ0EsT0FBTyxXQUFZLENBQUM7S0FDckI7U0FBTSxJQUFJLElBQUksWUFBWSwyQkFBaUIsRUFBRTtRQUM1QyxPQUFPLDBCQUEwQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNoRDtTQUFNLElBQUksSUFBSSxZQUFZLHlCQUFlLEVBQUU7UUFDMUMsT0FBTyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDOUM7U0FBTTtRQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXVDLElBQUksQ0FBQyxRQUFRLEVBQUksQ0FBQyxDQUFDO0tBQzNFO0FBQ0gsQ0FBQztBQUVELFNBQVMsMEJBQTBCLENBQ2pDLElBQXVCLEVBQ3ZCLEtBQVk7SUFFWixJQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsRCxRQUFRLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQy9CLEtBQUssSUFBSSxDQUFDO1FBQ1YsS0FBSyxRQUFRLENBQUM7UUFDZCxLQUFLLEtBQUs7WUFDUixPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9ELEtBQUssT0FBTyxDQUFDO1FBQ2IsS0FBSyxLQUFLO1lBQ1IsT0FBTyxFQUFFLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvRCxLQUFLLFNBQVM7WUFDWixPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRWhFO1lBQ0UsT0FBTyxVQUFVO2dCQUNmLENBQUMsQ0FBQyxFQUFFLENBQUMsdUJBQXVCLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQztnQkFDbkQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0tBQzlEO0FBQ0gsQ0FBQztBQUVELFNBQVMsd0JBQXdCLENBQy9CLElBQXFCLEVBQ3JCLEtBQVk7SUFFWixLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDbEMsT0FBTyxFQUFFLENBQUMsdUJBQXVCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN4RSxDQUFDO0FBRUQsU0FBZ0Isa0JBQWtCLENBQ2hDLElBQXNCLEVBQ3RCLEtBQVk7SUFFWixJQUFJLElBQUksWUFBWSx3QkFBYyxFQUFFO1FBQ2xDLE9BQU8sNkJBQTZCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztLQUMxRDtTQUFNO1FBQ0wsT0FBTyxFQUFFLENBQUMsbUJBQW1CLENBQUM7WUFDNUIsNkJBQTZCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztZQUMxQyxFQUFFLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7U0FDcEQsQ0FBQyxDQUFDO0tBQ0o7QUFDSCxDQUFDO0FBWkQsZ0RBWUM7QUFFRCxTQUFTLDZCQUE2QixDQUFDLElBQXNCLEVBQUUsS0FBWTtJQUN6RSxJQUFJLElBQUksWUFBWSxxQkFBVyxFQUFFO1FBQy9CLE9BQU8sRUFBRSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUN0RSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztTQUN2QyxDQUFDLENBQUM7S0FDSjtTQUFNLElBQUksSUFBSSxZQUFZLDJCQUFpQixFQUFFO1FBQzVDLE9BQU8sMEJBQTBCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ2hEO1NBQU0sSUFBSSxJQUFJLFlBQVkseUJBQWUsRUFBRTtRQUMxQyxPQUFPLHdCQUF3QixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztLQUM5QztTQUFNLElBQUksSUFBSSxZQUFZLGdDQUFzQixFQUFFO1FBQ2pELElBQU0sY0FBYyxHQUFHLDRCQUE0QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFELElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ25ELE9BQU8sRUFBRSxDQUFDLHVCQUF1QixDQUMvQixFQUFFLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEVBQ25DLEVBQUUsQ0FDSCxDQUFDO1NBQ0g7UUFDRCxLQUFLLENBQUMseUJBQXlCLENBQUMsY0FBYyxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBQzVELElBQU0sUUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVoQyxJQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQU0sQ0FBQzthQUM5QixHQUFHLENBQUMsVUFBQSxHQUFHLElBQUksT0FBQSxRQUFNLENBQUMsR0FBRyxDQUFDLEVBQVgsQ0FBVyxDQUFDO2FBQ3ZCLE1BQU0sQ0FDTCxVQUFBLEtBQUs7WUFDSCxPQUFBLEtBQUssQ0FBQyxtQkFBbUI7Z0JBQ3pCLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7UUFEakQsQ0FDaUQsQ0FDcEQ7YUFDQSxHQUFHLENBQUMsVUFBQSxLQUFLO1lBQ1IsSUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUN6QyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUMvQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUMvQixDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksWUFBWSx3QkFBYyxDQUFDO2dCQUNyQyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztnQkFDN0MsQ0FBQyxDQUFDLFNBQVMsRUFDYixrQkFBa0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUNyQyxTQUFTLENBQ1YsQ0FBQztZQUNGLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsS0FBSyxDQUFDLHlCQUF5QixDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsQ0FDeEUsS0FBSyxDQUNOLENBQUM7UUFDRixPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDNUU7U0FBTTtRQUNMLE1BQU0sSUFBSSxLQUFLLENBQ2IseUNBQXdDLElBQXlCLENBQUMsUUFBUSxFQUFJLENBQy9FLENBQUM7S0FDSDtBQUNILENBQUMifQ== |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment