@wordpress/data
Version:
Data module for WordPress.
8 lines (7 loc) • 1.84 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../src/utils/emitter.ts"],
"sourcesContent": ["export interface DataEmitter {\n\temit: VoidFunction;\n\tsubscribe: ( listener: VoidFunction ) => VoidFunction;\n\tpause: VoidFunction;\n\tresume: VoidFunction;\n\tisPaused: boolean;\n}\n\n/**\n * Create an event emitter.\n *\n * @return The event emitter.\n */\nexport function createEmitter(): DataEmitter {\n\tlet isPaused = false;\n\tlet isPending = false;\n\tconst listeners = new Set< VoidFunction >();\n\tconst notifyListeners = () =>\n\t\t// We use Array.from to clone the listeners Set\n\t\t// This ensures that we don't run a listener\n\t\t// that was added as a response to another listener.\n\t\tArray.from( listeners ).forEach( ( listener ) => listener() );\n\n\treturn {\n\t\tget isPaused() {\n\t\t\treturn isPaused;\n\t\t},\n\n\t\tsubscribe( listener ) {\n\t\t\tlisteners.add( listener );\n\t\t\treturn () => listeners.delete( listener );\n\t\t},\n\n\t\tpause() {\n\t\t\tisPaused = true;\n\t\t},\n\n\t\tresume() {\n\t\t\tisPaused = false;\n\t\t\tif ( isPending ) {\n\t\t\t\tisPending = false;\n\t\t\t\tnotifyListeners();\n\t\t\t}\n\t\t},\n\n\t\temit() {\n\t\t\tif ( isPaused ) {\n\t\t\t\tisPending = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tnotifyListeners();\n\t\t},\n\t};\n}\n"],
"mappings": ";AAaO,SAAS,gBAA6B;AAC5C,MAAI,WAAW;AACf,MAAI,YAAY;AAChB,QAAM,YAAY,oBAAI,IAAoB;AAC1C,QAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA,IAIvB,MAAM,KAAM,SAAU,EAAE,QAAS,CAAE,aAAc,SAAS,CAAE;AAAA;AAE7D,SAAO;AAAA,IACN,IAAI,WAAW;AACd,aAAO;AAAA,IACR;AAAA,IAEA,UAAW,UAAW;AACrB,gBAAU,IAAK,QAAS;AACxB,aAAO,MAAM,UAAU,OAAQ,QAAS;AAAA,IACzC;AAAA,IAEA,QAAQ;AACP,iBAAW;AAAA,IACZ;AAAA,IAEA,SAAS;AACR,iBAAW;AACX,UAAK,WAAY;AAChB,oBAAY;AACZ,wBAAgB;AAAA,MACjB;AAAA,IACD;AAAA,IAEA,OAAO;AACN,UAAK,UAAW;AACf,oBAAY;AACZ;AAAA,MACD;AACA,sBAAgB;AAAA,IACjB;AAAA,EACD;AACD;",
"names": []
}