@khanacademy/graphql-flow 0.3.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/pr-checks.yml +4 -6
- package/CHANGELOG.md +22 -0
- package/Readme.md +41 -167
- package/dist/__test__/example-schema.graphql +67 -0
- package/dist/__test__/generateTypeFileContents.test.js +157 -0
- package/dist/__test__/graphql-flow.test.js +639 -0
- package/dist/__test__/processPragmas.test.js +76 -0
- package/dist/cli/__test__/config.test.js +120 -0
- package/dist/cli/config.js +45 -106
- package/dist/cli/config.js.flow +37 -159
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/run.js +40 -36
- package/dist/cli/run.js.flow +56 -42
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/schema.json +91 -0
- package/dist/enums.js +9 -9
- package/dist/enums.js.flow +11 -11
- package/dist/enums.js.map +1 -1
- package/dist/generateResponseType.js +47 -47
- package/dist/generateResponseType.js.flow +55 -57
- package/dist/generateResponseType.js.map +1 -1
- package/dist/generateTypeFiles.js +13 -17
- package/dist/generateTypeFiles.js.flow +21 -43
- package/dist/generateTypeFiles.js.map +1 -1
- package/dist/generateVariablesType.js +24 -24
- package/dist/generateVariablesType.js.flow +25 -28
- package/dist/generateVariablesType.js.map +1 -1
- package/dist/index.js +0 -8
- package/dist/index.js.flow +4 -5
- package/dist/index.js.map +1 -1
- package/dist/parser/__test__/parse.test.js +247 -0
- package/dist/types.js.flow +26 -6
- package/package.json +3 -2
- package/src/__test__/generateTypeFileContents.test.js +3 -1
- package/src/__test__/graphql-flow.test.js +7 -7
- package/src/__test__/processPragmas.test.js +28 -15
- package/src/cli/__test__/config.test.js +110 -84
- package/src/cli/config.js +37 -159
- package/src/cli/run.js +56 -42
- package/src/cli/schema.json +91 -0
- package/src/enums.js +11 -11
- package/src/generateResponseType.js +55 -57
- package/src/generateTypeFiles.js +21 -43
- package/src/generateVariablesType.js +25 -28
- package/src/index.js +4 -5
- package/src/types.js +26 -6
- package/dist/cli/utils.js +0 -21
- package/dist/cli/utils.js.flow +0 -14
- package/dist/cli/utils.js.map +0 -1
- package/dist/jest-mock-graphql-tag.js +0 -88
- package/dist/jest-mock-graphql-tag.js.flow +0 -96
- package/dist/jest-mock-graphql-tag.js.map +0 -1
- package/src/cli/__test__/utils.test.js +0 -19
- package/src/cli/utils.js +0 -14
- package/src/jest-mock-graphql-tag.js +0 -96
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/generateResponseType.js"],"names":["generateResponseType","schema","query","config","ast","querySelectionToObjectType","selectionSet","selections","operation","typesByName","Mutation","Query","code","sortedObjectTypeAnnotation","properties","obj","babelTypes","objectTypeAnnotation","sort","a","b","type","aName","key","name","bName","undefined","path","join","isTopLevelType","length","allObjectTypes","genericTypeAnnotation","identifier","generateFragmentType","fragment","onType","typeCondition","value","objectPropertiesToFlow","interfacesByName","unionOrInterfaceToFlow","unionsByName","Error","_typeToFlow","selection","kind","readOnlyArray","typeParameterInstantiation","typeToFlow","ofType","union","console","log","anyTypeAnnotation","tname","childType","description","strictNullability","inner","result","nullableTypeAnnotation","ensureOnlyOneTypenameProperty","seenTypeName","filter","typeName","concat","map","newTypeName","fragments","errors","push","objectTypeProperty","alias","stringLiteralTypeAnnotation","fieldsByName","typeField","allFields","every","selectedAttributes","possibleTypes","slice","possible","configWithUpdatedPath","attributes","unionOrInterfaceSelection","flat","sharedAttributes","typeNameIndex","findIndex","x","unionTypeAnnotation","attrs","possibleTypesByName","indirectMatch"],"mappings":"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","sourcesContent":["// @flow\n/* eslint-disable no-console */\nimport generate from '@babel/generator'; // eslint-disable-line flowtype-errors/uncovered\nimport * as babelTypes from '@babel/types';\nimport {type BabelNodeFlowType} from '@babel/types';\nimport type {\n FieldNode,\n IntrospectionOutputTypeRef,\n OperationDefinitionNode,\n FragmentDefinitionNode,\n} from 'graphql';\nimport type {Config, Schema, Selections} from './types';\nimport {\n liftLeadingPropertyComments,\n maybeAddDescriptionComment,\n transferLeadingComments,\n} from './utils';\nimport {enumTypeToFlow, scalarTypeToFlow} from './enums';\nimport type {\n IntrospectionField,\n IntrospectionInterfaceType,\n IntrospectionObjectType,\n IntrospectionUnionType,\n} from 'graphql/utilities/introspectionQuery';\nimport {\n BabelNodeObjectTypeProperty,\n BabelNodeObjectTypeSpreadProperty,\n} from '@babel/types';\n\nexport const generateResponseType = (\n schema: Schema,\n query: OperationDefinitionNode,\n config: Config,\n): string => {\n const ast = querySelectionToObjectType(\n config,\n query.selectionSet.selections,\n query.operation === 'mutation'\n ? schema.typesByName.Mutation\n : schema.typesByName.Query,\n query.operation === 'mutation' ? 'mutation' : 'query',\n );\n // eslint-disable-next-line flowtype-errors/uncovered\n return generate(ast).code;\n};\n\nconst sortedObjectTypeAnnotation = (\n config: Config,\n properties: Array<\n BabelNodeObjectTypeProperty | BabelNodeObjectTypeSpreadProperty,\n >,\n) => {\n const obj = babelTypes.objectTypeAnnotation(\n properties.sort((a, b) => {\n if (\n a.type === 'ObjectTypeProperty' &&\n b.type === 'ObjectTypeProperty'\n ) {\n const aName = a.key.type === 'Identifier' ? a.key.name : '';\n const bName = b.key.type === 'Identifier' ? b.key.name : '';\n return aName < bName ? -1 : 1;\n }\n return 0;\n }),\n undefined /* indexers */,\n undefined /* callProperties */,\n undefined /* internalSlots */,\n true /* exact */,\n );\n const name = config.path.join('_');\n const isTopLevelType = config.path.length <= 1;\n if (config.allObjectTypes != null && !isTopLevelType) {\n config.allObjectTypes[name] = obj;\n return babelTypes.genericTypeAnnotation(babelTypes.identifier(name));\n } else {\n return obj;\n }\n};\n\nexport const generateFragmentType = (\n schema: Schema,\n fragment: FragmentDefinitionNode,\n config: Config,\n): string => {\n const onType = fragment.typeCondition.name.value;\n let ast;\n\n if (schema.typesByName[onType]) {\n ast = sortedObjectTypeAnnotation(\n config,\n objectPropertiesToFlow(\n config,\n schema.typesByName[onType],\n onType,\n fragment.selectionSet.selections,\n ),\n );\n } else if (schema.interfacesByName[onType]) {\n ast = unionOrInterfaceToFlow(\n config,\n config.schema.interfacesByName[onType],\n fragment.selectionSet.selections,\n );\n } else if (schema.unionsByName[onType]) {\n ast = unionOrInterfaceToFlow(\n config,\n config.schema.unionsByName[onType],\n fragment.selectionSet.selections,\n );\n } else {\n throw new Error(`Unknown ${onType}`);\n }\n\n // eslint-disable-next-line flowtype-errors/uncovered\n return generate(ast).code;\n};\n\nconst _typeToFlow = (\n config: Config,\n type,\n selection,\n): babelTypes.BabelNodeFlowType => {\n if (type.kind === 'SCALAR') {\n return scalarTypeToFlow(config, type.name);\n }\n if (type.kind === 'LIST') {\n return babelTypes.genericTypeAnnotation(\n config.readOnlyArray\n ? babelTypes.identifier('$ReadOnlyArray')\n : babelTypes.identifier('Array'),\n babelTypes.typeParameterInstantiation([\n typeToFlow(config, type.ofType, selection),\n ]),\n );\n }\n if (type.kind === 'UNION') {\n const union = config.schema.unionsByName[type.name];\n if (!selection.selectionSet) {\n console.log('no selection set', selection);\n return babelTypes.anyTypeAnnotation();\n }\n return unionOrInterfaceToFlow(\n config,\n union,\n selection.selectionSet.selections,\n );\n }\n\n if (type.kind === 'INTERFACE') {\n if (!selection.selectionSet) {\n console.log('no selection set', selection);\n return babelTypes.anyTypeAnnotation();\n }\n return unionOrInterfaceToFlow(\n config,\n config.schema.interfacesByName[type.name],\n selection.selectionSet.selections,\n );\n }\n if (type.kind === 'ENUM') {\n return enumTypeToFlow(config, type.name);\n }\n if (type.kind !== 'OBJECT') {\n console.log('not object', type);\n return babelTypes.anyTypeAnnotation();\n }\n\n const tname = type.name;\n if (!config.schema.typesByName[tname]) {\n console.log('unknown referenced type', tname);\n return babelTypes.anyTypeAnnotation();\n }\n const childType = config.schema.typesByName[tname];\n if (!selection.selectionSet) {\n console.log('no selection set', selection);\n return babelTypes.anyTypeAnnotation();\n }\n return maybeAddDescriptionComment(\n childType.description,\n querySelectionToObjectType(\n config,\n selection.selectionSet.selections,\n childType,\n tname,\n ),\n );\n};\n\nexport const typeToFlow = (\n config: Config,\n type: IntrospectionOutputTypeRef,\n selection: FieldNode,\n): babelTypes.BabelNodeFlowType => {\n // throw new Error('npoe');\n if (type.kind === 'NON_NULL') {\n return _typeToFlow(config, type.ofType, selection);\n }\n // If we don'babelTypes care about strict nullability checking, then pretend everything is non-null\n if (!config.strictNullability) {\n return _typeToFlow(config, type, selection);\n }\n const inner = _typeToFlow(config, type, selection);\n const result = babelTypes.nullableTypeAnnotation(inner);\n return transferLeadingComments(inner, result);\n};\n\nconst ensureOnlyOneTypenameProperty = (properties) => {\n let seenTypeName: false | string = false;\n return properties.filter((type) => {\n // The apollo-utilities \"addTypeName\" utility will add it\n // even if it's already specified :( so we have to filter out\n // the extra one here.\n if (\n type.type === 'ObjectTypeProperty' &&\n type.key.name === '__typename'\n ) {\n const name =\n type.value.type === 'StringLiteralTypeAnnotation'\n ? type.value.value\n : 'INVALID';\n if (seenTypeName) {\n if (name !== seenTypeName) {\n throw new Error(\n `Got two different type names ${name}, ${seenTypeName}`,\n );\n }\n return false;\n }\n seenTypeName = name;\n }\n return true;\n });\n};\n\nconst querySelectionToObjectType = (\n config: Config,\n selections,\n type,\n typeName: string,\n): BabelNodeFlowType => {\n return sortedObjectTypeAnnotation(\n config,\n ensureOnlyOneTypenameProperty(\n objectPropertiesToFlow(config, type, typeName, selections),\n ),\n );\n};\n\nexport const objectPropertiesToFlow = (\n config: Config,\n type: IntrospectionObjectType & {\n fieldsByName: {[name: string]: IntrospectionField},\n },\n typeName: string,\n selections: Selections,\n): Array<BabelNodeObjectTypeProperty | BabelNodeObjectTypeSpreadProperty> => {\n return [].concat(\n ...selections.map((selection) => {\n switch (selection.kind) {\n case 'InlineFragment': {\n const newTypeName =\n selection.typeCondition?.name.value ?? typeName;\n if (newTypeName !== typeName) {\n return [];\n }\n return objectPropertiesToFlow(\n config,\n config.schema.typesByName[newTypeName],\n newTypeName,\n selection.selectionSet.selections,\n );\n }\n case 'FragmentSpread':\n if (!config.fragments[selection.name.value]) {\n config.errors.push(\n `No fragment named '${selection.name.value}'. Did you forget to include it in the template literal?`,\n );\n return [\n babelTypes.objectTypeProperty(\n babelTypes.identifier(selection.name.value),\n babelTypes.genericTypeAnnotation(\n babelTypes.identifier(`UNKNOWN_FRAGMENT`),\n ),\n ),\n ];\n }\n\n return objectPropertiesToFlow(\n config,\n type,\n typeName,\n config.fragments[selection.name.value].selectionSet\n .selections,\n );\n\n case 'Field':\n const name = selection.name.value;\n const alias: string = selection.alias\n ? selection.alias.value\n : name;\n if (name === '__typename') {\n return [\n babelTypes.objectTypeProperty(\n babelTypes.identifier(alias),\n babelTypes.stringLiteralTypeAnnotation(\n typeName,\n ),\n ),\n ];\n }\n if (!type.fieldsByName[name]) {\n config.errors.push(\n `Unknown field '${name}' for type '${typeName}'`,\n );\n return babelTypes.objectTypeProperty(\n babelTypes.identifier(alias),\n babelTypes.genericTypeAnnotation(\n babelTypes.identifier(\n `UNKNOWN_FIELD[\"${name}\"]`,\n ),\n ),\n );\n }\n const typeField = type.fieldsByName[name];\n\n return [\n maybeAddDescriptionComment(\n typeField.description,\n liftLeadingPropertyComments(\n babelTypes.objectTypeProperty(\n babelTypes.identifier(alias),\n typeToFlow(\n {\n ...config,\n path: config.path.concat([alias]),\n },\n typeField.type,\n selection,\n ),\n ),\n ),\n ),\n ];\n\n default:\n config.errors.push(\n // eslint-disable-next-line flowtype-errors/uncovered\n `Unsupported selection kind '${selection.kind}'`,\n );\n return [];\n }\n }),\n );\n};\n\nexport const unionOrInterfaceToFlow = (\n config: Config,\n type:\n | IntrospectionUnionType\n | (IntrospectionInterfaceType & {\n fieldsByName: {[key: string]: IntrospectionField},\n }),\n selections: Selections,\n): BabelNodeFlowType => {\n const allFields = selections.every(\n (selection) => selection.kind === 'Field',\n );\n const selectedAttributes: Array<{\n attributes: Array<\n BabelNodeObjectTypeProperty | BabelNodeObjectTypeSpreadProperty,\n >,\n typeName: string,\n }> = type.possibleTypes\n .slice()\n .sort((a, b) => {\n return a.name < b.name ? -1 : 1;\n })\n .map((possible) => {\n const configWithUpdatedPath = {\n ...config,\n path: allFields\n ? config.path\n : config.path.concat([possible.name]),\n };\n return {\n typeName: possible.name,\n attributes: ensureOnlyOneTypenameProperty(\n selections\n .map((selection) =>\n unionOrInterfaceSelection(\n configWithUpdatedPath,\n type,\n possible,\n selection,\n ),\n )\n .flat(),\n ),\n };\n });\n // If they're all fields, the only selection that could be different is __typename\n if (allFields) {\n const sharedAttributes = selectedAttributes[0].attributes.slice();\n const typeNameIndex = selectedAttributes[0].attributes.findIndex(\n (x) =>\n x.type === 'ObjectTypeProperty' &&\n x.key.type === 'Identifier' &&\n x.key.name === '__typename',\n );\n if (typeNameIndex !== -1) {\n sharedAttributes[typeNameIndex] = babelTypes.objectTypeProperty(\n babelTypes.identifier('__typename'),\n babelTypes.unionTypeAnnotation(\n selectedAttributes.map(\n (attrs) =>\n // eslint-disable-next-line flowtype-errors/uncovered\n ((attrs.attributes[\n typeNameIndex\n ]: any): BabelNodeObjectTypeProperty).value,\n ),\n ),\n );\n }\n return sortedObjectTypeAnnotation(config, sharedAttributes);\n }\n if (selectedAttributes.length === 1) {\n return sortedObjectTypeAnnotation(\n config,\n selectedAttributes[0].attributes,\n );\n }\n /**\n * When generating the objects for the sub-options of a union, the path needs\n * to include the name of the object type.\n * ```\n * query getFriend {\n * friend {\n * ... on Human { id }\n * ... on Droid { arms }\n * }\n * }\n * ```\n * produces\n * ```\n * type getFriend = {friend: getFriend_friend_Human | getFriend_friend_Droid }\n * type getFriend_friend_Human = {id: string}\n * type getFriend_friend_Droid = {arms: number}\n * ```\n * Note that this is different from when an attribute has a plain object type.\n * ```\n * query getHuman {\n * me: human(id: \"me\") { id }\n * }\n * ```\n * produces\n * ```\n * type getHuman = {me: getHuman_me}\n * type getHuman_me = {id: string}\n * ```\n * instead of e.g. `getHuman_me_Human`.\n */\n const result = babelTypes.unionTypeAnnotation(\n selectedAttributes.map(({typeName, attributes}) =>\n sortedObjectTypeAnnotation(\n {...config, path: config.path.concat([typeName])},\n attributes,\n ),\n ),\n );\n const name = config.path.join('_');\n if (config.allObjectTypes && config.path.length > 1) {\n config.allObjectTypes[name] = result;\n return babelTypes.genericTypeAnnotation(babelTypes.identifier(name));\n }\n return result;\n};\nconst unionOrInterfaceSelection = (\n config,\n type,\n possible,\n selection,\n): Array<BabelNodeObjectTypeProperty | BabelNodeObjectTypeSpreadProperty> => {\n if (selection.kind === 'Field' && selection.name.value === '__typename') {\n const alias = selection.alias\n ? selection.alias.value\n : selection.name.value;\n return [\n babelTypes.objectTypeProperty(\n babelTypes.identifier(alias),\n babelTypes.stringLiteralTypeAnnotation(possible.name),\n ),\n ];\n }\n if (selection.kind === 'Field' && type.kind !== 'UNION') {\n // this is an interface\n const name = selection.name.value;\n const alias = selection.alias ? selection.alias.value : name;\n if (!type.fieldsByName[name]) {\n config.errors.push(\n 'Unknown field: ' +\n name +\n ' on type ' +\n type.name +\n ' for possible ' +\n possible.name,\n );\n return [\n babelTypes.objectTypeProperty(\n babelTypes.identifier(alias),\n babelTypes.genericTypeAnnotation(\n babelTypes.identifier(`UNKNOWN_FIELD`),\n ),\n ),\n ];\n }\n const typeField = type.fieldsByName[name];\n return [\n liftLeadingPropertyComments(\n babelTypes.objectTypeProperty(\n babelTypes.identifier(alias),\n typeToFlow(\n {...config, path: config.path.concat([name])},\n typeField.type,\n selection,\n ),\n ),\n ),\n ];\n }\n if (selection.kind === 'FragmentSpread') {\n const fragment = config.fragments[selection.name.value];\n if (!fragment) {\n throw new Error(`Unknown fragment ${selection.name.value}`);\n }\n const typeName = fragment.typeCondition.name.value;\n if (\n (config.schema.interfacesByName[typeName] &&\n config.schema.interfacesByName[typeName].possibleTypesByName[\n possible.name\n ]) ||\n typeName === possible.name\n ) {\n return [].concat(\n ...fragment.selectionSet.selections.map((selection) =>\n unionOrInterfaceSelection(\n config,\n config.schema.typesByName[possible.name],\n possible,\n selection,\n ),\n ),\n );\n } else {\n return [];\n }\n }\n if (selection.kind !== 'InlineFragment') {\n config.errors.push(\n `union selectors must be inline fragment: found ${selection.kind}`,\n );\n if (type.kind === 'UNION') {\n config.errors\n .push(`You're trying to select a field from the union ${type.name},\nbut the only field you're allowed to select is \"__typename\".\nTry using an inline fragment \"... on SomeType {}\".`);\n }\n return [];\n }\n if (selection.typeCondition) {\n const typeName = selection.typeCondition.name.value;\n const indirectMatch =\n config.schema.interfacesByName[typeName]?.possibleTypesByName[\n possible.name\n ];\n if (typeName !== possible.name && !indirectMatch) {\n return [];\n }\n }\n return objectPropertiesToFlow(\n config,\n config.schema.typesByName[possible.name],\n possible.name,\n selection.selectionSet.selections,\n );\n};\n"],"file":"generateResponseType.js"}
|
|
1
|
+
{"version":3,"sources":["../src/generateResponseType.js"],"names":["generateResponseType","schema","query","ctx","ast","querySelectionToObjectType","selectionSet","selections","operation","typesByName","Mutation","Query","code","sortedObjectTypeAnnotation","properties","obj","babelTypes","objectTypeAnnotation","sort","a","b","type","aName","key","name","bName","undefined","path","join","isTopLevelType","length","allObjectTypes","genericTypeAnnotation","identifier","generateFragmentType","fragment","onType","typeCondition","value","objectPropertiesToFlow","interfacesByName","unionOrInterfaceToFlow","unionsByName","Error","_typeToFlow","selection","kind","readOnlyArray","typeParameterInstantiation","typeToFlow","ofType","union","console","log","anyTypeAnnotation","tname","childType","description","strictNullability","inner","result","nullableTypeAnnotation","ensureOnlyOneTypenameProperty","seenTypeName","filter","typeName","concat","map","newTypeName","fragments","errors","push","objectTypeProperty","alias","stringLiteralTypeAnnotation","fieldsByName","typeField","allFields","every","selectedAttributes","possibleTypes","slice","possible","configWithUpdatedPath","attributes","unionOrInterfaceSelection","flat","sharedAttributes","typeNameIndex","findIndex","x","unionTypeAnnotation","attrs","config","possibleTypesByName","indirectMatch"],"mappings":";;;;;;;AAEA;;AACA;;AASA;;AAKA;;;;;;;;AAhBA;AACyC;AA2BlC,MAAMA,oBAAoB,GAAG,CAChCC,MADgC,EAEhCC,KAFgC,EAGhCC,GAHgC,KAIvB;AACT,QAAMC,GAAG,GAAGC,0BAA0B,CAClCF,GADkC,EAElCD,KAAK,CAACI,YAAN,CAAmBC,UAFe,EAGlCL,KAAK,CAACM,SAAN,KAAoB,UAApB,GACMP,MAAM,CAACQ,WAAP,CAAmBC,QADzB,GAEMT,MAAM,CAACQ,WAAP,CAAmBE,KALS,EAMlCT,KAAK,CAACM,SAAN,KAAoB,UAApB,GAAiC,UAAjC,GAA8C,OANZ,CAAtC,CADS,CAST;;AACA,SAAO,wBAASJ,GAAT,EAAcQ,IAArB;AACH,CAfM;;;;AAiBP,MAAMC,0BAA0B,GAAG,CAC/BV,GAD+B,EAE/BW,UAF+B,KAK9B;AACD,QAAMC,GAAG,GAAGC,UAAU,CAACC,oBAAX,CACRH,UAAU,CAACI,IAAX,CAAgB,CAACC,CAAD,EAAIC,CAAJ,KAAU;AACtB,QACID,CAAC,CAACE,IAAF,KAAW,oBAAX,IACAD,CAAC,CAACC,IAAF,KAAW,oBAFf,EAGE;AACE,YAAMC,KAAK,GAAGH,CAAC,CAACI,GAAF,CAAMF,IAAN,KAAe,YAAf,GAA8BF,CAAC,CAACI,GAAF,CAAMC,IAApC,GAA2C,EAAzD;AACA,YAAMC,KAAK,GAAGL,CAAC,CAACG,GAAF,CAAMF,IAAN,KAAe,YAAf,GAA8BD,CAAC,CAACG,GAAF,CAAMC,IAApC,GAA2C,EAAzD;AACA,aAAOF,KAAK,GAAGG,KAAR,GAAgB,CAAC,CAAjB,GAAqB,CAA5B;AACH;;AACD,WAAO,CAAP;AACH,GAVD,CADQ,EAYRC;AAAU;AAZF,IAaRA;AAAU;AAbF,IAcRA;AAAU;AAdF,IAeR;AAAK;AAfG,GAAZ;AAiBA,QAAMF,IAAI,GAAGrB,GAAG,CAACwB,IAAJ,CAASC,IAAT,CAAc,GAAd,CAAb;AACA,QAAMC,cAAc,GAAG1B,GAAG,CAACwB,IAAJ,CAASG,MAAT,IAAmB,CAA1C;;AACA,MAAI3B,GAAG,CAAC4B,cAAJ,IAAsB,IAAtB,IAA8B,CAACF,cAAnC,EAAmD;AAC/C1B,IAAAA,GAAG,CAAC4B,cAAJ,CAAmBP,IAAnB,IAA2BT,GAA3B;AACA,WAAOC,UAAU,CAACgB,qBAAX,CAAiChB,UAAU,CAACiB,UAAX,CAAsBT,IAAtB,CAAjC,CAAP;AACH,GAHD,MAGO;AACH,WAAOT,GAAP;AACH;AACJ,CA/BD;;AAiCO,MAAMmB,oBAAoB,GAAG,CAChCjC,MADgC,EAEhCkC,QAFgC,EAGhChC,GAHgC,KAIvB;AACT,QAAMiC,MAAM,GAAGD,QAAQ,CAACE,aAAT,CAAuBb,IAAvB,CAA4Bc,KAA3C;AACA,MAAIlC,GAAJ;;AAEA,MAAIH,MAAM,CAACQ,WAAP,CAAmB2B,MAAnB,CAAJ,EAAgC;AAC5BhC,IAAAA,GAAG,GAAGS,0BAA0B,CAC5BV,GAD4B,EAE5BoC,sBAAsB,CAClBpC,GADkB,EAElBF,MAAM,CAACQ,WAAP,CAAmB2B,MAAnB,CAFkB,EAGlBA,MAHkB,EAIlBD,QAAQ,CAAC7B,YAAT,CAAsBC,UAJJ,CAFM,CAAhC;AASH,GAVD,MAUO,IAAIN,MAAM,CAACuC,gBAAP,CAAwBJ,MAAxB,CAAJ,EAAqC;AACxChC,IAAAA,GAAG,GAAGqC,sBAAsB,CACxBtC,GADwB,EAExBA,GAAG,CAACF,MAAJ,CAAWuC,gBAAX,CAA4BJ,MAA5B,CAFwB,EAGxBD,QAAQ,CAAC7B,YAAT,CAAsBC,UAHE,CAA5B;AAKH,GANM,MAMA,IAAIN,MAAM,CAACyC,YAAP,CAAoBN,MAApB,CAAJ,EAAiC;AACpChC,IAAAA,GAAG,GAAGqC,sBAAsB,CACxBtC,GADwB,EAExBA,GAAG,CAACF,MAAJ,CAAWyC,YAAX,CAAwBN,MAAxB,CAFwB,EAGxBD,QAAQ,CAAC7B,YAAT,CAAsBC,UAHE,CAA5B;AAKH,GANM,MAMA;AACH,UAAM,IAAIoC,KAAJ,CAAW,WAAUP,MAAO,EAA5B,CAAN;AACH,GA5BQ,CA8BT;;;AACA,SAAO,wBAAShC,GAAT,EAAcQ,IAArB;AACH,CApCM;;;;AAsCP,MAAMgC,WAAW,GAAG,CAChBzC,GADgB,EAEhBkB,IAFgB,EAGhBwB,SAHgB,KAIe;AAC/B,MAAIxB,IAAI,CAACyB,IAAL,KAAc,QAAlB,EAA4B;AACxB,WAAO,6BAAiB3C,GAAjB,EAAsBkB,IAAI,CAACG,IAA3B,CAAP;AACH;;AACD,MAAIH,IAAI,CAACyB,IAAL,KAAc,MAAlB,EAA0B;AACtB,WAAO9B,UAAU,CAACgB,qBAAX,CACH7B,GAAG,CAAC4C,aAAJ,GACM/B,UAAU,CAACiB,UAAX,CAAsB,gBAAtB,CADN,GAEMjB,UAAU,CAACiB,UAAX,CAAsB,OAAtB,CAHH,EAIHjB,UAAU,CAACgC,0BAAX,CAAsC,CAClCC,UAAU,CAAC9C,GAAD,EAAMkB,IAAI,CAAC6B,MAAX,EAAmBL,SAAnB,CADwB,CAAtC,CAJG,CAAP;AAQH;;AACD,MAAIxB,IAAI,CAACyB,IAAL,KAAc,OAAlB,EAA2B;AACvB,UAAMK,KAAK,GAAGhD,GAAG,CAACF,MAAJ,CAAWyC,YAAX,CAAwBrB,IAAI,CAACG,IAA7B,CAAd;;AACA,QAAI,CAACqB,SAAS,CAACvC,YAAf,EAA6B;AACzB8C,MAAAA,OAAO,CAACC,GAAR,CAAY,kBAAZ,EAAgCR,SAAhC;AACA,aAAO7B,UAAU,CAACsC,iBAAX,EAAP;AACH;;AACD,WAAOb,sBAAsB,CACzBtC,GADyB,EAEzBgD,KAFyB,EAGzBN,SAAS,CAACvC,YAAV,CAAuBC,UAHE,CAA7B;AAKH;;AAED,MAAIc,IAAI,CAACyB,IAAL,KAAc,WAAlB,EAA+B;AAC3B,QAAI,CAACD,SAAS,CAACvC,YAAf,EAA6B;AACzB8C,MAAAA,OAAO,CAACC,GAAR,CAAY,kBAAZ,EAAgCR,SAAhC;AACA,aAAO7B,UAAU,CAACsC,iBAAX,EAAP;AACH;;AACD,WAAOb,sBAAsB,CACzBtC,GADyB,EAEzBA,GAAG,CAACF,MAAJ,CAAWuC,gBAAX,CAA4BnB,IAAI,CAACG,IAAjC,CAFyB,EAGzBqB,SAAS,CAACvC,YAAV,CAAuBC,UAHE,CAA7B;AAKH;;AACD,MAAIc,IAAI,CAACyB,IAAL,KAAc,MAAlB,EAA0B;AACtB,WAAO,2BAAe3C,GAAf,EAAoBkB,IAAI,CAACG,IAAzB,CAAP;AACH;;AACD,MAAIH,IAAI,CAACyB,IAAL,KAAc,QAAlB,EAA4B;AACxBM,IAAAA,OAAO,CAACC,GAAR,CAAY,YAAZ,EAA0BhC,IAA1B;AACA,WAAOL,UAAU,CAACsC,iBAAX,EAAP;AACH;;AAED,QAAMC,KAAK,GAAGlC,IAAI,CAACG,IAAnB;;AACA,MAAI,CAACrB,GAAG,CAACF,MAAJ,CAAWQ,WAAX,CAAuB8C,KAAvB,CAAL,EAAoC;AAChCH,IAAAA,OAAO,CAACC,GAAR,CAAY,yBAAZ,EAAuCE,KAAvC;AACA,WAAOvC,UAAU,CAACsC,iBAAX,EAAP;AACH;;AACD,QAAME,SAAS,GAAGrD,GAAG,CAACF,MAAJ,CAAWQ,WAAX,CAAuB8C,KAAvB,CAAlB;;AACA,MAAI,CAACV,SAAS,CAACvC,YAAf,EAA6B;AACzB8C,IAAAA,OAAO,CAACC,GAAR,CAAY,kBAAZ,EAAgCR,SAAhC;AACA,WAAO7B,UAAU,CAACsC,iBAAX,EAAP;AACH;;AACD,SAAO,uCACHE,SAAS,CAACC,WADP,EAEHpD,0BAA0B,CACtBF,GADsB,EAEtB0C,SAAS,CAACvC,YAAV,CAAuBC,UAFD,EAGtBiD,SAHsB,EAItBD,KAJsB,CAFvB,CAAP;AASH,CArED;;AAuEO,MAAMN,UAAU,GAAG,CACtB9C,GADsB,EAEtBkB,IAFsB,EAGtBwB,SAHsB,KAIS;AAC/B;AACA,MAAIxB,IAAI,CAACyB,IAAL,KAAc,UAAlB,EAA8B;AAC1B,WAAOF,WAAW,CAACzC,GAAD,EAAMkB,IAAI,CAAC6B,MAAX,EAAmBL,SAAnB,CAAlB;AACH,GAJ8B,CAK/B;;;AACA,MAAI,CAAC1C,GAAG,CAACuD,iBAAT,EAA4B;AACxB,WAAOd,WAAW,CAACzC,GAAD,EAAMkB,IAAN,EAAYwB,SAAZ,CAAlB;AACH;;AACD,QAAMc,KAAK,GAAGf,WAAW,CAACzC,GAAD,EAAMkB,IAAN,EAAYwB,SAAZ,CAAzB;;AACA,QAAMe,MAAM,GAAG5C,UAAU,CAAC6C,sBAAX,CAAkCF,KAAlC,CAAf;AACA,SAAO,oCAAwBA,KAAxB,EAA+BC,MAA/B,CAAP;AACH,CAhBM;;;;AAkBP,MAAME,6BAA6B,GAAIhD,UAAD,IAAgB;AAClD,MAAIiD,YAA4B,GAAG,KAAnC;AACA,SAAOjD,UAAU,CAACkD,MAAX,CAAmB3C,IAAD,IAAU;AAC/B;AACA;AACA;AACA,QACIA,IAAI,CAACA,IAAL,KAAc,oBAAd,IACAA,IAAI,CAACE,GAAL,CAASC,IAAT,KAAkB,YAFtB,EAGE;AACE,YAAMA,IAAI,GACNH,IAAI,CAACiB,KAAL,CAAWjB,IAAX,KAAoB,6BAApB,GACMA,IAAI,CAACiB,KAAL,CAAWA,KADjB,GAEM,SAHV;;AAIA,UAAIyB,YAAJ,EAAkB;AACd,YAAIvC,IAAI,KAAKuC,YAAb,EAA2B;AACvB,gBAAM,IAAIpB,KAAJ,CACD,gCAA+BnB,IAAK,KAAIuC,YAAa,EADpD,CAAN;AAGH;;AACD,eAAO,KAAP;AACH;;AACDA,MAAAA,YAAY,GAAGvC,IAAf;AACH;;AACD,WAAO,IAAP;AACH,GAvBM,CAAP;AAwBH,CA1BD;;AA4BA,MAAMnB,0BAA0B,GAAG,CAC/BF,GAD+B,EAE/BI,UAF+B,EAG/Bc,IAH+B,EAI/B4C,QAJ+B,KAKX;AACpB,SAAOpD,0BAA0B,CAC7BV,GAD6B,EAE7B2D,6BAA6B,CACzBvB,sBAAsB,CAACpC,GAAD,EAAMkB,IAAN,EAAY4C,QAAZ,EAAsB1D,UAAtB,CADG,CAFA,CAAjC;AAMH,CAZD;;AAcO,MAAMgC,sBAAsB,GAAG,CAClCpC,GADkC,EAElCkB,IAFkC,EAKlC4C,QALkC,EAMlC1D,UANkC,KAOuC;AACzE,SAAO,GAAG2D,MAAH,CACH,GAAG3D,UAAU,CAAC4D,GAAX,CAAgBtB,SAAD,IAAe;AAC7B,YAAQA,SAAS,CAACC,IAAlB;AACI,WAAK,gBAAL;AAAuB;AAAA;;AACnB,gBAAMsB,WAAW,sDACbvB,SAAS,CAACR,aADG,2DACb,uBAAyBb,IAAzB,CAA8Bc,KADjB,yEAC0B2B,QAD3C;;AAEA,cAAIG,WAAW,KAAKH,QAApB,EAA8B;AAC1B,mBAAO,EAAP;AACH;;AACD,iBAAO1B,sBAAsB,CACzBpC,GADyB,EAEzBA,GAAG,CAACF,MAAJ,CAAWQ,WAAX,CAAuB2D,WAAvB,CAFyB,EAGzBA,WAHyB,EAIzBvB,SAAS,CAACvC,YAAV,CAAuBC,UAJE,CAA7B;AAMH;;AACD,WAAK,gBAAL;AACI,YAAI,CAACJ,GAAG,CAACkE,SAAJ,CAAcxB,SAAS,CAACrB,IAAV,CAAec,KAA7B,CAAL,EAA0C;AACtCnC,UAAAA,GAAG,CAACmE,MAAJ,CAAWC,IAAX,CACK,sBAAqB1B,SAAS,CAACrB,IAAV,CAAec,KAAM,0DAD/C;AAGA,iBAAO,CACHtB,UAAU,CAACwD,kBAAX,CACIxD,UAAU,CAACiB,UAAX,CAAsBY,SAAS,CAACrB,IAAV,CAAec,KAArC,CADJ,EAEItB,UAAU,CAACgB,qBAAX,CACIhB,UAAU,CAACiB,UAAX,CAAuB,kBAAvB,CADJ,CAFJ,CADG,CAAP;AAQH;;AAED,eAAOM,sBAAsB,CACzBpC,GADyB,EAEzBkB,IAFyB,EAGzB4C,QAHyB,EAIzB9D,GAAG,CAACkE,SAAJ,CAAcxB,SAAS,CAACrB,IAAV,CAAec,KAA7B,EAAoChC,YAApC,CACKC,UALoB,CAA7B;;AAQJ,WAAK,OAAL;AACI,cAAMiB,IAAI,GAAGqB,SAAS,CAACrB,IAAV,CAAec,KAA5B;AACA,cAAMmC,KAAa,GAAG5B,SAAS,CAAC4B,KAAV,GAChB5B,SAAS,CAAC4B,KAAV,CAAgBnC,KADA,GAEhBd,IAFN;;AAGA,YAAIA,IAAI,KAAK,YAAb,EAA2B;AACvB,iBAAO,CACHR,UAAU,CAACwD,kBAAX,CACIxD,UAAU,CAACiB,UAAX,CAAsBwC,KAAtB,CADJ,EAEIzD,UAAU,CAAC0D,2BAAX,CACIT,QADJ,CAFJ,CADG,CAAP;AAQH;;AACD,YAAI,CAAC5C,IAAI,CAACsD,YAAL,CAAkBnD,IAAlB,CAAL,EAA8B;AAC1BrB,UAAAA,GAAG,CAACmE,MAAJ,CAAWC,IAAX,CACK,kBAAiB/C,IAAK,eAAcyC,QAAS,GADlD;AAGA,iBAAOjD,UAAU,CAACwD,kBAAX,CACHxD,UAAU,CAACiB,UAAX,CAAsBwC,KAAtB,CADG,EAEHzD,UAAU,CAACgB,qBAAX,CACIhB,UAAU,CAACiB,UAAX,CACK,kBAAiBT,IAAK,IAD3B,CADJ,CAFG,CAAP;AAQH;;AACD,cAAMoD,SAAS,GAAGvD,IAAI,CAACsD,YAAL,CAAkBnD,IAAlB,CAAlB;AAEA,eAAO,CACH,uCACIoD,SAAS,CAACnB,WADd,EAEI,wCACIzC,UAAU,CAACwD,kBAAX,CACIxD,UAAU,CAACiB,UAAX,CAAsBwC,KAAtB,CADJ,EAEIxB,UAAU,CACN,EACI,GAAG9C,GADP;AAEIwB,UAAAA,IAAI,EAAExB,GAAG,CAACwB,IAAJ,CAASuC,MAAT,CAAgB,CAACO,KAAD,CAAhB;AAFV,SADM,EAKNG,SAAS,CAACvD,IALJ,EAMNwB,SANM,CAFd,CADJ,CAFJ,CADG,CAAP;;AAmBJ;AACI1C,QAAAA,GAAG,CAACmE,MAAJ,CAAWC,IAAX,EACI;AACC,uCAA8B1B,SAAS,CAACC,IAAK,GAFlD;AAIA,eAAO,EAAP;AA3FR;AA6FH,GA9FE,CADA,CAAP;AAiGH,CAzGM;;;;AA2GA,MAAML,sBAAsB,GAAG,CAClCtC,GADkC,EAElCkB,IAFkC,EAOlCd,UAPkC,KAQd;AACpB,QAAMsE,SAAS,GAAGtE,UAAU,CAACuE,KAAX,CACbjC,SAAD,IAAeA,SAAS,CAACC,IAAV,KAAmB,OADpB,CAAlB;AAGA,QAAMiC,kBAKJ,GAAG1D,IAAI,CAAC2D,aAAL,CACAC,KADA,GAEA/D,IAFA,CAEK,CAACC,CAAD,EAAIC,CAAJ,KAAU;AACZ,WAAOD,CAAC,CAACK,IAAF,GAASJ,CAAC,CAACI,IAAX,GAAkB,CAAC,CAAnB,GAAuB,CAA9B;AACH,GAJA,EAKA2C,GALA,CAKKe,QAAD,IAAc;AACf,UAAMC,qBAAqB,GAAG,EAC1B,GAAGhF,GADuB;AAE1BwB,MAAAA,IAAI,EAAEkD,SAAS,GAAG1E,GAAG,CAACwB,IAAP,GAAcxB,GAAG,CAACwB,IAAJ,CAASuC,MAAT,CAAgB,CAACgB,QAAQ,CAAC1D,IAAV,CAAhB;AAFH,KAA9B;AAIA,WAAO;AACHyC,MAAAA,QAAQ,EAAEiB,QAAQ,CAAC1D,IADhB;AAEH4D,MAAAA,UAAU,EAAEtB,6BAA6B,CACrCvD,UAAU,CACL4D,GADL,CACUtB,SAAD,IACDwC,yBAAyB,CACrBF,qBADqB,EAErB9D,IAFqB,EAGrB6D,QAHqB,EAIrBrC,SAJqB,CAFjC,EASKyC,IATL,EADqC;AAFtC,KAAP;AAeH,GAzBA,CALL,CAJoB,CAmCpB;;AACA,MAAIT,SAAJ,EAAe;AACX,UAAMU,gBAAgB,GAAGR,kBAAkB,CAAC,CAAD,CAAlB,CAAsBK,UAAtB,CAAiCH,KAAjC,EAAzB;AACA,UAAMO,aAAa,GAAGT,kBAAkB,CAAC,CAAD,CAAlB,CAAsBK,UAAtB,CAAiCK,SAAjC,CACjBC,CAAD,IACIA,CAAC,CAACrE,IAAF,KAAW,oBAAX,IACAqE,CAAC,CAACnE,GAAF,CAAMF,IAAN,KAAe,YADf,IAEAqE,CAAC,CAACnE,GAAF,CAAMC,IAAN,KAAe,YAJD,CAAtB;;AAMA,QAAIgE,aAAa,KAAK,CAAC,CAAvB,EAA0B;AACtBD,MAAAA,gBAAgB,CAACC,aAAD,CAAhB,GAAkCxE,UAAU,CAACwD,kBAAX,CAC9BxD,UAAU,CAACiB,UAAX,CAAsB,YAAtB,CAD8B,EAE9BjB,UAAU,CAAC2E,mBAAX,CACIZ,kBAAkB,CAACZ,GAAnB,CACKyB,KAAD,IACI;AACEA,MAAAA,KAAK,CAACR,UAAN,CACEI,aADF,CAAF,CAEsClD,KAL9C,CADJ,CAF8B,CAAlC;AAYH;;AACD,WAAOzB,0BAA0B,CAACV,GAAD,EAAMoF,gBAAN,CAAjC;AACH;;AACD,MAAIR,kBAAkB,CAACjD,MAAnB,KAA8B,CAAlC,EAAqC;AACjC,WAAOjB,0BAA0B,CAC7BV,GAD6B,EAE7B4E,kBAAkB,CAAC,CAAD,CAAlB,CAAsBK,UAFO,CAAjC;AAIH;AACD;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACI,QAAMxB,MAAM,GAAG5C,UAAU,CAAC2E,mBAAX,CACXZ,kBAAkB,CAACZ,GAAnB,CAAuB,CAAC;AAACF,IAAAA,QAAD;AAAWmB,IAAAA;AAAX,GAAD,KACnBvE,0BAA0B,CACtB,EAAC,GAAGV,GAAJ;AAASwB,IAAAA,IAAI,EAAExB,GAAG,CAACwB,IAAJ,CAASuC,MAAT,CAAgB,CAACD,QAAD,CAAhB;AAAf,GADsB,EAEtBmB,UAFsB,CAD9B,CADW,CAAf;AAQA,QAAM5D,IAAI,GAAGrB,GAAG,CAACwB,IAAJ,CAASC,IAAT,CAAc,GAAd,CAAb;;AACA,MAAIzB,GAAG,CAAC4B,cAAJ,IAAsB5B,GAAG,CAACwB,IAAJ,CAASG,MAAT,GAAkB,CAA5C,EAA+C;AAC3C3B,IAAAA,GAAG,CAAC4B,cAAJ,CAAmBP,IAAnB,IAA2BoC,MAA3B;AACA,WAAO5C,UAAU,CAACgB,qBAAX,CAAiChB,UAAU,CAACiB,UAAX,CAAsBT,IAAtB,CAAjC,CAAP;AACH;;AACD,SAAOoC,MAAP;AACH,CAtHM;;;;AAuHP,MAAMyB,yBAAyB,GAAG,CAC9BQ,MAD8B,EAE9BxE,IAF8B,EAG9B6D,QAH8B,EAI9BrC,SAJ8B,KAK2C;AACzE,MAAIA,SAAS,CAACC,IAAV,KAAmB,OAAnB,IAA8BD,SAAS,CAACrB,IAAV,CAAec,KAAf,KAAyB,YAA3D,EAAyE;AACrE,UAAMmC,KAAK,GAAG5B,SAAS,CAAC4B,KAAV,GACR5B,SAAS,CAAC4B,KAAV,CAAgBnC,KADR,GAERO,SAAS,CAACrB,IAAV,CAAec,KAFrB;AAGA,WAAO,CACHtB,UAAU,CAACwD,kBAAX,CACIxD,UAAU,CAACiB,UAAX,CAAsBwC,KAAtB,CADJ,EAEIzD,UAAU,CAAC0D,2BAAX,CAAuCQ,QAAQ,CAAC1D,IAAhD,CAFJ,CADG,CAAP;AAMH;;AACD,MAAIqB,SAAS,CAACC,IAAV,KAAmB,OAAnB,IAA8BzB,IAAI,CAACyB,IAAL,KAAc,OAAhD,EAAyD;AACrD;AACA,UAAMtB,IAAI,GAAGqB,SAAS,CAACrB,IAAV,CAAec,KAA5B;AACA,UAAMmC,KAAK,GAAG5B,SAAS,CAAC4B,KAAV,GAAkB5B,SAAS,CAAC4B,KAAV,CAAgBnC,KAAlC,GAA0Cd,IAAxD;;AACA,QAAI,CAACH,IAAI,CAACsD,YAAL,CAAkBnD,IAAlB,CAAL,EAA8B;AAC1BqE,MAAAA,MAAM,CAACvB,MAAP,CAAcC,IAAd,CACI,oBACI/C,IADJ,GAEI,WAFJ,GAGIH,IAAI,CAACG,IAHT,GAII,gBAJJ,GAKI0D,QAAQ,CAAC1D,IANjB;AAQA,aAAO,CACHR,UAAU,CAACwD,kBAAX,CACIxD,UAAU,CAACiB,UAAX,CAAsBwC,KAAtB,CADJ,EAEIzD,UAAU,CAACgB,qBAAX,CACIhB,UAAU,CAACiB,UAAX,CAAuB,eAAvB,CADJ,CAFJ,CADG,CAAP;AAQH;;AACD,UAAM2C,SAAS,GAAGvD,IAAI,CAACsD,YAAL,CAAkBnD,IAAlB,CAAlB;AACA,WAAO,CACH,wCACIR,UAAU,CAACwD,kBAAX,CACIxD,UAAU,CAACiB,UAAX,CAAsBwC,KAAtB,CADJ,EAEIxB,UAAU,CACN,EAAC,GAAG4C,MAAJ;AAAYlE,MAAAA,IAAI,EAAEkE,MAAM,CAAClE,IAAP,CAAYuC,MAAZ,CAAmB,CAAC1C,IAAD,CAAnB;AAAlB,KADM,EAENoD,SAAS,CAACvD,IAFJ,EAGNwB,SAHM,CAFd,CADJ,CADG,CAAP;AAYH;;AACD,MAAIA,SAAS,CAACC,IAAV,KAAmB,gBAAvB,EAAyC;AACrC,UAAMX,QAAQ,GAAG0D,MAAM,CAACxB,SAAP,CAAiBxB,SAAS,CAACrB,IAAV,CAAec,KAAhC,CAAjB;;AACA,QAAI,CAACH,QAAL,EAAe;AACX,YAAM,IAAIQ,KAAJ,CAAW,oBAAmBE,SAAS,CAACrB,IAAV,CAAec,KAAM,EAAnD,CAAN;AACH;;AACD,UAAM2B,QAAQ,GAAG9B,QAAQ,CAACE,aAAT,CAAuBb,IAAvB,CAA4Bc,KAA7C;;AACA,QACKuD,MAAM,CAAC5F,MAAP,CAAcuC,gBAAd,CAA+ByB,QAA/B,KACG4B,MAAM,CAAC5F,MAAP,CAAcuC,gBAAd,CAA+ByB,QAA/B,EAAyC6B,mBAAzC,CACIZ,QAAQ,CAAC1D,IADb,CADJ,IAIAyC,QAAQ,KAAKiB,QAAQ,CAAC1D,IAL1B,EAME;AACE,aAAO,GAAG0C,MAAH,CACH,GAAG/B,QAAQ,CAAC7B,YAAT,CAAsBC,UAAtB,CAAiC4D,GAAjC,CAAsCtB,SAAD,IACpCwC,yBAAyB,CACrBQ,MADqB,EAErBA,MAAM,CAAC5F,MAAP,CAAcQ,WAAd,CAA0ByE,QAAQ,CAAC1D,IAAnC,CAFqB,EAGrB0D,QAHqB,EAIrBrC,SAJqB,CAD1B,CADA,CAAP;AAUH,KAjBD,MAiBO;AACH,aAAO,EAAP;AACH;AACJ;;AACD,MAAIA,SAAS,CAACC,IAAV,KAAmB,gBAAvB,EAAyC;AACrC+C,IAAAA,MAAM,CAACvB,MAAP,CAAcC,IAAd,CACK,kDAAiD1B,SAAS,CAACC,IAAK,EADrE;;AAGA,QAAIzB,IAAI,CAACyB,IAAL,KAAc,OAAlB,EAA2B;AACvB+C,MAAAA,MAAM,CAACvB,MAAP,CACKC,IADL,CACW,kDAAiDlD,IAAI,CAACG,IAAK;AAClF;AACA,mDAHY;AAIH;;AACD,WAAO,EAAP;AACH;;AACD,MAAIqB,SAAS,CAACR,aAAd,EAA6B;AAAA;;AACzB,UAAM4B,QAAQ,GAAGpB,SAAS,CAACR,aAAV,CAAwBb,IAAxB,CAA6Bc,KAA9C;AACA,UAAMyD,aAAa,4BACfF,MAAM,CAAC5F,MAAP,CAAcuC,gBAAd,CAA+ByB,QAA/B,CADe,0DACf,sBAA0C6B,mBAA1C,CACIZ,QAAQ,CAAC1D,IADb,CADJ;;AAIA,QAAIyC,QAAQ,KAAKiB,QAAQ,CAAC1D,IAAtB,IAA8B,CAACuE,aAAnC,EAAkD;AAC9C,aAAO,EAAP;AACH;AACJ;;AACD,SAAOxD,sBAAsB,CACzBsD,MADyB,EAEzBA,MAAM,CAAC5F,MAAP,CAAcQ,WAAd,CAA0ByE,QAAQ,CAAC1D,IAAnC,CAFyB,EAGzB0D,QAAQ,CAAC1D,IAHgB,EAIzBqB,SAAS,CAACvC,YAAV,CAAuBC,UAJE,CAA7B;AAMH,CA5GD","sourcesContent":["// @flow\n/* eslint-disable no-console */\nimport generate from '@babel/generator'; // eslint-disable-line flowtype-errors/uncovered\nimport * as babelTypes from '@babel/types';\nimport {type BabelNodeFlowType} from '@babel/types';\nimport type {\n FieldNode,\n IntrospectionOutputTypeRef,\n OperationDefinitionNode,\n FragmentDefinitionNode,\n} from 'graphql';\nimport type {Context, Schema, Selections} from './types';\nimport {\n liftLeadingPropertyComments,\n maybeAddDescriptionComment,\n transferLeadingComments,\n} from './utils';\nimport {enumTypeToFlow, scalarTypeToFlow} from './enums';\nimport type {\n IntrospectionField,\n IntrospectionInterfaceType,\n IntrospectionObjectType,\n IntrospectionUnionType,\n} from 'graphql/utilities/introspectionQuery';\nimport {\n BabelNodeObjectTypeProperty,\n BabelNodeObjectTypeSpreadProperty,\n} from '@babel/types';\n\nexport const generateResponseType = (\n schema: Schema,\n query: OperationDefinitionNode,\n ctx: Context,\n): string => {\n const ast = querySelectionToObjectType(\n ctx,\n query.selectionSet.selections,\n query.operation === 'mutation'\n ? schema.typesByName.Mutation\n : schema.typesByName.Query,\n query.operation === 'mutation' ? 'mutation' : 'query',\n );\n // eslint-disable-next-line flowtype-errors/uncovered\n return generate(ast).code;\n};\n\nconst sortedObjectTypeAnnotation = (\n ctx: Context,\n properties: Array<\n BabelNodeObjectTypeProperty | BabelNodeObjectTypeSpreadProperty,\n >,\n) => {\n const obj = babelTypes.objectTypeAnnotation(\n properties.sort((a, b) => {\n if (\n a.type === 'ObjectTypeProperty' &&\n b.type === 'ObjectTypeProperty'\n ) {\n const aName = a.key.type === 'Identifier' ? a.key.name : '';\n const bName = b.key.type === 'Identifier' ? b.key.name : '';\n return aName < bName ? -1 : 1;\n }\n return 0;\n }),\n undefined /* indexers */,\n undefined /* callProperties */,\n undefined /* internalSlots */,\n true /* exact */,\n );\n const name = ctx.path.join('_');\n const isTopLevelType = ctx.path.length <= 1;\n if (ctx.allObjectTypes != null && !isTopLevelType) {\n ctx.allObjectTypes[name] = obj;\n return babelTypes.genericTypeAnnotation(babelTypes.identifier(name));\n } else {\n return obj;\n }\n};\n\nexport const generateFragmentType = (\n schema: Schema,\n fragment: FragmentDefinitionNode,\n ctx: Context,\n): string => {\n const onType = fragment.typeCondition.name.value;\n let ast;\n\n if (schema.typesByName[onType]) {\n ast = sortedObjectTypeAnnotation(\n ctx,\n objectPropertiesToFlow(\n ctx,\n schema.typesByName[onType],\n onType,\n fragment.selectionSet.selections,\n ),\n );\n } else if (schema.interfacesByName[onType]) {\n ast = unionOrInterfaceToFlow(\n ctx,\n ctx.schema.interfacesByName[onType],\n fragment.selectionSet.selections,\n );\n } else if (schema.unionsByName[onType]) {\n ast = unionOrInterfaceToFlow(\n ctx,\n ctx.schema.unionsByName[onType],\n fragment.selectionSet.selections,\n );\n } else {\n throw new Error(`Unknown ${onType}`);\n }\n\n // eslint-disable-next-line flowtype-errors/uncovered\n return generate(ast).code;\n};\n\nconst _typeToFlow = (\n ctx: Context,\n type,\n selection,\n): babelTypes.BabelNodeFlowType => {\n if (type.kind === 'SCALAR') {\n return scalarTypeToFlow(ctx, type.name);\n }\n if (type.kind === 'LIST') {\n return babelTypes.genericTypeAnnotation(\n ctx.readOnlyArray\n ? babelTypes.identifier('$ReadOnlyArray')\n : babelTypes.identifier('Array'),\n babelTypes.typeParameterInstantiation([\n typeToFlow(ctx, type.ofType, selection),\n ]),\n );\n }\n if (type.kind === 'UNION') {\n const union = ctx.schema.unionsByName[type.name];\n if (!selection.selectionSet) {\n console.log('no selection set', selection);\n return babelTypes.anyTypeAnnotation();\n }\n return unionOrInterfaceToFlow(\n ctx,\n union,\n selection.selectionSet.selections,\n );\n }\n\n if (type.kind === 'INTERFACE') {\n if (!selection.selectionSet) {\n console.log('no selection set', selection);\n return babelTypes.anyTypeAnnotation();\n }\n return unionOrInterfaceToFlow(\n ctx,\n ctx.schema.interfacesByName[type.name],\n selection.selectionSet.selections,\n );\n }\n if (type.kind === 'ENUM') {\n return enumTypeToFlow(ctx, type.name);\n }\n if (type.kind !== 'OBJECT') {\n console.log('not object', type);\n return babelTypes.anyTypeAnnotation();\n }\n\n const tname = type.name;\n if (!ctx.schema.typesByName[tname]) {\n console.log('unknown referenced type', tname);\n return babelTypes.anyTypeAnnotation();\n }\n const childType = ctx.schema.typesByName[tname];\n if (!selection.selectionSet) {\n console.log('no selection set', selection);\n return babelTypes.anyTypeAnnotation();\n }\n return maybeAddDescriptionComment(\n childType.description,\n querySelectionToObjectType(\n ctx,\n selection.selectionSet.selections,\n childType,\n tname,\n ),\n );\n};\n\nexport const typeToFlow = (\n ctx: Context,\n type: IntrospectionOutputTypeRef,\n selection: FieldNode,\n): babelTypes.BabelNodeFlowType => {\n // throw new Error('npoe');\n if (type.kind === 'NON_NULL') {\n return _typeToFlow(ctx, type.ofType, selection);\n }\n // If we don'babelTypes care about strict nullability checking, then pretend everything is non-null\n if (!ctx.strictNullability) {\n return _typeToFlow(ctx, type, selection);\n }\n const inner = _typeToFlow(ctx, type, selection);\n const result = babelTypes.nullableTypeAnnotation(inner);\n return transferLeadingComments(inner, result);\n};\n\nconst ensureOnlyOneTypenameProperty = (properties) => {\n let seenTypeName: false | string = false;\n return properties.filter((type) => {\n // The apollo-utilities \"addTypeName\" utility will add it\n // even if it's already specified :( so we have to filter out\n // the extra one here.\n if (\n type.type === 'ObjectTypeProperty' &&\n type.key.name === '__typename'\n ) {\n const name =\n type.value.type === 'StringLiteralTypeAnnotation'\n ? type.value.value\n : 'INVALID';\n if (seenTypeName) {\n if (name !== seenTypeName) {\n throw new Error(\n `Got two different type names ${name}, ${seenTypeName}`,\n );\n }\n return false;\n }\n seenTypeName = name;\n }\n return true;\n });\n};\n\nconst querySelectionToObjectType = (\n ctx: Context,\n selections,\n type,\n typeName: string,\n): BabelNodeFlowType => {\n return sortedObjectTypeAnnotation(\n ctx,\n ensureOnlyOneTypenameProperty(\n objectPropertiesToFlow(ctx, type, typeName, selections),\n ),\n );\n};\n\nexport const objectPropertiesToFlow = (\n ctx: Context,\n type: IntrospectionObjectType & {\n fieldsByName: {[name: string]: IntrospectionField},\n },\n typeName: string,\n selections: Selections,\n): Array<BabelNodeObjectTypeProperty | BabelNodeObjectTypeSpreadProperty> => {\n return [].concat(\n ...selections.map((selection) => {\n switch (selection.kind) {\n case 'InlineFragment': {\n const newTypeName =\n selection.typeCondition?.name.value ?? typeName;\n if (newTypeName !== typeName) {\n return [];\n }\n return objectPropertiesToFlow(\n ctx,\n ctx.schema.typesByName[newTypeName],\n newTypeName,\n selection.selectionSet.selections,\n );\n }\n case 'FragmentSpread':\n if (!ctx.fragments[selection.name.value]) {\n ctx.errors.push(\n `No fragment named '${selection.name.value}'. Did you forget to include it in the template literal?`,\n );\n return [\n babelTypes.objectTypeProperty(\n babelTypes.identifier(selection.name.value),\n babelTypes.genericTypeAnnotation(\n babelTypes.identifier(`UNKNOWN_FRAGMENT`),\n ),\n ),\n ];\n }\n\n return objectPropertiesToFlow(\n ctx,\n type,\n typeName,\n ctx.fragments[selection.name.value].selectionSet\n .selections,\n );\n\n case 'Field':\n const name = selection.name.value;\n const alias: string = selection.alias\n ? selection.alias.value\n : name;\n if (name === '__typename') {\n return [\n babelTypes.objectTypeProperty(\n babelTypes.identifier(alias),\n babelTypes.stringLiteralTypeAnnotation(\n typeName,\n ),\n ),\n ];\n }\n if (!type.fieldsByName[name]) {\n ctx.errors.push(\n `Unknown field '${name}' for type '${typeName}'`,\n );\n return babelTypes.objectTypeProperty(\n babelTypes.identifier(alias),\n babelTypes.genericTypeAnnotation(\n babelTypes.identifier(\n `UNKNOWN_FIELD[\"${name}\"]`,\n ),\n ),\n );\n }\n const typeField = type.fieldsByName[name];\n\n return [\n maybeAddDescriptionComment(\n typeField.description,\n liftLeadingPropertyComments(\n babelTypes.objectTypeProperty(\n babelTypes.identifier(alias),\n typeToFlow(\n {\n ...ctx,\n path: ctx.path.concat([alias]),\n },\n typeField.type,\n selection,\n ),\n ),\n ),\n ),\n ];\n\n default:\n ctx.errors.push(\n // eslint-disable-next-line flowtype-errors/uncovered\n `Unsupported selection kind '${selection.kind}'`,\n );\n return [];\n }\n }),\n );\n};\n\nexport const unionOrInterfaceToFlow = (\n ctx: Context,\n type:\n | IntrospectionUnionType\n | (IntrospectionInterfaceType & {\n fieldsByName: {[key: string]: IntrospectionField},\n }),\n selections: Selections,\n): BabelNodeFlowType => {\n const allFields = selections.every(\n (selection) => selection.kind === 'Field',\n );\n const selectedAttributes: Array<{\n attributes: Array<\n BabelNodeObjectTypeProperty | BabelNodeObjectTypeSpreadProperty,\n >,\n typeName: string,\n }> = type.possibleTypes\n .slice()\n .sort((a, b) => {\n return a.name < b.name ? -1 : 1;\n })\n .map((possible) => {\n const configWithUpdatedPath = {\n ...ctx,\n path: allFields ? ctx.path : ctx.path.concat([possible.name]),\n };\n return {\n typeName: possible.name,\n attributes: ensureOnlyOneTypenameProperty(\n selections\n .map((selection) =>\n unionOrInterfaceSelection(\n configWithUpdatedPath,\n type,\n possible,\n selection,\n ),\n )\n .flat(),\n ),\n };\n });\n // If they're all fields, the only selection that could be different is __typename\n if (allFields) {\n const sharedAttributes = selectedAttributes[0].attributes.slice();\n const typeNameIndex = selectedAttributes[0].attributes.findIndex(\n (x) =>\n x.type === 'ObjectTypeProperty' &&\n x.key.type === 'Identifier' &&\n x.key.name === '__typename',\n );\n if (typeNameIndex !== -1) {\n sharedAttributes[typeNameIndex] = babelTypes.objectTypeProperty(\n babelTypes.identifier('__typename'),\n babelTypes.unionTypeAnnotation(\n selectedAttributes.map(\n (attrs) =>\n // eslint-disable-next-line flowtype-errors/uncovered\n ((attrs.attributes[\n typeNameIndex\n ]: any): BabelNodeObjectTypeProperty).value,\n ),\n ),\n );\n }\n return sortedObjectTypeAnnotation(ctx, sharedAttributes);\n }\n if (selectedAttributes.length === 1) {\n return sortedObjectTypeAnnotation(\n ctx,\n selectedAttributes[0].attributes,\n );\n }\n /**\n * When generating the objects for the sub-options of a union, the path needs\n * to include the name of the object type.\n * ```\n * query getFriend {\n * friend {\n * ... on Human { id }\n * ... on Droid { arms }\n * }\n * }\n * ```\n * produces\n * ```\n * type getFriend = {friend: getFriend_friend_Human | getFriend_friend_Droid }\n * type getFriend_friend_Human = {id: string}\n * type getFriend_friend_Droid = {arms: number}\n * ```\n * Note that this is different from when an attribute has a plain object type.\n * ```\n * query getHuman {\n * me: human(id: \"me\") { id }\n * }\n * ```\n * produces\n * ```\n * type getHuman = {me: getHuman_me}\n * type getHuman_me = {id: string}\n * ```\n * instead of e.g. `getHuman_me_Human`.\n */\n const result = babelTypes.unionTypeAnnotation(\n selectedAttributes.map(({typeName, attributes}) =>\n sortedObjectTypeAnnotation(\n {...ctx, path: ctx.path.concat([typeName])},\n attributes,\n ),\n ),\n );\n const name = ctx.path.join('_');\n if (ctx.allObjectTypes && ctx.path.length > 1) {\n ctx.allObjectTypes[name] = result;\n return babelTypes.genericTypeAnnotation(babelTypes.identifier(name));\n }\n return result;\n};\nconst unionOrInterfaceSelection = (\n config,\n type,\n possible,\n selection,\n): Array<BabelNodeObjectTypeProperty | BabelNodeObjectTypeSpreadProperty> => {\n if (selection.kind === 'Field' && selection.name.value === '__typename') {\n const alias = selection.alias\n ? selection.alias.value\n : selection.name.value;\n return [\n babelTypes.objectTypeProperty(\n babelTypes.identifier(alias),\n babelTypes.stringLiteralTypeAnnotation(possible.name),\n ),\n ];\n }\n if (selection.kind === 'Field' && type.kind !== 'UNION') {\n // this is an interface\n const name = selection.name.value;\n const alias = selection.alias ? selection.alias.value : name;\n if (!type.fieldsByName[name]) {\n config.errors.push(\n 'Unknown field: ' +\n name +\n ' on type ' +\n type.name +\n ' for possible ' +\n possible.name,\n );\n return [\n babelTypes.objectTypeProperty(\n babelTypes.identifier(alias),\n babelTypes.genericTypeAnnotation(\n babelTypes.identifier(`UNKNOWN_FIELD`),\n ),\n ),\n ];\n }\n const typeField = type.fieldsByName[name];\n return [\n liftLeadingPropertyComments(\n babelTypes.objectTypeProperty(\n babelTypes.identifier(alias),\n typeToFlow(\n {...config, path: config.path.concat([name])},\n typeField.type,\n selection,\n ),\n ),\n ),\n ];\n }\n if (selection.kind === 'FragmentSpread') {\n const fragment = config.fragments[selection.name.value];\n if (!fragment) {\n throw new Error(`Unknown fragment ${selection.name.value}`);\n }\n const typeName = fragment.typeCondition.name.value;\n if (\n (config.schema.interfacesByName[typeName] &&\n config.schema.interfacesByName[typeName].possibleTypesByName[\n possible.name\n ]) ||\n typeName === possible.name\n ) {\n return [].concat(\n ...fragment.selectionSet.selections.map((selection) =>\n unionOrInterfaceSelection(\n config,\n config.schema.typesByName[possible.name],\n possible,\n selection,\n ),\n ),\n );\n } else {\n return [];\n }\n }\n if (selection.kind !== 'InlineFragment') {\n config.errors.push(\n `union selectors must be inline fragment: found ${selection.kind}`,\n );\n if (type.kind === 'UNION') {\n config.errors\n .push(`You're trying to select a field from the union ${type.name},\nbut the only field you're allowed to select is \"__typename\".\nTry using an inline fragment \"... on SomeType {}\".`);\n }\n return [];\n }\n if (selection.typeCondition) {\n const typeName = selection.typeCondition.name.value;\n const indirectMatch =\n config.schema.interfacesByName[typeName]?.possibleTypesByName[\n possible.name\n ];\n if (typeName !== possible.name && !indirectMatch) {\n return [];\n }\n }\n return objectPropertiesToFlow(\n config,\n config.schema.typesByName[possible.name],\n possible.name,\n selection.selectionSet.selections,\n );\n};\n"],"file":"generateResponseType.js"}
|
|
@@ -13,7 +13,6 @@ var _ = require(".");
|
|
|
13
13
|
|
|
14
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
15
|
|
|
16
|
-
// Import this in your jest setup, to mock out graphql-tag!
|
|
17
16
|
const indexPrelude = regenerateCommand => `// @flow
|
|
18
17
|
//
|
|
19
18
|
// AUTOGENERATED
|
|
@@ -137,29 +136,26 @@ const generateTypeFiles = (fileName, schema, document, options) => {
|
|
|
137
136
|
|
|
138
137
|
exports.generateTypeFiles = generateTypeFiles;
|
|
139
138
|
|
|
140
|
-
const processPragmas = (
|
|
141
|
-
if (
|
|
142
|
-
return
|
|
139
|
+
const processPragmas = (generateConfig, crawlConfig, rawSource) => {
|
|
140
|
+
if (crawlConfig.ignorePragma && rawSource.includes(crawlConfig.ignorePragma)) {
|
|
141
|
+
return {
|
|
142
|
+
generate: false
|
|
143
|
+
};
|
|
143
144
|
}
|
|
144
145
|
|
|
145
|
-
const autogen =
|
|
146
|
-
const autogenStrict =
|
|
147
|
-
const noPragmas = !
|
|
146
|
+
const autogen = crawlConfig.loosePragma ? rawSource.includes(crawlConfig.loosePragma) : false;
|
|
147
|
+
const autogenStrict = crawlConfig.pragma ? rawSource.includes(crawlConfig.pragma) : false;
|
|
148
|
+
const noPragmas = !crawlConfig.loosePragma && !crawlConfig.pragma;
|
|
148
149
|
|
|
149
150
|
if (autogen || autogenStrict || noPragmas) {
|
|
150
151
|
return {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
readOnlyArray: options.readOnlyArray,
|
|
154
|
-
scalars: options.scalars,
|
|
155
|
-
splitTypes: options.splitTypes,
|
|
156
|
-
generatedDirectory: options.generatedDirectory,
|
|
157
|
-
exportAllObjectTypes: options.exportAllObjectTypes,
|
|
158
|
-
typeFileName: options.typeFileName,
|
|
159
|
-
experimentalEnums: options.experimentalEnums
|
|
152
|
+
generate: true,
|
|
153
|
+
strict: noPragmas ? generateConfig.strictNullability : autogenStrict || !autogen
|
|
160
154
|
};
|
|
161
155
|
} else {
|
|
162
|
-
return
|
|
156
|
+
return {
|
|
157
|
+
generate: false
|
|
158
|
+
};
|
|
163
159
|
}
|
|
164
160
|
};
|
|
165
161
|
|
|
@@ -1,29 +1,10 @@
|
|
|
1
1
|
// @flow
|
|
2
|
-
// Import this in your jest setup, to mock out graphql-tag!
|
|
3
2
|
import type {DocumentNode} from 'graphql';
|
|
4
|
-
import type {
|
|
3
|
+
import type {GenerateConfig, CrawlConfig, Schema} from './types';
|
|
5
4
|
import fs from 'fs';
|
|
6
5
|
import path from 'path';
|
|
7
6
|
import {documentToFlowTypes} from '.';
|
|
8
7
|
|
|
9
|
-
export type ExternalOptions = {
|
|
10
|
-
pragma?: string,
|
|
11
|
-
loosePragma?: string,
|
|
12
|
-
ignorePragma?: string,
|
|
13
|
-
scalars?: Scalars,
|
|
14
|
-
strictNullability?: boolean,
|
|
15
|
-
/**
|
|
16
|
-
* The command that users should run to regenerate the types files.
|
|
17
|
-
*/
|
|
18
|
-
regenerateCommand?: string,
|
|
19
|
-
readOnlyArray?: boolean,
|
|
20
|
-
splitTypes?: boolean,
|
|
21
|
-
generatedDirectory?: string,
|
|
22
|
-
exportAllObjectTypes?: boolean,
|
|
23
|
-
typeFileName?: string,
|
|
24
|
-
experimentalEnums?: boolean,
|
|
25
|
-
};
|
|
26
|
-
|
|
27
8
|
export const indexPrelude = (regenerateCommand?: string): string => `// @flow
|
|
28
9
|
//
|
|
29
10
|
// AUTOGENERATED
|
|
@@ -38,7 +19,7 @@ export const generateTypeFileContents = (
|
|
|
38
19
|
fileName: string,
|
|
39
20
|
schema: Schema,
|
|
40
21
|
document: DocumentNode,
|
|
41
|
-
options:
|
|
22
|
+
options: GenerateConfig,
|
|
42
23
|
generatedDir: string,
|
|
43
24
|
indexContents: string,
|
|
44
25
|
): {indexContents: string, files: {[key: string]: string}} => {
|
|
@@ -115,7 +96,7 @@ export const generateTypeFileContents = (
|
|
|
115
96
|
return {files, indexContents};
|
|
116
97
|
};
|
|
117
98
|
|
|
118
|
-
const getGeneratedDir = (fileName: string, options:
|
|
99
|
+
const getGeneratedDir = (fileName: string, options: GenerateConfig) => {
|
|
119
100
|
const generatedDirectory = options.generatedDirectory ?? '__generated__';
|
|
120
101
|
if (path.isAbsolute(generatedDirectory)) {
|
|
121
102
|
// fileName is absolute here, so we make it relative to cwd
|
|
@@ -136,7 +117,7 @@ export const generateTypeFiles = (
|
|
|
136
117
|
fileName: string,
|
|
137
118
|
schema: Schema,
|
|
138
119
|
document: DocumentNode,
|
|
139
|
-
options:
|
|
120
|
+
options: GenerateConfig,
|
|
140
121
|
) => {
|
|
141
122
|
const generatedDir = getGeneratedDir(fileName, options);
|
|
142
123
|
const indexFile = path.join(generatedDir, 'index.js');
|
|
@@ -166,36 +147,33 @@ export const generateTypeFiles = (
|
|
|
166
147
|
};
|
|
167
148
|
|
|
168
149
|
export const processPragmas = (
|
|
169
|
-
|
|
150
|
+
generateConfig: GenerateConfig,
|
|
151
|
+
crawlConfig: CrawlConfig,
|
|
170
152
|
rawSource: string,
|
|
171
|
-
):
|
|
172
|
-
if (
|
|
173
|
-
|
|
153
|
+
): {generate: boolean, strict?: boolean} => {
|
|
154
|
+
if (
|
|
155
|
+
crawlConfig.ignorePragma &&
|
|
156
|
+
rawSource.includes(crawlConfig.ignorePragma)
|
|
157
|
+
) {
|
|
158
|
+
return {generate: false};
|
|
174
159
|
}
|
|
175
160
|
|
|
176
|
-
const autogen =
|
|
177
|
-
? rawSource.includes(
|
|
161
|
+
const autogen = crawlConfig.loosePragma
|
|
162
|
+
? rawSource.includes(crawlConfig.loosePragma)
|
|
178
163
|
: false;
|
|
179
|
-
const autogenStrict =
|
|
180
|
-
? rawSource.includes(
|
|
164
|
+
const autogenStrict = crawlConfig.pragma
|
|
165
|
+
? rawSource.includes(crawlConfig.pragma)
|
|
181
166
|
: false;
|
|
182
|
-
const noPragmas = !
|
|
167
|
+
const noPragmas = !crawlConfig.loosePragma && !crawlConfig.pragma;
|
|
183
168
|
|
|
184
169
|
if (autogen || autogenStrict || noPragmas) {
|
|
185
170
|
return {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
?
|
|
171
|
+
generate: true,
|
|
172
|
+
strict: noPragmas
|
|
173
|
+
? generateConfig.strictNullability
|
|
189
174
|
: autogenStrict || !autogen,
|
|
190
|
-
readOnlyArray: options.readOnlyArray,
|
|
191
|
-
scalars: options.scalars,
|
|
192
|
-
splitTypes: options.splitTypes,
|
|
193
|
-
generatedDirectory: options.generatedDirectory,
|
|
194
|
-
exportAllObjectTypes: options.exportAllObjectTypes,
|
|
195
|
-
typeFileName: options.typeFileName,
|
|
196
|
-
experimentalEnums: options.experimentalEnums,
|
|
197
175
|
};
|
|
198
176
|
} else {
|
|
199
|
-
return
|
|
177
|
+
return {generate: false};
|
|
200
178
|
}
|
|
201
179
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/generateTypeFiles.js"],"names":["indexPrelude","regenerateCommand","generateTypeFileContents","fileName","schema","document","options","generatedDir","indexContents","files","addToIndex","filePath","typeName","newLine","path","basename","indexOf","lines","split","map","line","includes","join","generated","forEach","name","code","isFragment","extraTypes","experimentalEnums","targetFileName","typeFileName","replace","targetPath","fileContents","splitTypes","Object","keys","enumNames","length","getGeneratedDir","generatedDirectory","isAbsolute","relative","process","cwd","dirname","generateTypeFiles","indexFile","fs","existsSync","mkdirSync","recursive","writeFileSync","readFileSync","key","processPragmas","rawSource","ignorePragma","autogen","loosePragma","autogenStrict","pragma","noPragmas","strictNullability","readOnlyArray","scalars","exportAllObjectTypes"],"mappings":"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","sourcesContent":["// @flow\n// Import this in your jest setup, to mock out graphql-tag!\nimport type {DocumentNode} from 'graphql';\nimport type {Options, Schema, Scalars} from './types';\nimport fs from 'fs';\nimport path from 'path';\nimport {documentToFlowTypes} from '.';\n\nexport type ExternalOptions = {\n pragma?: string,\n loosePragma?: string,\n ignorePragma?: string,\n scalars?: Scalars,\n strictNullability?: boolean,\n /**\n * The command that users should run to regenerate the types files.\n */\n regenerateCommand?: string,\n readOnlyArray?: boolean,\n splitTypes?: boolean,\n generatedDirectory?: string,\n exportAllObjectTypes?: boolean,\n typeFileName?: string,\n experimentalEnums?: boolean,\n};\n\nexport const indexPrelude = (regenerateCommand?: string): string => `// @flow\n//\n// AUTOGENERATED\n// NOTE: New response types are added to this file automatically.\n// Outdated response types can be removed manually as they are deprecated.\n//${regenerateCommand ? ' To regenerate, run ' + regenerateCommand : ''}\n//\n\n`;\n\nexport const generateTypeFileContents = (\n fileName: string,\n schema: Schema,\n document: DocumentNode,\n options: Options,\n generatedDir: string,\n indexContents: string,\n): {indexContents: string, files: {[key: string]: string}} => {\n const files = {};\n\n /// Write export for __generated__/index.js if it doesn't exist\n const addToIndex = (filePath, typeName) => {\n const newLine = `export type {${typeName}} from './${path.basename(\n filePath,\n )}';`;\n if (indexContents.indexOf('./' + path.basename(filePath)) === -1) {\n indexContents += newLine + '\\n';\n } else {\n const lines = indexContents.split('\\n').map((line) => {\n if (line.includes('./' + path.basename(filePath))) {\n return newLine;\n }\n return line;\n });\n indexContents = lines.join('\\n');\n }\n };\n\n const generated = documentToFlowTypes(document, schema, options);\n generated.forEach(\n ({name, typeName, code, isFragment, extraTypes, experimentalEnums}) => {\n // We write all generated files to a `__generated__` subdir to keep\n // things tidy.\n const targetFileName = options.typeFileName\n ? options.typeFileName.replace('[operationName]', name)\n : `${name}.js`;\n const targetPath = path.join(generatedDir, targetFileName);\n\n let fileContents =\n '// @' +\n `flow\\n// AUTOGENERATED -- DO NOT EDIT\\n` +\n `// Generated for operation '${name}' in file '../${path.basename(\n fileName,\n )}'\\n` +\n (options.regenerateCommand\n ? `// To regenerate, run '${options.regenerateCommand}'.\\n`\n : '') +\n code;\n if (options.splitTypes && !isFragment) {\n fileContents +=\n `\\nexport type ${name} = ${typeName}['response'];\\n` +\n `export type ${name}Variables = ${typeName}['variables'];\\n`;\n }\n Object.keys(extraTypes).forEach(\n (name) =>\n (fileContents += `\\n\\nexport type ${name} = ${extraTypes[name]};`),\n );\n const enumNames = Object.keys(experimentalEnums);\n if (options.experimentalEnums && enumNames.length) {\n // TODO(somewhatabstract, FEI-4172): Update to fixed eslint-plugin-flowtype\n // and remove this disable.\n fileContents += `\\n\\n/* eslint-disable no-undef */`;\n enumNames.forEach(\n (name) =>\n (fileContents += `\\nexport ${experimentalEnums[name]};\\n`),\n );\n fileContents += `/* eslint-enable no-undef */`;\n }\n\n addToIndex(targetPath, typeName);\n files[targetPath] =\n fileContents\n // Remove whitespace from the ends of lines; babel's generate sometimes\n // leaves them hanging around.\n .replace(/\\s+$/gm, '') + '\\n';\n },\n );\n\n return {files, indexContents};\n};\n\nconst getGeneratedDir = (fileName: string, options: Options) => {\n const generatedDirectory = options.generatedDirectory ?? '__generated__';\n if (path.isAbsolute(generatedDirectory)) {\n // fileName is absolute here, so we make it relative to cwd\n // for more reasonable filenames. We convert leading ..'s\n // to `__` so this doesn't escape the output directory.\n return path.join(\n generatedDirectory,\n path\n .relative(process.cwd(), path.dirname(fileName))\n .replace(/\\.\\.\\//g, '__/'),\n );\n } else {\n return path.join(path.dirname(fileName), generatedDirectory);\n }\n};\n\nexport const generateTypeFiles = (\n fileName: string,\n schema: Schema,\n document: DocumentNode,\n options: Options,\n) => {\n const generatedDir = getGeneratedDir(fileName, options);\n const indexFile = path.join(generatedDir, 'index.js');\n\n if (!fs.existsSync(generatedDir)) {\n fs.mkdirSync(generatedDir, {recursive: true});\n }\n if (!fs.existsSync(indexFile)) {\n fs.writeFileSync(indexFile, indexPrelude(options.regenerateCommand));\n }\n\n const {indexContents, files} = generateTypeFileContents(\n fileName,\n schema,\n document,\n options,\n generatedDir,\n fs.readFileSync(indexFile, 'utf8'),\n );\n\n fs.writeFileSync(indexFile, indexContents);\n Object.keys(files).forEach((key) => {\n fs.writeFileSync(key, files[key]);\n });\n\n fs.writeFileSync(indexFile, indexContents);\n};\n\nexport const processPragmas = (\n options: ExternalOptions,\n rawSource: string,\n): null | Options => {\n if (options.ignorePragma && rawSource.includes(options.ignorePragma)) {\n return null;\n }\n\n const autogen = options.loosePragma\n ? rawSource.includes(options.loosePragma)\n : false;\n const autogenStrict = options.pragma\n ? rawSource.includes(options.pragma)\n : false;\n const noPragmas = !options.loosePragma && !options.pragma;\n\n if (autogen || autogenStrict || noPragmas) {\n return {\n regenerateCommand: options.regenerateCommand,\n strictNullability: noPragmas\n ? options.strictNullability\n : autogenStrict || !autogen,\n readOnlyArray: options.readOnlyArray,\n scalars: options.scalars,\n splitTypes: options.splitTypes,\n generatedDirectory: options.generatedDirectory,\n exportAllObjectTypes: options.exportAllObjectTypes,\n typeFileName: options.typeFileName,\n experimentalEnums: options.experimentalEnums,\n };\n } else {\n return null;\n }\n};\n"],"file":"generateTypeFiles.js"}
|
|
1
|
+
{"version":3,"sources":["../src/generateTypeFiles.js"],"names":["indexPrelude","regenerateCommand","generateTypeFileContents","fileName","schema","document","options","generatedDir","indexContents","files","addToIndex","filePath","typeName","newLine","path","basename","indexOf","lines","split","map","line","includes","join","generated","forEach","name","code","isFragment","extraTypes","experimentalEnums","targetFileName","typeFileName","replace","targetPath","fileContents","splitTypes","Object","keys","enumNames","length","getGeneratedDir","generatedDirectory","isAbsolute","relative","process","cwd","dirname","generateTypeFiles","indexFile","fs","existsSync","mkdirSync","recursive","writeFileSync","readFileSync","key","processPragmas","generateConfig","crawlConfig","rawSource","ignorePragma","generate","autogen","loosePragma","autogenStrict","pragma","noPragmas","strict","strictNullability"],"mappings":"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","sourcesContent":["// @flow\nimport type {DocumentNode} from 'graphql';\nimport type {GenerateConfig, CrawlConfig, Schema} from './types';\nimport fs from 'fs';\nimport path from 'path';\nimport {documentToFlowTypes} from '.';\n\nexport const indexPrelude = (regenerateCommand?: string): string => `// @flow\n//\n// AUTOGENERATED\n// NOTE: New response types are added to this file automatically.\n// Outdated response types can be removed manually as they are deprecated.\n//${regenerateCommand ? ' To regenerate, run ' + regenerateCommand : ''}\n//\n\n`;\n\nexport const generateTypeFileContents = (\n fileName: string,\n schema: Schema,\n document: DocumentNode,\n options: GenerateConfig,\n generatedDir: string,\n indexContents: string,\n): {indexContents: string, files: {[key: string]: string}} => {\n const files = {};\n\n /// Write export for __generated__/index.js if it doesn't exist\n const addToIndex = (filePath, typeName) => {\n const newLine = `export type {${typeName}} from './${path.basename(\n filePath,\n )}';`;\n if (indexContents.indexOf('./' + path.basename(filePath)) === -1) {\n indexContents += newLine + '\\n';\n } else {\n const lines = indexContents.split('\\n').map((line) => {\n if (line.includes('./' + path.basename(filePath))) {\n return newLine;\n }\n return line;\n });\n indexContents = lines.join('\\n');\n }\n };\n\n const generated = documentToFlowTypes(document, schema, options);\n generated.forEach(\n ({name, typeName, code, isFragment, extraTypes, experimentalEnums}) => {\n // We write all generated files to a `__generated__` subdir to keep\n // things tidy.\n const targetFileName = options.typeFileName\n ? options.typeFileName.replace('[operationName]', name)\n : `${name}.js`;\n const targetPath = path.join(generatedDir, targetFileName);\n\n let fileContents =\n '// @' +\n `flow\\n// AUTOGENERATED -- DO NOT EDIT\\n` +\n `// Generated for operation '${name}' in file '../${path.basename(\n fileName,\n )}'\\n` +\n (options.regenerateCommand\n ? `// To regenerate, run '${options.regenerateCommand}'.\\n`\n : '') +\n code;\n if (options.splitTypes && !isFragment) {\n fileContents +=\n `\\nexport type ${name} = ${typeName}['response'];\\n` +\n `export type ${name}Variables = ${typeName}['variables'];\\n`;\n }\n Object.keys(extraTypes).forEach(\n (name) =>\n (fileContents += `\\n\\nexport type ${name} = ${extraTypes[name]};`),\n );\n const enumNames = Object.keys(experimentalEnums);\n if (options.experimentalEnums && enumNames.length) {\n // TODO(somewhatabstract, FEI-4172): Update to fixed eslint-plugin-flowtype\n // and remove this disable.\n fileContents += `\\n\\n/* eslint-disable no-undef */`;\n enumNames.forEach(\n (name) =>\n (fileContents += `\\nexport ${experimentalEnums[name]};\\n`),\n );\n fileContents += `/* eslint-enable no-undef */`;\n }\n\n addToIndex(targetPath, typeName);\n files[targetPath] =\n fileContents\n // Remove whitespace from the ends of lines; babel's generate sometimes\n // leaves them hanging around.\n .replace(/\\s+$/gm, '') + '\\n';\n },\n );\n\n return {files, indexContents};\n};\n\nconst getGeneratedDir = (fileName: string, options: GenerateConfig) => {\n const generatedDirectory = options.generatedDirectory ?? '__generated__';\n if (path.isAbsolute(generatedDirectory)) {\n // fileName is absolute here, so we make it relative to cwd\n // for more reasonable filenames. We convert leading ..'s\n // to `__` so this doesn't escape the output directory.\n return path.join(\n generatedDirectory,\n path\n .relative(process.cwd(), path.dirname(fileName))\n .replace(/\\.\\.\\//g, '__/'),\n );\n } else {\n return path.join(path.dirname(fileName), generatedDirectory);\n }\n};\n\nexport const generateTypeFiles = (\n fileName: string,\n schema: Schema,\n document: DocumentNode,\n options: GenerateConfig,\n) => {\n const generatedDir = getGeneratedDir(fileName, options);\n const indexFile = path.join(generatedDir, 'index.js');\n\n if (!fs.existsSync(generatedDir)) {\n fs.mkdirSync(generatedDir, {recursive: true});\n }\n if (!fs.existsSync(indexFile)) {\n fs.writeFileSync(indexFile, indexPrelude(options.regenerateCommand));\n }\n\n const {indexContents, files} = generateTypeFileContents(\n fileName,\n schema,\n document,\n options,\n generatedDir,\n fs.readFileSync(indexFile, 'utf8'),\n );\n\n fs.writeFileSync(indexFile, indexContents);\n Object.keys(files).forEach((key) => {\n fs.writeFileSync(key, files[key]);\n });\n\n fs.writeFileSync(indexFile, indexContents);\n};\n\nexport const processPragmas = (\n generateConfig: GenerateConfig,\n crawlConfig: CrawlConfig,\n rawSource: string,\n): {generate: boolean, strict?: boolean} => {\n if (\n crawlConfig.ignorePragma &&\n rawSource.includes(crawlConfig.ignorePragma)\n ) {\n return {generate: false};\n }\n\n const autogen = crawlConfig.loosePragma\n ? rawSource.includes(crawlConfig.loosePragma)\n : false;\n const autogenStrict = crawlConfig.pragma\n ? rawSource.includes(crawlConfig.pragma)\n : false;\n const noPragmas = !crawlConfig.loosePragma && !crawlConfig.pragma;\n\n if (autogen || autogenStrict || noPragmas) {\n return {\n generate: true,\n strict: noPragmas\n ? generateConfig.strictNullability\n : autogenStrict || !autogen,\n };\n } else {\n return {generate: false};\n }\n};\n"],"file":"generateTypeFiles.js"}
|
|
@@ -19,15 +19,15 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
19
19
|
|
|
20
20
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
21
|
|
|
22
|
-
const inputObjectToFlow = (
|
|
23
|
-
const inputObject =
|
|
22
|
+
const inputObjectToFlow = (ctx, name) => {
|
|
23
|
+
const inputObject = ctx.schema.inputObjectsByName[name];
|
|
24
24
|
|
|
25
25
|
if (!inputObject) {
|
|
26
|
-
|
|
26
|
+
ctx.errors.push(`Unknown input object ${name}`);
|
|
27
27
|
return babelTypes.stringLiteralTypeAnnotation(`Unknown input object ${name}`);
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
return (0, _utils.maybeAddDescriptionComment)(inputObject.description, babelTypes.objectTypeAnnotation(inputObject.inputFields.map(vbl => (0, _utils.maybeAddDescriptionComment)(vbl.description, maybeOptionalObjectTypeProperty(vbl.name, inputRefToFlow(
|
|
30
|
+
return (0, _utils.maybeAddDescriptionComment)(inputObject.description, babelTypes.objectTypeAnnotation(inputObject.inputFields.map(vbl => (0, _utils.maybeAddDescriptionComment)(vbl.description, maybeOptionalObjectTypeProperty(vbl.name, inputRefToFlow(ctx, vbl.type)))), undefined
|
|
31
31
|
/* indexers */
|
|
32
32
|
, undefined
|
|
33
33
|
/* callProperties */
|
|
@@ -52,77 +52,77 @@ const maybeOptionalObjectTypeProperty = (name, type) => {
|
|
|
52
52
|
|
|
53
53
|
exports.maybeOptionalObjectTypeProperty = maybeOptionalObjectTypeProperty;
|
|
54
54
|
|
|
55
|
-
const inputRefToFlow = (
|
|
55
|
+
const inputRefToFlow = (ctx, inputRef) => {
|
|
56
56
|
if (inputRef.kind === 'NON_NULL') {
|
|
57
|
-
return _inputRefToFlow(
|
|
57
|
+
return _inputRefToFlow(ctx, inputRef.ofType);
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
const result = _inputRefToFlow(
|
|
60
|
+
const result = _inputRefToFlow(ctx, inputRef);
|
|
61
61
|
|
|
62
62
|
return (0, _utils.transferLeadingComments)(result, babelTypes.nullableTypeAnnotation(result));
|
|
63
63
|
};
|
|
64
64
|
|
|
65
65
|
exports.inputRefToFlow = inputRefToFlow;
|
|
66
66
|
|
|
67
|
-
const _inputRefToFlow = (
|
|
67
|
+
const _inputRefToFlow = (ctx, inputRef) => {
|
|
68
68
|
if (inputRef.kind === 'SCALAR') {
|
|
69
|
-
return (0, _enums.scalarTypeToFlow)(
|
|
69
|
+
return (0, _enums.scalarTypeToFlow)(ctx, inputRef.name);
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
if (inputRef.kind === 'ENUM') {
|
|
73
|
-
return (0, _enums.enumTypeToFlow)(
|
|
73
|
+
return (0, _enums.enumTypeToFlow)(ctx, inputRef.name);
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
if (inputRef.kind === 'INPUT_OBJECT') {
|
|
77
|
-
return inputObjectToFlow(
|
|
77
|
+
return inputObjectToFlow(ctx, inputRef.name);
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
if (inputRef.kind === 'LIST') {
|
|
81
|
-
return babelTypes.genericTypeAnnotation(babelTypes.identifier('$ReadOnlyArray'), babelTypes.typeParameterInstantiation([inputRefToFlow(
|
|
81
|
+
return babelTypes.genericTypeAnnotation(babelTypes.identifier('$ReadOnlyArray'), babelTypes.typeParameterInstantiation([inputRefToFlow(ctx, inputRef.ofType)]));
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
return babelTypes.stringLiteralTypeAnnotation(JSON.stringify(inputRef));
|
|
85
85
|
};
|
|
86
86
|
|
|
87
|
-
const variableToFlow = (
|
|
87
|
+
const variableToFlow = (ctx, type) => {
|
|
88
88
|
if (type.kind === 'NonNullType') {
|
|
89
|
-
return _variableToFlow(
|
|
89
|
+
return _variableToFlow(ctx, type.type);
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
const result = _variableToFlow(
|
|
92
|
+
const result = _variableToFlow(ctx, type);
|
|
93
93
|
|
|
94
94
|
return (0, _utils.transferLeadingComments)(result, babelTypes.nullableTypeAnnotation(result));
|
|
95
95
|
};
|
|
96
96
|
|
|
97
|
-
const _variableToFlow = (
|
|
97
|
+
const _variableToFlow = (ctx, type) => {
|
|
98
98
|
if (type.kind === 'NamedType') {
|
|
99
99
|
if (_enums.builtinScalars[type.name.value]) {
|
|
100
|
-
return (0, _enums.scalarTypeToFlow)(
|
|
100
|
+
return (0, _enums.scalarTypeToFlow)(ctx, type.name.value);
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
-
if (
|
|
104
|
-
return (0, _enums.enumTypeToFlow)(
|
|
103
|
+
if (ctx.schema.enumsByName[type.name.value]) {
|
|
104
|
+
return (0, _enums.enumTypeToFlow)(ctx, type.name.value);
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
-
const customScalarType =
|
|
107
|
+
const customScalarType = ctx.scalars[type.name.value];
|
|
108
108
|
|
|
109
109
|
if (customScalarType) {
|
|
110
110
|
return babelTypes.genericTypeAnnotation(babelTypes.identifier(customScalarType));
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
-
return inputObjectToFlow(
|
|
113
|
+
return inputObjectToFlow(ctx, type.name.value);
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
if (type.kind === 'ListType') {
|
|
117
|
-
return babelTypes.genericTypeAnnotation(babelTypes.identifier('$ReadOnlyArray'), babelTypes.typeParameterInstantiation([variableToFlow(
|
|
117
|
+
return babelTypes.genericTypeAnnotation(babelTypes.identifier('$ReadOnlyArray'), babelTypes.typeParameterInstantiation([variableToFlow(ctx, type.type)]));
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
return babelTypes.stringLiteralTypeAnnotation('UNKNOWN' + JSON.stringify(type));
|
|
121
121
|
};
|
|
122
122
|
|
|
123
|
-
const generateVariablesType = (schema, item,
|
|
123
|
+
const generateVariablesType = (schema, item, ctx) => {
|
|
124
124
|
const variableObject = babelTypes.objectTypeAnnotation((item.variableDefinitions || []).map(vbl => {
|
|
125
|
-
return maybeOptionalObjectTypeProperty(vbl.variable.name.value, variableToFlow(
|
|
125
|
+
return maybeOptionalObjectTypeProperty(vbl.variable.name.value, variableToFlow(ctx, vbl.type));
|
|
126
126
|
}), undefined
|
|
127
127
|
/* indexers */
|
|
128
128
|
, undefined
|