@wordpress/redux-routine
Version:
Redux middleware for generator coroutines.
8 lines (7 loc) • 2.75 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../src/runtime.ts"],
"sourcesContent": ["/**\n * External dependencies\n */\nimport type { Control } from 'rungen';\nimport { create } from 'rungen';\nimport isPromise from 'is-promise';\nimport type { Dispatch, AnyAction } from 'redux';\n\n/**\n * Internal dependencies\n */\nimport { isActionOfType, isAction } from './is-action';\n\n/**\n * Create a co-routine runtime.\n *\n * @param controls Object of control handlers.\n * @param dispatch Unhandled action dispatch.\n */\nexport default function createRuntime(\n\tcontrols: Record<\n\t\tstring,\n\t\t( value: any ) => Promise< boolean > | boolean\n\t> = {},\n\tdispatch: Dispatch\n) {\n\tconst rungenControls = Object.entries( controls ).map(\n\t\t( [ actionType, control ] ): Control =>\n\t\t\t( value, next, iterate, yieldNext, yieldError ) => {\n\t\t\t\tif ( ! isActionOfType( value, actionType ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tconst routine = control( value );\n\t\t\t\tif ( isPromise( routine ) ) {\n\t\t\t\t\t// Async control routine awaits resolution.\n\t\t\t\t\troutine.then( yieldNext, yieldError );\n\t\t\t\t} else {\n\t\t\t\t\tyieldNext( routine );\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t);\n\n\tconst unhandledActionControl = (\n\t\tvalue: AnyAction | unknown,\n\t\tnext: () => void\n\t) => {\n\t\tif ( ! isAction( value ) ) {\n\t\t\treturn false;\n\t\t}\n\t\tdispatch( value );\n\t\tnext();\n\t\treturn true;\n\t};\n\trungenControls.push( unhandledActionControl );\n\n\tconst rungenRuntime = create( rungenControls );\n\n\treturn ( action: AnyAction | Generator ) =>\n\t\tnew Promise( ( resolve, reject ) =>\n\t\t\trungenRuntime(\n\t\t\t\taction,\n\t\t\t\t( result ) => {\n\t\t\t\t\tif ( isAction( result ) ) {\n\t\t\t\t\t\tdispatch( result );\n\t\t\t\t\t}\n\t\t\t\t\tresolve( result );\n\t\t\t\t},\n\t\t\t\treject\n\t\t\t)\n\t\t);\n}\n"],
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,oBAAuB;AACvB,wBAAsB;AAMtB,uBAAyC;AAQ1B,SAAR,cACN,WAGI,CAAC,GACL,UACC;AACD,QAAM,iBAAiB,OAAO,QAAS,QAAS,EAAE;AAAA,IACjD,CAAE,CAAE,YAAY,OAAQ,MACvB,CAAE,OAAO,MAAM,SAAS,WAAW,eAAgB;AAClD,UAAK,KAAE,iCAAgB,OAAO,UAAW,GAAI;AAC5C,eAAO;AAAA,MACR;AACA,YAAM,UAAU,QAAS,KAAM;AAC/B,cAAK,kBAAAA,SAAW,OAAQ,GAAI;AAE3B,gBAAQ,KAAM,WAAW,UAAW;AAAA,MACrC,OAAO;AACN,kBAAW,OAAQ;AAAA,MACpB;AACA,aAAO;AAAA,IACR;AAAA,EACF;AAEA,QAAM,yBAAyB,CAC9B,OACA,SACI;AACJ,QAAK,KAAE,2BAAU,KAAM,GAAI;AAC1B,aAAO;AAAA,IACR;AACA,aAAU,KAAM;AAChB,SAAK;AACL,WAAO;AAAA,EACR;AACA,iBAAe,KAAM,sBAAuB;AAE5C,QAAM,oBAAgB,sBAAQ,cAAe;AAE7C,SAAO,CAAE,WACR,IAAI;AAAA,IAAS,CAAE,SAAS,WACvB;AAAA,MACC;AAAA,MACA,CAAE,WAAY;AACb,gBAAK,2BAAU,MAAO,GAAI;AACzB,mBAAU,MAAO;AAAA,QAClB;AACA,gBAAS,MAAO;AAAA,MACjB;AAAA,MACA;AAAA,IACD;AAAA,EACD;AACF;",
"names": ["isPromise"]
}