@wordpress/data 6.0.1 → 6.1.3
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 +8 -0
- package/README.md +31 -2
- package/build/components/registry-provider/use-registry.js +1 -1
- package/build/components/registry-provider/use-registry.js.map +1 -1
- package/build/controls.js +23 -15
- package/build/controls.js.map +1 -1
- package/build/plugins/persistence/index.js +43 -50
- package/build/plugins/persistence/index.js.map +1 -1
- package/build/redux-store/index.js +15 -3
- package/build/redux-store/index.js.map +1 -1
- package/build/registry.js +40 -7
- package/build/registry.js.map +1 -1
- package/build/types.js +2 -0
- package/build/{types.d.js.map → types.js.map} +0 -0
- package/build/utils/emitter.js +57 -0
- package/build/utils/emitter.js.map +1 -0
- package/build-module/components/registry-provider/use-registry.js +1 -1
- package/build-module/components/registry-provider/use-registry.js.map +1 -1
- package/build-module/controls.js +22 -15
- package/build-module/controls.js.map +1 -1
- package/build-module/plugins/persistence/index.js +42 -51
- package/build-module/plugins/persistence/index.js.map +1 -1
- package/build-module/redux-store/index.js +15 -3
- package/build-module/redux-store/index.js.map +1 -1
- package/build-module/registry.js +40 -8
- package/build-module/registry.js.map +1 -1
- package/build-module/types.js +2 -0
- package/build-module/{types.d.js.map → types.js.map} +0 -0
- package/build-module/utils/emitter.js +50 -0
- package/build-module/utils/emitter.js.map +1 -0
- package/build-types/redux-store/metadata/selectors.d.ts +1 -3
- package/build-types/redux-store/metadata/selectors.d.ts.map +1 -1
- package/build-types/types.d.ts +35 -0
- package/build-types/types.d.ts.map +1 -0
- package/build-types/utils/emitter.d.ts +7 -0
- package/build-types/utils/emitter.d.ts.map +1 -0
- package/package.json +6 -6
- package/src/components/registry-provider/use-registry.js +1 -1
- package/src/controls.js +43 -15
- package/src/plugins/persistence/index.js +56 -62
- package/src/plugins/persistence/test/index.js +117 -1
- package/src/redux-store/index.js +17 -4
- package/src/registry.js +38 -8
- package/src/test/registry.js +34 -0
- package/src/{types.d.ts → types.ts} +8 -0
- package/src/utils/emitter.js +46 -0
- package/tsconfig.json +2 -0
- package/tsconfig.tsbuildinfo +1 -826
- package/build/types.d.js +0 -2
- package/build-module/types.d.js +0 -2
|
@@ -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","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","result","mapResolvers","resolveSelectors","mapResolveSelectors","getState","subscribe","listener","lastState","hasChanged","controls","normalizedControls","control","isRegistryControl","middlewares","__experimentalUseThunks","push","enhancers","window","__REDUX_DEVTOOLS_EXTENSION__","instanceId","initialState","enhancedReducer","createStateSelector","registrySelector","runSelector","argsLength","arguments","length","Array","i","hasResolver","createBoundAction","Promise","resolve","hasFinished","hasFinishedResolution","getResult","apply","unsubscribe","mappedResolvers","resolver","fulfill","mapSelector","selectorResolver","fulfillSelector","isFulfilled","hasStartedResolution","setTimeout","startResolution","fulfillResolver","finishResolution"],"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').WPDataRegistry} WPDataRegistry */\n/** @typedef {import('../types').WPDataStore} WPDataStore */\n/** @typedef {import('../types').WPDataReduxStoreConfig} WPDataReduxStoreConfig */\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 cache[ selectorName ] && cache[ selectorName ].get( args );\n\t\t},\n\n\t\tclear( selectorName, args ) {\n\t\t\tif ( cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ].delete( 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( args, true );\n\t\t},\n\t};\n}\n\n/**\n * Creates a data store definition for the provided Redux store options 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 {WPDataReduxStoreConfig} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n *\n * @return {WPDataStore} 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 {WPDataRegistry} 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];\n\n\tif ( options.__experimentalUseThunks ) {\n\t\tmiddlewares.push( createThunkMiddleware( 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 ) => {\n\t\t\t\tconst hasFinished = () =>\n\t\t\t\t\tselectors.hasFinishedResolution( selectorName, args );\n\t\t\t\tconst getResult = () => selector.apply( null, args );\n\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 resolve( 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\tresolve( 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\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\tawait fulfillResolver(\n\t\t\t\t\t\tstore,\n\t\t\t\t\t\tmappedResolvers,\n\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t...args\n\t\t\t\t\t);\n\t\t\t\t\tstore.dispatch(\n\t\t\t\t\t\tmetadataActions.finishResolution( selectorName, args )\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","__experimentalUseThunks","push","enhancers","window","__REDUX_DEVTOOLS_EXTENSION__","instanceId","initialState","enhancedReducer","createStateSelector","registrySelector","runSelector","argsLength","arguments","Array","hasResolver","createBoundAction","Promise","resolve","hasFinished","hasFinishedResolution","getResult","apply","unsubscribe","mappedResolvers","resolver","fulfill","mapSelector","selectorResolver","fulfillSelector","isFulfilled","hasStartedResolution","setTimeout","startResolution","fulfillResolver","finishResolution"],"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').WPDataRegistry} WPDataRegistry */\n/** @typedef {import('../types').WPDataStore} WPDataStore */\n/** @typedef {import('../types').WPDataReduxStoreConfig} WPDataReduxStoreConfig */\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 definition for the provided Redux store options 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 {WPDataReduxStoreConfig} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n *\n * @return {WPDataStore} 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 {WPDataRegistry} 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];\n\n\tif ( options.__experimentalUseThunks ) {\n\t\tmiddlewares.push( createThunkMiddleware( 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 ) => {\n\t\t\t\tconst hasFinished = () =>\n\t\t\t\t\tselectors.hasFinishedResolution( selectorName, args );\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 resolve( 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\tresolve( 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\tawait fulfillResolver(\n\t\t\t\t\t\tstore,\n\t\t\t\t\t\tmappedResolvers,\n\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t...args\n\t\t\t\t\t);\n\t\t\t\t\tstore.dispatch(\n\t\t\t\t\t\tmetadataActions.finishResolution( selectorName, args )\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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* External dependencies
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import { mapValues, isObject, forEach } from 'lodash';
|
|
5
5
|
/**
|
|
6
6
|
* Internal dependencies
|
|
7
7
|
*/
|
|
@@ -9,6 +9,7 @@ import { without, mapValues, isObject } from 'lodash';
|
|
|
9
9
|
import createReduxStore from './redux-store';
|
|
10
10
|
import createCoreDataStore from './store';
|
|
11
11
|
import { STORE_NAME } from './store/name';
|
|
12
|
+
import { createEmitter } from './utils/emitter';
|
|
12
13
|
/** @typedef {import('./types').WPDataStore} WPDataStore */
|
|
13
14
|
|
|
14
15
|
/**
|
|
@@ -49,7 +50,7 @@ import { STORE_NAME } from './store/name';
|
|
|
49
50
|
|
|
50
51
|
export function createRegistry(storeConfigs = {}, parent = null) {
|
|
51
52
|
const stores = {};
|
|
52
|
-
|
|
53
|
+
const emitter = createEmitter();
|
|
53
54
|
|
|
54
55
|
const __experimentalListeningStores = new Set();
|
|
55
56
|
/**
|
|
@@ -58,7 +59,7 @@ export function createRegistry(storeConfigs = {}, parent = null) {
|
|
|
58
59
|
|
|
59
60
|
|
|
60
61
|
function globalListener() {
|
|
61
|
-
|
|
62
|
+
emitter.emit();
|
|
62
63
|
}
|
|
63
64
|
/**
|
|
64
65
|
* Subscribe to changes to any data.
|
|
@@ -70,10 +71,7 @@ export function createRegistry(storeConfigs = {}, parent = null) {
|
|
|
70
71
|
|
|
71
72
|
|
|
72
73
|
const subscribe = listener => {
|
|
73
|
-
|
|
74
|
-
return () => {
|
|
75
|
-
listeners = without(listeners, listener);
|
|
76
|
-
};
|
|
74
|
+
return emitter.subscribe(listener);
|
|
77
75
|
};
|
|
78
76
|
/**
|
|
79
77
|
* Calls a selector given the current state and extra arguments.
|
|
@@ -187,7 +185,32 @@ export function createRegistry(storeConfigs = {}, parent = null) {
|
|
|
187
185
|
|
|
188
186
|
if (typeof config.subscribe !== 'function') {
|
|
189
187
|
throw new TypeError('config.subscribe must be a function');
|
|
190
|
-
}
|
|
188
|
+
} // Thi emitter is used to keep track of active listeners when the registry
|
|
189
|
+
// get paused, that way, when resumed we should be able to call all these
|
|
190
|
+
// pending listeners.
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
config.emitter = createEmitter();
|
|
194
|
+
const currentSubscribe = config.subscribe;
|
|
195
|
+
|
|
196
|
+
config.subscribe = listener => {
|
|
197
|
+
const unsubscribeFromStoreEmitter = config.emitter.subscribe(listener);
|
|
198
|
+
const unsubscribeFromRootStore = currentSubscribe(() => {
|
|
199
|
+
if (config.emitter.isPaused) {
|
|
200
|
+
config.emitter.emit();
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
listener();
|
|
205
|
+
});
|
|
206
|
+
return () => {
|
|
207
|
+
if (unsubscribeFromRootStore) {
|
|
208
|
+
unsubscribeFromRootStore();
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
unsubscribeFromStoreEmitter();
|
|
212
|
+
};
|
|
213
|
+
};
|
|
191
214
|
|
|
192
215
|
stores[key] = config;
|
|
193
216
|
config.subscribe(globalListener);
|
|
@@ -227,7 +250,16 @@ export function createRegistry(storeConfigs = {}, parent = null) {
|
|
|
227
250
|
return parent.__experimentalSubscribeStore(storeName, handler);
|
|
228
251
|
}
|
|
229
252
|
|
|
253
|
+
function batch(callback) {
|
|
254
|
+
emitter.pause();
|
|
255
|
+
forEach(stores, store => store.emitter.pause());
|
|
256
|
+
callback();
|
|
257
|
+
emitter.resume();
|
|
258
|
+
forEach(stores, store => store.emitter.resume());
|
|
259
|
+
}
|
|
260
|
+
|
|
230
261
|
let registry = {
|
|
262
|
+
batch,
|
|
231
263
|
registerGenericStore,
|
|
232
264
|
stores,
|
|
233
265
|
namespaces: stores,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/data/src/registry.js"],"names":["without","mapValues","isObject","createReduxStore","createCoreDataStore","STORE_NAME","createRegistry","storeConfigs","parent","stores","listeners","__experimentalListeningStores","Set","globalListener","forEach","listener","subscribe","push","select","storeNameOrDefinition","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","registerGenericStore","config","TypeError","register","instantiate","__experimentalSubscribeStore","handler","namespaces","use","registerStore","options","reducer","plugin","Object","entries"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { without, mapValues, isObject } from 'lodash';\n\n/**\n * Internal dependencies\n */\nimport createReduxStore from './redux-store';\nimport createCoreDataStore from './store';\nimport { STORE_NAME } from './store/name';\n\n/** @typedef {import('./types').WPDataStore} WPDataStore */\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\tlet listeners = [];\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\tlisteners.forEach( ( listener ) => listener() );\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\tlisteners.push( listener );\n\n\t\treturn () => {\n\t\t\tlisteners = without( listeners, listener );\n\t\t};\n\t};\n\n\t/**\n\t * Calls a selector given the current state and extra arguments.\n\t *\n\t * @param {string|WPDataStore} storeNameOrDefinition Unique namespace identifier for the store\n\t * or the store definition.\n\t *\n\t * @return {*} The selector's returned value.\n\t */\n\tfunction select( storeNameOrDefinition ) {\n\t\tconst storeName = isObject( storeNameOrDefinition )\n\t\t\t? storeNameOrDefinition.name\n\t\t\t: storeNameOrDefinition;\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|WPDataStore} storeNameOrDefinition Unique namespace identifier for the store\n\t * or the store definition.\n\t *\n\t * @return {Object} Each key of the object matches the name of a selector.\n\t */\n\tfunction resolveSelect( storeNameOrDefinition ) {\n\t\tconst storeName = isObject( storeNameOrDefinition )\n\t\t\t? storeNameOrDefinition.name\n\t\t\t: storeNameOrDefinition;\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|WPDataStore} storeNameOrDefinition Unique namespace identifier for the store\n\t * or the store definition.\n\t *\n\t * @return {*} The action's returned value.\n\t */\n\tfunction dispatch( storeNameOrDefinition ) {\n\t\tconst storeName = isObject( storeNameOrDefinition )\n\t\t\t? storeNameOrDefinition.name\n\t\t\t: storeNameOrDefinition;\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\t//\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 generic store.\n\t *\n\t * @param {string} key Store registry key.\n\t * @param {Object} config Configuration (getSelectors, getActions, subscribe).\n\t */\n\tfunction registerGenericStore( key, config ) {\n\t\tif ( typeof config.getSelectors !== 'function' ) {\n\t\t\tthrow new TypeError( 'config.getSelectors must be a function' );\n\t\t}\n\t\tif ( typeof config.getActions !== 'function' ) {\n\t\t\tthrow new TypeError( 'config.getActions must be a function' );\n\t\t}\n\t\tif ( typeof config.subscribe !== 'function' ) {\n\t\t\tthrow new TypeError( 'config.subscribe must be a function' );\n\t\t}\n\t\tstores[ key ] = config;\n\t\tconfig.subscribe( globalListener );\n\t}\n\n\t/**\n\t * Registers a new store definition.\n\t *\n\t * @param {WPDataStore} store Store definition.\n\t */\n\tfunction register( store ) {\n\t\tregisterGenericStore( store.name, store.instantiate( registry ) );\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\tlet registry = {\n\t\tregisterGenericStore,\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\t__experimentalMarkListeningStores,\n\t\t__experimentalSubscribeStore,\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\tregistry.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\tregisterGenericStore( storeName, store );\n\t\treturn store.store;\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\t//\n\tfunction use( plugin, options ) {\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\tregisterGenericStore( STORE_NAME, createCoreDataStore( registry ) );\n\n\tObject.entries( storeConfigs ).forEach( ( [ name, config ] ) =>\n\t\tregistry.registerStore( 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","createReduxStore","createCoreDataStore","STORE_NAME","createEmitter","createRegistry","storeConfigs","parent","stores","emitter","__experimentalListeningStores","Set","globalListener","emit","subscribe","listener","select","storeNameOrDefinition","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","registerGenericStore","config","TypeError","currentSubscribe","unsubscribeFromStoreEmitter","unsubscribeFromRootStore","isPaused","register","instantiate","__experimentalSubscribeStore","handler","batch","pause","resume","namespaces","use","registerStore","options","reducer","plugin","Object","entries"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { mapValues, isObject, forEach } from 'lodash';\n\n/**\n * Internal dependencies\n */\nimport createReduxStore from './redux-store';\nimport createCoreDataStore from './store';\nimport { STORE_NAME } from './store/name';\nimport { createEmitter } from './utils/emitter';\n\n/** @typedef {import('./types').WPDataStore} WPDataStore */\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|WPDataStore} storeNameOrDefinition Unique namespace identifier for the store\n\t * or the store definition.\n\t *\n\t * @return {*} The selector's returned value.\n\t */\n\tfunction select( storeNameOrDefinition ) {\n\t\tconst storeName = isObject( storeNameOrDefinition )\n\t\t\t? storeNameOrDefinition.name\n\t\t\t: storeNameOrDefinition;\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|WPDataStore} storeNameOrDefinition Unique namespace identifier for the store\n\t * or the store definition.\n\t *\n\t * @return {Object} Each key of the object matches the name of a selector.\n\t */\n\tfunction resolveSelect( storeNameOrDefinition ) {\n\t\tconst storeName = isObject( storeNameOrDefinition )\n\t\t\t? storeNameOrDefinition.name\n\t\t\t: storeNameOrDefinition;\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|WPDataStore} storeNameOrDefinition Unique namespace identifier for the store\n\t * or the store definition.\n\t *\n\t * @return {*} The action's returned value.\n\t */\n\tfunction dispatch( storeNameOrDefinition ) {\n\t\tconst storeName = isObject( storeNameOrDefinition )\n\t\t\t? storeNameOrDefinition.name\n\t\t\t: storeNameOrDefinition;\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\t//\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 generic store.\n\t *\n\t * @param {string} key Store registry key.\n\t * @param {Object} config Configuration (getSelectors, getActions, subscribe).\n\t */\n\tfunction registerGenericStore( key, config ) {\n\t\tif ( typeof config.getSelectors !== 'function' ) {\n\t\t\tthrow new TypeError( 'config.getSelectors must be a function' );\n\t\t}\n\t\tif ( typeof config.getActions !== 'function' ) {\n\t\t\tthrow new TypeError( 'config.getActions must be a function' );\n\t\t}\n\t\tif ( typeof config.subscribe !== 'function' ) {\n\t\t\tthrow new TypeError( 'config.subscribe must be a function' );\n\t\t}\n\t\t// Thi 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\tconfig.emitter = createEmitter();\n\t\tconst currentSubscribe = config.subscribe;\n\t\tconfig.subscribe = ( listener ) => {\n\t\t\tconst unsubscribeFromStoreEmitter = config.emitter.subscribe(\n\t\t\t\tlistener\n\t\t\t);\n\t\t\tconst unsubscribeFromRootStore = currentSubscribe( () => {\n\t\t\t\tif ( config.emitter.isPaused ) {\n\t\t\t\t\tconfig.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\tif ( unsubscribeFromRootStore ) {\n\t\t\t\t\tunsubscribeFromRootStore();\n\t\t\t\t}\n\t\t\t\tunsubscribeFromStoreEmitter();\n\t\t\t};\n\t\t};\n\t\tstores[ key ] = config;\n\t\tconfig.subscribe( globalListener );\n\t}\n\n\t/**\n\t * Registers a new store definition.\n\t *\n\t * @param {WPDataStore} store Store definition.\n\t */\n\tfunction register( store ) {\n\t\tregisterGenericStore( store.name, store.instantiate( registry ) );\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\tregisterGenericStore,\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\t__experimentalMarkListeningStores,\n\t\t__experimentalSubscribeStore,\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\tregistry.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\tregisterGenericStore( storeName, store );\n\t\treturn store.store;\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\t//\n\tfunction use( plugin, options ) {\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\tregisterGenericStore( STORE_NAME, createCoreDataStore( registry ) );\n\n\tObject.entries( storeConfigs ).forEach( ( [ name, config ] ) =>\n\t\tregistry.registerStore( name, config )\n\t);\n\n\tif ( parent ) {\n\t\tparent.subscribe( globalListener );\n\t}\n\n\treturn withPlugins( registry );\n}\n"]}
|
|
File without changes
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create an event emitter.
|
|
3
|
+
*
|
|
4
|
+
* @return {import("../types").WPDataEmitter} Emitter.
|
|
5
|
+
*/
|
|
6
|
+
export function createEmitter() {
|
|
7
|
+
let isPaused = false;
|
|
8
|
+
let isPending = false;
|
|
9
|
+
const listeners = new Set();
|
|
10
|
+
|
|
11
|
+
const notifyListeners = () => // We use Array.from to clone the listeners Set
|
|
12
|
+
// This ensures that we don't run a listener
|
|
13
|
+
// that was added as a response to another listener.
|
|
14
|
+
Array.from(listeners).forEach(listener => listener());
|
|
15
|
+
|
|
16
|
+
return {
|
|
17
|
+
get isPaused() {
|
|
18
|
+
return isPaused;
|
|
19
|
+
},
|
|
20
|
+
|
|
21
|
+
subscribe(listener) {
|
|
22
|
+
listeners.add(listener);
|
|
23
|
+
return () => listeners.delete(listener);
|
|
24
|
+
},
|
|
25
|
+
|
|
26
|
+
pause() {
|
|
27
|
+
isPaused = true;
|
|
28
|
+
},
|
|
29
|
+
|
|
30
|
+
resume() {
|
|
31
|
+
isPaused = false;
|
|
32
|
+
|
|
33
|
+
if (isPending) {
|
|
34
|
+
isPending = false;
|
|
35
|
+
notifyListeners();
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
|
|
39
|
+
emit() {
|
|
40
|
+
if (isPaused) {
|
|
41
|
+
isPending = true;
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
notifyListeners();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=emitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["@wordpress/data/src/utils/emitter.js"],"names":["createEmitter","isPaused","isPending","listeners","Set","notifyListeners","Array","from","forEach","listener","subscribe","add","delete","pause","resume","emit"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,aAAT,GAAyB;AAC/B,MAAIC,QAAQ,GAAG,KAAf;AACA,MAAIC,SAAS,GAAG,KAAhB;AACA,QAAMC,SAAS,GAAG,IAAIC,GAAJ,EAAlB;;AACA,QAAMC,eAAe,GAAG,MACvB;AACA;AACA;AACAC,EAAAA,KAAK,CAACC,IAAN,CAAYJ,SAAZ,EAAwBK,OAAxB,CAAmCC,QAAF,IAAgBA,QAAQ,EAAzD,CAJD;;AAMA,SAAO;AACN,QAAIR,QAAJ,GAAe;AACd,aAAOA,QAAP;AACA,KAHK;;AAKNS,IAAAA,SAAS,CAAED,QAAF,EAAa;AACrBN,MAAAA,SAAS,CAACQ,GAAV,CAAeF,QAAf;AACA,aAAO,MAAMN,SAAS,CAACS,MAAV,CAAkBH,QAAlB,CAAb;AACA,KARK;;AAUNI,IAAAA,KAAK,GAAG;AACPZ,MAAAA,QAAQ,GAAG,IAAX;AACA,KAZK;;AAcNa,IAAAA,MAAM,GAAG;AACRb,MAAAA,QAAQ,GAAG,KAAX;;AACA,UAAKC,SAAL,EAAiB;AAChBA,QAAAA,SAAS,GAAG,KAAZ;AACAG,QAAAA,eAAe;AACf;AACD,KApBK;;AAsBNU,IAAAA,IAAI,GAAG;AACN,UAAKd,QAAL,EAAgB;AACfC,QAAAA,SAAS,GAAG,IAAZ;AACA;AACA;;AACDG,MAAAA,eAAe;AACf;;AA5BK,GAAP;AA8BA","sourcesContent":["/**\n * Create an event emitter.\n *\n * @return {import(\"../types\").WPDataEmitter} Emitter.\n */\nexport function createEmitter() {\n\tlet isPaused = false;\n\tlet isPending = false;\n\tconst listeners = new Set();\n\tconst notifyListeners = () =>\n\t\t// We use Array.from to clone the listeners Set\n\t\t// This ensures that we don't run a listener\n\t\t// that was added as a response to another listener.\n\t\tArray.from( listeners ).forEach( ( listener ) => listener() );\n\n\treturn {\n\t\tget isPaused() {\n\t\t\treturn isPaused;\n\t\t},\n\n\t\tsubscribe( listener ) {\n\t\t\tlisteners.add( listener );\n\t\t\treturn () => listeners.delete( listener );\n\t\t},\n\n\t\tpause() {\n\t\t\tisPaused = true;\n\t\t},\n\n\t\tresume() {\n\t\t\tisPaused = false;\n\t\t\tif ( isPending ) {\n\t\t\t\tisPending = false;\n\t\t\t\tnotifyListeners();\n\t\t\t}\n\t\t},\n\n\t\temit() {\n\t\t\tif ( isPaused ) {\n\t\t\t\tisPending = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tnotifyListeners();\n\t\t},\n\t};\n}\n"]}
|
|
@@ -53,7 +53,5 @@ export function isResolving(state: State, selectorName: string, args?: unknown[]
|
|
|
53
53
|
* @return {State} Resolvers mapped by args and selectorName.
|
|
54
54
|
*/
|
|
55
55
|
export function getCachedResolvers(state: State): State;
|
|
56
|
-
export type State =
|
|
57
|
-
[x: string]: import("./reducer").State;
|
|
58
|
-
};
|
|
56
|
+
export type State = Record<string, import('./reducer').State>;
|
|
59
57
|
//# sourceMappingURL=selectors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectors.d.ts","sourceRoot":"","sources":["../../../src/redux-store/metadata/selectors.js"],"names":[],"mappings":"AAKA,iEAAiE;AAEjE;;;;;;;;;;;GAWG;AACH,sCANW,KAAK,gBACL,MAAM,QACN,OAAO,EAAE,GAER,OAAO,GAAG,SAAS,CAS9B;AAED;;;;;;;;;GASG;AACH,4CANW,KAAK,gBACL,MAAM,iCAGL,OAAO,CAIlB;AAED;;;;;;;;;GASG;AACH,6CANW,KAAK,gBACL,MAAM,iCAGL,OAAO,CAIlB;AAED;;;;;;;;;GASG;AACH,mCANW,KAAK,gBACL,MAAM,iCAGL,OAAO,CAIlB;AAED;;;;;;GAMG;AACH,0CAJW,KAAK,GAEJ,KAAK,CAIhB"}
|
|
1
|
+
{"version":3,"file":"selectors.d.ts","sourceRoot":"","sources":["../../../src/redux-store/metadata/selectors.js"],"names":[],"mappings":"AAKA,iEAAiE;AAEjE;;;;;;;;;;;GAWG;AACH,sCANW,KAAK,gBACL,MAAM,QACN,OAAO,EAAE,GAER,OAAO,GAAG,SAAS,CAS9B;AAED;;;;;;;;;GASG;AACH,4CANW,KAAK,gBACL,MAAM,iCAGL,OAAO,CAIlB;AAED;;;;;;;;;GASG;AACH,6CANW,KAAK,gBACL,MAAM,iCAGL,OAAO,CAIlB;AAED;;;;;;;;;GASG;AACH,mCANW,KAAK,gBACL,MAAM,iCAGL,OAAO,CAIlB;AAED;;;;;;GAMG;AACH,0CAJW,KAAK,GAEJ,KAAK,CAIhB;oBA1Ea,OAAO,MAAM,EAAE,OAAO,WAAW,EAAE,KAAK,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export declare type WPDataFunctionOrGeneratorArray = Array<Function | Generator>;
|
|
2
|
+
export declare type WPDataFunctionArray = Array<Function>;
|
|
3
|
+
export interface WPDataAttachedStore {
|
|
4
|
+
getSelectors: () => WPDataFunctionArray;
|
|
5
|
+
getActions: () => WPDataFunctionArray;
|
|
6
|
+
subscribe: (listener: () => void) => () => void;
|
|
7
|
+
}
|
|
8
|
+
export interface WPDataStore {
|
|
9
|
+
/**
|
|
10
|
+
* Store Name
|
|
11
|
+
*/
|
|
12
|
+
name: string;
|
|
13
|
+
/**
|
|
14
|
+
* Store configuration object.
|
|
15
|
+
*/
|
|
16
|
+
instantiate: (registry: WPDataRegistry) => WPDataAttachedStore;
|
|
17
|
+
}
|
|
18
|
+
export interface WPDataReduxStoreConfig {
|
|
19
|
+
reducer: (state: any, action: any) => any;
|
|
20
|
+
actions?: WPDataFunctionOrGeneratorArray;
|
|
21
|
+
resolvers?: WPDataFunctionOrGeneratorArray;
|
|
22
|
+
selectors?: WPDataFunctionArray;
|
|
23
|
+
controls?: WPDataFunctionArray;
|
|
24
|
+
}
|
|
25
|
+
export interface WPDataRegistry {
|
|
26
|
+
register: (store: WPDataStore) => void;
|
|
27
|
+
}
|
|
28
|
+
export interface WPDataEmitter {
|
|
29
|
+
emit: () => void;
|
|
30
|
+
subscribe: (listener: () => void) => () => void;
|
|
31
|
+
pause: () => void;
|
|
32
|
+
resume: () => void;
|
|
33
|
+
isPaused: boolean;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,oBAAY,8BAA8B,GAAG,KAAK,CAAE,QAAQ,GAAG,SAAS,CAAE,CAAC;AAC3E,oBAAY,mBAAmB,GAAG,KAAK,CAAE,QAAQ,CAAE,CAAC;AAEpD,MAAM,WAAW,mBAAmB;IACnC,YAAY,EAAE,MAAM,mBAAmB,CAAC;IACxC,UAAU,EAAE,MAAM,mBAAmB,CAAC;IACtC,SAAS,EAAE,CAAE,QAAQ,EAAE,MAAM,IAAI,KAAM,MAAM,IAAI,CAAC;CAClD;AAED,MAAM,WAAW,WAAW;IAC3B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,WAAW,EAAE,CAAE,QAAQ,EAAE,cAAc,KAAM,mBAAmB,CAAC;CACjE;AAED,MAAM,WAAW,sBAAsB;IACtC,OAAO,EAAE,CAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAM,GAAG,CAAC;IAC5C,OAAO,CAAC,EAAE,8BAA8B,CAAC;IACzC,SAAS,CAAC,EAAE,8BAA8B,CAAC;IAC3C,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,QAAQ,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC9B,QAAQ,EAAE,CAAE,KAAK,EAAE,WAAW,KAAM,IAAI,CAAC;CACzC;AAED,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,SAAS,EAAE,CAAE,QAAQ,EAAE,MAAM,IAAI,KAAM,MAAM,IAAI,CAAC;IAClD,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../src/utils/emitter.js"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,iCAFY,OAAO,UAAU,EAAE,aAAa,CA0C3C"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wordpress/data",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.1.3",
|
|
4
4
|
"description": "Data module for WordPress.",
|
|
5
5
|
"author": "The WordPress Contributors",
|
|
6
6
|
"license": "GPL-2.0-or-later",
|
|
@@ -28,11 +28,11 @@
|
|
|
28
28
|
"sideEffects": false,
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@babel/runtime": "^7.13.10",
|
|
31
|
-
"@wordpress/compose": "^5.0.
|
|
32
|
-
"@wordpress/deprecated": "^3.2.
|
|
33
|
-
"@wordpress/element": "^4.0.
|
|
31
|
+
"@wordpress/compose": "^5.0.5",
|
|
32
|
+
"@wordpress/deprecated": "^3.2.2",
|
|
33
|
+
"@wordpress/element": "^4.0.3",
|
|
34
34
|
"@wordpress/is-shallow-equal": "^4.2.0",
|
|
35
|
-
"@wordpress/priority-queue": "^2.2.
|
|
35
|
+
"@wordpress/priority-queue": "^2.2.2",
|
|
36
36
|
"@wordpress/redux-routine": "^4.2.1",
|
|
37
37
|
"equivalent-key-map": "^0.2.2",
|
|
38
38
|
"is-promise": "^4.0.0",
|
|
@@ -47,5 +47,5 @@
|
|
|
47
47
|
"publishConfig": {
|
|
48
48
|
"access": "public"
|
|
49
49
|
},
|
|
50
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "393c2b5533837fd637e998d23f0124c081a10df0"
|
|
51
51
|
}
|
|
@@ -33,7 +33,7 @@ import { Context } from './context';
|
|
|
33
33
|
* const registry = createRegistry( {} );
|
|
34
34
|
*
|
|
35
35
|
* const SomeChildUsingRegistry = ( props ) => {
|
|
36
|
-
* const registry = useRegistry(
|
|
36
|
+
* const registry = useRegistry();
|
|
37
37
|
* // ...logic implementing the registry in other react hooks.
|
|
38
38
|
* };
|
|
39
39
|
*
|
package/src/controls.js
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { isObject } from 'lodash';
|
|
5
|
+
|
|
1
6
|
/**
|
|
2
7
|
* Internal dependencies
|
|
3
8
|
*/
|
|
4
9
|
import { createRegistryControl } from './factory';
|
|
5
10
|
|
|
11
|
+
/** @typedef {import('./types').WPDataStore} WPDataStore */
|
|
12
|
+
|
|
6
13
|
const SELECT = '@@data/SELECT';
|
|
7
14
|
const RESOLVE_SELECT = '@@data/RESOLVE_SELECT';
|
|
8
15
|
const DISPATCH = '@@data/DISPATCH';
|
|
@@ -13,9 +20,9 @@ const DISPATCH = '@@data/DISPATCH';
|
|
|
13
20
|
* Note: This control synchronously returns the current selector value, triggering the
|
|
14
21
|
* resolution, but not waiting for it.
|
|
15
22
|
*
|
|
16
|
-
* @param {string}
|
|
17
|
-
* @param {string}
|
|
18
|
-
* @param {Array}
|
|
23
|
+
* @param {string|WPDataStore} storeNameOrDefinition Unique namespace identifier for the store
|
|
24
|
+
* @param {string} selectorName The name of the selector.
|
|
25
|
+
* @param {Array} args Arguments for the selector.
|
|
19
26
|
*
|
|
20
27
|
* @example
|
|
21
28
|
* ```js
|
|
@@ -30,8 +37,15 @@ const DISPATCH = '@@data/DISPATCH';
|
|
|
30
37
|
*
|
|
31
38
|
* @return {Object} The control descriptor.
|
|
32
39
|
*/
|
|
33
|
-
function select(
|
|
34
|
-
return {
|
|
40
|
+
function select( storeNameOrDefinition, selectorName, ...args ) {
|
|
41
|
+
return {
|
|
42
|
+
type: SELECT,
|
|
43
|
+
storeKey: isObject( storeNameOrDefinition )
|
|
44
|
+
? storeNameOrDefinition.name
|
|
45
|
+
: storeNameOrDefinition,
|
|
46
|
+
selectorName,
|
|
47
|
+
args,
|
|
48
|
+
};
|
|
35
49
|
}
|
|
36
50
|
|
|
37
51
|
/**
|
|
@@ -41,9 +55,9 @@ function select( storeKey, selectorName, ...args ) {
|
|
|
41
55
|
* selectors that may have a resolver. In such case, it will return a `Promise` that resolves
|
|
42
56
|
* after the selector finishes resolving, with the final result value.
|
|
43
57
|
*
|
|
44
|
-
* @param {string}
|
|
45
|
-
* @param {string}
|
|
46
|
-
* @param {Array}
|
|
58
|
+
* @param {string|WPDataStore} storeNameOrDefinition Unique namespace identifier for the store
|
|
59
|
+
* @param {string} selectorName The name of the selector
|
|
60
|
+
* @param {Array} args Arguments for the selector.
|
|
47
61
|
*
|
|
48
62
|
* @example
|
|
49
63
|
* ```js
|
|
@@ -58,16 +72,23 @@ function select( storeKey, selectorName, ...args ) {
|
|
|
58
72
|
*
|
|
59
73
|
* @return {Object} The control descriptor.
|
|
60
74
|
*/
|
|
61
|
-
function resolveSelect(
|
|
62
|
-
return {
|
|
75
|
+
function resolveSelect( storeNameOrDefinition, selectorName, ...args ) {
|
|
76
|
+
return {
|
|
77
|
+
type: RESOLVE_SELECT,
|
|
78
|
+
storeKey: isObject( storeNameOrDefinition )
|
|
79
|
+
? storeNameOrDefinition.name
|
|
80
|
+
: storeNameOrDefinition,
|
|
81
|
+
selectorName,
|
|
82
|
+
args,
|
|
83
|
+
};
|
|
63
84
|
}
|
|
64
85
|
|
|
65
86
|
/**
|
|
66
87
|
* Dispatches a control action for triggering a registry dispatch.
|
|
67
88
|
*
|
|
68
|
-
* @param {string}
|
|
69
|
-
* @param {string}
|
|
70
|
-
* @param {Array}
|
|
89
|
+
* @param {string|WPDataStore} storeNameOrDefinition Unique namespace identifier for the store
|
|
90
|
+
* @param {string} actionName The name of the action to dispatch
|
|
91
|
+
* @param {Array} args Arguments for the dispatch action.
|
|
71
92
|
*
|
|
72
93
|
* @example
|
|
73
94
|
* ```js
|
|
@@ -82,8 +103,15 @@ function resolveSelect( storeKey, selectorName, ...args ) {
|
|
|
82
103
|
*
|
|
83
104
|
* @return {Object} The control descriptor.
|
|
84
105
|
*/
|
|
85
|
-
function dispatch(
|
|
86
|
-
return {
|
|
106
|
+
function dispatch( storeNameOrDefinition, actionName, ...args ) {
|
|
107
|
+
return {
|
|
108
|
+
type: DISPATCH,
|
|
109
|
+
storeKey: isObject( storeNameOrDefinition )
|
|
110
|
+
? storeNameOrDefinition.name
|
|
111
|
+
: storeNameOrDefinition,
|
|
112
|
+
actionName,
|
|
113
|
+
args,
|
|
114
|
+
};
|
|
87
115
|
}
|
|
88
116
|
|
|
89
117
|
export const controls = { select, resolveSelect, dispatch };
|