UNPKG

@strapi/data-transfer

Version:

Data transfer capabilities for Strapi

1 lines 3.79 kB
{"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;;;;"}