@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.
Files changed (55) hide show
  1. package/.github/workflows/pr-checks.yml +4 -6
  2. package/CHANGELOG.md +22 -0
  3. package/Readme.md +41 -167
  4. package/dist/__test__/example-schema.graphql +67 -0
  5. package/dist/__test__/generateTypeFileContents.test.js +157 -0
  6. package/dist/__test__/graphql-flow.test.js +639 -0
  7. package/dist/__test__/processPragmas.test.js +76 -0
  8. package/dist/cli/__test__/config.test.js +120 -0
  9. package/dist/cli/config.js +45 -106
  10. package/dist/cli/config.js.flow +37 -159
  11. package/dist/cli/config.js.map +1 -1
  12. package/dist/cli/run.js +40 -36
  13. package/dist/cli/run.js.flow +56 -42
  14. package/dist/cli/run.js.map +1 -1
  15. package/dist/cli/schema.json +91 -0
  16. package/dist/enums.js +9 -9
  17. package/dist/enums.js.flow +11 -11
  18. package/dist/enums.js.map +1 -1
  19. package/dist/generateResponseType.js +47 -47
  20. package/dist/generateResponseType.js.flow +55 -57
  21. package/dist/generateResponseType.js.map +1 -1
  22. package/dist/generateTypeFiles.js +13 -17
  23. package/dist/generateTypeFiles.js.flow +21 -43
  24. package/dist/generateTypeFiles.js.map +1 -1
  25. package/dist/generateVariablesType.js +24 -24
  26. package/dist/generateVariablesType.js.flow +25 -28
  27. package/dist/generateVariablesType.js.map +1 -1
  28. package/dist/index.js +0 -8
  29. package/dist/index.js.flow +4 -5
  30. package/dist/index.js.map +1 -1
  31. package/dist/parser/__test__/parse.test.js +247 -0
  32. package/dist/types.js.flow +26 -6
  33. package/package.json +3 -2
  34. package/src/__test__/generateTypeFileContents.test.js +3 -1
  35. package/src/__test__/graphql-flow.test.js +7 -7
  36. package/src/__test__/processPragmas.test.js +28 -15
  37. package/src/cli/__test__/config.test.js +110 -84
  38. package/src/cli/config.js +37 -159
  39. package/src/cli/run.js +56 -42
  40. package/src/cli/schema.json +91 -0
  41. package/src/enums.js +11 -11
  42. package/src/generateResponseType.js +55 -57
  43. package/src/generateTypeFiles.js +21 -43
  44. package/src/generateVariablesType.js +25 -28
  45. package/src/index.js +4 -5
  46. package/src/types.js +26 -6
  47. package/dist/cli/utils.js +0 -21
  48. package/dist/cli/utils.js.flow +0 -14
  49. package/dist/cli/utils.js.map +0 -1
  50. package/dist/jest-mock-graphql-tag.js +0 -88
  51. package/dist/jest-mock-graphql-tag.js.flow +0 -96
  52. package/dist/jest-mock-graphql-tag.js.map +0 -1
  53. package/src/cli/__test__/utils.test.js +0 -19
  54. package/src/cli/utils.js +0 -14
  55. 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 = (options, rawSource) => {
141
- if (options.ignorePragma && rawSource.includes(options.ignorePragma)) {
142
- return null;
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 = options.loosePragma ? rawSource.includes(options.loosePragma) : false;
146
- const autogenStrict = options.pragma ? rawSource.includes(options.pragma) : false;
147
- const noPragmas = !options.loosePragma && !options.pragma;
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
- regenerateCommand: options.regenerateCommand,
152
- strictNullability: noPragmas ? options.strictNullability : autogenStrict || !autogen,
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 null;
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 {Options, Schema, Scalars} from './types';
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: 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: 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: 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
- options: ExternalOptions,
150
+ generateConfig: GenerateConfig,
151
+ crawlConfig: CrawlConfig,
170
152
  rawSource: string,
171
- ): null | Options => {
172
- if (options.ignorePragma && rawSource.includes(options.ignorePragma)) {
173
- return null;
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 = options.loosePragma
177
- ? rawSource.includes(options.loosePragma)
161
+ const autogen = crawlConfig.loosePragma
162
+ ? rawSource.includes(crawlConfig.loosePragma)
178
163
  : false;
179
- const autogenStrict = options.pragma
180
- ? rawSource.includes(options.pragma)
164
+ const autogenStrict = crawlConfig.pragma
165
+ ? rawSource.includes(crawlConfig.pragma)
181
166
  : false;
182
- const noPragmas = !options.loosePragma && !options.pragma;
167
+ const noPragmas = !crawlConfig.loosePragma && !crawlConfig.pragma;
183
168
 
184
169
  if (autogen || autogenStrict || noPragmas) {
185
170
  return {
186
- regenerateCommand: options.regenerateCommand,
187
- strictNullability: noPragmas
188
- ? options.strictNullability
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 null;
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 = (config, name) => {
23
- const inputObject = config.schema.inputObjectsByName[name];
22
+ const inputObjectToFlow = (ctx, name) => {
23
+ const inputObject = ctx.schema.inputObjectsByName[name];
24
24
 
25
25
  if (!inputObject) {
26
- config.errors.push(`Unknown input object ${name}`);
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(config, vbl.type)))), undefined
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 = (config, inputRef) => {
55
+ const inputRefToFlow = (ctx, inputRef) => {
56
56
  if (inputRef.kind === 'NON_NULL') {
57
- return _inputRefToFlow(config, inputRef.ofType);
57
+ return _inputRefToFlow(ctx, inputRef.ofType);
58
58
  }
59
59
 
60
- const result = _inputRefToFlow(config, inputRef);
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 = (config, inputRef) => {
67
+ const _inputRefToFlow = (ctx, inputRef) => {
68
68
  if (inputRef.kind === 'SCALAR') {
69
- return (0, _enums.scalarTypeToFlow)(config, inputRef.name);
69
+ return (0, _enums.scalarTypeToFlow)(ctx, inputRef.name);
70
70
  }
71
71
 
72
72
  if (inputRef.kind === 'ENUM') {
73
- return (0, _enums.enumTypeToFlow)(config, inputRef.name);
73
+ return (0, _enums.enumTypeToFlow)(ctx, inputRef.name);
74
74
  }
75
75
 
76
76
  if (inputRef.kind === 'INPUT_OBJECT') {
77
- return inputObjectToFlow(config, inputRef.name);
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(config, inputRef.ofType)]));
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 = (config, type) => {
87
+ const variableToFlow = (ctx, type) => {
88
88
  if (type.kind === 'NonNullType') {
89
- return _variableToFlow(config, type.type);
89
+ return _variableToFlow(ctx, type.type);
90
90
  }
91
91
 
92
- const result = _variableToFlow(config, type);
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 = (config, type) => {
97
+ const _variableToFlow = (ctx, type) => {
98
98
  if (type.kind === 'NamedType') {
99
99
  if (_enums.builtinScalars[type.name.value]) {
100
- return (0, _enums.scalarTypeToFlow)(config, type.name.value);
100
+ return (0, _enums.scalarTypeToFlow)(ctx, type.name.value);
101
101
  }
102
102
 
103
- if (config.schema.enumsByName[type.name.value]) {
104
- return (0, _enums.enumTypeToFlow)(config, type.name.value);
103
+ if (ctx.schema.enumsByName[type.name.value]) {
104
+ return (0, _enums.enumTypeToFlow)(ctx, type.name.value);
105
105
  }
106
106
 
107
- const customScalarType = config.scalars[type.name.value];
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(config, type.name.value);
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(config, type.type)]));
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, config) => {
123
+ const generateVariablesType = (schema, item, ctx) => {
124
124
  const variableObject = babelTypes.objectTypeAnnotation((item.variableDefinitions || []).map(vbl => {
125
- return maybeOptionalObjectTypeProperty(vbl.variable.name.value, variableToFlow(config, vbl.type));
125
+ return maybeOptionalObjectTypeProperty(vbl.variable.name.value, variableToFlow(ctx, vbl.type));
126
126
  }), undefined
127
127
  /* indexers */
128
128
  , undefined