@wordpress/data 9.13.0 → 9.14.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 +8 -0
- package/README.md +80 -0
- package/build/index.js +4 -7
- package/build/index.js.map +1 -1
- package/build/lock-unlock.js +1 -1
- package/build/lock-unlock.js.map +1 -1
- package/build/redux-store/index.js +32 -2
- package/build/redux-store/index.js.map +1 -1
- package/build-module/index.js +2 -1
- package/build-module/index.js.map +1 -1
- package/build-module/lock-unlock.js +1 -1
- package/build-module/lock-unlock.js.map +1 -1
- package/build-module/redux-store/index.js +32 -2
- package/build-module/redux-store/index.js.map +1 -1
- package/build-types/index.d.ts +41 -1
- package/build-types/index.d.ts.map +1 -1
- package/build-types/redux-store/index.d.ts.map +1 -1
- package/package.json +9 -9
- package/src/index.js +2 -1
- package/src/lock-unlock.js +1 -1
- package/src/redux-store/index.js +44 -2
- package/src/redux-store/metadata/test/selectors.js +38 -2
- package/src/redux-store/test/index.js +72 -0
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createStore","applyMiddleware","EquivalentKeyMap","createReduxRoutineMiddleware","compose","combineReducers","builtinControls","lock","promise","createResolversCacheMiddleware","createThunkMiddleware","metadataReducer","metadataSelectors","metadataActions","trimUndefinedValues","array","result","i","length","undefined","splice","mapValues","obj","callback","Object","fromEntries","entries","map","key","value","mapToObject","state","Map","createResolversCache","cache","isRunning","selectorName","args","get","clear","delete","markAsRunning","set","createBindingCache","bind","WeakMap","item","itemName","boundItem","createReduxStore","options","privateActions","privateSelectors","privateRegistrationFunctions","registerPrivateActions","actions","assign","registerPrivateSelectors","selectors","storeDescriptor","name","instantiate","registry","listeners","Set","reducer","thunkArgs","dispatch","thunkActions","select","thunkSelectors","resolveSelect","getResolveSelectors","store","instantiateReduxStore","resolversCache","bindAction","action","Promise","resolve","boundPrivateActions","allActions","Proxy","target","prop","privateAction","apply","thisArg","resolvers","mapResolvers","bindSelector","selector","isRegistrySelector","boundSelector","__unstableOriginalGetState","root","resolver","hasResolver","mapSelectorWithResolver","bindMetadataSelector","metadata","boundPrivateSelectors","allSelectors","privateSelector","resolveSelectors","mapResolveSelectors","suspendSelectors","mapSuspendSelectors","getSelectors","getActions","getSuspendSelectors","getState","subscribe","listener","add","lastState","hasChanged","controls","normalizedControls","control","isRegistryControl","middlewares","enhancers","window","__REDUX_DEVTOOLS_EXTENSION__","push","instanceId","serialize","replacer","initialState","enhancedReducer","getIsResolving","hasStartedResolution","hasFinishedResolution","hasResolutionFailed","isResolving","getCachedResolvers","getResolutionState","getResolutionError","hasResolvingSelectors","countSelectorsByStatus","storeSelectors","reject","hasFinished","finalize","hasFailed","error","getResult","unsubscribe","fulfill","fulfillSelector","isFulfilled","setTimeout","startResolution","finishResolution","failResolution","selectorResolver"],"sources":["@wordpress/data/src/redux-store/index.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport { createStore, applyMiddleware } from 'redux';\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 { combineReducers } from './combine-reducers';\nimport { builtinControls } from '../controls';\nimport { lock } from '../lock-unlock';\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\nexport { combineReducers };\n\n/** @typedef {import('../types').DataRegistry} DataRegistry */\n/** @typedef {import('../types').ListenerFunction} ListenerFunction */\n/**\n * @typedef {import('../types').StoreDescriptor<C>} StoreDescriptor\n * @template {import('../types').AnyConfig} C\n */\n/**\n * @typedef {import('../types').ReduxStoreConfig<State,Actions,Selectors>} ReduxStoreConfig\n * @template State\n * @template {Record<string,import('../types').ActionCreator>} Actions\n * @template 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/**\n * Creates a new object with the same keys, but with `callback()` called as\n * a transformer function on each of the values.\n *\n * @param {Object} obj The object to transform.\n * @param {Function} callback The function to transform each object value.\n * @return {Array} Transformed object.\n */\nconst mapValues = ( obj, callback ) =>\n\tObject.fromEntries(\n\t\tObject.entries( obj ?? {} ).map( ( [ key, value ] ) => [\n\t\t\tkey,\n\t\t\tcallback( value, key ),\n\t\t] )\n\t);\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\nfunction createBindingCache( bind ) {\n\tconst cache = new WeakMap();\n\n\treturn {\n\t\tget( item, itemName ) {\n\t\t\tlet boundItem = cache.get( item );\n\t\t\tif ( ! boundItem ) {\n\t\t\t\tboundItem = bind( item, itemName );\n\t\t\t\tcache.set( item, boundItem );\n\t\t\t}\n\t\t\treturn boundItem;\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\n * @template {Record<string,import('../types').ActionCreator>} Actions\n * @template 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\t/**\n\t\t\t * Stores listener functions registered with `subscribe()`.\n\t\t\t *\n\t\t\t * When functions register to listen to store changes with\n\t\t\t * `subscribe()` they get added here. Although Redux offers\n\t\t\t * its own `subscribe()` function directly, by wrapping the\n\t\t\t * subscription in this store instance it's possible to\n\t\t\t * optimize checking if the state has changed before calling\n\t\t\t * each listener.\n\t\t\t *\n\t\t\t * @type {Set<ListenerFunction>}\n\t\t\t */\n\t\t\tconst listeners = new Set();\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 thunkActions;\n\t\t\t\t},\n\t\t\t\tget select() {\n\t\t\t\t\treturn thunkSelectors;\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\tfunction bindAction( action ) {\n\t\t\t\treturn ( ...args ) =>\n\t\t\t\t\tPromise.resolve( store.dispatch( action( ...args ) ) );\n\t\t\t}\n\n\t\t\tconst actions = {\n\t\t\t\t...mapValues( metadataActions, bindAction ),\n\t\t\t\t...mapValues( options.actions, bindAction ),\n\t\t\t};\n\n\t\t\tconst boundPrivateActions = createBindingCache( bindAction );\n\t\t\tconst allActions = new Proxy( () => {}, {\n\t\t\t\tget: ( target, prop ) => {\n\t\t\t\t\tconst privateAction = privateActions[ prop ];\n\t\t\t\t\treturn privateAction\n\t\t\t\t\t\t? boundPrivateActions.get( privateAction, prop )\n\t\t\t\t\t\t: actions[ prop ];\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\tconst thunkActions = new Proxy( allActions, {\n\t\t\t\tapply: ( target, thisArg, [ action ] ) =>\n\t\t\t\t\tstore.dispatch( action ),\n\t\t\t} );\n\n\t\t\tlock( actions, allActions );\n\n\t\t\tconst resolvers = options.resolvers\n\t\t\t\t? mapResolvers( options.resolvers )\n\t\t\t\t: {};\n\n\t\t\tfunction bindSelector( selector, selectorName ) {\n\t\t\t\tif ( selector.isRegistrySelector ) {\n\t\t\t\t\tselector.registry = registry;\n\t\t\t\t}\n\t\t\t\tconst boundSelector = ( ...args ) => {\n\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\t\treturn selector( state.root, ...args );\n\t\t\t\t};\n\n\t\t\t\tconst resolver = resolvers[ selectorName ];\n\t\t\t\tif ( ! resolver ) {\n\t\t\t\t\tboundSelector.hasResolver = false;\n\t\t\t\t\treturn boundSelector;\n\t\t\t\t}\n\n\t\t\t\treturn mapSelectorWithResolver(\n\t\t\t\t\tboundSelector,\n\t\t\t\t\tselectorName,\n\t\t\t\t\tresolver,\n\t\t\t\t\tstore,\n\t\t\t\t\tresolversCache\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tfunction bindMetadataSelector( selector ) {\n\t\t\t\tconst boundSelector = ( ...args ) => {\n\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\t\treturn selector( state.metadata, ...args );\n\t\t\t\t};\n\t\t\t\tboundSelector.hasResolver = false;\n\t\t\t\treturn boundSelector;\n\t\t\t}\n\n\t\t\tconst selectors = {\n\t\t\t\t...mapValues( metadataSelectors, bindMetadataSelector ),\n\t\t\t\t...mapValues( options.selectors, bindSelector ),\n\t\t\t};\n\n\t\t\tconst boundPrivateSelectors = createBindingCache( bindSelector );\n\n\t\t\t// Pre-bind the private selectors that have been registered by the time of\n\t\t\t// instantiation, so that registry selectors are bound to the registry.\n\t\t\tfor ( const [ selectorName, selector ] of Object.entries(\n\t\t\t\tprivateSelectors\n\t\t\t) ) {\n\t\t\t\tboundPrivateSelectors.get( selector, selectorName );\n\t\t\t}\n\n\t\t\tconst allSelectors = new Proxy( () => {}, {\n\t\t\t\tget: ( target, prop ) => {\n\t\t\t\t\tconst privateSelector = privateSelectors[ prop ];\n\t\t\t\t\treturn privateSelector\n\t\t\t\t\t\t? boundPrivateSelectors.get( privateSelector, prop )\n\t\t\t\t\t\t: selectors[ prop ];\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\tconst thunkSelectors = new Proxy( allSelectors, {\n\t\t\t\tapply: ( target, thisArg, [ selector ] ) =>\n\t\t\t\t\tselector( store.__unstableOriginalGetState() ),\n\t\t\t} );\n\n\t\t\tlock( selectors, allSelectors );\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\tlisteners.add( listener );\n\n\t\t\t\t\treturn () => listeners.delete( listener );\n\t\t\t\t} );\n\n\t\t\tlet lastState = store.__unstableOriginalGetState();\n\t\t\tstore.subscribe( () => {\n\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\tconst hasChanged = state !== lastState;\n\t\t\t\tlastState = state;\n\n\t\t\t\tif ( hasChanged ) {\n\t\t\t\t\tfor ( const listener of listeners ) {\n\t\t\t\t\t\tlistener();\n\t\t\t\t\t}\n\t\t\t\t}\n\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 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\thasResolvingSelectors,\n\t\tcountSelectorsByStatus,\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 * Convert resolvers to a normalized form, an object with `fulfill` method and\n * optional methods like `isFulfilled`.\n *\n * @param {Object} resolvers Resolver to convert\n */\nfunction mapResolvers( resolvers ) {\n\treturn 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\n/**\n * Returns a selector with a matched resolver.\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} selector The selector function to be bound.\n * @param {string} selectorName The selector name.\n * @param {Object} resolver Resolver to call.\n * @param {Object} store The redux store to which the resolvers should be mapped.\n * @param {Object} resolversCache Resolvers Cache.\n */\nfunction mapSelectorWithResolver(\n\tselector,\n\tselectorName,\n\tresolver,\n\tstore,\n\tresolversCache\n) {\n\tfunction fulfillSelector( args ) {\n\t\tconst state = store.getState();\n\n\t\tif (\n\t\t\tresolversCache.isRunning( selectorName, args ) ||\n\t\t\t( typeof resolver.isFulfilled === 'function' &&\n\t\t\t\tresolver.isFulfilled( state, ...args ) )\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { metadata } = store.__unstableOriginalGetState();\n\n\t\tif (\n\t\t\tmetadataSelectors.hasStartedResolution(\n\t\t\t\tmetadata,\n\t\t\t\tselectorName,\n\t\t\t\targs\n\t\t\t)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tresolversCache.markAsRunning( selectorName, args );\n\n\t\tsetTimeout( async () => {\n\t\t\tresolversCache.clear( selectorName, args );\n\t\t\tstore.dispatch(\n\t\t\t\tmetadataActions.startResolution( selectorName, args )\n\t\t\t);\n\t\t\ttry {\n\t\t\t\tconst action = resolver.fulfill( ...args );\n\t\t\t\tif ( action ) {\n\t\t\t\t\tawait store.dispatch( action );\n\t\t\t\t}\n\t\t\t\tstore.dispatch(\n\t\t\t\t\tmetadataActions.finishResolution( selectorName, args )\n\t\t\t\t);\n\t\t\t} catch ( error ) {\n\t\t\t\tstore.dispatch(\n\t\t\t\t\tmetadataActions.failResolution( selectorName, args, error )\n\t\t\t\t);\n\t\t\t}\n\t\t}, 0 );\n\t}\n\n\tconst selectorResolver = ( ...args ) => {\n\t\tfulfillSelector( args );\n\t\treturn selector( ...args );\n\t};\n\tselectorResolver.hasResolver = true;\n\treturn selectorResolver;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["createStore","applyMiddleware","EquivalentKeyMap","createReduxRoutineMiddleware","compose","combineReducers","builtinControls","lock","promise","createResolversCacheMiddleware","createThunkMiddleware","metadataReducer","metadataSelectors","metadataActions","trimUndefinedValues","array","result","i","length","undefined","splice","mapValues","obj","callback","Object","fromEntries","entries","map","key","value","mapToObject","state","Map","createResolversCache","cache","isRunning","selectorName","args","get","clear","delete","markAsRunning","set","createBindingCache","bind","WeakMap","item","itemName","boundItem","createReduxStore","options","privateActions","privateSelectors","privateRegistrationFunctions","registerPrivateActions","actions","assign","registerPrivateSelectors","selectors","storeDescriptor","name","instantiate","registry","listeners","Set","reducer","thunkArgs","dispatch","thunkActions","select","thunkSelectors","resolveSelect","getResolveSelectors","store","instantiateReduxStore","resolversCache","bindAction","action","Promise","resolve","boundPrivateActions","allActions","Proxy","target","prop","privateAction","apply","thisArg","resolvers","mapResolvers","bindSelector","selector","isRegistrySelector","boundSelector","normalize","__unstableOriginalGetState","root","__unstableNormalizeArgs","resolver","hasResolver","mapSelectorWithResolver","bindMetadataSelector","metaDataSelector","originalSelectorName","originalSelectorArgs","targetSelector","metadata","boundPrivateSelectors","allSelectors","privateSelector","resolveSelectors","mapResolveSelectors","suspendSelectors","mapSuspendSelectors","getSelectors","getActions","getSuspendSelectors","getState","subscribe","listener","add","lastState","hasChanged","controls","normalizedControls","control","isRegistryControl","middlewares","enhancers","window","__REDUX_DEVTOOLS_EXTENSION__","push","instanceId","serialize","replacer","initialState","enhancedReducer","getIsResolving","hasStartedResolution","hasFinishedResolution","hasResolutionFailed","isResolving","getCachedResolvers","getResolutionState","getResolutionError","hasResolvingSelectors","countSelectorsByStatus","storeSelectors","reject","hasFinished","finalize","hasFailed","error","getResult","unsubscribe","fulfill","fulfillSelector","isFulfilled","setTimeout","startResolution","finishResolution","failResolution","selectorResolver"],"sources":["@wordpress/data/src/redux-store/index.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport { createStore, applyMiddleware } from 'redux';\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 { combineReducers } from './combine-reducers';\nimport { builtinControls } from '../controls';\nimport { lock } from '../lock-unlock';\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\nexport { combineReducers };\n\n/** @typedef {import('../types').DataRegistry} DataRegistry */\n/** @typedef {import('../types').ListenerFunction} ListenerFunction */\n/**\n * @typedef {import('../types').StoreDescriptor<C>} StoreDescriptor\n * @template {import('../types').AnyConfig} C\n */\n/**\n * @typedef {import('../types').ReduxStoreConfig<State,Actions,Selectors>} ReduxStoreConfig\n * @template State\n * @template {Record<string,import('../types').ActionCreator>} Actions\n * @template 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/**\n * Creates a new object with the same keys, but with `callback()` called as\n * a transformer function on each of the values.\n *\n * @param {Object} obj The object to transform.\n * @param {Function} callback The function to transform each object value.\n * @return {Array} Transformed object.\n */\nconst mapValues = ( obj, callback ) =>\n\tObject.fromEntries(\n\t\tObject.entries( obj ?? {} ).map( ( [ key, value ] ) => [\n\t\t\tkey,\n\t\t\tcallback( value, key ),\n\t\t] )\n\t);\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\nfunction createBindingCache( bind ) {\n\tconst cache = new WeakMap();\n\n\treturn {\n\t\tget( item, itemName ) {\n\t\t\tlet boundItem = cache.get( item );\n\t\t\tif ( ! boundItem ) {\n\t\t\t\tboundItem = bind( item, itemName );\n\t\t\t\tcache.set( item, boundItem );\n\t\t\t}\n\t\t\treturn boundItem;\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\n * @template {Record<string,import('../types').ActionCreator>} Actions\n * @template 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\t/**\n\t\t\t * Stores listener functions registered with `subscribe()`.\n\t\t\t *\n\t\t\t * When functions register to listen to store changes with\n\t\t\t * `subscribe()` they get added here. Although Redux offers\n\t\t\t * its own `subscribe()` function directly, by wrapping the\n\t\t\t * subscription in this store instance it's possible to\n\t\t\t * optimize checking if the state has changed before calling\n\t\t\t * each listener.\n\t\t\t *\n\t\t\t * @type {Set<ListenerFunction>}\n\t\t\t */\n\t\t\tconst listeners = new Set();\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 thunkActions;\n\t\t\t\t},\n\t\t\t\tget select() {\n\t\t\t\t\treturn thunkSelectors;\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\tfunction bindAction( action ) {\n\t\t\t\treturn ( ...args ) =>\n\t\t\t\t\tPromise.resolve( store.dispatch( action( ...args ) ) );\n\t\t\t}\n\n\t\t\tconst actions = {\n\t\t\t\t...mapValues( metadataActions, bindAction ),\n\t\t\t\t...mapValues( options.actions, bindAction ),\n\t\t\t};\n\n\t\t\tconst boundPrivateActions = createBindingCache( bindAction );\n\t\t\tconst allActions = new Proxy( () => {}, {\n\t\t\t\tget: ( target, prop ) => {\n\t\t\t\t\tconst privateAction = privateActions[ prop ];\n\t\t\t\t\treturn privateAction\n\t\t\t\t\t\t? boundPrivateActions.get( privateAction, prop )\n\t\t\t\t\t\t: actions[ prop ];\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\tconst thunkActions = new Proxy( allActions, {\n\t\t\t\tapply: ( target, thisArg, [ action ] ) =>\n\t\t\t\t\tstore.dispatch( action ),\n\t\t\t} );\n\n\t\t\tlock( actions, allActions );\n\n\t\t\tconst resolvers = options.resolvers\n\t\t\t\t? mapResolvers( options.resolvers )\n\t\t\t\t: {};\n\n\t\t\tfunction bindSelector( selector, selectorName ) {\n\t\t\t\tif ( selector.isRegistrySelector ) {\n\t\t\t\t\tselector.registry = registry;\n\t\t\t\t}\n\t\t\t\tconst boundSelector = ( ...args ) => {\n\t\t\t\t\targs = normalize( selector, args );\n\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\t\treturn selector( state.root, ...args );\n\t\t\t\t};\n\n\t\t\t\t// Expose normalization method on the bound selector\n\t\t\t\t// in order that it can be called when fullfilling\n\t\t\t\t// the resolver.\n\t\t\t\tboundSelector.__unstableNormalizeArgs =\n\t\t\t\t\tselector.__unstableNormalizeArgs;\n\n\t\t\t\tconst resolver = resolvers[ selectorName ];\n\n\t\t\t\tif ( ! resolver ) {\n\t\t\t\t\tboundSelector.hasResolver = false;\n\t\t\t\t\treturn boundSelector;\n\t\t\t\t}\n\n\t\t\t\treturn mapSelectorWithResolver(\n\t\t\t\t\tboundSelector,\n\t\t\t\t\tselectorName,\n\t\t\t\t\tresolver,\n\t\t\t\t\tstore,\n\t\t\t\t\tresolversCache\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tfunction bindMetadataSelector( metaDataSelector ) {\n\t\t\t\tconst boundSelector = ( ...args ) => {\n\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\n\t\t\t\t\tconst originalSelectorName = args && args[ 0 ];\n\t\t\t\t\tconst originalSelectorArgs = args && args[ 1 ];\n\t\t\t\t\tconst targetSelector =\n\t\t\t\t\t\toptions?.selectors?.[ originalSelectorName ];\n\n\t\t\t\t\t// Normalize the arguments passed to the target selector.\n\t\t\t\t\tif ( originalSelectorName && targetSelector ) {\n\t\t\t\t\t\targs[ 1 ] = normalize(\n\t\t\t\t\t\t\ttargetSelector,\n\t\t\t\t\t\t\toriginalSelectorArgs\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn metaDataSelector( state.metadata, ...args );\n\t\t\t\t};\n\t\t\t\tboundSelector.hasResolver = false;\n\t\t\t\treturn boundSelector;\n\t\t\t}\n\n\t\t\tconst selectors = {\n\t\t\t\t...mapValues( metadataSelectors, bindMetadataSelector ),\n\t\t\t\t...mapValues( options.selectors, bindSelector ),\n\t\t\t};\n\n\t\t\tconst boundPrivateSelectors = createBindingCache( bindSelector );\n\n\t\t\t// Pre-bind the private selectors that have been registered by the time of\n\t\t\t// instantiation, so that registry selectors are bound to the registry.\n\t\t\tfor ( const [ selectorName, selector ] of Object.entries(\n\t\t\t\tprivateSelectors\n\t\t\t) ) {\n\t\t\t\tboundPrivateSelectors.get( selector, selectorName );\n\t\t\t}\n\n\t\t\tconst allSelectors = new Proxy( () => {}, {\n\t\t\t\tget: ( target, prop ) => {\n\t\t\t\t\tconst privateSelector = privateSelectors[ prop ];\n\t\t\t\t\treturn privateSelector\n\t\t\t\t\t\t? boundPrivateSelectors.get( privateSelector, prop )\n\t\t\t\t\t\t: selectors[ prop ];\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\tconst thunkSelectors = new Proxy( allSelectors, {\n\t\t\t\tapply: ( target, thisArg, [ selector ] ) =>\n\t\t\t\t\tselector( store.__unstableOriginalGetState() ),\n\t\t\t} );\n\n\t\t\tlock( selectors, allSelectors );\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\tlisteners.add( listener );\n\n\t\t\t\t\treturn () => listeners.delete( listener );\n\t\t\t\t} );\n\n\t\t\tlet lastState = store.__unstableOriginalGetState();\n\t\t\tstore.subscribe( () => {\n\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\tconst hasChanged = state !== lastState;\n\t\t\t\tlastState = state;\n\n\t\t\t\tif ( hasChanged ) {\n\t\t\t\t\tfor ( const listener of listeners ) {\n\t\t\t\t\t\tlistener();\n\t\t\t\t\t}\n\t\t\t\t}\n\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 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\thasResolvingSelectors,\n\t\tcountSelectorsByStatus,\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 * Convert resolvers to a normalized form, an object with `fulfill` method and\n * optional methods like `isFulfilled`.\n *\n * @param {Object} resolvers Resolver to convert\n */\nfunction mapResolvers( resolvers ) {\n\treturn 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\n/**\n * Returns a selector with a matched resolver.\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} selector The selector function to be bound.\n * @param {string} selectorName The selector name.\n * @param {Object} resolver Resolver to call.\n * @param {Object} store The redux store to which the resolvers should be mapped.\n * @param {Object} resolversCache Resolvers Cache.\n */\nfunction mapSelectorWithResolver(\n\tselector,\n\tselectorName,\n\tresolver,\n\tstore,\n\tresolversCache\n) {\n\tfunction fulfillSelector( args ) {\n\t\tconst state = store.getState();\n\n\t\tif (\n\t\t\tresolversCache.isRunning( selectorName, args ) ||\n\t\t\t( typeof resolver.isFulfilled === 'function' &&\n\t\t\t\tresolver.isFulfilled( state, ...args ) )\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { metadata } = store.__unstableOriginalGetState();\n\n\t\tif (\n\t\t\tmetadataSelectors.hasStartedResolution(\n\t\t\t\tmetadata,\n\t\t\t\tselectorName,\n\t\t\t\targs\n\t\t\t)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tresolversCache.markAsRunning( selectorName, args );\n\n\t\tsetTimeout( async () => {\n\t\t\tresolversCache.clear( selectorName, args );\n\t\t\tstore.dispatch(\n\t\t\t\tmetadataActions.startResolution( selectorName, args )\n\t\t\t);\n\t\t\ttry {\n\t\t\t\tconst action = resolver.fulfill( ...args );\n\t\t\t\tif ( action ) {\n\t\t\t\t\tawait store.dispatch( action );\n\t\t\t\t}\n\t\t\t\tstore.dispatch(\n\t\t\t\t\tmetadataActions.finishResolution( selectorName, args )\n\t\t\t\t);\n\t\t\t} catch ( error ) {\n\t\t\t\tstore.dispatch(\n\t\t\t\t\tmetadataActions.failResolution( selectorName, args, error )\n\t\t\t\t);\n\t\t\t}\n\t\t}, 0 );\n\t}\n\n\tconst selectorResolver = ( ...args ) => {\n\t\targs = normalize( selector, args );\n\t\tfulfillSelector( args );\n\t\treturn selector( ...args );\n\t};\n\tselectorResolver.hasResolver = true;\n\treturn selectorResolver;\n}\n\n/**\n * Applies selector's normalization function to the given arguments\n * if it exists.\n *\n * @param {Object} selector The selector potentially with a normalization method property.\n * @param {Array} args selector arguments to normalize.\n * @return {Array} Potentially normalized arguments.\n */\nfunction normalize( selector, args ) {\n\tif (\n\t\tselector.__unstableNormalizeArgs &&\n\t\ttypeof selector.__unstableNormalizeArgs === 'function' &&\n\t\targs?.length\n\t) {\n\t\treturn selector.__unstableNormalizeArgs( args );\n\t}\n\treturn args;\n}\n"],"mappings":"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"}
|
package/build-types/index.d.ts
CHANGED
|
@@ -5,9 +5,50 @@ export { useDispatch } from "./components/use-dispatch";
|
|
|
5
5
|
export { AsyncModeProvider } from "./components/async-mode-provider";
|
|
6
6
|
export { createRegistry } from "./registry";
|
|
7
7
|
export { controls } from "./controls";
|
|
8
|
+
export { default as createReduxStore } from "./redux-store";
|
|
8
9
|
export { dispatch } from "./dispatch";
|
|
9
10
|
export { select } from "./select";
|
|
10
11
|
export { plugins };
|
|
12
|
+
/**
|
|
13
|
+
* The combineReducers helper function turns an object whose values are different
|
|
14
|
+
* reducing functions into a single reducing function you can pass to registerReducer.
|
|
15
|
+
*
|
|
16
|
+
* @type {import('./types').combineReducers}
|
|
17
|
+
* @param {Object} reducers An object whose values correspond to different reducing
|
|
18
|
+
* functions that need to be combined into one.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```js
|
|
22
|
+
* import { combineReducers, createReduxStore, register } from '@wordpress/data';
|
|
23
|
+
*
|
|
24
|
+
* const prices = ( state = {}, action ) => {
|
|
25
|
+
* return action.type === 'SET_PRICE' ?
|
|
26
|
+
* {
|
|
27
|
+
* ...state,
|
|
28
|
+
* [ action.item ]: action.price,
|
|
29
|
+
* } :
|
|
30
|
+
* state;
|
|
31
|
+
* };
|
|
32
|
+
*
|
|
33
|
+
* const discountPercent = ( state = 0, action ) => {
|
|
34
|
+
* return action.type === 'START_SALE' ?
|
|
35
|
+
* action.discountPercent :
|
|
36
|
+
* state;
|
|
37
|
+
* };
|
|
38
|
+
*
|
|
39
|
+
* const store = createReduxStore( 'my-shop', {
|
|
40
|
+
* reducer: combineReducers( {
|
|
41
|
+
* prices,
|
|
42
|
+
* discountPercent,
|
|
43
|
+
* } ),
|
|
44
|
+
* } );
|
|
45
|
+
* register( store );
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* @return {Function} A reducer that invokes every reducer inside the reducers
|
|
49
|
+
* object, and constructs a state object with the same shape.
|
|
50
|
+
*/
|
|
51
|
+
export const combineReducers: import('./types').combineReducers;
|
|
11
52
|
/**
|
|
12
53
|
* Given a store descriptor, returns an object containing the store's selectors pre-bound to state
|
|
13
54
|
* so that you only need to supply additional arguments, and modified so that they return promises
|
|
@@ -117,5 +158,4 @@ import * as plugins from './plugins';
|
|
|
117
158
|
export { RegistryProvider, RegistryConsumer, useRegistry } from "./components/registry-provider";
|
|
118
159
|
export { default as useSelect, useSuspenseSelect } from "./components/use-select";
|
|
119
160
|
export { createRegistrySelector, createRegistryControl } from "./factory";
|
|
120
|
-
export { default as createReduxStore, combineReducers } from "./redux-store";
|
|
121
161
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":";;;;;;;;;;;AAuCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,8BAnCW,OAAO,SAAS,EAAE,eAAe,CAmCS;AAErD;;;;;;;;;;;;;;;;;;GAkBG;AACH,gCAA2D;AAE3D;;;;;;;;;;GAUG;AACH,gCAA2D;AAE3D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,iCAAmD;AAEnD;;;;;;;GAOG;AACH,4CAAyE;AAEzE;;;;;;;;;GASG;AACH,qCAA2D;AAE3D;;;;;;GAMG;AACH,sBAAuC;AAEvC;;;;;;;;;;;;;;;;;GAiBG;AACH,2BAAiD;;yBAzLxB,WAAW"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/redux-store/index.js"],"names":[],"mappings":"AAyHA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,kIAPW,MAAM,+
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/redux-store/index.js"],"names":[],"mappings":"AAyHA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,kIAPW,MAAM,+KA8OhB;;2BA/Va,OAAO,UAAU,EAAE,YAAY;+BAC/B,OAAO,UAAU,EAAE,gBAAgB;sEAEpC,OAAO,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC;mHAIrC,OAAO,UAAU,EAAE,gBAAgB,CAAC,KAAK,EAAC,OAAO,EAAC,SAAS,CAAC;gCAnBzC,oBAAoB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wordpress/data",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.14.0",
|
|
4
4
|
"description": "Data module for WordPress.",
|
|
5
5
|
"author": "The WordPress Contributors",
|
|
6
6
|
"license": "GPL-2.0-or-later",
|
|
@@ -29,13 +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/is-shallow-equal": "^4.
|
|
36
|
-
"@wordpress/priority-queue": "^2.
|
|
37
|
-
"@wordpress/private-apis": "^0.
|
|
38
|
-
"@wordpress/redux-routine": "^4.
|
|
32
|
+
"@wordpress/compose": "^6.21.0",
|
|
33
|
+
"@wordpress/deprecated": "^3.44.0",
|
|
34
|
+
"@wordpress/element": "^5.21.0",
|
|
35
|
+
"@wordpress/is-shallow-equal": "^4.44.0",
|
|
36
|
+
"@wordpress/priority-queue": "^2.44.0",
|
|
37
|
+
"@wordpress/private-apis": "^0.26.0",
|
|
38
|
+
"@wordpress/redux-routine": "^4.44.0",
|
|
39
39
|
"deepmerge": "^4.3.0",
|
|
40
40
|
"equivalent-key-map": "^0.2.2",
|
|
41
41
|
"is-plain-object": "^5.0.0",
|
|
@@ -50,5 +50,5 @@
|
|
|
50
50
|
"publishConfig": {
|
|
51
51
|
"access": "public"
|
|
52
52
|
},
|
|
53
|
-
"gitHead": "
|
|
53
|
+
"gitHead": "f83bb1a71e8fa416131b81a9f282a72a1dc6c694"
|
|
54
54
|
}
|
package/src/index.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import defaultRegistry from './default-registry';
|
|
5
5
|
import * as plugins from './plugins';
|
|
6
|
+
import { combineReducers as combineReducersModule } from './redux-store';
|
|
6
7
|
|
|
7
8
|
/** @typedef {import('./types').StoreDescriptor} StoreDescriptor */
|
|
8
9
|
|
|
@@ -75,7 +76,7 @@ export { plugins };
|
|
|
75
76
|
* @return {Function} A reducer that invokes every reducer inside the reducers
|
|
76
77
|
* object, and constructs a state object with the same shape.
|
|
77
78
|
*/
|
|
78
|
-
export
|
|
79
|
+
export const combineReducers = combineReducersModule;
|
|
79
80
|
|
|
80
81
|
/**
|
|
81
82
|
* Given a store descriptor, returns an object containing the store's selectors pre-bound to state
|
package/src/lock-unlock.js
CHANGED
|
@@ -5,6 +5,6 @@ import { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/pri
|
|
|
5
5
|
|
|
6
6
|
export const { lock, unlock } =
|
|
7
7
|
__dangerousOptInToUnstableAPIsOnlyForCoreModules(
|
|
8
|
-
'I know using unstable features means my
|
|
8
|
+
'I know using unstable features means my theme or plugin will inevitably break in the next version of WordPress.',
|
|
9
9
|
'@wordpress/data'
|
|
10
10
|
);
|
package/src/redux-store/index.js
CHANGED
|
@@ -235,11 +235,19 @@ export default function createReduxStore( key, options ) {
|
|
|
235
235
|
selector.registry = registry;
|
|
236
236
|
}
|
|
237
237
|
const boundSelector = ( ...args ) => {
|
|
238
|
+
args = normalize( selector, args );
|
|
238
239
|
const state = store.__unstableOriginalGetState();
|
|
239
240
|
return selector( state.root, ...args );
|
|
240
241
|
};
|
|
241
242
|
|
|
243
|
+
// Expose normalization method on the bound selector
|
|
244
|
+
// in order that it can be called when fullfilling
|
|
245
|
+
// the resolver.
|
|
246
|
+
boundSelector.__unstableNormalizeArgs =
|
|
247
|
+
selector.__unstableNormalizeArgs;
|
|
248
|
+
|
|
242
249
|
const resolver = resolvers[ selectorName ];
|
|
250
|
+
|
|
243
251
|
if ( ! resolver ) {
|
|
244
252
|
boundSelector.hasResolver = false;
|
|
245
253
|
return boundSelector;
|
|
@@ -254,10 +262,24 @@ export default function createReduxStore( key, options ) {
|
|
|
254
262
|
);
|
|
255
263
|
}
|
|
256
264
|
|
|
257
|
-
function bindMetadataSelector(
|
|
265
|
+
function bindMetadataSelector( metaDataSelector ) {
|
|
258
266
|
const boundSelector = ( ...args ) => {
|
|
259
267
|
const state = store.__unstableOriginalGetState();
|
|
260
|
-
|
|
268
|
+
|
|
269
|
+
const originalSelectorName = args && args[ 0 ];
|
|
270
|
+
const originalSelectorArgs = args && args[ 1 ];
|
|
271
|
+
const targetSelector =
|
|
272
|
+
options?.selectors?.[ originalSelectorName ];
|
|
273
|
+
|
|
274
|
+
// Normalize the arguments passed to the target selector.
|
|
275
|
+
if ( originalSelectorName && targetSelector ) {
|
|
276
|
+
args[ 1 ] = normalize(
|
|
277
|
+
targetSelector,
|
|
278
|
+
originalSelectorArgs
|
|
279
|
+
);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
return metaDataSelector( state.metadata, ...args );
|
|
261
283
|
};
|
|
262
284
|
boundSelector.hasResolver = false;
|
|
263
285
|
return boundSelector;
|
|
@@ -604,9 +626,29 @@ function mapSelectorWithResolver(
|
|
|
604
626
|
}
|
|
605
627
|
|
|
606
628
|
const selectorResolver = ( ...args ) => {
|
|
629
|
+
args = normalize( selector, args );
|
|
607
630
|
fulfillSelector( args );
|
|
608
631
|
return selector( ...args );
|
|
609
632
|
};
|
|
610
633
|
selectorResolver.hasResolver = true;
|
|
611
634
|
return selectorResolver;
|
|
612
635
|
}
|
|
636
|
+
|
|
637
|
+
/**
|
|
638
|
+
* Applies selector's normalization function to the given arguments
|
|
639
|
+
* if it exists.
|
|
640
|
+
*
|
|
641
|
+
* @param {Object} selector The selector potentially with a normalization method property.
|
|
642
|
+
* @param {Array} args selector arguments to normalize.
|
|
643
|
+
* @return {Array} Potentially normalized arguments.
|
|
644
|
+
*/
|
|
645
|
+
function normalize( selector, args ) {
|
|
646
|
+
if (
|
|
647
|
+
selector.__unstableNormalizeArgs &&
|
|
648
|
+
typeof selector.__unstableNormalizeArgs === 'function' &&
|
|
649
|
+
args?.length
|
|
650
|
+
) {
|
|
651
|
+
return selector.__unstableNormalizeArgs( args );
|
|
652
|
+
}
|
|
653
|
+
return args;
|
|
654
|
+
}
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { createRegistry } from '@wordpress/data';
|
|
5
5
|
|
|
6
|
+
const getFooSelector = ( state ) => state;
|
|
7
|
+
|
|
6
8
|
const testStore = {
|
|
7
9
|
reducer: ( state = null, action ) => {
|
|
8
10
|
if ( action.type === 'RECEIVE' ) {
|
|
@@ -12,7 +14,7 @@ const testStore = {
|
|
|
12
14
|
return state;
|
|
13
15
|
},
|
|
14
16
|
selectors: {
|
|
15
|
-
getFoo:
|
|
17
|
+
getFoo: getFooSelector,
|
|
16
18
|
},
|
|
17
19
|
};
|
|
18
20
|
|
|
@@ -55,7 +57,7 @@ describe( 'getIsResolving', () => {
|
|
|
55
57
|
expect( result ).toBe( true );
|
|
56
58
|
} );
|
|
57
59
|
|
|
58
|
-
it( 'should normalize args
|
|
60
|
+
it( 'should normalize args and return the right value', () => {
|
|
59
61
|
registry.dispatch( 'testStore' ).startResolution( 'getFoo', [] );
|
|
60
62
|
const { getIsResolving } = registry.select( 'testStore' );
|
|
61
63
|
|
|
@@ -443,3 +445,37 @@ describe( 'countSelectorsByStatus', () => {
|
|
|
443
445
|
expect( result1 ).not.toBe( result2 );
|
|
444
446
|
} );
|
|
445
447
|
} );
|
|
448
|
+
|
|
449
|
+
describe( 'Selector arguments normalization', () => {
|
|
450
|
+
let registry;
|
|
451
|
+
beforeEach( () => {
|
|
452
|
+
registry = createRegistry();
|
|
453
|
+
registry.registerStore( 'testStore', testStore );
|
|
454
|
+
} );
|
|
455
|
+
|
|
456
|
+
it( 'should call normalization method on target selector if exists', () => {
|
|
457
|
+
const normalizationFunction = jest.fn( ( args ) => {
|
|
458
|
+
return args.map( Number );
|
|
459
|
+
} );
|
|
460
|
+
getFooSelector.__unstableNormalizeArgs = normalizationFunction;
|
|
461
|
+
|
|
462
|
+
registry.dispatch( 'testStore' ).startResolution( 'getFoo', [ 123 ] );
|
|
463
|
+
const { getIsResolving, hasStartedResolution, hasFinishedResolution } =
|
|
464
|
+
registry.select( 'testStore' );
|
|
465
|
+
|
|
466
|
+
expect( getIsResolving( 'getFoo', [ '123' ] ) ).toBe( true );
|
|
467
|
+
expect( normalizationFunction ).toHaveBeenCalledWith( [ '123' ] );
|
|
468
|
+
|
|
469
|
+
expect( hasStartedResolution( 'getFoo', [ '123' ] ) ).toBe( true );
|
|
470
|
+
expect( normalizationFunction ).toHaveBeenCalledWith( [ '123' ] );
|
|
471
|
+
|
|
472
|
+
expect( normalizationFunction ).toHaveBeenCalledTimes( 2 );
|
|
473
|
+
|
|
474
|
+
registry.dispatch( 'testStore' ).finishResolution( 'getFoo', [ 123 ] );
|
|
475
|
+
|
|
476
|
+
expect( hasFinishedResolution( 'getFoo', [ '123' ] ) ).toBe( true );
|
|
477
|
+
expect( normalizationFunction ).toHaveBeenCalledWith( [ '123' ] );
|
|
478
|
+
|
|
479
|
+
getFooSelector.__unstableNormalizeArgs = undefined;
|
|
480
|
+
} );
|
|
481
|
+
} );
|
|
@@ -286,3 +286,75 @@ describe( 'resolveSelect', () => {
|
|
|
286
286
|
] );
|
|
287
287
|
} );
|
|
288
288
|
} );
|
|
289
|
+
|
|
290
|
+
describe( 'normalizing args', () => {
|
|
291
|
+
it( 'should call the __unstableNormalizeArgs method of the selector for both the selector and the resolver', async () => {
|
|
292
|
+
const registry = createRegistry();
|
|
293
|
+
const selector = () => {};
|
|
294
|
+
|
|
295
|
+
const normalizingFunction = jest.fn( ( ...args ) => args );
|
|
296
|
+
|
|
297
|
+
selector.__unstableNormalizeArgs = normalizingFunction;
|
|
298
|
+
|
|
299
|
+
registry.registerStore( 'store', {
|
|
300
|
+
reducer: () => {},
|
|
301
|
+
selectors: {
|
|
302
|
+
getItems: selector,
|
|
303
|
+
},
|
|
304
|
+
resolvers: {
|
|
305
|
+
getItems: () => 'items',
|
|
306
|
+
},
|
|
307
|
+
} );
|
|
308
|
+
registry.select( 'store' ).getItems( 'foo', 'bar' );
|
|
309
|
+
|
|
310
|
+
expect( normalizingFunction ).toHaveBeenCalledWith( [ 'foo', 'bar' ] );
|
|
311
|
+
|
|
312
|
+
// Needs to be called twice:
|
|
313
|
+
// 1. When the selector is called.
|
|
314
|
+
// 2. When the resolver is fullfilled.
|
|
315
|
+
expect( normalizingFunction ).toHaveBeenCalledTimes( 2 );
|
|
316
|
+
} );
|
|
317
|
+
|
|
318
|
+
it( 'should not call the __unstableNormalizeArgs method if there are no arguments passed to the selector (and thus the resolver)', async () => {
|
|
319
|
+
const registry = createRegistry();
|
|
320
|
+
const selector = () => {};
|
|
321
|
+
|
|
322
|
+
selector.__unstableNormalizeArgs = jest.fn( ( ...args ) => args );
|
|
323
|
+
|
|
324
|
+
registry.registerStore( 'store', {
|
|
325
|
+
reducer: () => {},
|
|
326
|
+
selectors: {
|
|
327
|
+
getItems: selector,
|
|
328
|
+
},
|
|
329
|
+
resolvers: {
|
|
330
|
+
getItems: () => 'items',
|
|
331
|
+
},
|
|
332
|
+
} );
|
|
333
|
+
|
|
334
|
+
// Called with no args so the __unstableNormalizeArgs method should not be called.
|
|
335
|
+
registry.select( 'store' ).getItems();
|
|
336
|
+
|
|
337
|
+
expect( selector.__unstableNormalizeArgs ).not.toHaveBeenCalled();
|
|
338
|
+
} );
|
|
339
|
+
|
|
340
|
+
it( 'should call the __unstableNormalizeArgs method on the selectors without resolvers', async () => {
|
|
341
|
+
const registry = createRegistry();
|
|
342
|
+
const selector = () => {};
|
|
343
|
+
|
|
344
|
+
selector.__unstableNormalizeArgs = jest.fn( ( ...args ) => args );
|
|
345
|
+
|
|
346
|
+
registry.registerStore( 'store', {
|
|
347
|
+
reducer: () => {},
|
|
348
|
+
selectors: {
|
|
349
|
+
getItems: selector,
|
|
350
|
+
},
|
|
351
|
+
} );
|
|
352
|
+
|
|
353
|
+
registry.select( 'store' ).getItems( 'foo', 'bar' );
|
|
354
|
+
|
|
355
|
+
expect( selector.__unstableNormalizeArgs ).toHaveBeenCalledWith( [
|
|
356
|
+
'foo',
|
|
357
|
+
'bar',
|
|
358
|
+
] );
|
|
359
|
+
} );
|
|
360
|
+
} );
|