@wordpress/data 6.5.0 → 6.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/data/src/redux-store/index.js"],"names":["createStore","applyMiddleware","flowRight","get","mapValues","omit","combineReducers","EquivalentKeyMap","createReduxRoutineMiddleware","builtinControls","promise","createResolversCacheMiddleware","createThunkMiddleware","metadataReducer","metadataSelectors","metadataActions","trimUndefinedValues","array","result","i","length","undefined","splice","createResolversCache","cache","isRunning","selectorName","args","clear","delete","markAsRunning","set","createReduxStore","key","options","name","instantiate","registry","reducer","thunkArgs","dispatch","Object","assign","action","store","getActions","select","selector","__unstableOriginalGetState","getSelectors","resolveSelect","getResolveSelectors","instantiateReduxStore","resolversCache","resolvers","actions","mapActions","selectors","mapSelectors","state","metadata","isRegistrySelector","root","mapResolvers","resolveSelectors","mapResolveSelectors","getState","subscribe","listener","lastState","hasChanged","controls","normalizedControls","control","isRegistryControl","middlewares","enhancers","window","__REDUX_DEVTOOLS_EXTENSION__","push","instanceId","initialState","enhancedReducer","createStateSelector","registrySelector","runSelector","argsLength","arguments","Array","hasResolver","createBoundAction","Promise","resolve","reject","hasFinished","hasFinishedResolution","finalize","hasFailed","hasResolutionFailed","error","getResolutionError","getResult","apply","unsubscribe","mappedResolvers","resolver","fulfill","mapSelector","selectorResolver","fulfillSelector","isFulfilled","hasStartedResolution","setTimeout","startResolution","fulfillResolver","finishResolution","failResolution"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { createStore, applyMiddleware } from 'redux';\nimport { flowRight, get, mapValues, omit } from 'lodash';\nimport combineReducers from 'turbo-combine-reducers';\nimport EquivalentKeyMap from 'equivalent-key-map';\n\n/**\n * WordPress dependencies\n */\nimport createReduxRoutineMiddleware from '@wordpress/redux-routine';\n\n/**\n * Internal dependencies\n */\nimport { builtinControls } from '../controls';\nimport promise from '../promise-middleware';\nimport createResolversCacheMiddleware from '../resolvers-cache-middleware';\nimport createThunkMiddleware from './thunk-middleware';\nimport metadataReducer from './metadata/reducer';\nimport * as metadataSelectors from './metadata/selectors';\nimport * as metadataActions from './metadata/actions';\n\n/** @typedef {import('../types').DataRegistry} DataRegistry */\n/** @typedef {import('../types').StoreDescriptor} StoreDescriptor */\n/** @typedef {import('../types').ReduxStoreConfig} ReduxStoreConfig */\n\nconst trimUndefinedValues = ( array ) => {\n\tconst result = [ ...array ];\n\tfor ( let i = result.length - 1; i >= 0; i-- ) {\n\t\tif ( result[ i ] === undefined ) {\n\t\t\tresult.splice( i, 1 );\n\t\t}\n\t}\n\treturn result;\n};\n\n/**\n * Create a cache to track whether resolvers started running or not.\n *\n * @return {Object} Resolvers Cache.\n */\nfunction createResolversCache() {\n\tconst cache = {};\n\treturn {\n\t\tisRunning( selectorName, args ) {\n\t\t\treturn (\n\t\t\t\tcache[ selectorName ] &&\n\t\t\t\tcache[ selectorName ].get( trimUndefinedValues( args ) )\n\t\t\t);\n\t\t},\n\n\t\tclear( selectorName, args ) {\n\t\t\tif ( cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ].delete( trimUndefinedValues( args ) );\n\t\t\t}\n\t\t},\n\n\t\tmarkAsRunning( selectorName, args ) {\n\t\t\tif ( ! cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ] = new EquivalentKeyMap();\n\t\t\t}\n\n\t\t\tcache[ selectorName ].set( trimUndefinedValues( args ), true );\n\t\t},\n\t};\n}\n\n/**\n * Creates a data store descriptor for the provided Redux store configuration containing\n * properties describing reducer, actions, selectors, controls and resolvers.\n *\n * @example\n * ```js\n * import { createReduxStore } from '@wordpress/data';\n *\n * const store = createReduxStore( 'demo', {\n * reducer: ( state = 'OK' ) => state,\n * selectors: {\n * getValue: ( state ) => state,\n * },\n * } );\n * ```\n *\n * @param {string} key Unique namespace identifier.\n * @param {ReduxStoreConfig} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n *\n * @return {StoreDescriptor} Store Object.\n */\nexport default function createReduxStore( key, options ) {\n\treturn {\n\t\tname: key,\n\t\tinstantiate: ( registry ) => {\n\t\t\tconst reducer = options.reducer;\n\t\t\tconst thunkArgs = {\n\t\t\t\tregistry,\n\t\t\t\tget dispatch() {\n\t\t\t\t\treturn Object.assign(\n\t\t\t\t\t\t( action ) => store.dispatch( action ),\n\t\t\t\t\t\tgetActions()\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tget select() {\n\t\t\t\t\treturn Object.assign(\n\t\t\t\t\t\t( selector ) =>\n\t\t\t\t\t\t\tselector( store.__unstableOriginalGetState() ),\n\t\t\t\t\t\tgetSelectors()\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tget resolveSelect() {\n\t\t\t\t\treturn getResolveSelectors();\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst store = instantiateReduxStore(\n\t\t\t\tkey,\n\t\t\t\toptions,\n\t\t\t\tregistry,\n\t\t\t\tthunkArgs\n\t\t\t);\n\t\t\tconst resolversCache = createResolversCache();\n\n\t\t\tlet resolvers;\n\t\t\tconst actions = mapActions(\n\t\t\t\t{\n\t\t\t\t\t...metadataActions,\n\t\t\t\t\t...options.actions,\n\t\t\t\t},\n\t\t\t\tstore\n\t\t\t);\n\n\t\t\tlet selectors = mapSelectors(\n\t\t\t\t{\n\t\t\t\t\t...mapValues(\n\t\t\t\t\t\tmetadataSelectors,\n\t\t\t\t\t\t( selector ) => ( state, ...args ) =>\n\t\t\t\t\t\t\tselector( state.metadata, ...args )\n\t\t\t\t\t),\n\t\t\t\t\t...mapValues( options.selectors, ( selector ) => {\n\t\t\t\t\t\tif ( selector.isRegistrySelector ) {\n\t\t\t\t\t\t\tselector.registry = registry;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn ( state, ...args ) =>\n\t\t\t\t\t\t\tselector( state.root, ...args );\n\t\t\t\t\t} ),\n\t\t\t\t},\n\t\t\t\tstore\n\t\t\t);\n\t\t\tif ( options.resolvers ) {\n\t\t\t\tconst result = mapResolvers(\n\t\t\t\t\toptions.resolvers,\n\t\t\t\t\tselectors,\n\t\t\t\t\tstore,\n\t\t\t\t\tresolversCache\n\t\t\t\t);\n\t\t\t\tresolvers = result.resolvers;\n\t\t\t\tselectors = result.selectors;\n\t\t\t}\n\n\t\t\tconst resolveSelectors = mapResolveSelectors( selectors, store );\n\n\t\t\tconst getSelectors = () => selectors;\n\t\t\tconst getActions = () => actions;\n\t\t\tconst getResolveSelectors = () => resolveSelectors;\n\n\t\t\t// We have some modules monkey-patching the store object\n\t\t\t// It's wrong to do so but until we refactor all of our effects to controls\n\t\t\t// We need to keep the same \"store\" instance here.\n\t\t\tstore.__unstableOriginalGetState = store.getState;\n\t\t\tstore.getState = () => store.__unstableOriginalGetState().root;\n\n\t\t\t// Customize subscribe behavior to call listeners only on effective change,\n\t\t\t// not on every dispatch.\n\t\t\tconst subscribe =\n\t\t\t\tstore &&\n\t\t\t\t( ( listener ) => {\n\t\t\t\t\tlet lastState = store.__unstableOriginalGetState();\n\t\t\t\t\treturn store.subscribe( () => {\n\t\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\t\t\tconst hasChanged = state !== lastState;\n\t\t\t\t\t\tlastState = state;\n\n\t\t\t\t\t\tif ( hasChanged ) {\n\t\t\t\t\t\t\tlistener();\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t} );\n\n\t\t\t// This can be simplified to just { subscribe, getSelectors, getActions }\n\t\t\t// Once we remove the use function.\n\t\t\treturn {\n\t\t\t\treducer,\n\t\t\t\tstore,\n\t\t\t\tactions,\n\t\t\t\tselectors,\n\t\t\t\tresolvers,\n\t\t\t\tgetSelectors,\n\t\t\t\tgetResolveSelectors,\n\t\t\t\tgetActions,\n\t\t\t\tsubscribe,\n\t\t\t};\n\t\t},\n\t};\n}\n\n/**\n * Creates a redux store for a namespace.\n *\n * @param {string} key Unique namespace identifier.\n * @param {Object} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n * @param {DataRegistry} registry Registry reference.\n * @param {Object} thunkArgs Argument object for the thunk middleware.\n * @return {Object} Newly created redux store.\n */\nfunction instantiateReduxStore( key, options, registry, thunkArgs ) {\n\tconst controls = {\n\t\t...options.controls,\n\t\t...builtinControls,\n\t};\n\n\tconst normalizedControls = mapValues( controls, ( control ) =>\n\t\tcontrol.isRegistryControl ? control( registry ) : control\n\t);\n\n\tconst middlewares = [\n\t\tcreateResolversCacheMiddleware( registry, key ),\n\t\tpromise,\n\t\tcreateReduxRoutineMiddleware( normalizedControls ),\n\t\tcreateThunkMiddleware( thunkArgs ),\n\t];\n\n\tconst enhancers = [ applyMiddleware( ...middlewares ) ];\n\tif (\n\t\ttypeof window !== 'undefined' &&\n\t\twindow.__REDUX_DEVTOOLS_EXTENSION__\n\t) {\n\t\tenhancers.push(\n\t\t\twindow.__REDUX_DEVTOOLS_EXTENSION__( {\n\t\t\t\tname: key,\n\t\t\t\tinstanceId: key,\n\t\t\t} )\n\t\t);\n\t}\n\n\tconst { reducer, initialState } = options;\n\tconst enhancedReducer = combineReducers( {\n\t\tmetadata: metadataReducer,\n\t\troot: reducer,\n\t} );\n\n\treturn createStore(\n\t\tenhancedReducer,\n\t\t{ root: initialState },\n\t\tflowRight( enhancers )\n\t);\n}\n\n/**\n * Maps selectors to a store.\n *\n * @param {Object} selectors Selectors to register. Keys will be used as the\n * public facing API. Selectors will get passed the\n * state as first argument.\n * @param {Object} store The store to which the selectors should be mapped.\n * @return {Object} Selectors mapped to the provided store.\n */\nfunction mapSelectors( selectors, store ) {\n\tconst createStateSelector = ( registrySelector ) => {\n\t\tconst selector = function runSelector() {\n\t\t\t// This function is an optimized implementation of:\n\t\t\t//\n\t\t\t// selector( store.getState(), ...arguments )\n\t\t\t//\n\t\t\t// Where the above would incur an `Array#concat` in its application,\n\t\t\t// the logic here instead efficiently constructs an arguments array via\n\t\t\t// direct assignment.\n\t\t\tconst argsLength = arguments.length;\n\t\t\tconst args = new Array( argsLength + 1 );\n\t\t\targs[ 0 ] = store.__unstableOriginalGetState();\n\t\t\tfor ( let i = 0; i < argsLength; i++ ) {\n\t\t\t\targs[ i + 1 ] = arguments[ i ];\n\t\t\t}\n\n\t\t\treturn registrySelector( ...args );\n\t\t};\n\t\tselector.hasResolver = false;\n\t\treturn selector;\n\t};\n\n\treturn mapValues( selectors, createStateSelector );\n}\n\n/**\n * Maps actions to dispatch from a given store.\n *\n * @param {Object} actions Actions to register.\n * @param {Object} store The redux store to which the actions should be mapped.\n *\n * @return {Object} Actions mapped to the redux store provided.\n */\nfunction mapActions( actions, store ) {\n\tconst createBoundAction = ( action ) => ( ...args ) => {\n\t\treturn Promise.resolve( store.dispatch( action( ...args ) ) );\n\t};\n\n\treturn mapValues( actions, createBoundAction );\n}\n\n/**\n * Maps selectors to functions that return a resolution promise for them\n *\n * @param {Object} selectors Selectors to map.\n * @param {Object} store The redux store the selectors select from.\n *\n * @return {Object} Selectors mapped to their resolution functions.\n */\nfunction mapResolveSelectors( selectors, store ) {\n\treturn mapValues(\n\t\tomit( selectors, [\n\t\t\t'getIsResolving',\n\t\t\t'hasStartedResolution',\n\t\t\t'hasFinishedResolution',\n\t\t\t'isResolving',\n\t\t\t'getCachedResolvers',\n\t\t] ),\n\t\t( selector, selectorName ) => ( ...args ) =>\n\t\t\tnew Promise( ( resolve, reject ) => {\n\t\t\t\tconst hasFinished = () =>\n\t\t\t\t\tselectors.hasFinishedResolution( selectorName, args );\n\t\t\t\tconst finalize = ( result ) => {\n\t\t\t\t\tconst hasFailed = selectors.hasResolutionFailed(\n\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\targs\n\t\t\t\t\t);\n\t\t\t\t\tif ( hasFailed ) {\n\t\t\t\t\t\tconst error = selectors.getResolutionError(\n\t\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t\targs\n\t\t\t\t\t\t);\n\t\t\t\t\t\treject( error );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve( result );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tconst getResult = () => selector.apply( null, args );\n\t\t\t\t// Trigger the selector (to trigger the resolver)\n\t\t\t\tconst result = getResult();\n\t\t\t\tif ( hasFinished() ) {\n\t\t\t\t\treturn finalize( result );\n\t\t\t\t}\n\n\t\t\t\tconst unsubscribe = store.subscribe( () => {\n\t\t\t\t\tif ( hasFinished() ) {\n\t\t\t\t\t\tunsubscribe();\n\t\t\t\t\t\tfinalize( getResult() );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} )\n\t);\n}\n\n/**\n * Returns resolvers with matched selectors for a given namespace.\n * Resolvers are side effects invoked once per argument set of a given selector call,\n * used in ensuring that the data needs for the selector are satisfied.\n *\n * @param {Object} resolvers Resolvers to register.\n * @param {Object} selectors The current selectors to be modified.\n * @param {Object} store The redux store to which the resolvers should be mapped.\n * @param {Object} resolversCache Resolvers Cache.\n */\nfunction mapResolvers( resolvers, selectors, store, resolversCache ) {\n\t// The `resolver` can be either a function that does the resolution, or, in more advanced\n\t// cases, an object with a `fullfill` method and other optional methods like `isFulfilled`.\n\t// Here we normalize the `resolver` function to an object with `fulfill` method.\n\tconst mappedResolvers = mapValues( resolvers, ( resolver ) => {\n\t\tif ( resolver.fulfill ) {\n\t\t\treturn resolver;\n\t\t}\n\n\t\treturn {\n\t\t\t...resolver, // Copy the enumerable properties of the resolver function.\n\t\t\tfulfill: resolver, // Add the fulfill method.\n\t\t};\n\t} );\n\n\tconst mapSelector = ( selector, selectorName ) => {\n\t\tconst resolver = resolvers[ selectorName ];\n\t\tif ( ! resolver ) {\n\t\t\tselector.hasResolver = false;\n\t\t\treturn selector;\n\t\t}\n\n\t\tconst selectorResolver = ( ...args ) => {\n\t\t\tasync function fulfillSelector() {\n\t\t\t\tconst state = store.getState();\n\n\t\t\t\tif (\n\t\t\t\t\tresolversCache.isRunning( selectorName, args ) ||\n\t\t\t\t\t( typeof resolver.isFulfilled === 'function' &&\n\t\t\t\t\t\tresolver.isFulfilled( state, ...args ) )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst { metadata } = store.__unstableOriginalGetState();\n\n\t\t\t\tif (\n\t\t\t\t\tmetadataSelectors.hasStartedResolution(\n\t\t\t\t\t\tmetadata,\n\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\targs\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresolversCache.markAsRunning( selectorName, args );\n\n\t\t\t\tsetTimeout( async () => {\n\t\t\t\t\tresolversCache.clear( selectorName, args );\n\t\t\t\t\tstore.dispatch(\n\t\t\t\t\t\tmetadataActions.startResolution( selectorName, args )\n\t\t\t\t\t);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait fulfillResolver(\n\t\t\t\t\t\t\tstore,\n\t\t\t\t\t\t\tmappedResolvers,\n\t\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t\t...args\n\t\t\t\t\t\t);\n\t\t\t\t\t\tstore.dispatch(\n\t\t\t\t\t\t\tmetadataActions.finishResolution(\n\t\t\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t\t\targs\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch ( error ) {\n\t\t\t\t\t\tstore.dispatch(\n\t\t\t\t\t\t\tmetadataActions.failResolution(\n\t\t\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t\t\targs,\n\t\t\t\t\t\t\t\terror\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tfulfillSelector( ...args );\n\t\t\treturn selector( ...args );\n\t\t};\n\t\tselectorResolver.hasResolver = true;\n\t\treturn selectorResolver;\n\t};\n\n\treturn {\n\t\tresolvers: mappedResolvers,\n\t\tselectors: mapValues( selectors, mapSelector ),\n\t};\n}\n\n/**\n * Calls a resolver given arguments\n *\n * @param {Object} store Store reference, for fulfilling via resolvers\n * @param {Object} resolvers Store Resolvers\n * @param {string} selectorName Selector name to fulfill.\n * @param {Array} args Selector Arguments.\n */\nasync function fulfillResolver( store, resolvers, selectorName, ...args ) {\n\tconst resolver = get( resolvers, [ selectorName ] );\n\tif ( ! resolver ) {\n\t\treturn;\n\t}\n\n\tconst action = resolver.fulfill( ...args );\n\tif ( action ) {\n\t\tawait store.dispatch( action );\n\t}\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/data/src/redux-store/index.js"],"names":["createStore","applyMiddleware","flowRight","get","mapValues","omit","combineReducers","EquivalentKeyMap","createReduxRoutineMiddleware","builtinControls","promise","createResolversCacheMiddleware","createThunkMiddleware","metadataReducer","metadataSelectors","metadataActions","trimUndefinedValues","array","result","i","length","undefined","splice","createResolversCache","cache","isRunning","selectorName","args","clear","delete","markAsRunning","set","createReduxStore","key","options","name","instantiate","registry","reducer","thunkArgs","dispatch","Object","assign","action","store","getActions","select","selector","__unstableOriginalGetState","getSelectors","resolveSelect","getResolveSelectors","instantiateReduxStore","resolversCache","resolvers","actions","mapActions","selectors","mapSelectors","state","metadata","isRegistrySelector","root","mapResolvers","resolveSelectors","mapResolveSelectors","getState","subscribe","listener","lastState","hasChanged","controls","normalizedControls","control","isRegistryControl","middlewares","enhancers","window","__REDUX_DEVTOOLS_EXTENSION__","push","instanceId","initialState","enhancedReducer","createStateSelector","registrySelector","runSelector","argsLength","arguments","Array","hasResolver","createBoundAction","Promise","resolve","storeSelectors","apply","reject","hasFinished","hasFinishedResolution","finalize","hasFailed","hasResolutionFailed","error","getResolutionError","getResult","unsubscribe","mappedResolvers","resolver","fulfill","mapSelector","selectorResolver","fulfillSelector","isFulfilled","hasStartedResolution","setTimeout","startResolution","fulfillResolver","finishResolution","failResolution"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { createStore, applyMiddleware } from 'redux';\nimport { flowRight, get, mapValues, omit } from 'lodash';\nimport combineReducers from 'turbo-combine-reducers';\nimport EquivalentKeyMap from 'equivalent-key-map';\n\n/**\n * WordPress dependencies\n */\nimport createReduxRoutineMiddleware from '@wordpress/redux-routine';\n\n/**\n * Internal dependencies\n */\nimport { builtinControls } from '../controls';\nimport promise from '../promise-middleware';\nimport createResolversCacheMiddleware from '../resolvers-cache-middleware';\nimport createThunkMiddleware from './thunk-middleware';\nimport metadataReducer from './metadata/reducer';\nimport * as metadataSelectors from './metadata/selectors';\nimport * as metadataActions from './metadata/actions';\n\n/** @typedef {import('../types').DataRegistry} DataRegistry */\n/** @typedef {import('../types').StoreDescriptor} StoreDescriptor */\n/** @typedef {import('../types').ReduxStoreConfig} ReduxStoreConfig */\n\nconst trimUndefinedValues = ( array ) => {\n\tconst result = [ ...array ];\n\tfor ( let i = result.length - 1; i >= 0; i-- ) {\n\t\tif ( result[ i ] === undefined ) {\n\t\t\tresult.splice( i, 1 );\n\t\t}\n\t}\n\treturn result;\n};\n\n/**\n * Create a cache to track whether resolvers started running or not.\n *\n * @return {Object} Resolvers Cache.\n */\nfunction createResolversCache() {\n\tconst cache = {};\n\treturn {\n\t\tisRunning( selectorName, args ) {\n\t\t\treturn (\n\t\t\t\tcache[ selectorName ] &&\n\t\t\t\tcache[ selectorName ].get( trimUndefinedValues( args ) )\n\t\t\t);\n\t\t},\n\n\t\tclear( selectorName, args ) {\n\t\t\tif ( cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ].delete( trimUndefinedValues( args ) );\n\t\t\t}\n\t\t},\n\n\t\tmarkAsRunning( selectorName, args ) {\n\t\t\tif ( ! cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ] = new EquivalentKeyMap();\n\t\t\t}\n\n\t\t\tcache[ selectorName ].set( trimUndefinedValues( args ), true );\n\t\t},\n\t};\n}\n\n/**\n * Creates a data store descriptor for the provided Redux store configuration containing\n * properties describing reducer, actions, selectors, controls and resolvers.\n *\n * @example\n * ```js\n * import { createReduxStore } from '@wordpress/data';\n *\n * const store = createReduxStore( 'demo', {\n * reducer: ( state = 'OK' ) => state,\n * selectors: {\n * getValue: ( state ) => state,\n * },\n * } );\n * ```\n *\n * @param {string} key Unique namespace identifier.\n * @param {ReduxStoreConfig} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n *\n * @return {StoreDescriptor} Store Object.\n */\nexport default function createReduxStore( key, options ) {\n\treturn {\n\t\tname: key,\n\t\tinstantiate: ( registry ) => {\n\t\t\tconst reducer = options.reducer;\n\t\t\tconst thunkArgs = {\n\t\t\t\tregistry,\n\t\t\t\tget dispatch() {\n\t\t\t\t\treturn Object.assign(\n\t\t\t\t\t\t( action ) => store.dispatch( action ),\n\t\t\t\t\t\tgetActions()\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tget select() {\n\t\t\t\t\treturn Object.assign(\n\t\t\t\t\t\t( selector ) =>\n\t\t\t\t\t\t\tselector( store.__unstableOriginalGetState() ),\n\t\t\t\t\t\tgetSelectors()\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tget resolveSelect() {\n\t\t\t\t\treturn getResolveSelectors();\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst store = instantiateReduxStore(\n\t\t\t\tkey,\n\t\t\t\toptions,\n\t\t\t\tregistry,\n\t\t\t\tthunkArgs\n\t\t\t);\n\t\t\tconst resolversCache = createResolversCache();\n\n\t\t\tlet resolvers;\n\t\t\tconst actions = mapActions(\n\t\t\t\t{\n\t\t\t\t\t...metadataActions,\n\t\t\t\t\t...options.actions,\n\t\t\t\t},\n\t\t\t\tstore\n\t\t\t);\n\n\t\t\tlet selectors = mapSelectors(\n\t\t\t\t{\n\t\t\t\t\t...mapValues(\n\t\t\t\t\t\tmetadataSelectors,\n\t\t\t\t\t\t( selector ) => ( state, ...args ) =>\n\t\t\t\t\t\t\tselector( state.metadata, ...args )\n\t\t\t\t\t),\n\t\t\t\t\t...mapValues( options.selectors, ( selector ) => {\n\t\t\t\t\t\tif ( selector.isRegistrySelector ) {\n\t\t\t\t\t\t\tselector.registry = registry;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn ( state, ...args ) =>\n\t\t\t\t\t\t\tselector( state.root, ...args );\n\t\t\t\t\t} ),\n\t\t\t\t},\n\t\t\t\tstore\n\t\t\t);\n\t\t\tif ( options.resolvers ) {\n\t\t\t\tconst result = mapResolvers(\n\t\t\t\t\toptions.resolvers,\n\t\t\t\t\tselectors,\n\t\t\t\t\tstore,\n\t\t\t\t\tresolversCache\n\t\t\t\t);\n\t\t\t\tresolvers = result.resolvers;\n\t\t\t\tselectors = result.selectors;\n\t\t\t}\n\n\t\t\tconst resolveSelectors = mapResolveSelectors( selectors, store );\n\n\t\t\tconst getSelectors = () => selectors;\n\t\t\tconst getActions = () => actions;\n\t\t\tconst getResolveSelectors = () => resolveSelectors;\n\n\t\t\t// We have some modules monkey-patching the store object\n\t\t\t// It's wrong to do so but until we refactor all of our effects to controls\n\t\t\t// We need to keep the same \"store\" instance here.\n\t\t\tstore.__unstableOriginalGetState = store.getState;\n\t\t\tstore.getState = () => store.__unstableOriginalGetState().root;\n\n\t\t\t// Customize subscribe behavior to call listeners only on effective change,\n\t\t\t// not on every dispatch.\n\t\t\tconst subscribe =\n\t\t\t\tstore &&\n\t\t\t\t( ( listener ) => {\n\t\t\t\t\tlet lastState = store.__unstableOriginalGetState();\n\t\t\t\t\treturn store.subscribe( () => {\n\t\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\t\t\tconst hasChanged = state !== lastState;\n\t\t\t\t\t\tlastState = state;\n\n\t\t\t\t\t\tif ( hasChanged ) {\n\t\t\t\t\t\t\tlistener();\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t} );\n\n\t\t\t// This can be simplified to just { subscribe, getSelectors, getActions }\n\t\t\t// Once we remove the use function.\n\t\t\treturn {\n\t\t\t\treducer,\n\t\t\t\tstore,\n\t\t\t\tactions,\n\t\t\t\tselectors,\n\t\t\t\tresolvers,\n\t\t\t\tgetSelectors,\n\t\t\t\tgetResolveSelectors,\n\t\t\t\tgetActions,\n\t\t\t\tsubscribe,\n\t\t\t};\n\t\t},\n\t};\n}\n\n/**\n * Creates a redux store for a namespace.\n *\n * @param {string} key Unique namespace identifier.\n * @param {Object} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n * @param {DataRegistry} registry Registry reference.\n * @param {Object} thunkArgs Argument object for the thunk middleware.\n * @return {Object} Newly created redux store.\n */\nfunction instantiateReduxStore( key, options, registry, thunkArgs ) {\n\tconst controls = {\n\t\t...options.controls,\n\t\t...builtinControls,\n\t};\n\n\tconst normalizedControls = mapValues( controls, ( control ) =>\n\t\tcontrol.isRegistryControl ? control( registry ) : control\n\t);\n\n\tconst middlewares = [\n\t\tcreateResolversCacheMiddleware( registry, key ),\n\t\tpromise,\n\t\tcreateReduxRoutineMiddleware( normalizedControls ),\n\t\tcreateThunkMiddleware( thunkArgs ),\n\t];\n\n\tconst enhancers = [ applyMiddleware( ...middlewares ) ];\n\tif (\n\t\ttypeof window !== 'undefined' &&\n\t\twindow.__REDUX_DEVTOOLS_EXTENSION__\n\t) {\n\t\tenhancers.push(\n\t\t\twindow.__REDUX_DEVTOOLS_EXTENSION__( {\n\t\t\t\tname: key,\n\t\t\t\tinstanceId: key,\n\t\t\t} )\n\t\t);\n\t}\n\n\tconst { reducer, initialState } = options;\n\tconst enhancedReducer = combineReducers( {\n\t\tmetadata: metadataReducer,\n\t\troot: reducer,\n\t} );\n\n\treturn createStore(\n\t\tenhancedReducer,\n\t\t{ root: initialState },\n\t\tflowRight( enhancers )\n\t);\n}\n\n/**\n * Maps selectors to a store.\n *\n * @param {Object} selectors Selectors to register. Keys will be used as the\n * public facing API. Selectors will get passed the\n * state as first argument.\n * @param {Object} store The store to which the selectors should be mapped.\n * @return {Object} Selectors mapped to the provided store.\n */\nfunction mapSelectors( selectors, store ) {\n\tconst createStateSelector = ( registrySelector ) => {\n\t\tconst selector = function runSelector() {\n\t\t\t// This function is an optimized implementation of:\n\t\t\t//\n\t\t\t// selector( store.getState(), ...arguments )\n\t\t\t//\n\t\t\t// Where the above would incur an `Array#concat` in its application,\n\t\t\t// the logic here instead efficiently constructs an arguments array via\n\t\t\t// direct assignment.\n\t\t\tconst argsLength = arguments.length;\n\t\t\tconst args = new Array( argsLength + 1 );\n\t\t\targs[ 0 ] = store.__unstableOriginalGetState();\n\t\t\tfor ( let i = 0; i < argsLength; i++ ) {\n\t\t\t\targs[ i + 1 ] = arguments[ i ];\n\t\t\t}\n\n\t\t\treturn registrySelector( ...args );\n\t\t};\n\t\tselector.hasResolver = false;\n\t\treturn selector;\n\t};\n\n\treturn mapValues( selectors, createStateSelector );\n}\n\n/**\n * Maps actions to dispatch from a given store.\n *\n * @param {Object} actions Actions to register.\n * @param {Object} store The redux store to which the actions should be mapped.\n *\n * @return {Object} Actions mapped to the redux store provided.\n */\nfunction mapActions( actions, store ) {\n\tconst createBoundAction = ( action ) => ( ...args ) => {\n\t\treturn Promise.resolve( store.dispatch( action( ...args ) ) );\n\t};\n\n\treturn mapValues( actions, createBoundAction );\n}\n\n/**\n * Maps selectors to functions that return a resolution promise for them\n *\n * @param {Object} selectors Selectors to map.\n * @param {Object} store The redux store the selectors select from.\n *\n * @return {Object} Selectors mapped to their resolution functions.\n */\nfunction mapResolveSelectors( selectors, store ) {\n\tconst storeSelectors = omit( selectors, [\n\t\t'getIsResolving',\n\t\t'hasStartedResolution',\n\t\t'hasFinishedResolution',\n\t\t'hasResolutionFailed',\n\t\t'isResolving',\n\t\t'getCachedResolvers',\n\t\t'getResolutionState',\n\t\t'getResolutionError',\n\t] );\n\n\treturn mapValues( storeSelectors, ( selector, selectorName ) => {\n\t\t// If the selector doesn't have a resolver, just convert the return value\n\t\t// (including exceptions) to a Promise, no additional extra behavior is needed.\n\t\tif ( ! selector.hasResolver ) {\n\t\t\treturn async ( ...args ) => selector.apply( null, args );\n\t\t}\n\n\t\treturn ( ...args ) => {\n\t\t\treturn new Promise( ( resolve, reject ) => {\n\t\t\t\tconst hasFinished = () =>\n\t\t\t\t\tselectors.hasFinishedResolution( selectorName, args );\n\t\t\t\tconst finalize = ( result ) => {\n\t\t\t\t\tconst hasFailed = selectors.hasResolutionFailed(\n\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\targs\n\t\t\t\t\t);\n\t\t\t\t\tif ( hasFailed ) {\n\t\t\t\t\t\tconst error = selectors.getResolutionError(\n\t\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t\targs\n\t\t\t\t\t\t);\n\t\t\t\t\t\treject( error );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve( result );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tconst getResult = () => selector.apply( null, args );\n\t\t\t\t// Trigger the selector (to trigger the resolver)\n\t\t\t\tconst result = getResult();\n\t\t\t\tif ( hasFinished() ) {\n\t\t\t\t\treturn finalize( result );\n\t\t\t\t}\n\n\t\t\t\tconst unsubscribe = store.subscribe( () => {\n\t\t\t\t\tif ( hasFinished() ) {\n\t\t\t\t\t\tunsubscribe();\n\t\t\t\t\t\tfinalize( getResult() );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\t} );\n}\n\n/**\n * Returns resolvers with matched selectors for a given namespace.\n * Resolvers are side effects invoked once per argument set of a given selector call,\n * used in ensuring that the data needs for the selector are satisfied.\n *\n * @param {Object} resolvers Resolvers to register.\n * @param {Object} selectors The current selectors to be modified.\n * @param {Object} store The redux store to which the resolvers should be mapped.\n * @param {Object} resolversCache Resolvers Cache.\n */\nfunction mapResolvers( resolvers, selectors, store, resolversCache ) {\n\t// The `resolver` can be either a function that does the resolution, or, in more advanced\n\t// cases, an object with a `fullfill` method and other optional methods like `isFulfilled`.\n\t// Here we normalize the `resolver` function to an object with `fulfill` method.\n\tconst mappedResolvers = mapValues( resolvers, ( resolver ) => {\n\t\tif ( resolver.fulfill ) {\n\t\t\treturn resolver;\n\t\t}\n\n\t\treturn {\n\t\t\t...resolver, // Copy the enumerable properties of the resolver function.\n\t\t\tfulfill: resolver, // Add the fulfill method.\n\t\t};\n\t} );\n\n\tconst mapSelector = ( selector, selectorName ) => {\n\t\tconst resolver = resolvers[ selectorName ];\n\t\tif ( ! resolver ) {\n\t\t\tselector.hasResolver = false;\n\t\t\treturn selector;\n\t\t}\n\n\t\tconst selectorResolver = ( ...args ) => {\n\t\t\tasync function fulfillSelector() {\n\t\t\t\tconst state = store.getState();\n\n\t\t\t\tif (\n\t\t\t\t\tresolversCache.isRunning( selectorName, args ) ||\n\t\t\t\t\t( typeof resolver.isFulfilled === 'function' &&\n\t\t\t\t\t\tresolver.isFulfilled( state, ...args ) )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst { metadata } = store.__unstableOriginalGetState();\n\n\t\t\t\tif (\n\t\t\t\t\tmetadataSelectors.hasStartedResolution(\n\t\t\t\t\t\tmetadata,\n\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\targs\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresolversCache.markAsRunning( selectorName, args );\n\n\t\t\t\tsetTimeout( async () => {\n\t\t\t\t\tresolversCache.clear( selectorName, args );\n\t\t\t\t\tstore.dispatch(\n\t\t\t\t\t\tmetadataActions.startResolution( selectorName, args )\n\t\t\t\t\t);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait fulfillResolver(\n\t\t\t\t\t\t\tstore,\n\t\t\t\t\t\t\tmappedResolvers,\n\t\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t\t...args\n\t\t\t\t\t\t);\n\t\t\t\t\t\tstore.dispatch(\n\t\t\t\t\t\t\tmetadataActions.finishResolution(\n\t\t\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t\t\targs\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch ( error ) {\n\t\t\t\t\t\tstore.dispatch(\n\t\t\t\t\t\t\tmetadataActions.failResolution(\n\t\t\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t\t\targs,\n\t\t\t\t\t\t\t\terror\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tfulfillSelector( ...args );\n\t\t\treturn selector( ...args );\n\t\t};\n\t\tselectorResolver.hasResolver = true;\n\t\treturn selectorResolver;\n\t};\n\n\treturn {\n\t\tresolvers: mappedResolvers,\n\t\tselectors: mapValues( selectors, mapSelector ),\n\t};\n}\n\n/**\n * Calls a resolver given arguments\n *\n * @param {Object} store Store reference, for fulfilling via resolvers\n * @param {Object} resolvers Store Resolvers\n * @param {string} selectorName Selector name to fulfill.\n * @param {Array} args Selector Arguments.\n */\nasync function fulfillResolver( store, resolvers, selectorName, ...args ) {\n\tconst resolver = get( resolvers, [ selectorName ] );\n\tif ( ! resolver ) {\n\t\treturn;\n\t}\n\n\tconst action = resolver.fulfill( ...args );\n\tif ( action ) {\n\t\tawait store.dispatch( action );\n\t}\n}\n"]}
@@ -57,13 +57,11 @@ export function createRegistry() {
57
57
  let parent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
58
58
  const stores = {};
59
59
  const emitter = createEmitter();
60
-
61
- const __experimentalListeningStores = new Set();
60
+ const listeningStores = new Set();
62
61
  /**
63
62
  * Global listener called for each store's update.
64
63
  */
65
64
 
66
-
67
65
  function globalListener() {
68
66
  emitter.emit();
69
67
  }
@@ -91,9 +89,7 @@ export function createRegistry() {
91
89
 
92
90
  function select(storeNameOrDescriptor) {
93
91
  const storeName = isObject(storeNameOrDescriptor) ? storeNameOrDescriptor.name : storeNameOrDescriptor;
94
-
95
- __experimentalListeningStores.add(storeName);
96
-
92
+ listeningStores.add(storeName);
97
93
  const store = stores[storeName];
98
94
 
99
95
  if (store) {
@@ -103,11 +99,10 @@ export function createRegistry() {
103
99
  return parent && parent.select(storeName);
104
100
  }
105
101
 
106
- function __experimentalMarkListeningStores(callback, ref) {
107
- __experimentalListeningStores.clear();
108
-
102
+ function __unstableMarkListeningStores(callback, ref) {
103
+ listeningStores.clear();
109
104
  const result = callback.call(this);
110
- ref.current = Array.from(__experimentalListeningStores);
105
+ ref.current = Array.from(listeningStores);
111
106
  return result;
112
107
  }
113
108
  /**
@@ -125,9 +120,7 @@ export function createRegistry() {
125
120
 
126
121
  function resolveSelect(storeNameOrDescriptor) {
127
122
  const storeName = isObject(storeNameOrDescriptor) ? storeNameOrDescriptor.name : storeNameOrDescriptor;
128
-
129
- __experimentalListeningStores.add(storeName);
130
-
123
+ listeningStores.add(storeName);
131
124
  const store = stores[storeName];
132
125
 
133
126
  if (store) {
@@ -263,7 +256,7 @@ export function createRegistry() {
263
256
  */
264
257
 
265
258
 
266
- function __experimentalSubscribeStore(storeName, handler) {
259
+ function __unstableSubscribeStore(storeName, handler) {
267
260
  if (storeName in stores) {
268
261
  return stores[storeName].subscribe(handler);
269
262
  } // Trying to access a store that hasn't been registered,
@@ -276,7 +269,7 @@ export function createRegistry() {
276
269
  return subscribe(handler);
277
270
  }
278
271
 
279
- return parent.__experimentalSubscribeStore(storeName, handler);
272
+ return parent.__unstableSubscribeStore(storeName, handler);
280
273
  }
281
274
 
282
275
  function batch(callback) {
@@ -300,8 +293,8 @@ export function createRegistry() {
300
293
  register,
301
294
  registerGenericStore,
302
295
  registerStore,
303
- __experimentalMarkListeningStores,
304
- __experimentalSubscribeStore
296
+ __unstableMarkListeningStores,
297
+ __unstableSubscribeStore
305
298
  }; //
306
299
  // TODO:
307
300
  // This function will be deprecated as soon as it is no longer internally referenced.
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/data/src/registry.js"],"names":["mapValues","isObject","forEach","deprecated","createReduxStore","coreDataStore","createEmitter","createRegistry","storeConfigs","parent","stores","emitter","__experimentalListeningStores","Set","globalListener","emit","subscribe","listener","select","storeNameOrDescriptor","storeName","name","add","store","getSelectors","__experimentalMarkListeningStores","callback","ref","clear","result","call","current","Array","from","resolveSelect","getResolveSelectors","dispatch","getActions","withPlugins","attributes","attribute","key","registry","apply","arguments","registerStoreInstance","TypeError","currentSubscribe","unsubscribeFromEmitter","unsubscribeFromStore","isPaused","register","instantiate","registerGenericStore","since","alternative","registerStore","options","reducer","__experimentalSubscribeStore","handler","batch","pause","resume","namespaces","use","plugin","config","Object","entries"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { mapValues, isObject, forEach } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport createReduxStore from './redux-store';\nimport coreDataStore from './store';\nimport { createEmitter } from './utils/emitter';\n\n/** @typedef {import('./types').StoreDescriptor} StoreDescriptor */\n\n/**\n * @typedef {Object} WPDataRegistry An isolated orchestrator of store registrations.\n *\n * @property {Function} registerGenericStore Given a namespace key and settings\n * object, registers a new generic\n * store.\n * @property {Function} registerStore Given a namespace key and settings\n * object, registers a new namespace\n * store.\n * @property {Function} subscribe Given a function callback, invokes\n * the callback on any change to state\n * within any registered store.\n * @property {Function} select Given a namespace key, returns an\n * object of the store's registered\n * selectors.\n * @property {Function} dispatch Given a namespace key, returns an\n * object of the store's registered\n * action dispatchers.\n */\n\n/**\n * @typedef {Object} WPDataPlugin An object of registry function overrides.\n *\n * @property {Function} registerStore registers store.\n */\n\n/**\n * Creates a new store registry, given an optional object of initial store\n * configurations.\n *\n * @param {Object} storeConfigs Initial store configurations.\n * @param {Object?} parent Parent registry.\n *\n * @return {WPDataRegistry} Data registry.\n */\nexport function createRegistry( storeConfigs = {}, parent = null ) {\n\tconst stores = {};\n\tconst emitter = createEmitter();\n\tconst __experimentalListeningStores = new Set();\n\n\t/**\n\t * Global listener called for each store's update.\n\t */\n\tfunction globalListener() {\n\t\temitter.emit();\n\t}\n\n\t/**\n\t * Subscribe to changes to any data.\n\t *\n\t * @param {Function} listener Listener function.\n\t *\n\t * @return {Function} Unsubscribe function.\n\t */\n\tconst subscribe = ( listener ) => {\n\t\treturn emitter.subscribe( listener );\n\t};\n\n\t/**\n\t * Calls a selector given the current state and extra arguments.\n\t *\n\t * @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store\n\t * or the store descriptor.\n\t *\n\t * @return {*} The selector's returned value.\n\t */\n\tfunction select( storeNameOrDescriptor ) {\n\t\tconst storeName = isObject( storeNameOrDescriptor )\n\t\t\t? storeNameOrDescriptor.name\n\t\t\t: storeNameOrDescriptor;\n\t\t__experimentalListeningStores.add( storeName );\n\t\tconst store = stores[ storeName ];\n\t\tif ( store ) {\n\t\t\treturn store.getSelectors();\n\t\t}\n\n\t\treturn parent && parent.select( storeName );\n\t}\n\n\tfunction __experimentalMarkListeningStores( callback, ref ) {\n\t\t__experimentalListeningStores.clear();\n\t\tconst result = callback.call( this );\n\t\tref.current = Array.from( __experimentalListeningStores );\n\t\treturn result;\n\t}\n\n\t/**\n\t * Given the name of a registered store, returns an object containing the store's\n\t * selectors pre-bound to state so that you only need to supply additional arguments,\n\t * and modified so that they return promises that resolve to their eventual values,\n\t * after any resolvers have ran.\n\t *\n\t * @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store\n\t * or the store descriptor.\n\t *\n\t * @return {Object} Each key of the object matches the name of a selector.\n\t */\n\tfunction resolveSelect( storeNameOrDescriptor ) {\n\t\tconst storeName = isObject( storeNameOrDescriptor )\n\t\t\t? storeNameOrDescriptor.name\n\t\t\t: storeNameOrDescriptor;\n\t\t__experimentalListeningStores.add( storeName );\n\t\tconst store = stores[ storeName ];\n\t\tif ( store ) {\n\t\t\treturn store.getResolveSelectors();\n\t\t}\n\n\t\treturn parent && parent.resolveSelect( storeName );\n\t}\n\n\t/**\n\t * Returns the available actions for a part of the state.\n\t *\n\t * @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store\n\t * or the store descriptor.\n\t *\n\t * @return {*} The action's returned value.\n\t */\n\tfunction dispatch( storeNameOrDescriptor ) {\n\t\tconst storeName = isObject( storeNameOrDescriptor )\n\t\t\t? storeNameOrDescriptor.name\n\t\t\t: storeNameOrDescriptor;\n\t\tconst store = stores[ storeName ];\n\t\tif ( store ) {\n\t\t\treturn store.getActions();\n\t\t}\n\n\t\treturn parent && parent.dispatch( storeName );\n\t}\n\n\t//\n\t// Deprecated\n\t// TODO: Remove this after `use()` is removed.\n\tfunction withPlugins( attributes ) {\n\t\treturn mapValues( attributes, ( attribute, key ) => {\n\t\t\tif ( typeof attribute !== 'function' ) {\n\t\t\t\treturn attribute;\n\t\t\t}\n\t\t\treturn function () {\n\t\t\t\treturn registry[ key ].apply( null, arguments );\n\t\t\t};\n\t\t} );\n\t}\n\n\t/**\n\t * Registers a store instance.\n\t *\n\t * @param {string} name Store registry name.\n\t * @param {Object} store Store instance object (getSelectors, getActions, subscribe).\n\t */\n\tfunction registerStoreInstance( name, store ) {\n\t\tif ( typeof store.getSelectors !== 'function' ) {\n\t\t\tthrow new TypeError( 'store.getSelectors must be a function' );\n\t\t}\n\t\tif ( typeof store.getActions !== 'function' ) {\n\t\t\tthrow new TypeError( 'store.getActions must be a function' );\n\t\t}\n\t\tif ( typeof store.subscribe !== 'function' ) {\n\t\t\tthrow new TypeError( 'store.subscribe must be a function' );\n\t\t}\n\t\t// The emitter is used to keep track of active listeners when the registry\n\t\t// get paused, that way, when resumed we should be able to call all these\n\t\t// pending listeners.\n\t\tstore.emitter = createEmitter();\n\t\tconst currentSubscribe = store.subscribe;\n\t\tstore.subscribe = ( listener ) => {\n\t\t\tconst unsubscribeFromEmitter = store.emitter.subscribe( listener );\n\t\t\tconst unsubscribeFromStore = currentSubscribe( () => {\n\t\t\t\tif ( store.emitter.isPaused ) {\n\t\t\t\t\tstore.emitter.emit();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlistener();\n\t\t\t} );\n\n\t\t\treturn () => {\n\t\t\t\tunsubscribeFromStore?.();\n\t\t\t\tunsubscribeFromEmitter?.();\n\t\t\t};\n\t\t};\n\t\tstores[ name ] = store;\n\t\tstore.subscribe( globalListener );\n\t}\n\n\t/**\n\t * Registers a new store given a store descriptor.\n\t *\n\t * @param {StoreDescriptor} store Store descriptor.\n\t */\n\tfunction register( store ) {\n\t\tregisterStoreInstance( store.name, store.instantiate( registry ) );\n\t}\n\n\tfunction registerGenericStore( name, store ) {\n\t\tdeprecated( 'wp.data.registerGenericStore', {\n\t\t\tsince: '5.9',\n\t\t\talternative: 'wp.data.register( storeDescriptor )',\n\t\t} );\n\t\tregisterStoreInstance( name, store );\n\t}\n\n\t/**\n\t * Registers a standard `@wordpress/data` store.\n\t *\n\t * @param {string} storeName Unique namespace identifier.\n\t * @param {Object} options Store description (reducer, actions, selectors, resolvers).\n\t *\n\t * @return {Object} Registered store object.\n\t */\n\tfunction registerStore( storeName, options ) {\n\t\tif ( ! options.reducer ) {\n\t\t\tthrow new TypeError( 'Must specify store reducer' );\n\t\t}\n\n\t\tconst store = createReduxStore( storeName, options ).instantiate(\n\t\t\tregistry\n\t\t);\n\t\tregisterStoreInstance( storeName, store );\n\t\treturn store.store;\n\t}\n\n\t/**\n\t * Subscribe handler to a store.\n\t *\n\t * @param {string[]} storeName The store name.\n\t * @param {Function} handler The function subscribed to the store.\n\t * @return {Function} A function to unsubscribe the handler.\n\t */\n\tfunction __experimentalSubscribeStore( storeName, handler ) {\n\t\tif ( storeName in stores ) {\n\t\t\treturn stores[ storeName ].subscribe( handler );\n\t\t}\n\n\t\t// Trying to access a store that hasn't been registered,\n\t\t// this is a pattern rarely used but seen in some places.\n\t\t// We fallback to regular `subscribe` here for backward-compatibility for now.\n\t\t// See https://github.com/WordPress/gutenberg/pull/27466 for more info.\n\t\tif ( ! parent ) {\n\t\t\treturn subscribe( handler );\n\t\t}\n\n\t\treturn parent.__experimentalSubscribeStore( storeName, handler );\n\t}\n\n\tfunction batch( callback ) {\n\t\temitter.pause();\n\t\tforEach( stores, ( store ) => store.emitter.pause() );\n\t\tcallback();\n\t\temitter.resume();\n\t\tforEach( stores, ( store ) => store.emitter.resume() );\n\t}\n\n\tlet registry = {\n\t\tbatch,\n\t\tstores,\n\t\tnamespaces: stores, // TODO: Deprecate/remove this.\n\t\tsubscribe,\n\t\tselect,\n\t\tresolveSelect,\n\t\tdispatch,\n\t\tuse,\n\t\tregister,\n\t\tregisterGenericStore,\n\t\tregisterStore,\n\t\t__experimentalMarkListeningStores,\n\t\t__experimentalSubscribeStore,\n\t};\n\n\t//\n\t// TODO:\n\t// This function will be deprecated as soon as it is no longer internally referenced.\n\tfunction use( plugin, options ) {\n\t\tif ( ! plugin ) {\n\t\t\treturn;\n\t\t}\n\n\t\tregistry = {\n\t\t\t...registry,\n\t\t\t...plugin( registry, options ),\n\t\t};\n\n\t\treturn registry;\n\t}\n\n\tregistry.register( coreDataStore );\n\n\tfor ( const [ name, config ] of Object.entries( storeConfigs ) ) {\n\t\tregistry.register( createReduxStore( name, config ) );\n\t}\n\n\tif ( parent ) {\n\t\tparent.subscribe( globalListener );\n\t}\n\n\treturn withPlugins( registry );\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/data/src/registry.js"],"names":["mapValues","isObject","forEach","deprecated","createReduxStore","coreDataStore","createEmitter","createRegistry","storeConfigs","parent","stores","emitter","listeningStores","Set","globalListener","emit","subscribe","listener","select","storeNameOrDescriptor","storeName","name","add","store","getSelectors","__unstableMarkListeningStores","callback","ref","clear","result","call","current","Array","from","resolveSelect","getResolveSelectors","dispatch","getActions","withPlugins","attributes","attribute","key","registry","apply","arguments","registerStoreInstance","TypeError","currentSubscribe","unsubscribeFromEmitter","unsubscribeFromStore","isPaused","register","instantiate","registerGenericStore","since","alternative","registerStore","options","reducer","__unstableSubscribeStore","handler","batch","pause","resume","namespaces","use","plugin","config","Object","entries"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { mapValues, isObject, forEach } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport createReduxStore from './redux-store';\nimport coreDataStore from './store';\nimport { createEmitter } from './utils/emitter';\n\n/** @typedef {import('./types').StoreDescriptor} StoreDescriptor */\n\n/**\n * @typedef {Object} WPDataRegistry An isolated orchestrator of store registrations.\n *\n * @property {Function} registerGenericStore Given a namespace key and settings\n * object, registers a new generic\n * store.\n * @property {Function} registerStore Given a namespace key and settings\n * object, registers a new namespace\n * store.\n * @property {Function} subscribe Given a function callback, invokes\n * the callback on any change to state\n * within any registered store.\n * @property {Function} select Given a namespace key, returns an\n * object of the store's registered\n * selectors.\n * @property {Function} dispatch Given a namespace key, returns an\n * object of the store's registered\n * action dispatchers.\n */\n\n/**\n * @typedef {Object} WPDataPlugin An object of registry function overrides.\n *\n * @property {Function} registerStore registers store.\n */\n\n/**\n * Creates a new store registry, given an optional object of initial store\n * configurations.\n *\n * @param {Object} storeConfigs Initial store configurations.\n * @param {Object?} parent Parent registry.\n *\n * @return {WPDataRegistry} Data registry.\n */\nexport function createRegistry( storeConfigs = {}, parent = null ) {\n\tconst stores = {};\n\tconst emitter = createEmitter();\n\tconst listeningStores = new Set();\n\n\t/**\n\t * Global listener called for each store's update.\n\t */\n\tfunction globalListener() {\n\t\temitter.emit();\n\t}\n\n\t/**\n\t * Subscribe to changes to any data.\n\t *\n\t * @param {Function} listener Listener function.\n\t *\n\t * @return {Function} Unsubscribe function.\n\t */\n\tconst subscribe = ( listener ) => {\n\t\treturn emitter.subscribe( listener );\n\t};\n\n\t/**\n\t * Calls a selector given the current state and extra arguments.\n\t *\n\t * @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store\n\t * or the store descriptor.\n\t *\n\t * @return {*} The selector's returned value.\n\t */\n\tfunction select( storeNameOrDescriptor ) {\n\t\tconst storeName = isObject( storeNameOrDescriptor )\n\t\t\t? storeNameOrDescriptor.name\n\t\t\t: storeNameOrDescriptor;\n\t\tlisteningStores.add( storeName );\n\t\tconst store = stores[ storeName ];\n\t\tif ( store ) {\n\t\t\treturn store.getSelectors();\n\t\t}\n\n\t\treturn parent && parent.select( storeName );\n\t}\n\n\tfunction __unstableMarkListeningStores( callback, ref ) {\n\t\tlisteningStores.clear();\n\t\tconst result = callback.call( this );\n\t\tref.current = Array.from( listeningStores );\n\t\treturn result;\n\t}\n\n\t/**\n\t * Given the name of a registered store, returns an object containing the store's\n\t * selectors pre-bound to state so that you only need to supply additional arguments,\n\t * and modified so that they return promises that resolve to their eventual values,\n\t * after any resolvers have ran.\n\t *\n\t * @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store\n\t * or the store descriptor.\n\t *\n\t * @return {Object} Each key of the object matches the name of a selector.\n\t */\n\tfunction resolveSelect( storeNameOrDescriptor ) {\n\t\tconst storeName = isObject( storeNameOrDescriptor )\n\t\t\t? storeNameOrDescriptor.name\n\t\t\t: storeNameOrDescriptor;\n\t\tlisteningStores.add( storeName );\n\t\tconst store = stores[ storeName ];\n\t\tif ( store ) {\n\t\t\treturn store.getResolveSelectors();\n\t\t}\n\n\t\treturn parent && parent.resolveSelect( storeName );\n\t}\n\n\t/**\n\t * Returns the available actions for a part of the state.\n\t *\n\t * @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store\n\t * or the store descriptor.\n\t *\n\t * @return {*} The action's returned value.\n\t */\n\tfunction dispatch( storeNameOrDescriptor ) {\n\t\tconst storeName = isObject( storeNameOrDescriptor )\n\t\t\t? storeNameOrDescriptor.name\n\t\t\t: storeNameOrDescriptor;\n\t\tconst store = stores[ storeName ];\n\t\tif ( store ) {\n\t\t\treturn store.getActions();\n\t\t}\n\n\t\treturn parent && parent.dispatch( storeName );\n\t}\n\n\t//\n\t// Deprecated\n\t// TODO: Remove this after `use()` is removed.\n\tfunction withPlugins( attributes ) {\n\t\treturn mapValues( attributes, ( attribute, key ) => {\n\t\t\tif ( typeof attribute !== 'function' ) {\n\t\t\t\treturn attribute;\n\t\t\t}\n\t\t\treturn function () {\n\t\t\t\treturn registry[ key ].apply( null, arguments );\n\t\t\t};\n\t\t} );\n\t}\n\n\t/**\n\t * Registers a store instance.\n\t *\n\t * @param {string} name Store registry name.\n\t * @param {Object} store Store instance object (getSelectors, getActions, subscribe).\n\t */\n\tfunction registerStoreInstance( name, store ) {\n\t\tif ( typeof store.getSelectors !== 'function' ) {\n\t\t\tthrow new TypeError( 'store.getSelectors must be a function' );\n\t\t}\n\t\tif ( typeof store.getActions !== 'function' ) {\n\t\t\tthrow new TypeError( 'store.getActions must be a function' );\n\t\t}\n\t\tif ( typeof store.subscribe !== 'function' ) {\n\t\t\tthrow new TypeError( 'store.subscribe must be a function' );\n\t\t}\n\t\t// The emitter is used to keep track of active listeners when the registry\n\t\t// get paused, that way, when resumed we should be able to call all these\n\t\t// pending listeners.\n\t\tstore.emitter = createEmitter();\n\t\tconst currentSubscribe = store.subscribe;\n\t\tstore.subscribe = ( listener ) => {\n\t\t\tconst unsubscribeFromEmitter = store.emitter.subscribe( listener );\n\t\t\tconst unsubscribeFromStore = currentSubscribe( () => {\n\t\t\t\tif ( store.emitter.isPaused ) {\n\t\t\t\t\tstore.emitter.emit();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlistener();\n\t\t\t} );\n\n\t\t\treturn () => {\n\t\t\t\tunsubscribeFromStore?.();\n\t\t\t\tunsubscribeFromEmitter?.();\n\t\t\t};\n\t\t};\n\t\tstores[ name ] = store;\n\t\tstore.subscribe( globalListener );\n\t}\n\n\t/**\n\t * Registers a new store given a store descriptor.\n\t *\n\t * @param {StoreDescriptor} store Store descriptor.\n\t */\n\tfunction register( store ) {\n\t\tregisterStoreInstance( store.name, store.instantiate( registry ) );\n\t}\n\n\tfunction registerGenericStore( name, store ) {\n\t\tdeprecated( 'wp.data.registerGenericStore', {\n\t\t\tsince: '5.9',\n\t\t\talternative: 'wp.data.register( storeDescriptor )',\n\t\t} );\n\t\tregisterStoreInstance( name, store );\n\t}\n\n\t/**\n\t * Registers a standard `@wordpress/data` store.\n\t *\n\t * @param {string} storeName Unique namespace identifier.\n\t * @param {Object} options Store description (reducer, actions, selectors, resolvers).\n\t *\n\t * @return {Object} Registered store object.\n\t */\n\tfunction registerStore( storeName, options ) {\n\t\tif ( ! options.reducer ) {\n\t\t\tthrow new TypeError( 'Must specify store reducer' );\n\t\t}\n\n\t\tconst store = createReduxStore( storeName, options ).instantiate(\n\t\t\tregistry\n\t\t);\n\t\tregisterStoreInstance( storeName, store );\n\t\treturn store.store;\n\t}\n\n\t/**\n\t * Subscribe handler to a store.\n\t *\n\t * @param {string[]} storeName The store name.\n\t * @param {Function} handler The function subscribed to the store.\n\t * @return {Function} A function to unsubscribe the handler.\n\t */\n\tfunction __unstableSubscribeStore( storeName, handler ) {\n\t\tif ( storeName in stores ) {\n\t\t\treturn stores[ storeName ].subscribe( handler );\n\t\t}\n\n\t\t// Trying to access a store that hasn't been registered,\n\t\t// this is a pattern rarely used but seen in some places.\n\t\t// We fallback to regular `subscribe` here for backward-compatibility for now.\n\t\t// See https://github.com/WordPress/gutenberg/pull/27466 for more info.\n\t\tif ( ! parent ) {\n\t\t\treturn subscribe( handler );\n\t\t}\n\n\t\treturn parent.__unstableSubscribeStore( storeName, handler );\n\t}\n\n\tfunction batch( callback ) {\n\t\temitter.pause();\n\t\tforEach( stores, ( store ) => store.emitter.pause() );\n\t\tcallback();\n\t\temitter.resume();\n\t\tforEach( stores, ( store ) => store.emitter.resume() );\n\t}\n\n\tlet registry = {\n\t\tbatch,\n\t\tstores,\n\t\tnamespaces: stores, // TODO: Deprecate/remove this.\n\t\tsubscribe,\n\t\tselect,\n\t\tresolveSelect,\n\t\tdispatch,\n\t\tuse,\n\t\tregister,\n\t\tregisterGenericStore,\n\t\tregisterStore,\n\t\t__unstableMarkListeningStores,\n\t\t__unstableSubscribeStore,\n\t};\n\n\t//\n\t// TODO:\n\t// This function will be deprecated as soon as it is no longer internally referenced.\n\tfunction use( plugin, options ) {\n\t\tif ( ! plugin ) {\n\t\t\treturn;\n\t\t}\n\n\t\tregistry = {\n\t\t\t...registry,\n\t\t\t...plugin( registry, options ),\n\t\t};\n\n\t\treturn registry;\n\t}\n\n\tregistry.register( coreDataStore );\n\n\tfor ( const [ name, config ] of Object.entries( storeConfigs ) ) {\n\t\tregistry.register( createReduxStore( name, config ) );\n\t}\n\n\tif ( parent ) {\n\t\tparent.subscribe( globalListener );\n\t}\n\n\treturn withPlugins( registry );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/data",
3
- "version": "6.5.0",
3
+ "version": "6.7.0",
4
4
  "description": "Data module for WordPress.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -28,12 +28,12 @@
28
28
  "sideEffects": false,
29
29
  "dependencies": {
30
30
  "@babel/runtime": "^7.16.0",
31
- "@wordpress/compose": "^5.3.0",
32
- "@wordpress/deprecated": "^3.5.0",
33
- "@wordpress/element": "^4.3.0",
34
- "@wordpress/is-shallow-equal": "^4.5.0",
35
- "@wordpress/priority-queue": "^2.5.0",
36
- "@wordpress/redux-routine": "^4.5.0",
31
+ "@wordpress/compose": "^5.5.0",
32
+ "@wordpress/deprecated": "^3.7.0",
33
+ "@wordpress/element": "^4.5.0",
34
+ "@wordpress/is-shallow-equal": "^4.7.0",
35
+ "@wordpress/priority-queue": "^2.7.0",
36
+ "@wordpress/redux-routine": "^4.7.0",
37
37
  "equivalent-key-map": "^0.2.2",
38
38
  "is-promise": "^4.0.0",
39
39
  "lodash": "^4.17.21",
@@ -47,5 +47,5 @@
47
47
  "publishConfig": {
48
48
  "access": "public"
49
49
  },
50
- "gitHead": "aa003c3634016cc4ab6348b2106907e371c648e1"
50
+ "gitHead": "1ba52312b56db563df2d8d4fba5b00613fb46d8c"
51
51
  }
@@ -118,19 +118,19 @@ export default function useSelect( mapSelect, deps ) {
118
118
  const queueContext = useMemoOne( () => ( { queue: true } ), [ registry ] );
119
119
  const [ , forceRender ] = useReducer( ( s ) => s + 1, 0 );
120
120
 
121
+ const latestRegistry = useRef( registry );
121
122
  const latestMapSelect = useRef();
122
123
  const latestIsAsync = useRef( isAsync );
123
124
  const latestMapOutput = useRef();
124
125
  const latestMapOutputError = useRef();
125
- const isMountedAndNotUnsubscribing = useRef();
126
126
 
127
127
  // Keep track of the stores being selected in the _mapSelect function,
128
128
  // and only subscribe to those stores later.
129
129
  const listeningStores = useRef( [] );
130
- const trapSelect = useCallback(
130
+ const wrapSelect = useCallback(
131
131
  ( callback ) =>
132
- registry.__experimentalMarkListeningStores(
133
- callback,
132
+ registry.__unstableMarkListeningStores(
133
+ () => callback( registry.select, registry ),
134
134
  listeningStores
135
135
  ),
136
136
  [ registry ]
@@ -145,14 +145,17 @@ export default function useSelect( mapSelect, deps ) {
145
145
 
146
146
  if ( _mapSelect ) {
147
147
  mapOutput = latestMapOutput.current;
148
+ const hasReplacedRegistry = latestRegistry.current !== registry;
148
149
  const hasReplacedMapSelect = latestMapSelect.current !== _mapSelect;
149
150
  const lastMapSelectFailed = !! latestMapOutputError.current;
150
151
 
151
- if ( hasReplacedMapSelect || lastMapSelectFailed ) {
152
+ if (
153
+ hasReplacedRegistry ||
154
+ hasReplacedMapSelect ||
155
+ lastMapSelectFailed
156
+ ) {
152
157
  try {
153
- mapOutput = trapSelect( () =>
154
- _mapSelect( registry.select, registry )
155
- );
158
+ mapOutput = wrapSelect( _mapSelect );
156
159
  } catch ( error ) {
157
160
  let errorMessage = `An error occurred while running 'mapSelect': ${ error.message }`;
158
161
 
@@ -173,10 +176,10 @@ export default function useSelect( mapSelect, deps ) {
173
176
  return;
174
177
  }
175
178
 
179
+ latestRegistry.current = registry;
176
180
  latestMapSelect.current = _mapSelect;
177
181
  latestMapOutput.current = mapOutput;
178
182
  latestMapOutputError.current = undefined;
179
- isMountedAndNotUnsubscribing.current = true;
180
183
 
181
184
  // This has to run after the other ref updates
182
185
  // to avoid using stale values in the flushed
@@ -194,33 +197,19 @@ export default function useSelect( mapSelect, deps ) {
194
197
  }
195
198
 
196
199
  const onStoreChange = () => {
197
- if ( isMountedAndNotUnsubscribing.current ) {
198
- try {
199
- const newMapOutput = trapSelect( () =>
200
- latestMapSelect.current( registry.select, registry )
201
- );
202
-
203
- if (
204
- isShallowEqual( latestMapOutput.current, newMapOutput )
205
- ) {
206
- return;
207
- }
208
- latestMapOutput.current = newMapOutput;
209
- } catch ( error ) {
210
- latestMapOutputError.current = error;
200
+ try {
201
+ const newMapOutput = wrapSelect( latestMapSelect.current );
202
+
203
+ if ( isShallowEqual( latestMapOutput.current, newMapOutput ) ) {
204
+ return;
211
205
  }
212
- forceRender();
206
+ latestMapOutput.current = newMapOutput;
207
+ } catch ( error ) {
208
+ latestMapOutputError.current = error;
213
209
  }
210
+ forceRender();
214
211
  };
215
212
 
216
- // Catch any possible state changes during mount before the subscription
217
- // could be set.
218
- if ( latestIsAsync.current ) {
219
- renderQueue.add( queueContext, onStoreChange );
220
- } else {
221
- onStoreChange();
222
- }
223
-
224
213
  const onChange = () => {
225
214
  if ( latestIsAsync.current ) {
226
215
  renderQueue.add( queueContext, onStoreChange );
@@ -229,20 +218,23 @@ export default function useSelect( mapSelect, deps ) {
229
218
  }
230
219
  };
231
220
 
221
+ // Catch any possible state changes during mount before the subscription
222
+ // could be set.
223
+ onStoreChange();
224
+
232
225
  const unsubscribers = listeningStores.current.map( ( storeName ) =>
233
- registry.__experimentalSubscribeStore( storeName, onChange )
226
+ registry.__unstableSubscribeStore( storeName, onChange )
234
227
  );
235
228
 
236
229
  return () => {
237
- isMountedAndNotUnsubscribing.current = false;
238
230
  // The return value of the subscribe function could be undefined if the store is a custom generic store.
239
231
  unsubscribers.forEach( ( unsubscribe ) => unsubscribe?.() );
240
- renderQueue.flush( queueContext );
232
+ renderQueue.cancel( queueContext );
241
233
  };
242
234
  // If you're tempted to eliminate the spread dependencies below don't do it!
243
235
  // We're passing these in from the calling function and want to make sure we're
244
236
  // examining every individual value inside the `deps` array.
245
- }, [ registry, trapSelect, hasMappingFunction, depsChangedFlag ] );
237
+ }, [ registry, wrapSelect, hasMappingFunction, depsChangedFlag ] );
246
238
 
247
239
  return hasMappingFunction ? mapOutput : registry.select( mapSelect );
248
240
  }