{"version":3,"file":"hook.mjs","sources":["../../../../../../node_modules/epubjs/src/utils/hook.js"],"sourcesContent":["/**\n * Hooks allow for injecting functions that must all complete in order before finishing\n * They will execute in parallel but all must finish before continuing\n * Functions may return a promise if they are async.\n * @param {any} context scope of this\n * @example this.content = new EPUBJS.Hook(this);\n */\nclass Hook {\n\tconstructor(context){\n\t\tthis.context = context || this;\n\t\tthis.hooks = [];\n\t}\n\n\t/**\n\t * Adds a function to be run before a hook completes\n\t * @example this.content.register(function(){...});\n\t */\n\tregister(){\n\t\tfor(var i = 0; i < arguments.length; ++i) {\n\t\t\tif (typeof arguments[i]  === \"function\") {\n\t\t\t\tthis.hooks.push(arguments[i]);\n\t\t\t} else {\n\t\t\t\t// unpack array\n\t\t\t\tfor(var j = 0; j < arguments[i].length; ++j) {\n\t\t\t\t\tthis.hooks.push(arguments[i][j]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Removes a function\n\t * @example this.content.deregister(function(){...});\n\t */\n\tderegister(func){\n\t\tlet hook;\n\t\tfor (let i = 0; i < this.hooks.length; i++) {\n\t\t\thook = this.hooks[i];\n\t\t\tif (hook === func) {\n\t\t\t\tthis.hooks.splice(i, 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Triggers a hook to run all functions\n\t * @example this.content.trigger(args).then(function(){...});\n\t */\n\ttrigger(){\n\t\tvar args = arguments;\n\t\tvar context = this.context;\n\t\tvar promises = [];\n\n\t\tthis.hooks.forEach(function(task) {\n\t\t\ttry {\n\t\t\t\tvar executing = task.apply(context, args);\n\t\t\t} catch (err) {\n\t\t\t\tconsole.log(err);\n\t\t\t}\n\n\t\t\tif(executing && typeof executing[\"then\"] === \"function\") {\n\t\t\t\t// Task is a function that returns a promise\n\t\t\t\tpromises.push(executing);\n\t\t\t}\n\t\t\t// Otherwise Task resolves immediately, continue\n\t\t});\n\n\n\t\treturn Promise.all(promises);\n\t}\n\n\t// Adds a function to be run before a hook completes\n\tlist(){\n\t\treturn this.hooks;\n\t}\n\n\tclear(){\n\t\treturn this.hooks = [];\n\t}\n}\nexport default Hook;\n"],"names":["Hook","context","i","j","func","hook","args","promises","task","executing","err"],"mappings":"AAOA,MAAMA,EAAK;AAAA,EACV,YAAYC,GAAQ;AACnB,SAAK,UAAUA,KAAW,MAC1B,KAAK,QAAQ,CAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAU;AACT,aAAQC,IAAI,GAAGA,IAAI,UAAU,QAAQ,EAAEA;AACtC,UAAI,OAAO,UAAUA,CAAC,KAAO;AAC5B,aAAK,MAAM,KAAK,UAAUA,CAAC,CAAC;AAAA;AAG5B,iBAAQC,IAAI,GAAGA,IAAI,UAAUD,CAAC,EAAE,QAAQ,EAAEC;AACzC,eAAK,MAAM,KAAK,UAAUD,CAAC,EAAEC,CAAC,CAAC;AAAA,EAInC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAWC,GAAK;AACf,QAAIC;AACJ,aAASH,IAAI,GAAGA,IAAI,KAAK,MAAM,QAAQA;AAEtC,UADAG,IAAO,KAAK,MAAMH,CAAC,GACfG,MAASD,GAAM;AAClB,aAAK,MAAM,OAAOF,GAAG,CAAC;AACtB;AAAA,MACD;AAAA,EAEF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAS;AACR,QAAII,IAAO,WACPL,IAAU,KAAK,SACfM,IAAW,CAAA;AAEf,gBAAK,MAAM,QAAQ,SAASC,GAAM;AACjC,UAAI;AACH,YAAIC,IAAYD,EAAK,MAAMP,GAASK,CAAI;AAAA,MACzC,SAASI,GAAK;AACb,gBAAQ,IAAIA,CAAG;AAAA,MAChB;AAEA,MAAGD,KAAa,OAAOA,EAAU,QAAY,cAE5CF,EAAS,KAAKE,CAAS;AAAA,IAGzB,CAAC,GAGM,QAAQ,IAAIF,CAAQ;AAAA,EAC5B;AAAA;AAAA,EAGA,OAAM;AACL,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,QAAO;AACN,WAAO,KAAK,QAAQ,CAAA;AAAA,EACrB;AACD;","x_google_ignoreList":[0]}