{"version":3,"file":"index.mjs","sources":["../../../../src/strapi/remote/flows/index.ts"],"sourcesContent":["import type { TransferStage } from '../../../../types';\n\nexport type Step =\n  | { kind: 'action'; action: string }\n  | { kind: 'transfer'; stage: TransferStage; locked?: boolean };\n\nexport { default as DEFAULT_TRANSFER_FLOW } from './default';\n\ninterface IState {\n  step: Step | null;\n}\n\nexport interface TransferFlow {\n  has(step: Step): boolean;\n  can(step: Step): boolean;\n  cannot(step: Step): boolean;\n  set(step: Step): this;\n  get(): Step | null;\n}\n\nexport const createFlow = (flow: readonly Step[]): TransferFlow => {\n  const state: IState = { step: null };\n\n  /**\n   * Equality check between two steps\n   */\n  const stepEqual = (stepA: Step, stepB: Step): boolean => {\n    if (stepA.kind === 'action' && stepB.kind === 'action') {\n      return stepA.action === stepB.action;\n    }\n\n    if (stepA.kind === 'transfer' && stepB.kind === 'transfer') {\n      return stepA.stage === stepB.stage;\n    }\n\n    return false;\n  };\n\n  /**\n   * Find the index for a given step\n   */\n  const findStepIndex = (step: Step) => flow.findIndex((flowStep) => stepEqual(step, flowStep));\n\n  return {\n    has(step: Step) {\n      return findStepIndex(step) !== -1;\n    },\n\n    can(step: Step) {\n      if (state.step === null) {\n        return true;\n      }\n\n      const indexesDifference = findStepIndex(step) - findStepIndex(state.step);\n\n      // It's possible to send multiple time the same transfer step in a row\n      if (indexesDifference === 0 && step.kind === 'transfer') {\n        return true;\n      }\n\n      return indexesDifference > 0;\n    },\n\n    cannot(step: Step) {\n      return !this.can(step);\n    },\n\n    set(step: Step) {\n      const canSwitch = this.can(step);\n\n      if (!canSwitch) {\n        throw new Error('Impossible to proceed to the given step');\n      }\n\n      state.step = step;\n\n      return this;\n    },\n\n    get() {\n      return state.step;\n    },\n  };\n};\n"],"names":["createFlow","flow","state","step","stepEqual","stepA","stepB","kind","action","stage","findStepIndex","findIndex","flowStep","has","can","indexesDifference","cannot","set","canSwitch","Error","get"],"mappings":"AAoBO,MAAMA,aAAa,CAACC,IAAAA,GAAAA;AACzB,IAAA,MAAMC,KAAAA,GAAgB;QAAEC,IAAAA,EAAM;AAAK,KAAA;AAEnC;;MAGA,MAAMC,SAAAA,GAAY,CAACC,KAAAA,EAAaC,KAAAA,GAAAA;AAC9B,QAAA,IAAID,MAAME,IAAI,KAAK,YAAYD,KAAAA,CAAMC,IAAI,KAAK,QAAA,EAAU;AACtD,YAAA,OAAOF,KAAAA,CAAMG,MAAM,KAAKF,KAAAA,CAAME,MAAM;AACtC,QAAA;AAEA,QAAA,IAAIH,MAAME,IAAI,KAAK,cAAcD,KAAAA,CAAMC,IAAI,KAAK,UAAA,EAAY;AAC1D,YAAA,OAAOF,KAAAA,CAAMI,KAAK,KAAKH,KAAAA,CAAMG,KAAK;AACpC,QAAA;QAEA,OAAO,KAAA;AACT,IAAA,CAAA;AAEA;;MAGA,MAAMC,aAAAA,GAAgB,CAACP,IAAAA,GAAeF,IAAAA,CAAKU,SAAS,CAAC,CAACC,QAAAA,GAAaR,SAAAA,CAAUD,IAAAA,EAAMS,QAAAA,CAAAA,CAAAA;IAEnF,OAAO;AACLC,QAAAA,GAAAA,CAAAA,CAAIV,IAAU,EAAA;YACZ,OAAOO,aAAAA,CAAcP,UAAU,EAAC;AAClC,QAAA,CAAA;AAEAW,QAAAA,GAAAA,CAAAA,CAAIX,IAAU,EAAA;YACZ,IAAID,KAAAA,CAAMC,IAAI,KAAK,IAAA,EAAM;gBACvB,OAAO,IAAA;AACT,YAAA;AAEA,YAAA,MAAMY,iBAAAA,GAAoBL,aAAAA,CAAcP,IAAAA,CAAAA,GAAQO,aAAAA,CAAcR,MAAMC,IAAI,CAAA;;AAGxE,YAAA,IAAIY,iBAAAA,KAAsB,CAAA,IAAKZ,IAAAA,CAAKI,IAAI,KAAK,UAAA,EAAY;gBACvD,OAAO,IAAA;AACT,YAAA;AAEA,YAAA,OAAOQ,iBAAAA,GAAoB,CAAA;AAC7B,QAAA,CAAA;AAEAC,QAAAA,MAAAA,CAAAA,CAAOb,IAAU,EAAA;AACf,YAAA,OAAO,CAAC,IAAI,CAACW,GAAG,CAACX,IAAAA,CAAAA;AACnB,QAAA,CAAA;AAEAc,QAAAA,GAAAA,CAAAA,CAAId,IAAU,EAAA;AACZ,YAAA,MAAMe,SAAAA,GAAY,IAAI,CAACJ,GAAG,CAACX,IAAAA,CAAAA;AAE3B,YAAA,IAAI,CAACe,SAAAA,EAAW;AACd,gBAAA,MAAM,IAAIC,KAAAA,CAAM,yCAAA,CAAA;AAClB,YAAA;AAEAjB,YAAAA,KAAAA,CAAMC,IAAI,GAAGA,IAAAA;AAEb,YAAA,OAAO,IAAI;AACb,QAAA,CAAA;AAEAiB,QAAAA,GAAAA,CAAAA,GAAAA;AACE,YAAA,OAAOlB,MAAMC,IAAI;AACnB,QAAA;AACF,KAAA;AACF;;;;"}