{
  "version": 3,
  "sources": ["../../../src/redux-store/metadata/selectors.ts"],
  "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport { createSelector } from '../../create-selector';\nimport { selectorArgsToStateKey } from './utils';\nimport type { State, StateValue } from './reducer';\n\n/**\n * Returns the raw resolution state value for a given selector name,\n * and arguments set. May be undefined if the selector has never been resolved\n * or not resolved for the given set of arguments, otherwise true or false for\n * resolution started and completed respectively.\n *\n * @param state        Data state.\n * @param selectorName Selector name.\n * @param args         Arguments passed to selector.\n *\n * @return isResolving value.\n */\nexport function getResolutionState(\n\tstate: Record< string, State >,\n\tselectorName: string,\n\targs?: unknown[] | null\n): StateValue | undefined {\n\tconst map = state[ selectorName ];\n\tif ( ! map ) {\n\t\treturn;\n\t}\n\n\treturn map.get( selectorArgsToStateKey( args ) );\n}\n\n/**\n * Returns an `isResolving`-like value for a given selector name and arguments set.\n * Its value is either `undefined` if the selector has never been resolved or has been\n * invalidated, or a `true`/`false` boolean value if the resolution is in progress or\n * has finished, respectively.\n *\n * This is a legacy selector that was implemented when the \"raw\" internal data had\n * this `undefined | boolean` format. Nowadays the internal value is an object that\n * can be retrieved with `getResolutionState`.\n *\n * @deprecated\n *\n * @param state        Data state.\n * @param selectorName Selector name.\n * @param args         Arguments passed to selector.\n *\n * @return isResolving value.\n */\nexport function getIsResolving(\n\tstate: Record< string, State >,\n\tselectorName: string,\n\targs?: unknown[] | null\n): boolean | undefined {\n\tdeprecated( 'wp.data.select( store ).getIsResolving', {\n\t\tsince: '6.6',\n\t\tversion: '6.8',\n\t\talternative: 'wp.data.select( store ).getResolutionState',\n\t} );\n\n\tconst resolutionState = getResolutionState( state, selectorName, args );\n\treturn resolutionState && resolutionState.status === 'resolving';\n}\n\n/**\n * Returns true if resolution has already been triggered for a given\n * selector name, and arguments set.\n *\n * @param state        Data state.\n * @param selectorName Selector name.\n * @param args         Arguments passed to selector.\n *\n * @return Whether resolution has been triggered.\n */\nexport function hasStartedResolution(\n\tstate: Record< string, State >,\n\tselectorName: string,\n\targs?: unknown[] | null\n): boolean {\n\treturn getResolutionState( state, selectorName, args ) !== undefined;\n}\n\n/**\n * Returns true if resolution has completed for a given selector\n * name, and arguments set.\n *\n * @param state        Data state.\n * @param selectorName Selector name.\n * @param args         Arguments passed to selector.\n *\n * @return Whether resolution has completed.\n */\nexport function hasFinishedResolution(\n\tstate: Record< string, State >,\n\tselectorName: string,\n\targs?: unknown[] | null\n): boolean {\n\tconst status = getResolutionState( state, selectorName, args )?.status;\n\treturn status === 'finished' || status === 'error';\n}\n\n/**\n * Returns true if resolution has failed for a given selector\n * name, and arguments set.\n *\n * @param state        Data state.\n * @param selectorName Selector name.\n * @param args         Arguments passed to selector.\n *\n * @return Has resolution failed\n */\nexport function hasResolutionFailed(\n\tstate: Record< string, State >,\n\tselectorName: string,\n\targs?: unknown[] | null\n): boolean {\n\treturn getResolutionState( state, selectorName, args )?.status === 'error';\n}\n\n/**\n * Returns the resolution error for a given selector name, and arguments set.\n * Note it may be of an Error type, but may also be null, undefined, or anything else\n * that can be `throw`-n.\n *\n * @param state        Data state.\n * @param selectorName Selector name.\n * @param args         Arguments passed to selector.\n *\n * @return Last resolution error\n */\nexport function getResolutionError(\n\tstate: Record< string, State >,\n\tselectorName: string,\n\targs?: unknown[] | null\n): Error | unknown {\n\tconst resolutionState = getResolutionState( state, selectorName, args );\n\treturn resolutionState?.status === 'error' ? resolutionState.error : null;\n}\n\n/**\n * Returns true if resolution has been triggered but has not yet completed for\n * a given selector name, and arguments set.\n *\n * @param state        Data state.\n * @param selectorName Selector name.\n * @param args         Arguments passed to selector.\n *\n * @return Whether resolution is in progress.\n */\nexport function isResolving(\n\tstate: Record< string, State >,\n\tselectorName: string,\n\targs?: unknown[] | null\n): boolean {\n\treturn (\n\t\tgetResolutionState( state, selectorName, args )?.status === 'resolving'\n\t);\n}\n\n/**\n * Returns the list of the cached resolvers.\n *\n * @param state Data state.\n *\n * @return Resolvers mapped by args and selectorName.\n */\nexport function getCachedResolvers(\n\tstate: Record< string, State >\n): Record< string, State > {\n\treturn state;\n}\n\n/**\n * Whether the store has any currently resolving selectors.\n *\n * @param state Data state.\n *\n * @return True if one or more selectors are resolving, false otherwise.\n */\nexport function hasResolvingSelectors(\n\tstate: Record< string, State >\n): boolean {\n\treturn Object.values( state ).some( ( selectorState ) =>\n\t\t/**\n\t\t * This uses the internal `_map` property of `EquivalentKeyMap` for\n\t\t * optimization purposes, since the `EquivalentKeyMap` implementation\n\t\t * does not support a `.values()` implementation.\n\t\t *\n\t\t * @see https://github.com/aduth/equivalent-key-map\n\t\t */\n\t\tArray.from( ( selectorState as any )._map.values() ).some(\n\t\t\t( resolution: any ) => resolution[ 1 ]?.status === 'resolving'\n\t\t)\n\t);\n}\n\n/**\n * Retrieves the total number of selectors, grouped per status.\n *\n * @param state Data state.\n *\n * @return Object, containing selector totals by status.\n */\nexport const countSelectorsByStatus = createSelector(\n\t( state: Record< string, State > ): Record< string, number > => {\n\t\tconst selectorsByStatus: Record< string, number > = {};\n\n\t\tObject.values( state ).forEach( ( selectorState ) =>\n\t\t\t/**\n\t\t\t * This uses the internal `_map` property of `EquivalentKeyMap` for\n\t\t\t * optimization purposes, since the `EquivalentKeyMap` implementation\n\t\t\t * does not support a `.values()` implementation.\n\t\t\t *\n\t\t\t * @see https://github.com/aduth/equivalent-key-map\n\t\t\t */\n\t\t\tArray.from( ( selectorState as any )._map.values() ).forEach(\n\t\t\t\t( resolution: any ) => {\n\t\t\t\t\tconst currentStatus = resolution[ 1 ]?.status ?? 'error';\n\t\t\t\t\tif ( ! selectorsByStatus[ currentStatus ] ) {\n\t\t\t\t\t\tselectorsByStatus[ currentStatus ] = 0;\n\t\t\t\t\t}\n\t\t\t\t\tselectorsByStatus[ currentStatus ]++;\n\t\t\t\t}\n\t\t\t)\n\t\t);\n\n\t\treturn selectorsByStatus;\n\t},\n\t( state: Record< string, State > ) => [ state ]\n);\n"],
  "mappings": ";AAGA,OAAO,gBAAgB;AAKvB,SAAS,sBAAsB;AAC/B,SAAS,8BAA8B;AAehC,SAAS,mBACf,OACA,cACA,MACyB;AACzB,QAAM,MAAM,MAAO,YAAa;AAChC,MAAK,CAAE,KAAM;AACZ;AAAA,EACD;AAEA,SAAO,IAAI,IAAK,uBAAwB,IAAK,CAAE;AAChD;AAoBO,SAAS,eACf,OACA,cACA,MACsB;AACtB,aAAY,0CAA0C;AAAA,IACrD,OAAO;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,EACd,CAAE;AAEF,QAAM,kBAAkB,mBAAoB,OAAO,cAAc,IAAK;AACtE,SAAO,mBAAmB,gBAAgB,WAAW;AACtD;AAYO,SAAS,qBACf,OACA,cACA,MACU;AACV,SAAO,mBAAoB,OAAO,cAAc,IAAK,MAAM;AAC5D;AAYO,SAAS,sBACf,OACA,cACA,MACU;AACV,QAAM,SAAS,mBAAoB,OAAO,cAAc,IAAK,GAAG;AAChE,SAAO,WAAW,cAAc,WAAW;AAC5C;AAYO,SAAS,oBACf,OACA,cACA,MACU;AACV,SAAO,mBAAoB,OAAO,cAAc,IAAK,GAAG,WAAW;AACpE;AAaO,SAAS,mBACf,OACA,cACA,MACkB;AAClB,QAAM,kBAAkB,mBAAoB,OAAO,cAAc,IAAK;AACtE,SAAO,iBAAiB,WAAW,UAAU,gBAAgB,QAAQ;AACtE;AAYO,SAAS,YACf,OACA,cACA,MACU;AACV,SACC,mBAAoB,OAAO,cAAc,IAAK,GAAG,WAAW;AAE9D;AASO,SAAS,mBACf,OAC0B;AAC1B,SAAO;AACR;AASO,SAAS,sBACf,OACU;AACV,SAAO,OAAO,OAAQ,KAAM,EAAE;AAAA,IAAM,CAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQrC,MAAM,KAAQ,cAAuB,KAAK,OAAO,CAAE,EAAE;AAAA,QACpD,CAAE,eAAqB,WAAY,CAAE,GAAG,WAAW;AAAA,MACpD;AAAA;AAAA,EACD;AACD;AASO,IAAM,yBAAyB;AAAA,EACrC,CAAE,UAA8D;AAC/D,UAAM,oBAA8C,CAAC;AAErD,WAAO,OAAQ,KAAM,EAAE;AAAA,MAAS,CAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAQjC,MAAM,KAAQ,cAAuB,KAAK,OAAO,CAAE,EAAE;AAAA,UACpD,CAAE,eAAqB;AACtB,kBAAM,gBAAgB,WAAY,CAAE,GAAG,UAAU;AACjD,gBAAK,CAAE,kBAAmB,aAAc,GAAI;AAC3C,gCAAmB,aAAc,IAAI;AAAA,YACtC;AACA,8BAAmB,aAAc;AAAA,UAClC;AAAA,QACD;AAAA;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AAAA,EACA,CAAE,UAAoC,CAAE,KAAM;AAC/C;",
  "names": []
}
