@wordpress/data 8.2.0 → 8.3.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.
- package/CHANGELOG.md +2 -0
- package/build/experiments.js +19 -0
- package/build/experiments.js.map +1 -0
- package/build/redux-store/index.js +51 -13
- package/build/redux-store/index.js.map +1 -1
- package/build/registry.js +33 -2
- package/build/registry.js.map +1 -1
- package/build-module/experiments.js +9 -0
- package/build-module/experiments.js.map +1 -0
- package/build-module/redux-store/index.js +50 -13
- package/build-module/redux-store/index.js.map +1 -1
- package/build-module/registry.js +32 -2
- package/build-module/registry.js.map +1 -1
- package/build-types/experiments.d.ts +3 -0
- package/build-types/experiments.d.ts.map +1 -0
- package/build-types/redux-store/index.d.ts.map +1 -1
- package/build-types/registry.d.ts.map +1 -1
- package/package.json +9 -8
- package/src/components/with-dispatch/test/index.js +1 -1
- package/src/experiments.js +10 -0
- package/src/plugins/persistence/test/index.js +1 -1
- package/src/redux-store/index.js +54 -1
- package/src/registry.js +37 -1
- package/src/test/privateAPIs.js +326 -0
- package/src/test/registry.js +2 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/data/src/redux-store/index.js"],"names":["createStore","applyMiddleware","get","mapValues","combineReducers","EquivalentKeyMap","createReduxRoutineMiddleware","compose","builtinControls","promise","createResolversCacheMiddleware","createThunkMiddleware","metadataReducer","metadataSelectors","metadataActions","trimUndefinedValues","array","result","i","length","undefined","splice","mapToObject","key","state","Map","Object","fromEntries","createResolversCache","cache","isRunning","selectorName","args","clear","delete","markAsRunning","set","createReduxStore","options","name","instantiate","registry","reducer","thunkArgs","dispatch","assign","action","store","getActions","select","selector","__unstableOriginalGetState","getSelectors","resolveSelect","getResolveSelectors","instantiateReduxStore","resolversCache","resolvers","actions","mapActions","selectors","mapSelectors","metadata","isRegistrySelector","root","mapResolvers","resolveSelectors","mapResolveSelectors","suspendSelectors","mapSuspendSelectors","getSuspendSelectors","getState","subscribe","listener","lastState","hasChanged","controls","normalizedControls","control","isRegistryControl","middlewares","enhancers","window","__REDUX_DEVTOOLS_EXTENSION__","push","instanceId","serialize","replacer","initialState","enhancedReducer","createStateSelector","registrySelector","runSelector","argsLength","arguments","Array","hasResolver","createBoundAction","Promise","resolve","getIsResolving","hasStartedResolution","hasFinishedResolution","hasResolutionFailed","isResolving","getCachedResolvers","getResolutionState","getResolutionError","storeSelectors","apply","reject","hasFinished","finalize","hasFailed","error","getResult","unsubscribe","mappedResolvers","resolver","fulfill","mapSelector","selectorResolver","fulfillSelector","isFulfilled","setTimeout","startResolution","fulfillResolver","finishResolution","failResolution"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { createStore, applyMiddleware } from 'redux';\nimport { get, mapValues } 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';\nimport { compose } from '@wordpress/compose';\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/**\n * @typedef {import('../types').StoreDescriptor<C>} StoreDescriptor\n * @template C\n */\n/**\n * @typedef {import('../types').ReduxStoreConfig<State,Actions,Selectors>} ReduxStoreConfig\n * @template State,Actions,Selectors\n */\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// Convert Map objects to plain objects\nconst mapToObject = ( key, state ) => {\n\tif ( state instanceof Map ) {\n\t\treturn Object.fromEntries( state );\n\t}\n\n\treturn state;\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 * @template State,Actions,Selectors\n * @param {string} key Unique namespace identifier.\n * @param {ReduxStoreConfig<State,Actions,Selectors>} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n *\n * @return {StoreDescriptor<ReduxStoreConfig<State,Actions,Selectors>>} 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 ) =>\n\t\t\t\t\t\t\t( state, ...args ) =>\n\t\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\t\t\tconst suspendSelectors = mapSuspendSelectors( selectors, store );\n\n\t\t\tconst getSelectors = () => selectors;\n\t\t\tconst getActions = () => actions;\n\t\t\tconst getResolveSelectors = () => resolveSelectors;\n\t\t\tconst getSuspendSelectors = () => suspendSelectors;\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\tgetSuspendSelectors,\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\tserialize: {\n\t\t\t\t\treplacer: mapToObject,\n\t\t\t\t},\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\tcompose( 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 =\n\t\t( action ) =>\n\t\t( ...args ) => {\n\t\t\treturn Promise.resolve( store.dispatch( action( ...args ) ) );\n\t\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 {\n\t\tgetIsResolving,\n\t\thasStartedResolution,\n\t\thasFinishedResolution,\n\t\thasResolutionFailed,\n\t\tisResolving,\n\t\tgetCachedResolvers,\n\t\tgetResolutionState,\n\t\tgetResolutionError,\n\t\t...storeSelectors\n\t} = selectors;\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 * Maps selectors to functions that throw a suspense promise if not yet resolved.\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 suspense functions.\n */\nfunction mapSuspendSelectors( selectors, store ) {\n\treturn mapValues( selectors, ( selector, selectorName ) => {\n\t\t// Selector without a resolver doesn't have any extra suspense behavior.\n\t\tif ( ! selector.hasResolver ) {\n\t\t\treturn selector;\n\t\t}\n\n\t\treturn ( ...args ) => {\n\t\t\tconst result = selector.apply( null, args );\n\n\t\t\tif ( selectors.hasFinishedResolution( selectorName, args ) ) {\n\t\t\t\tif ( selectors.hasResolutionFailed( selectorName, args ) ) {\n\t\t\t\t\tthrow selectors.getResolutionError( selectorName, args );\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tthrow new Promise( ( resolve ) => {\n\t\t\t\tconst unsubscribe = store.subscribe( () => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tselectors.hasFinishedResolution( selectorName, args )\n\t\t\t\t\t) {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t\tunsubscribe();\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"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/data/src/redux-store/index.js"],"names":["createStore","applyMiddleware","get","mapValues","combineReducers","EquivalentKeyMap","createReduxRoutineMiddleware","compose","builtinControls","lock","promise","createResolversCacheMiddleware","createThunkMiddleware","metadataReducer","metadataSelectors","metadataActions","trimUndefinedValues","array","result","i","length","undefined","splice","mapToObject","key","state","Map","Object","fromEntries","createResolversCache","cache","isRunning","selectorName","args","clear","delete","markAsRunning","set","createReduxStore","options","privateActions","privateSelectors","privateRegistrationFunctions","registerPrivateActions","actions","assign","registerPrivateSelectors","selectors","storeDescriptor","name","instantiate","registry","reducer","thunkArgs","dispatch","action","store","getActions","select","selector","__unstableOriginalGetState","getSelectors","resolveSelect","getResolveSelectors","instantiateReduxStore","resolversCache","resolvers","mapActions","Proxy","target","prop","mapSelectors","metadata","isRegistrySelector","root","mapResolvers","resolveSelectors","mapResolveSelectors","suspendSelectors","mapSuspendSelectors","getSuspendSelectors","getState","subscribe","listener","lastState","hasChanged","controls","normalizedControls","control","isRegistryControl","middlewares","enhancers","window","__REDUX_DEVTOOLS_EXTENSION__","push","instanceId","serialize","replacer","initialState","enhancedReducer","createStateSelector","registrySelector","runSelector","argsLength","arguments","Array","hasResolver","createBoundAction","Promise","resolve","getIsResolving","hasStartedResolution","hasFinishedResolution","hasResolutionFailed","isResolving","getCachedResolvers","getResolutionState","getResolutionError","storeSelectors","apply","reject","hasFinished","finalize","hasFailed","error","getResult","unsubscribe","mappedResolvers","resolver","fulfill","mapSelector","selectorResolver","fulfillSelector","isFulfilled","setTimeout","startResolution","fulfillResolver","finishResolution","failResolution"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { createStore, applyMiddleware } from 'redux';\nimport { get, mapValues } 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';\nimport { compose } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { builtinControls } from '../controls';\nimport { lock } from '../experiments';\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/**\n * @typedef {import('../types').StoreDescriptor<C>} StoreDescriptor\n * @template C\n */\n/**\n * @typedef {import('../types').ReduxStoreConfig<State,Actions,Selectors>} ReduxStoreConfig\n * @template State,Actions,Selectors\n */\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// Convert Map objects to plain objects\nconst mapToObject = ( key, state ) => {\n\tif ( state instanceof Map ) {\n\t\treturn Object.fromEntries( state );\n\t}\n\n\treturn state;\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 * @template State,Actions,Selectors\n * @param {string} key Unique namespace identifier.\n * @param {ReduxStoreConfig<State,Actions,Selectors>} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n *\n * @return {StoreDescriptor<ReduxStoreConfig<State,Actions,Selectors>>} Store Object.\n */\nexport default function createReduxStore( key, options ) {\n\tconst privateActions = {};\n\tconst privateSelectors = {};\n\tconst privateRegistrationFunctions = {\n\t\tprivateActions,\n\t\tregisterPrivateActions: ( actions ) => {\n\t\t\tObject.assign( privateActions, actions );\n\t\t},\n\t\tprivateSelectors,\n\t\tregisterPrivateSelectors: ( selectors ) => {\n\t\t\tObject.assign( privateSelectors, selectors );\n\t\t},\n\t};\n\tconst storeDescriptor = {\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\t// Expose the private registration functions on the store\n\t\t\t// so they can be copied to a sub registry in registry.js.\n\t\t\tlock( store, privateRegistrationFunctions );\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\t\t\tlock(\n\t\t\t\tactions,\n\t\t\t\tnew Proxy( privateActions, {\n\t\t\t\t\tget: ( target, prop ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\tmapActions( privateActions, store )[ prop ] ||\n\t\t\t\t\t\t\tactions[ prop ]\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\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 ) =>\n\t\t\t\t\t\t\t( state, ...args ) =>\n\t\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\tlock(\n\t\t\t\tselectors,\n\t\t\t\tnew Proxy( privateSelectors, {\n\t\t\t\t\tget: ( target, prop ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\tmapSelectors(\n\t\t\t\t\t\t\t\tmapValues(\n\t\t\t\t\t\t\t\t\tprivateSelectors,\n\t\t\t\t\t\t\t\t\t( selector ) =>\n\t\t\t\t\t\t\t\t\t\t( state, ...args ) =>\n\t\t\t\t\t\t\t\t\t\t\tselector( state.root, ...args )\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tstore\n\t\t\t\t\t\t\t)[ prop ] || selectors[ prop ]\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\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\t\t\tconst suspendSelectors = mapSuspendSelectors( selectors, store );\n\n\t\t\tconst getSelectors = () => selectors;\n\t\t\tconst getActions = () => actions;\n\t\t\tconst getResolveSelectors = () => resolveSelectors;\n\t\t\tconst getSuspendSelectors = () => suspendSelectors;\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\tgetSuspendSelectors,\n\t\t\t\tgetActions,\n\t\t\t\tsubscribe,\n\t\t\t};\n\t\t},\n\t};\n\n\t// Expose the private registration functions on the store\n\t// descriptor. That's a natural choice since that's where the\n\t// public actions and selectors are stored .\n\tlock( storeDescriptor, privateRegistrationFunctions );\n\n\treturn storeDescriptor;\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\tserialize: {\n\t\t\t\t\treplacer: mapToObject,\n\t\t\t\t},\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\tcompose( 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 =\n\t\t( action ) =>\n\t\t( ...args ) => {\n\t\t\treturn Promise.resolve( store.dispatch( action( ...args ) ) );\n\t\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 {\n\t\tgetIsResolving,\n\t\thasStartedResolution,\n\t\thasFinishedResolution,\n\t\thasResolutionFailed,\n\t\tisResolving,\n\t\tgetCachedResolvers,\n\t\tgetResolutionState,\n\t\tgetResolutionError,\n\t\t...storeSelectors\n\t} = selectors;\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 * Maps selectors to functions that throw a suspense promise if not yet resolved.\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 suspense functions.\n */\nfunction mapSuspendSelectors( selectors, store ) {\n\treturn mapValues( selectors, ( selector, selectorName ) => {\n\t\t// Selector without a resolver doesn't have any extra suspense behavior.\n\t\tif ( ! selector.hasResolver ) {\n\t\t\treturn selector;\n\t\t}\n\n\t\treturn ( ...args ) => {\n\t\t\tconst result = selector.apply( null, args );\n\n\t\t\tif ( selectors.hasFinishedResolution( selectorName, args ) ) {\n\t\t\t\tif ( selectors.hasResolutionFailed( selectorName, args ) ) {\n\t\t\t\t\tthrow selectors.getResolutionError( selectorName, args );\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tthrow new Promise( ( resolve ) => {\n\t\t\t\tconst unsubscribe = store.subscribe( () => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tselectors.hasFinishedResolution( selectorName, args )\n\t\t\t\t\t) {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t\tunsubscribe();\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"]}
|
package/build-module/registry.js
CHANGED
|
@@ -14,6 +14,7 @@ import deprecated from '@wordpress/deprecated';
|
|
|
14
14
|
import createReduxStore from './redux-store';
|
|
15
15
|
import coreDataStore from './store';
|
|
16
16
|
import { createEmitter } from './utils/emitter';
|
|
17
|
+
import { lock, unlock } from './experiments';
|
|
17
18
|
/** @typedef {import('./types').StoreDescriptor} StoreDescriptor */
|
|
18
19
|
|
|
19
20
|
/**
|
|
@@ -269,7 +270,17 @@ export function createRegistry() {
|
|
|
269
270
|
};
|
|
270
271
|
|
|
271
272
|
stores[name] = store;
|
|
272
|
-
store.subscribe(globalListener);
|
|
273
|
+
store.subscribe(globalListener); // Copy private actions and selectors from the parent store.
|
|
274
|
+
|
|
275
|
+
if (parent) {
|
|
276
|
+
try {
|
|
277
|
+
unlock(store.store).registerPrivateActions(unlock(parent).privateActionsOf(name));
|
|
278
|
+
unlock(store.store).registerPrivateSelectors(unlock(parent).privateSelectorsOf(name));
|
|
279
|
+
} catch (e) {// unlock() throws if store.store was not locked.
|
|
280
|
+
// The error indicates there's nothing to do here so let's
|
|
281
|
+
// ignore it.
|
|
282
|
+
}
|
|
283
|
+
}
|
|
273
284
|
}
|
|
274
285
|
/**
|
|
275
286
|
* Registers a new store given a store descriptor.
|
|
@@ -357,6 +368,25 @@ export function createRegistry() {
|
|
|
357
368
|
parent.subscribe(globalListener);
|
|
358
369
|
}
|
|
359
370
|
|
|
360
|
-
|
|
371
|
+
const registryWithPlugins = withPlugins(registry);
|
|
372
|
+
lock(registryWithPlugins, {
|
|
373
|
+
privateActionsOf: name => {
|
|
374
|
+
try {
|
|
375
|
+
return unlock(stores[name].store).privateActions;
|
|
376
|
+
} catch (e) {
|
|
377
|
+
// unlock() throws an error the store was not locked – this means
|
|
378
|
+
// there no private actions are available
|
|
379
|
+
return {};
|
|
380
|
+
}
|
|
381
|
+
},
|
|
382
|
+
privateSelectorsOf: name => {
|
|
383
|
+
try {
|
|
384
|
+
return unlock(stores[name].store).privateSelectors;
|
|
385
|
+
} catch (e) {
|
|
386
|
+
return {};
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
});
|
|
390
|
+
return registryWithPlugins;
|
|
361
391
|
}
|
|
362
392
|
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/data/src/registry.js"],"names":["mapValues","deprecated","createReduxStore","coreDataStore","createEmitter","getStoreName","storeNameOrDescriptor","name","createRegistry","storeConfigs","parent","stores","emitter","listeningStores","globalListener","emit","subscribe","listener","storeName","store","select","add","getSelectors","__unstableMarkListeningStores","callback","ref","Set","call","current","Array","from","resolveSelect","getResolveSelectors","suspendSelect","getSuspendSelectors","dispatch","getActions","withPlugins","attributes","attribute","key","registry","apply","arguments","registerStoreInstance","TypeError","currentSubscribe","unsubscribeFromEmitter","unsubscribeFromStore","isPaused","register","instantiate","registerGenericStore","since","alternative","registerStore","options","reducer","batch","pause","Object","values","forEach","resume","namespaces","use","plugin","config","entries"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { mapValues } 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\nfunction getStoreName( storeNameOrDescriptor ) {\n\treturn typeof storeNameOrDescriptor === 'string'\n\t\t? storeNameOrDescriptor\n\t\t: storeNameOrDescriptor.name;\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\tlet listeningStores = null;\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, either in all stores in registry, or\n\t * in one specific store.\n\t *\n\t * @param {Function} listener Listener function.\n\t * @param {string|StoreDescriptor?} storeNameOrDescriptor Optional store name.\n\t *\n\t * @return {Function} Unsubscribe function.\n\t */\n\tconst subscribe = ( listener, storeNameOrDescriptor ) => {\n\t\t// subscribe to all stores\n\t\tif ( ! storeNameOrDescriptor ) {\n\t\t\treturn emitter.subscribe( listener );\n\t\t}\n\n\t\t// subscribe to one store\n\t\tconst storeName = getStoreName( storeNameOrDescriptor );\n\t\tconst store = stores[ storeName ];\n\t\tif ( store ) {\n\t\t\treturn store.subscribe( listener );\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 global `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 emitter.subscribe( listener );\n\t\t}\n\n\t\treturn parent.subscribe( listener, storeNameOrDescriptor );\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 = getStoreName( 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?.select( storeName );\n\t}\n\n\tfunction __unstableMarkListeningStores( callback, ref ) {\n\t\tlisteningStores = new Set();\n\t\ttry {\n\t\t\treturn callback.call( this );\n\t\t} finally {\n\t\t\tref.current = Array.from( listeningStores );\n\t\t\tlisteningStores = null;\n\t\t}\n\t}\n\n\t/**\n\t * Given a store descriptor, returns an object containing the store's selectors pre-bound to\n\t * state so that you only need to supply additional arguments, and modified so that they return\n\t * promises that resolve to their eventual values, after any resolvers have ran.\n\t *\n\t * @param {StoreDescriptor|string} storeNameOrDescriptor The store descriptor. The legacy calling\n\t * convention of passing the store name is\n\t * also supported.\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 = getStoreName( 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 * Given a store descriptor, returns an object containing the store's selectors pre-bound to\n\t * state so that you only need to supply additional arguments, and modified so that they throw\n\t * promises in case the selector is not resolved yet.\n\t *\n\t * @param {StoreDescriptor|string} storeNameOrDescriptor The store descriptor. The legacy calling\n\t * convention of passing the store name is\n\t * also supported.\n\t *\n\t * @return {Object} Object containing the store's suspense-wrapped selectors.\n\t */\n\tfunction suspendSelect( storeNameOrDescriptor ) {\n\t\tconst storeName = getStoreName( storeNameOrDescriptor );\n\t\tlisteningStores?.add( storeName );\n\t\tconst store = stores[ storeName ];\n\t\tif ( store ) {\n\t\t\treturn store.getSuspendSelectors();\n\t\t}\n\n\t\treturn parent && parent.suspendSelect( 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 = getStoreName( 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\tfunction batch( callback ) {\n\t\temitter.pause();\n\t\tObject.values( stores ).forEach( ( store ) => store.emitter.pause() );\n\t\tcallback();\n\t\temitter.resume();\n\t\tObject.values( stores ).forEach( ( 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\tsuspendSelect,\n\t\tdispatch,\n\t\tuse,\n\t\tregister,\n\t\tregisterGenericStore,\n\t\tregisterStore,\n\t\t__unstableMarkListeningStores,\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","deprecated","createReduxStore","coreDataStore","createEmitter","lock","unlock","getStoreName","storeNameOrDescriptor","name","createRegistry","storeConfigs","parent","stores","emitter","listeningStores","globalListener","emit","subscribe","listener","storeName","store","select","add","getSelectors","__unstableMarkListeningStores","callback","ref","Set","call","current","Array","from","resolveSelect","getResolveSelectors","suspendSelect","getSuspendSelectors","dispatch","getActions","withPlugins","attributes","attribute","key","registry","apply","arguments","registerStoreInstance","TypeError","currentSubscribe","unsubscribeFromEmitter","unsubscribeFromStore","isPaused","registerPrivateActions","privateActionsOf","registerPrivateSelectors","privateSelectorsOf","e","register","instantiate","registerGenericStore","since","alternative","registerStore","options","reducer","batch","pause","Object","values","forEach","resume","namespaces","use","plugin","config","entries","registryWithPlugins","privateActions","privateSelectors"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { mapValues } 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';\nimport { lock, unlock } from './experiments';\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\nfunction getStoreName( storeNameOrDescriptor ) {\n\treturn typeof storeNameOrDescriptor === 'string'\n\t\t? storeNameOrDescriptor\n\t\t: storeNameOrDescriptor.name;\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\tlet listeningStores = null;\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, either in all stores in registry, or\n\t * in one specific store.\n\t *\n\t * @param {Function} listener Listener function.\n\t * @param {string|StoreDescriptor?} storeNameOrDescriptor Optional store name.\n\t *\n\t * @return {Function} Unsubscribe function.\n\t */\n\tconst subscribe = ( listener, storeNameOrDescriptor ) => {\n\t\t// subscribe to all stores\n\t\tif ( ! storeNameOrDescriptor ) {\n\t\t\treturn emitter.subscribe( listener );\n\t\t}\n\n\t\t// subscribe to one store\n\t\tconst storeName = getStoreName( storeNameOrDescriptor );\n\t\tconst store = stores[ storeName ];\n\t\tif ( store ) {\n\t\t\treturn store.subscribe( listener );\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 global `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 emitter.subscribe( listener );\n\t\t}\n\n\t\treturn parent.subscribe( listener, storeNameOrDescriptor );\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 = getStoreName( 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?.select( storeName );\n\t}\n\n\tfunction __unstableMarkListeningStores( callback, ref ) {\n\t\tlisteningStores = new Set();\n\t\ttry {\n\t\t\treturn callback.call( this );\n\t\t} finally {\n\t\t\tref.current = Array.from( listeningStores );\n\t\t\tlisteningStores = null;\n\t\t}\n\t}\n\n\t/**\n\t * Given a store descriptor, returns an object containing the store's selectors pre-bound to\n\t * state so that you only need to supply additional arguments, and modified so that they return\n\t * promises that resolve to their eventual values, after any resolvers have ran.\n\t *\n\t * @param {StoreDescriptor|string} storeNameOrDescriptor The store descriptor. The legacy calling\n\t * convention of passing the store name is\n\t * also supported.\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 = getStoreName( 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 * Given a store descriptor, returns an object containing the store's selectors pre-bound to\n\t * state so that you only need to supply additional arguments, and modified so that they throw\n\t * promises in case the selector is not resolved yet.\n\t *\n\t * @param {StoreDescriptor|string} storeNameOrDescriptor The store descriptor. The legacy calling\n\t * convention of passing the store name is\n\t * also supported.\n\t *\n\t * @return {Object} Object containing the store's suspense-wrapped selectors.\n\t */\n\tfunction suspendSelect( storeNameOrDescriptor ) {\n\t\tconst storeName = getStoreName( storeNameOrDescriptor );\n\t\tlisteningStores?.add( storeName );\n\t\tconst store = stores[ storeName ];\n\t\tif ( store ) {\n\t\t\treturn store.getSuspendSelectors();\n\t\t}\n\n\t\treturn parent && parent.suspendSelect( 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 = getStoreName( 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\n\t\t// Copy private actions and selectors from the parent store.\n\t\tif ( parent ) {\n\t\t\ttry {\n\t\t\t\tunlock( store.store ).registerPrivateActions(\n\t\t\t\t\tunlock( parent ).privateActionsOf( name )\n\t\t\t\t);\n\t\t\t\tunlock( store.store ).registerPrivateSelectors(\n\t\t\t\t\tunlock( parent ).privateSelectorsOf( name )\n\t\t\t\t);\n\t\t\t} catch ( e ) {\n\t\t\t\t// unlock() throws if store.store was not locked.\n\t\t\t\t// The error indicates there's nothing to do here so let's\n\t\t\t\t// ignore it.\n\t\t\t}\n\t\t}\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\tfunction batch( callback ) {\n\t\temitter.pause();\n\t\tObject.values( stores ).forEach( ( store ) => store.emitter.pause() );\n\t\tcallback();\n\t\temitter.resume();\n\t\tObject.values( stores ).forEach( ( 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\tsuspendSelect,\n\t\tdispatch,\n\t\tuse,\n\t\tregister,\n\t\tregisterGenericStore,\n\t\tregisterStore,\n\t\t__unstableMarkListeningStores,\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\tconst registryWithPlugins = withPlugins( registry );\n\tlock( registryWithPlugins, {\n\t\tprivateActionsOf: ( name ) => {\n\t\t\ttry {\n\t\t\t\treturn unlock( stores[ name ].store ).privateActions;\n\t\t\t} catch ( e ) {\n\t\t\t\t// unlock() throws an error the store was not locked – this means\n\t\t\t\t// there no private actions are available\n\t\t\t\treturn {};\n\t\t\t}\n\t\t},\n\t\tprivateSelectorsOf: ( name ) => {\n\t\t\ttry {\n\t\t\t\treturn unlock( stores[ name ].store ).privateSelectors;\n\t\t\t} catch ( e ) {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t},\n\t} );\n\treturn registryWithPlugins;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"experiments.d.ts","sourceRoot":"","sources":["../src/experiments.js"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/redux-store/index.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/redux-store/index.js"],"names":[],"mappings":"AAsFA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,yEAPW,MAAM,+KAkLhB;2BA/Pa,OAAO,UAAU,EAAE,YAAY;iCAEhC,OAAO,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC;0DAIrC,OAAO,UAAU,EAAE,gBAAgB,CAAC,KAAK,EAAC,OAAO,EAAC,SAAS,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.js"],"names":[],"mappings":"AAmDA;;;;;;;;GAQG;AACH,8CALW,MAAM,WACN,MAAM,UAEL,cAAc,CA2TzB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wordpress/data",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.3.0",
|
|
4
4
|
"description": "Data module for WordPress.",
|
|
5
5
|
"author": "The WordPress Contributors",
|
|
6
6
|
"license": "GPL-2.0-or-later",
|
|
@@ -29,12 +29,13 @@
|
|
|
29
29
|
"sideEffects": false,
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@babel/runtime": "^7.16.0",
|
|
32
|
-
"@wordpress/compose": "^6.
|
|
33
|
-
"@wordpress/deprecated": "^3.
|
|
34
|
-
"@wordpress/element": "^5.
|
|
35
|
-
"@wordpress/
|
|
36
|
-
"@wordpress/
|
|
37
|
-
"@wordpress/
|
|
32
|
+
"@wordpress/compose": "^6.3.0",
|
|
33
|
+
"@wordpress/deprecated": "^3.26.0",
|
|
34
|
+
"@wordpress/element": "^5.3.0",
|
|
35
|
+
"@wordpress/experiments": "^0.8.0",
|
|
36
|
+
"@wordpress/is-shallow-equal": "^4.26.0",
|
|
37
|
+
"@wordpress/priority-queue": "^2.26.0",
|
|
38
|
+
"@wordpress/redux-routine": "^4.26.0",
|
|
38
39
|
"equivalent-key-map": "^0.2.2",
|
|
39
40
|
"is-plain-object": "^5.0.0",
|
|
40
41
|
"is-promise": "^4.0.0",
|
|
@@ -49,5 +50,5 @@
|
|
|
49
50
|
"publishConfig": {
|
|
50
51
|
"access": "public"
|
|
51
52
|
},
|
|
52
|
-
"gitHead": "
|
|
53
|
+
"gitHead": "cab6ebe2b4c5dbacfd753dcae4a2406559c4813c"
|
|
53
54
|
}
|
|
@@ -78,7 +78,7 @@ describe( 'withDispatch', () => {
|
|
|
78
78
|
|
|
79
79
|
// Function value reference should not have changed in props update.
|
|
80
80
|
// The spy method is only called during inital render.
|
|
81
|
-
expect( ButtonSpy ).
|
|
81
|
+
expect( ButtonSpy ).toHaveBeenCalledTimes( 1 );
|
|
82
82
|
|
|
83
83
|
await user.click( screen.getByRole( 'button' ) );
|
|
84
84
|
expect( registry.select( 'counter' ).getCount() ).toBe( 2 );
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/experiments';
|
|
5
|
+
|
|
6
|
+
export const { lock, unlock } =
|
|
7
|
+
__dangerousOptInToUnstableAPIsOnlyForCoreModules(
|
|
8
|
+
'I know using unstable features means my plugin or theme will inevitably break on the next WordPress release.',
|
|
9
|
+
'@wordpress/data'
|
|
10
|
+
);
|
|
@@ -29,7 +29,7 @@ describe( 'persistence', () => {
|
|
|
29
29
|
expect( () => {
|
|
30
30
|
const options = Object.freeze( { persist: true, reducer() {} } );
|
|
31
31
|
registry.registerStore( 'test', options );
|
|
32
|
-
} ).not.
|
|
32
|
+
} ).not.toThrow( /object is not extensible/ );
|
|
33
33
|
} );
|
|
34
34
|
|
|
35
35
|
it( 'should load a persisted value as initialState', () => {
|
package/src/redux-store/index.js
CHANGED
|
@@ -16,6 +16,7 @@ import { compose } from '@wordpress/compose';
|
|
|
16
16
|
* Internal dependencies
|
|
17
17
|
*/
|
|
18
18
|
import { builtinControls } from '../controls';
|
|
19
|
+
import { lock } from '../experiments';
|
|
19
20
|
import promise from '../promise-middleware';
|
|
20
21
|
import createResolversCacheMiddleware from '../resolvers-cache-middleware';
|
|
21
22
|
import createThunkMiddleware from './thunk-middleware';
|
|
@@ -108,7 +109,19 @@ function createResolversCache() {
|
|
|
108
109
|
* @return {StoreDescriptor<ReduxStoreConfig<State,Actions,Selectors>>} Store Object.
|
|
109
110
|
*/
|
|
110
111
|
export default function createReduxStore( key, options ) {
|
|
111
|
-
|
|
112
|
+
const privateActions = {};
|
|
113
|
+
const privateSelectors = {};
|
|
114
|
+
const privateRegistrationFunctions = {
|
|
115
|
+
privateActions,
|
|
116
|
+
registerPrivateActions: ( actions ) => {
|
|
117
|
+
Object.assign( privateActions, actions );
|
|
118
|
+
},
|
|
119
|
+
privateSelectors,
|
|
120
|
+
registerPrivateSelectors: ( selectors ) => {
|
|
121
|
+
Object.assign( privateSelectors, selectors );
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
const storeDescriptor = {
|
|
112
125
|
name: key,
|
|
113
126
|
instantiate: ( registry ) => {
|
|
114
127
|
const reducer = options.reducer;
|
|
@@ -138,6 +151,9 @@ export default function createReduxStore( key, options ) {
|
|
|
138
151
|
registry,
|
|
139
152
|
thunkArgs
|
|
140
153
|
);
|
|
154
|
+
// Expose the private registration functions on the store
|
|
155
|
+
// so they can be copied to a sub registry in registry.js.
|
|
156
|
+
lock( store, privateRegistrationFunctions );
|
|
141
157
|
const resolversCache = createResolversCache();
|
|
142
158
|
|
|
143
159
|
let resolvers;
|
|
@@ -148,6 +164,17 @@ export default function createReduxStore( key, options ) {
|
|
|
148
164
|
},
|
|
149
165
|
store
|
|
150
166
|
);
|
|
167
|
+
lock(
|
|
168
|
+
actions,
|
|
169
|
+
new Proxy( privateActions, {
|
|
170
|
+
get: ( target, prop ) => {
|
|
171
|
+
return (
|
|
172
|
+
mapActions( privateActions, store )[ prop ] ||
|
|
173
|
+
actions[ prop ]
|
|
174
|
+
);
|
|
175
|
+
},
|
|
176
|
+
} )
|
|
177
|
+
);
|
|
151
178
|
|
|
152
179
|
let selectors = mapSelectors(
|
|
153
180
|
{
|
|
@@ -168,6 +195,25 @@ export default function createReduxStore( key, options ) {
|
|
|
168
195
|
},
|
|
169
196
|
store
|
|
170
197
|
);
|
|
198
|
+
lock(
|
|
199
|
+
selectors,
|
|
200
|
+
new Proxy( privateSelectors, {
|
|
201
|
+
get: ( target, prop ) => {
|
|
202
|
+
return (
|
|
203
|
+
mapSelectors(
|
|
204
|
+
mapValues(
|
|
205
|
+
privateSelectors,
|
|
206
|
+
( selector ) =>
|
|
207
|
+
( state, ...args ) =>
|
|
208
|
+
selector( state.root, ...args )
|
|
209
|
+
),
|
|
210
|
+
store
|
|
211
|
+
)[ prop ] || selectors[ prop ]
|
|
212
|
+
);
|
|
213
|
+
},
|
|
214
|
+
} )
|
|
215
|
+
);
|
|
216
|
+
|
|
171
217
|
if ( options.resolvers ) {
|
|
172
218
|
const result = mapResolvers(
|
|
173
219
|
options.resolvers,
|
|
@@ -226,6 +272,13 @@ export default function createReduxStore( key, options ) {
|
|
|
226
272
|
};
|
|
227
273
|
},
|
|
228
274
|
};
|
|
275
|
+
|
|
276
|
+
// Expose the private registration functions on the store
|
|
277
|
+
// descriptor. That's a natural choice since that's where the
|
|
278
|
+
// public actions and selectors are stored .
|
|
279
|
+
lock( storeDescriptor, privateRegistrationFunctions );
|
|
280
|
+
|
|
281
|
+
return storeDescriptor;
|
|
229
282
|
}
|
|
230
283
|
|
|
231
284
|
/**
|
package/src/registry.js
CHANGED
|
@@ -14,6 +14,7 @@ import deprecated from '@wordpress/deprecated';
|
|
|
14
14
|
import createReduxStore from './redux-store';
|
|
15
15
|
import coreDataStore from './store';
|
|
16
16
|
import { createEmitter } from './utils/emitter';
|
|
17
|
+
import { lock, unlock } from './experiments';
|
|
17
18
|
|
|
18
19
|
/** @typedef {import('./types').StoreDescriptor} StoreDescriptor */
|
|
19
20
|
|
|
@@ -245,6 +246,22 @@ export function createRegistry( storeConfigs = {}, parent = null ) {
|
|
|
245
246
|
};
|
|
246
247
|
stores[ name ] = store;
|
|
247
248
|
store.subscribe( globalListener );
|
|
249
|
+
|
|
250
|
+
// Copy private actions and selectors from the parent store.
|
|
251
|
+
if ( parent ) {
|
|
252
|
+
try {
|
|
253
|
+
unlock( store.store ).registerPrivateActions(
|
|
254
|
+
unlock( parent ).privateActionsOf( name )
|
|
255
|
+
);
|
|
256
|
+
unlock( store.store ).registerPrivateSelectors(
|
|
257
|
+
unlock( parent ).privateSelectorsOf( name )
|
|
258
|
+
);
|
|
259
|
+
} catch ( e ) {
|
|
260
|
+
// unlock() throws if store.store was not locked.
|
|
261
|
+
// The error indicates there's nothing to do here so let's
|
|
262
|
+
// ignore it.
|
|
263
|
+
}
|
|
264
|
+
}
|
|
248
265
|
}
|
|
249
266
|
|
|
250
267
|
/**
|
|
@@ -334,5 +351,24 @@ export function createRegistry( storeConfigs = {}, parent = null ) {
|
|
|
334
351
|
parent.subscribe( globalListener );
|
|
335
352
|
}
|
|
336
353
|
|
|
337
|
-
|
|
354
|
+
const registryWithPlugins = withPlugins( registry );
|
|
355
|
+
lock( registryWithPlugins, {
|
|
356
|
+
privateActionsOf: ( name ) => {
|
|
357
|
+
try {
|
|
358
|
+
return unlock( stores[ name ].store ).privateActions;
|
|
359
|
+
} catch ( e ) {
|
|
360
|
+
// unlock() throws an error the store was not locked – this means
|
|
361
|
+
// there no private actions are available
|
|
362
|
+
return {};
|
|
363
|
+
}
|
|
364
|
+
},
|
|
365
|
+
privateSelectorsOf: ( name ) => {
|
|
366
|
+
try {
|
|
367
|
+
return unlock( stores[ name ].store ).privateSelectors;
|
|
368
|
+
} catch ( e ) {
|
|
369
|
+
return {};
|
|
370
|
+
}
|
|
371
|
+
},
|
|
372
|
+
} );
|
|
373
|
+
return registryWithPlugins;
|
|
338
374
|
}
|