UNPKG

@wordpress/data

Version:
8 lines (7 loc) • 2.27 kB
{ "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\t// We use `Array.from` to clone the listeners `Set`. This ensures that we\n\t// don't run a listener that was added as a response to another listener.\n\tlet clonedListeners: VoidFunction[] | null = null;\n\n\tconst notifyListeners = () => {\n\t\tclonedListeners ??= Array.from( listeners );\n\t\tconst currentListeners = clonedListeners;\n\t\tfor ( let i = 0; i < currentListeners.length; i++ ) {\n\t\t\tcurrentListeners[ i ]();\n\t\t}\n\t};\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\tclonedListeners = null;\n\t\t\treturn () => {\n\t\t\t\tlisteners.delete( listener );\n\t\t\t\tclonedListeners = null;\n\t\t\t};\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": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAaO,SAAS,gBAA6B;AAC5C,MAAI,WAAW;AACf,MAAI,YAAY;AAChB,QAAM,YAAY,oBAAI,IAAoB;AAG1C,MAAI,kBAAyC;AAE7C,QAAM,kBAAkB,MAAM;AAC7B,wBAAoB,MAAM,KAAM,SAAU;AAC1C,UAAM,mBAAmB;AACzB,aAAU,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAM;AACnD,uBAAkB,CAAE,EAAE;AAAA,IACvB;AAAA,EACD;AAEA,SAAO;AAAA,IACN,IAAI,WAAW;AACd,aAAO;AAAA,IACR;AAAA,IAEA,UAAW,UAAW;AACrB,gBAAU,IAAK,QAAS;AACxB,wBAAkB;AAClB,aAAO,MAAM;AACZ,kBAAU,OAAQ,QAAS;AAC3B,0BAAkB;AAAA,MACnB;AAAA,IACD;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": [] }