{
  "version": 3,
  "sources": ["../src/controls.ts"],
  "sourcesContent": ["/**\n * Internal dependencies\n */\nimport { createRegistryControl } from './factory';\nimport type { StoreDescriptor } from './types';\n\nconst SELECT = '@@data/SELECT';\nconst RESOLVE_SELECT = '@@data/RESOLVE_SELECT';\nconst DISPATCH = '@@data/DISPATCH';\n\nfunction isStoreDescriptor( object: unknown ): object is StoreDescriptor {\n\treturn object !== null && typeof object === 'object';\n}\n\n/**\n * Dispatches a control action for triggering a synchronous registry select.\n *\n * Note: This control synchronously returns the current selector value, triggering the\n * resolution, but not waiting for it.\n *\n * @param storeNameOrDescriptor Unique namespace identifier for the store\n * @param selectorName          The name of the selector.\n * @param args                  Arguments for the selector.\n *\n * @example\n * ```js\n * import { controls } from '@wordpress/data';\n *\n * // Action generator using `select`.\n * export function* myAction() {\n *   const isEditorSideBarOpened = yield controls.select( 'core/edit-post', 'isEditorSideBarOpened' );\n *   // Do stuff with the result from the `select`.\n * }\n * ```\n *\n * @return The control descriptor.\n */\nfunction select(\n\tstoreNameOrDescriptor: string | StoreDescriptor,\n\tselectorName: string,\n\t...args: unknown[]\n) {\n\treturn {\n\t\ttype: SELECT,\n\t\tstoreKey: isStoreDescriptor( storeNameOrDescriptor )\n\t\t\t? storeNameOrDescriptor.name\n\t\t\t: storeNameOrDescriptor,\n\t\tselectorName,\n\t\targs,\n\t};\n}\n\n/**\n * Dispatches a control action for triggering and resolving a registry select.\n *\n * Note: when this control action is handled, it automatically considers\n * selectors that may have a resolver. In such case, it will return a `Promise` that resolves\n * after the selector finishes resolving, with the final result value.\n *\n * @param storeNameOrDescriptor Unique namespace identifier for the store\n * @param selectorName          The name of the selector\n * @param args                  Arguments for the selector.\n *\n * @example\n * ```js\n * import { controls } from '@wordpress/data';\n *\n * // Action generator using resolveSelect\n * export function* myAction() {\n * \tconst isSidebarOpened = yield controls.resolveSelect( 'core/edit-post', 'isEditorSideBarOpened' );\n * \t// do stuff with the result from the select.\n * }\n * ```\n *\n * @return The control descriptor.\n */\nfunction resolveSelect(\n\tstoreNameOrDescriptor: string | StoreDescriptor< any >,\n\tselectorName: string,\n\t...args: any[]\n) {\n\treturn {\n\t\ttype: RESOLVE_SELECT,\n\t\tstoreKey: isStoreDescriptor( storeNameOrDescriptor )\n\t\t\t? storeNameOrDescriptor.name\n\t\t\t: storeNameOrDescriptor,\n\t\tselectorName,\n\t\targs,\n\t};\n}\n\n/**\n * Dispatches a control action for triggering a registry dispatch.\n *\n * @param storeNameOrDescriptor Unique namespace identifier for the store\n * @param actionName            The name of the action to dispatch\n * @param args                  Arguments for the dispatch action.\n *\n * @example\n * ```js\n * import { controls } from '@wordpress/data-controls';\n *\n * // Action generator using dispatch\n * export function* myAction() {\n *   yield controls.dispatch( 'core/editor', 'togglePublishSidebar' );\n *   // do some other things.\n * }\n * ```\n *\n * @return   The control descriptor.\n */\nfunction dispatch(\n\tstoreNameOrDescriptor: string | StoreDescriptor,\n\tactionName: string,\n\t...args: unknown[]\n) {\n\treturn {\n\t\ttype: DISPATCH,\n\t\tstoreKey: isStoreDescriptor( storeNameOrDescriptor )\n\t\t\t? storeNameOrDescriptor.name\n\t\t\t: storeNameOrDescriptor,\n\t\tactionName,\n\t\targs,\n\t};\n}\n\nexport const controls = { select, resolveSelect, dispatch };\n\ntype SelectorControlArgs = {\n\tstoreKey: string;\n\tselectorName: string;\n\targs: unknown[];\n};\n\ntype ActionControlArgs = {\n\tstoreKey: string;\n\tactionName: string;\n\targs: unknown[];\n};\n\nexport const builtinControls = {\n\t[ SELECT ]: createRegistryControl(\n\t\t( registry ) =>\n\t\t\t( { storeKey, selectorName, args }: SelectorControlArgs ) =>\n\t\t\t\tregistry.select( storeKey )[ selectorName ]( ...args )\n\t),\n\t[ RESOLVE_SELECT ]: createRegistryControl(\n\t\t( registry ) =>\n\t\t\t( { storeKey, selectorName, args }: SelectorControlArgs ) => {\n\t\t\t\tconst selector = registry.select( storeKey )[\n\t\t\t\t\tselectorName\n\t\t\t\t] as ( ( ...a: any[] ) => any ) & {\n\t\t\t\t\thasResolver?: boolean;\n\t\t\t\t};\n\t\t\t\tconst method = selector.hasResolver\n\t\t\t\t\t? 'resolveSelect'\n\t\t\t\t\t: 'select';\n\t\t\t\treturn registry[ method ]( storeKey )[ selectorName ](\n\t\t\t\t\t...args\n\t\t\t\t);\n\t\t\t}\n\t),\n\t[ DISPATCH ]: createRegistryControl(\n\t\t( registry ) =>\n\t\t\t( { storeKey, actionName, args }: ActionControlArgs ) =>\n\t\t\t\tregistry.dispatch( storeKey )[ actionName ]( ...args )\n\t),\n};\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,qBAAsC;AAGtC,IAAM,SAAS;AACf,IAAM,iBAAiB;AACvB,IAAM,WAAW;AAEjB,SAAS,kBAAmB,QAA6C;AACxE,SAAO,WAAW,QAAQ,OAAO,WAAW;AAC7C;AAyBA,SAAS,OACR,uBACA,iBACG,MACF;AACD,SAAO;AAAA,IACN,MAAM;AAAA,IACN,UAAU,kBAAmB,qBAAsB,IAChD,sBAAsB,OACtB;AAAA,IACH;AAAA,IACA;AAAA,EACD;AACD;AA0BA,SAAS,cACR,uBACA,iBACG,MACF;AACD,SAAO;AAAA,IACN,MAAM;AAAA,IACN,UAAU,kBAAmB,qBAAsB,IAChD,sBAAsB,OACtB;AAAA,IACH;AAAA,IACA;AAAA,EACD;AACD;AAsBA,SAAS,SACR,uBACA,eACG,MACF;AACD,SAAO;AAAA,IACN,MAAM;AAAA,IACN,UAAU,kBAAmB,qBAAsB,IAChD,sBAAsB,OACtB;AAAA,IACH;AAAA,IACA;AAAA,EACD;AACD;AAEO,IAAM,WAAW,EAAE,QAAQ,eAAe,SAAS;AAcnD,IAAM,kBAAkB;AAAA,EAC9B,CAAE,MAAO,OAAG;AAAA,IACX,CAAE,aACD,CAAE,EAAE,UAAU,cAAc,KAAK,MAChC,SAAS,OAAQ,QAAS,EAAG,YAAa,EAAG,GAAG,IAAK;AAAA,EACxD;AAAA,EACA,CAAE,cAAe,OAAG;AAAA,IACnB,CAAE,aACD,CAAE,EAAE,UAAU,cAAc,KAAK,MAA4B;AAC5D,YAAM,WAAW,SAAS,OAAQ,QAAS,EAC1C,YACD;AAGA,YAAM,SAAS,SAAS,cACrB,kBACA;AACH,aAAO,SAAU,MAAO,EAAG,QAAS,EAAG,YAAa;AAAA,QACnD,GAAG;AAAA,MACJ;AAAA,IACD;AAAA,EACF;AAAA,EACA,CAAE,QAAS,OAAG;AAAA,IACb,CAAE,aACD,CAAE,EAAE,UAAU,YAAY,KAAK,MAC9B,SAAS,SAAU,QAAS,EAAG,UAAW,EAAG,GAAG,IAAK;AAAA,EACxD;AACD;",
  "names": []
}
