flow /**
 * This defines a basic set of data for our Star Wars Schema.
 *
 * This data is hard coded for the sake of the demo, but you could imagine
 * fetching this data from a backend service rather than from hardcoded
 * JSON objects in a more complex demo.
 */ const luke = { type : 'Human' , id : '1000' , name : 'Luke Skywalker' , friendIds : [ '1002' , '1003' , '2000' , '2001' ] , appearsIn : [ 4 , 5 , 6 ] , homePlanet : 'Tatooine' , } ; const vader = { type : 'Human' , id : '1001' , name : 'Darth Vader' , friendIds : [ '1004' ] , appearsIn : [ 4 , 5 , 6 ] , homePlanet : 'Tatooine' , } ; const han = { type : 'Human' , id : '1002' , name : 'Han Solo' , friendIds : [ '1000' , '1003' , '2001' ] , appearsIn : [ 4 , 5 , 6 ] , } ; const leia = { type : 'Human' , id : '1003' , name : 'Leia Organa' , friendIds : [ '1000' , '1002' , '2000' , '2001' ] , appearsIn : [ 4 , 5 , 6 ] , homePlanet : 'Alderaan' , } ; const tarkin = { type : 'Human' , id : '1004' , name : 'Wilhuff Tarkin' , friendIds : [ '1001' ] , appearsIn : [ 4 ] , } ; const humanData = { '1000' : luke , '1001' : vader , '1002' : han , '1003' : leia , '1004' : tarkin , } ; const threepio = { type : 'Droid' , id : '2000' , name : 'C-3PO' , friendIds : [ '1000' , '1002' , '1003' , '2001' ] , appearsIn : [ 4 , 5 , 6 ] , primaryFunction : 'Protocol' , } ; const artoo = { type : 'Droid' , id : '2001' , name : 'R2-D2' , friendIds : [ '1000' , '1002' , '1003' ] , appearsIn : [ 4 , 5 , 6 ] , primaryFunction : 'Astromech' , } ; const droidData = { '2000' : threepio , '2001' : artoo , } ; /**
 * These are Flow types which correspond to the schema.
 * They represent the shape of the data visited during field resolution.
 */ export type EpisodeValue = 4 | 5 | 6 ; export type CharacterSource = { type : string ; id : string ; name : string ; friendIds : Array < string > ; appearsIn : Array < EpisodeValue > ; } ; export type HumanSource = { type : 'Human' ; id : string ; name : string ; friendIds : Array < string > ; appearsIn : Array < EpisodeValue > ; homePlanet ? : string ; } ; export type DroidSource = { type : 'Droid' ; id : string ; name : string ; friendIds : Array < string > ; appearsIn : Array < EpisodeValue > ; primaryFunction : string ; } ; /**
 * Helper function to get a character by ID.
 */ function getCharacter ( id ) { return Promise . resolve ( humanData [ id ] || droidData [ id ] ) ; } /**
 * Allows us to query for a character's friends.
 */ export function getFriends ( character ) { return character . friendIds . map ( id => getCharacter ( id ) ) ; } /**
 * Allows us to fetch the undisputed hero of the Star Wars trilogy, R2-D2.
 */ export function getHero ( episode ) { if ( episode === 5 ) { return luke ; } return artoo ; } /**
 * Allows us to query for the human with the given id.
 */ export function getHuman ( id ) { return humanData [ id ] ; } /**
 * Allows us to query for the droid with the given id.
 */ export function getDroid ( id ) { return droidData [ id ] ; }