Skip to content

Instantly share code, notes, and snippets.

@JakeChampion
Created October 26, 2021 21:34
Show Gist options
  • Save JakeChampion/2f8cb3637b60580a8cc34fd2f309c5ce to your computer and use it in GitHub Desktop.
Save JakeChampion/2f8cb3637b60580a8cc34fd2f309c5ce to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
// Available variables:
// - Machine
// - interpret
// - assign
// - send
// - sendParent
// - spawn
// - raise
// - actions
// - XState (all XState exports)
const fetchMachine = Machine({
id: 'fetch',
initial: 'inbound',
context: {
retries: 0
},
states: {
inbound: {
on: {
START: 'recv'
}
},
recv: {
on: {
lookup: 'hash',
pass: 'hash',
error: 'hash',
restart: {
target: 'recv',
actions: assign({
retries: (context, event) => context.retries + 1
})
}
}
},
hash: {
on: {
hit: 'hit',
miss: 'miss',
pass: 'pass',
}
},
hit: {
on: {
deliver: 'deliver',
pass: 'hash',
error: 'error',
restart: {
target: 'recv',
actions: assign({
retries: (context, event) => context.retries + 1
})
}
}
},
miss: {
on: {
fetch: 'fetch',
pass: 'pass',
deliver_stale: 'deliver',
error: 'error',
}
},
pass: {
on: {
pass: 'fetch',
error: 'error',
}
},
fetch: {
on: {
deliver: 'deliver',
deliver_stale: 'deliver',
pass: 'deliver',
error: 'error',
restart: {
target: 'recv',
actions: assign({
retries: (context, event) => context.retries + 1
})
}
}
},
deliver: {
on: {
deliver: 'log',
restart: {
target: 'recv',
actions: assign({
retries: (context, event) => context.retries + 1
})
}
}
},
log: {
type: 'final'
},
error: {
on: {
deliver: 'deliver',
deliver_stale: 'deliver',
restart: {
target: 'recv',
actions: assign({
retries: (context, event) => context.retries + 1
})
}
}
},
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment