@wordpress/hooks
Version:
WordPress hooks library.
8 lines (7 loc) • 4.25 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../src/createRunHook.ts"],
"sourcesContent": ["import type { Hooks, StoreKey } from './types';\n\nexport type RunHook = (\n\thookName: string,\n\t...args: unknown[]\n) => undefined | unknown;\n\n/**\n * Returns a function which, when invoked, will execute all callbacks\n * registered to a hook of the specified type, optionally returning the final\n * value of the call chain.\n *\n * @param hooks Hooks instance.\n * @param storeKey\n * @param returnFirstArg Whether each hook callback is expected to return its first argument.\n * @param async Whether the hook callback should be run asynchronously\n *\n * @return Function that runs hook callbacks.\n */\nfunction createRunHook(\n\thooks: Hooks,\n\tstoreKey: StoreKey,\n\treturnFirstArg: boolean,\n\tasync: boolean\n): RunHook {\n\treturn function runHook( hookName, ...args ) {\n\t\tconst hooksStore = hooks[ storeKey ];\n\n\t\tif ( ! hooksStore[ hookName ] ) {\n\t\t\thooksStore[ hookName ] = {\n\t\t\t\thandlers: [],\n\t\t\t\truns: 0,\n\t\t\t};\n\t\t}\n\n\t\thooksStore[ hookName ].runs++;\n\n\t\tconst handlers = hooksStore[ hookName ].handlers;\n\n\t\t// The following code is stripped from production builds.\n\t\tif ( 'production' !== process.env.NODE_ENV ) {\n\t\t\t// Handle any 'all' hooks registered.\n\t\t\tif ( 'hookAdded' !== hookName && hooksStore.all ) {\n\t\t\t\thandlers.push( ...hooksStore.all.handlers );\n\t\t\t}\n\t\t}\n\n\t\tif ( ! handlers || ! handlers.length ) {\n\t\t\treturn returnFirstArg ? args[ 0 ] : undefined;\n\t\t}\n\n\t\tconst hookInfo = {\n\t\t\tname: hookName,\n\t\t\tcurrentIndex: 0,\n\t\t};\n\n\t\tasync function asyncRunner() {\n\t\t\ttry {\n\t\t\t\thooksStore.__current.add( hookInfo );\n\t\t\t\tlet result = returnFirstArg ? args[ 0 ] : undefined;\n\t\t\t\twhile ( hookInfo.currentIndex < handlers.length ) {\n\t\t\t\t\tconst handler = handlers[ hookInfo.currentIndex ];\n\t\t\t\t\tresult = await handler.callback.apply( null, args );\n\t\t\t\t\tif ( returnFirstArg ) {\n\t\t\t\t\t\targs[ 0 ] = result;\n\t\t\t\t\t}\n\t\t\t\t\thookInfo.currentIndex++;\n\t\t\t\t}\n\t\t\t\treturn returnFirstArg ? result : undefined;\n\t\t\t} finally {\n\t\t\t\thooksStore.__current.delete( hookInfo );\n\t\t\t}\n\t\t}\n\n\t\tfunction syncRunner() {\n\t\t\ttry {\n\t\t\t\thooksStore.__current.add( hookInfo );\n\t\t\t\tlet result = returnFirstArg ? args[ 0 ] : undefined;\n\t\t\t\twhile ( hookInfo.currentIndex < handlers.length ) {\n\t\t\t\t\tconst handler = handlers[ hookInfo.currentIndex ];\n\t\t\t\t\tresult = handler.callback.apply( null, args );\n\t\t\t\t\tif ( returnFirstArg ) {\n\t\t\t\t\t\targs[ 0 ] = result;\n\t\t\t\t\t}\n\t\t\t\t\thookInfo.currentIndex++;\n\t\t\t\t}\n\t\t\t\treturn returnFirstArg ? result : undefined;\n\t\t\t} finally {\n\t\t\t\thooksStore.__current.delete( hookInfo );\n\t\t\t}\n\t\t}\n\n\t\treturn ( async ? asyncRunner : syncRunner )();\n\t};\n}\n\nexport default createRunHook;\n"],
"mappings": ";AAmBA,SAAS,cACR,OACA,UACA,gBACA,OACU;AACV,SAAO,SAAS,QAAS,aAAa,MAAO;AAC5C,UAAM,aAAa,MAAO,QAAS;AAEnC,QAAK,CAAE,WAAY,QAAS,GAAI;AAC/B,iBAAY,QAAS,IAAI;AAAA,QACxB,UAAU,CAAC;AAAA,QACX,MAAM;AAAA,MACP;AAAA,IACD;AAEA,eAAY,QAAS,EAAE;AAEvB,UAAM,WAAW,WAAY,QAAS,EAAE;AAGxC,QAAK,iBAAiB,QAAQ,IAAI,UAAW;AAE5C,UAAK,gBAAgB,YAAY,WAAW,KAAM;AACjD,iBAAS,KAAM,GAAG,WAAW,IAAI,QAAS;AAAA,MAC3C;AAAA,IACD;AAEA,QAAK,CAAE,YAAY,CAAE,SAAS,QAAS;AACtC,aAAO,iBAAiB,KAAM,CAAE,IAAI;AAAA,IACrC;AAEA,UAAM,WAAW;AAAA,MAChB,MAAM;AAAA,MACN,cAAc;AAAA,IACf;AAEA,mBAAe,cAAc;AAC5B,UAAI;AACH,mBAAW,UAAU,IAAK,QAAS;AACnC,YAAI,SAAS,iBAAiB,KAAM,CAAE,IAAI;AAC1C,eAAQ,SAAS,eAAe,SAAS,QAAS;AACjD,gBAAM,UAAU,SAAU,SAAS,YAAa;AAChD,mBAAS,MAAM,QAAQ,SAAS,MAAO,MAAM,IAAK;AAClD,cAAK,gBAAiB;AACrB,iBAAM,CAAE,IAAI;AAAA,UACb;AACA,mBAAS;AAAA,QACV;AACA,eAAO,iBAAiB,SAAS;AAAA,MAClC,UAAE;AACD,mBAAW,UAAU,OAAQ,QAAS;AAAA,MACvC;AAAA,IACD;AAEA,aAAS,aAAa;AACrB,UAAI;AACH,mBAAW,UAAU,IAAK,QAAS;AACnC,YAAI,SAAS,iBAAiB,KAAM,CAAE,IAAI;AAC1C,eAAQ,SAAS,eAAe,SAAS,QAAS;AACjD,gBAAM,UAAU,SAAU,SAAS,YAAa;AAChD,mBAAS,QAAQ,SAAS,MAAO,MAAM,IAAK;AAC5C,cAAK,gBAAiB;AACrB,iBAAM,CAAE,IAAI;AAAA,UACb;AACA,mBAAS;AAAA,QACV;AACA,eAAO,iBAAiB,SAAS;AAAA,MAClC,UAAE;AACD,mBAAW,UAAU,OAAQ,QAAS;AAAA,MACvC;AAAA,IACD;AAEA,YAAS,QAAQ,cAAc,YAAa;AAAA,EAC7C;AACD;AAEA,IAAO,wBAAQ;",
"names": []
}