@wordpress/data 6.1.3 → 6.2.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 +12 -0
- package/LICENSE.md +1 -1
- package/README.md +68 -68
- package/build/components/async-mode-provider/context.js +1 -1
- package/build/components/async-mode-provider/index.js +8 -6
- package/build/components/async-mode-provider/index.js.map +1 -1
- package/build/components/registry-provider/index.js +8 -6
- package/build/components/registry-provider/index.js.map +1 -1
- package/build/components/use-dispatch/use-dispatch-with-map.js +3 -1
- package/build/components/use-dispatch/use-dispatch-with-map.js.map +1 -1
- package/build/components/use-dispatch/use-dispatch.js +8 -8
- package/build/components/use-dispatch/use-dispatch.js.map +1 -1
- package/build/components/use-select/index.js +58 -43
- package/build/components/use-select/index.js.map +1 -1
- package/build/controls.js +51 -32
- package/build/controls.js.map +1 -1
- package/build/factory.js +4 -2
- package/build/factory.js.map +1 -1
- package/build/index.js +49 -47
- package/build/index.js.map +1 -1
- package/build/plugins/persistence/index.js +2 -1
- package/build/plugins/persistence/index.js.map +1 -1
- package/build/redux-store/index.js +62 -34
- package/build/redux-store/index.js.map +1 -1
- package/build/redux-store/metadata/actions.js +2 -2
- package/build/redux-store/metadata/reducer.js +8 -2
- package/build/redux-store/metadata/reducer.js.map +1 -1
- package/build/redux-store/metadata/selectors.js +8 -5
- package/build/redux-store/metadata/selectors.js.map +1 -1
- package/build/redux-store/metadata/utils.js +5 -5
- package/build/redux-store/metadata/utils.js.map +1 -1
- package/build/registry.js +81 -66
- package/build/registry.js.map +1 -1
- package/build/resolvers-cache-middleware.js +7 -4
- package/build/resolvers-cache-middleware.js.map +1 -1
- package/build/store/index.js +42 -35
- package/build/store/index.js.map +1 -1
- package/build/types.js +4 -0
- package/build/utils/emitter.js +1 -1
- package/build/utils/emitter.js.map +1 -1
- package/build-module/components/use-dispatch/use-dispatch-with-map.js +3 -1
- package/build-module/components/use-dispatch/use-dispatch-with-map.js.map +1 -1
- package/build-module/components/use-dispatch/use-dispatch.js +8 -8
- package/build-module/components/use-dispatch/use-dispatch.js.map +1 -1
- package/build-module/components/use-select/index.js +60 -44
- package/build-module/components/use-select/index.js.map +1 -1
- package/build-module/controls.js +50 -31
- package/build-module/controls.js.map +1 -1
- package/build-module/factory.js +3 -1
- package/build-module/factory.js.map +1 -1
- package/build-module/index.js +14 -14
- package/build-module/index.js.map +1 -1
- package/build-module/redux-store/index.js +58 -32
- package/build-module/redux-store/index.js.map +1 -1
- package/build-module/redux-store/metadata/reducer.js +8 -2
- package/build-module/redux-store/metadata/reducer.js.map +1 -1
- package/build-module/redux-store/metadata/selectors.js +6 -3
- package/build-module/redux-store/metadata/selectors.js.map +1 -1
- package/build-module/redux-store/metadata/utils.js +5 -5
- package/build-module/redux-store/metadata/utils.js.map +1 -1
- package/build-module/registry.js +81 -66
- package/build-module/registry.js.map +1 -1
- package/build-module/resolvers-cache-middleware.js +5 -4
- package/build-module/resolvers-cache-middleware.js.map +1 -1
- package/build-module/store/index.js +42 -34
- package/build-module/store/index.js.map +1 -1
- package/build-module/types.js +1 -1
- package/build-module/utils/emitter.js +1 -1
- package/build-module/utils/emitter.js.map +1 -1
- package/build-types/types.d.ts +29 -16
- package/build-types/types.d.ts.map +1 -1
- package/build-types/utils/emitter.d.ts +2 -2
- package/build-types/utils/emitter.d.ts.map +1 -1
- package/package.json +11 -10
- package/src/components/use-dispatch/test/use-dispatch.js +1 -1
- package/src/components/use-dispatch/use-dispatch.js +9 -9
- package/src/components/use-select/index.js +61 -46
- package/src/components/use-select/test/index.js +32 -32
- package/src/controls.js +22 -22
- package/src/index.js +14 -14
- package/src/redux-store/index.js +15 -15
- package/src/registry.js +84 -75
- package/src/resolvers-cache-middleware.js +3 -3
- package/src/store/index.js +49 -48
- package/src/test/registry.js +33 -47
- package/src/types.ts +44 -16
- package/src/utils/emitter.js +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/build/store/name.js +0 -15
- package/build/store/name.js.map +0 -1
- package/build-module/store/name.js +0 -7
- package/build-module/store/name.js.map +0 -1
- package/src/store/name.js +0 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/data/src/plugins/persistence/index.js"],"names":["DEFAULT_STORAGE","defaultStorage","DEFAULT_STORAGE_KEY","withLazySameState","reducer","state","action","nextState","createPersistenceInterface","options","storage","storageKey","data","getData","undefined","persisted","getItem","JSON","parse","error","setData","key","value","setItem","stringify","get","set","persistencePlugin","registry","pluginOptions","persistence","createPersistOnChange","getState","storeName","keys","getPersistedState","Array","isArray","reducers","reduce","accumulator","Object","assign","lastState","registerStore","persist","persistedState","initialState","type","store","subscribe","migrateFeaturePreferencesToInterfaceStore","sourceStoreName","interfaceStoreName","sourcePreferences","preferences","sourceFeatures","features","targetFeatures","__unstableMigrate"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { merge, isPlainObject } from 'lodash';\n\n/**\n * Internal dependencies\n */\nimport defaultStorage from './storage/default';\nimport { combineReducers } from '../../';\n\n/** @typedef {import('../../registry').WPDataRegistry} WPDataRegistry */\n\n/** @typedef {import('../../registry').WPDataPlugin} WPDataPlugin */\n\n/**\n * @typedef {Object} WPDataPersistencePluginOptions Persistence plugin options.\n *\n * @property {Storage} storage Persistent storage implementation. This must\n * at least implement `getItem` and `setItem` of\n * the Web Storage API.\n * @property {string} storageKey Key on which to set in persistent storage.\n *\n */\n\n/**\n * Default plugin storage.\n *\n * @type {Storage}\n */\nconst DEFAULT_STORAGE = defaultStorage;\n\n/**\n * Default plugin storage key.\n *\n * @type {string}\n */\nconst DEFAULT_STORAGE_KEY = 'WP_DATA';\n\n/**\n * Higher-order reducer which invokes the original reducer only if state is\n * inequal from that of the action's `nextState` property, otherwise returning\n * the original state reference.\n *\n * @param {Function} reducer Original reducer.\n *\n * @return {Function} Enhanced reducer.\n */\nexport const withLazySameState = ( reducer ) => ( state, action ) => {\n\tif ( action.nextState === state ) {\n\t\treturn state;\n\t}\n\n\treturn reducer( state, action );\n};\n\n/**\n * Creates a persistence interface, exposing getter and setter methods (`get`\n * and `set` respectively).\n *\n * @param {WPDataPersistencePluginOptions} options Plugin options.\n *\n * @return {Object} Persistence interface.\n */\nexport function createPersistenceInterface( options ) {\n\tconst {\n\t\tstorage = DEFAULT_STORAGE,\n\t\tstorageKey = DEFAULT_STORAGE_KEY,\n\t} = options;\n\n\tlet data;\n\n\t/**\n\t * Returns the persisted data as an object, defaulting to an empty object.\n\t *\n\t * @return {Object} Persisted data.\n\t */\n\tfunction getData() {\n\t\tif ( data === undefined ) {\n\t\t\t// If unset, getItem is expected to return null. Fall back to\n\t\t\t// empty object.\n\t\t\tconst persisted = storage.getItem( storageKey );\n\t\t\tif ( persisted === null ) {\n\t\t\t\tdata = {};\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\tdata = JSON.parse( persisted );\n\t\t\t\t} catch ( error ) {\n\t\t\t\t\t// Similarly, should any error be thrown during parse of\n\t\t\t\t\t// the string (malformed JSON), fall back to empty object.\n\t\t\t\t\tdata = {};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn data;\n\t}\n\n\t/**\n\t * Merges an updated reducer state into the persisted data.\n\t *\n\t * @param {string} key Key to update.\n\t * @param {*} value Updated value.\n\t */\n\tfunction setData( key, value ) {\n\t\tdata = { ...data, [ key ]: value };\n\t\tstorage.setItem( storageKey, JSON.stringify( data ) );\n\t}\n\n\treturn {\n\t\tget: getData,\n\t\tset: setData,\n\t};\n}\n\n/**\n * Data plugin to persist store state into a single storage key.\n *\n * @param {WPDataRegistry} registry Data registry.\n * @param {?WPDataPersistencePluginOptions} pluginOptions Plugin options.\n *\n * @return {WPDataPlugin} Data plugin.\n */\nfunction persistencePlugin( registry, pluginOptions ) {\n\tconst persistence = createPersistenceInterface( pluginOptions );\n\n\t/**\n\t * Creates an enhanced store dispatch function, triggering the state of the\n\t * given store name to be persisted when changed.\n\t *\n\t * @param {Function} getState Function which returns current state.\n\t * @param {string} storeName Store name.\n\t * @param {?Array<string>} keys Optional subset of keys to save.\n\t *\n\t * @return {Function} Enhanced dispatch function.\n\t */\n\tfunction createPersistOnChange( getState, storeName, keys ) {\n\t\tlet getPersistedState;\n\t\tif ( Array.isArray( keys ) ) {\n\t\t\t// Given keys, the persisted state should by produced as an object\n\t\t\t// of the subset of keys. This implementation uses combineReducers\n\t\t\t// to leverage its behavior of returning the same object when none\n\t\t\t// of the property values changes. This allows a strict reference\n\t\t\t// equality to bypass a persistence set on an unchanging state.\n\t\t\tconst reducers = keys.reduce(\n\t\t\t\t( accumulator, key ) =>\n\t\t\t\t\tObject.assign( accumulator, {\n\t\t\t\t\t\t[ key ]: ( state, action ) => action.nextState[ key ],\n\t\t\t\t\t} ),\n\t\t\t\t{}\n\t\t\t);\n\n\t\t\tgetPersistedState = withLazySameState(\n\t\t\t\tcombineReducers( reducers )\n\t\t\t);\n\t\t} else {\n\t\t\tgetPersistedState = ( state, action ) => action.nextState;\n\t\t}\n\n\t\tlet lastState = getPersistedState( undefined, {\n\t\t\tnextState: getState(),\n\t\t} );\n\n\t\treturn () => {\n\t\t\tconst state = getPersistedState( lastState, {\n\t\t\t\tnextState: getState(),\n\t\t\t} );\n\t\t\tif ( state !== lastState ) {\n\t\t\t\tpersistence.set( storeName, state );\n\t\t\t\tlastState = state;\n\t\t\t}\n\t\t};\n\t}\n\n\treturn {\n\t\tregisterStore( storeName, options ) {\n\t\t\tif ( ! options.persist ) {\n\t\t\t\treturn registry.registerStore( storeName, options );\n\t\t\t}\n\n\t\t\t// Load from persistence to use as initial state.\n\t\t\tconst persistedState = persistence.get()[ storeName ];\n\t\t\tif ( persistedState !== undefined ) {\n\t\t\t\tlet initialState = options.reducer( options.initialState, {\n\t\t\t\t\ttype: '@@WP/PERSISTENCE_RESTORE',\n\t\t\t\t} );\n\n\t\t\t\tif (\n\t\t\t\t\tisPlainObject( initialState ) &&\n\t\t\t\t\tisPlainObject( persistedState )\n\t\t\t\t) {\n\t\t\t\t\t// If state is an object, ensure that:\n\t\t\t\t\t// - Other keys are left intact when persisting only a\n\t\t\t\t\t// subset of keys.\n\t\t\t\t\t// - New keys in what would otherwise be used as initial\n\t\t\t\t\t// state are deeply merged as base for persisted value.\n\t\t\t\t\tinitialState = merge( {}, initialState, persistedState );\n\t\t\t\t} else {\n\t\t\t\t\t// If there is a mismatch in object-likeness of default\n\t\t\t\t\t// initial or persisted state, defer to persisted value.\n\t\t\t\t\tinitialState = persistedState;\n\t\t\t\t}\n\n\t\t\t\toptions = {\n\t\t\t\t\t...options,\n\t\t\t\t\tinitialState,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst store = registry.registerStore( storeName, options );\n\n\t\t\tstore.subscribe(\n\t\t\t\tcreatePersistOnChange(\n\t\t\t\t\tstore.getState,\n\t\t\t\t\tstoreName,\n\t\t\t\t\toptions.persist\n\t\t\t\t)\n\t\t\t);\n\n\t\t\treturn store;\n\t\t},\n\t};\n}\n\n/**\n * Move the 'features' object in local storage from the sourceStoreName to the\n * interface store.\n *\n * @param {Object} persistence The persistence interface.\n * @param {string} sourceStoreName The name of the store that has persisted\n * preferences to migrate to the interface\n * package.\n */\nexport function migrateFeaturePreferencesToInterfaceStore(\n\tpersistence,\n\tsourceStoreName\n) {\n\tconst interfaceStoreName = 'core/interface';\n\tconst state = persistence.get();\n\tconst sourcePreferences = state[ sourceStoreName ]?.preferences;\n\tconst sourceFeatures = sourcePreferences?.features;\n\n\tif ( sourceFeatures ) {\n\t\tconst targetFeatures =\n\t\t\tstate[ interfaceStoreName ]?.preferences?.features;\n\n\t\t// Avoid migrating features again if they've previously been migrated.\n\t\tif ( ! targetFeatures?.[ sourceStoreName ] ) {\n\t\t\t// Set the feature values in the interface store, the features\n\t\t\t// object is keyed by 'scope', which matches the store name for\n\t\t\t// the source.\n\t\t\tpersistence.set( interfaceStoreName, {\n\t\t\t\tpreferences: {\n\t\t\t\t\tfeatures: {\n\t\t\t\t\t\t...targetFeatures,\n\t\t\t\t\t\t[ sourceStoreName ]: sourceFeatures,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\t// Remove feature preferences from the source.\n\t\t\tpersistence.set( sourceStoreName, {\n\t\t\t\tpreferences: {\n\t\t\t\t\t...sourcePreferences,\n\t\t\t\t\tfeatures: undefined,\n\t\t\t\t},\n\t\t\t} );\n\t\t}\n\t}\n}\n\n/**\n * Deprecated: Remove this function and the code in WordPress Core that calls\n * it once WordPress 6.0 is released.\n */\n\npersistencePlugin.__unstableMigrate = ( pluginOptions ) => {\n\tconst persistence = createPersistenceInterface( pluginOptions );\n\n\tmigrateFeaturePreferencesToInterfaceStore(\n\t\tpersistence,\n\t\t'core/edit-widgets'\n\t);\n\tmigrateFeaturePreferencesToInterfaceStore(\n\t\tpersistence,\n\t\t'core/customize-widgets'\n\t);\n\tmigrateFeaturePreferencesToInterfaceStore( persistence, 'core/edit-post' );\n};\n\nexport default persistencePlugin;\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/data/src/plugins/persistence/index.js"],"names":["DEFAULT_STORAGE","defaultStorage","DEFAULT_STORAGE_KEY","withLazySameState","reducer","state","action","nextState","createPersistenceInterface","options","storage","storageKey","data","getData","undefined","persisted","getItem","JSON","parse","error","setData","key","value","setItem","stringify","get","set","persistencePlugin","registry","pluginOptions","persistence","createPersistOnChange","getState","storeName","keys","getPersistedState","Array","isArray","reducers","reduce","accumulator","Object","assign","lastState","registerStore","persist","persistedState","initialState","type","store","subscribe","migrateFeaturePreferencesToInterfaceStore","sourceStoreName","interfaceStoreName","sourcePreferences","preferences","sourceFeatures","features","targetFeatures","__unstableMigrate"],"mappings":";;;;;;;;;;;;AAGA;;AAKA;;AACA;;AATA;AACA;AACA;;AAGA;AACA;AACA;;AAIA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAMA,eAAe,GAAGC,iBAAxB;AAEA;AACA;AACA;AACA;AACA;;AACA,MAAMC,mBAAmB,GAAG,SAA5B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,MAAMC,iBAAiB,GAAKC,OAAF,IAAe,CAAEC,KAAF,EAASC,MAAT,KAAqB;AACpE,MAAKA,MAAM,CAACC,SAAP,KAAqBF,KAA1B,EAAkC;AACjC,WAAOA,KAAP;AACA;;AAED,SAAOD,OAAO,CAAEC,KAAF,EAASC,MAAT,CAAd;AACA,CANM;AAQP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AACO,SAASE,0BAAT,CAAqCC,OAArC,EAA+C;AACrD,QAAM;AACLC,IAAAA,OAAO,GAAGV,eADL;AAELW,IAAAA,UAAU,GAAGT;AAFR,MAGFO,OAHJ;AAKA,MAAIG,IAAJ;AAEA;AACD;AACA;AACA;AACA;;AACC,WAASC,OAAT,GAAmB;AAClB,QAAKD,IAAI,KAAKE,SAAd,EAA0B;AACzB;AACA;AACA,YAAMC,SAAS,GAAGL,OAAO,CAACM,OAAR,CAAiBL,UAAjB,CAAlB;;AACA,UAAKI,SAAS,KAAK,IAAnB,EAA0B;AACzBH,QAAAA,IAAI,GAAG,EAAP;AACA,OAFD,MAEO;AACN,YAAI;AACHA,UAAAA,IAAI,GAAGK,IAAI,CAACC,KAAL,CAAYH,SAAZ,CAAP;AACA,SAFD,CAEE,OAAQI,KAAR,EAAgB;AACjB;AACA;AACAP,UAAAA,IAAI,GAAG,EAAP;AACA;AACD;AACD;;AAED,WAAOA,IAAP;AACA;AAED;AACD;AACA;AACA;AACA;AACA;;;AACC,WAASQ,OAAT,CAAkBC,GAAlB,EAAuBC,KAAvB,EAA+B;AAC9BV,IAAAA,IAAI,GAAG,EAAE,GAAGA,IAAL;AAAW,OAAES,GAAF,GAASC;AAApB,KAAP;AACAZ,IAAAA,OAAO,CAACa,OAAR,CAAiBZ,UAAjB,EAA6BM,IAAI,CAACO,SAAL,CAAgBZ,IAAhB,CAA7B;AACA;;AAED,SAAO;AACNa,IAAAA,GAAG,EAAEZ,OADC;AAENa,IAAAA,GAAG,EAAEN;AAFC,GAAP;AAIA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASO,iBAAT,CAA4BC,QAA5B,EAAsCC,aAAtC,EAAsD;AACrD,QAAMC,WAAW,GAAGtB,0BAA0B,CAAEqB,aAAF,CAA9C;AAEA;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACC,WAASE,qBAAT,CAAgCC,QAAhC,EAA0CC,SAA1C,EAAqDC,IAArD,EAA4D;AAC3D,QAAIC,iBAAJ;;AACA,QAAKC,KAAK,CAACC,OAAN,CAAeH,IAAf,CAAL,EAA6B;AAC5B;AACA;AACA;AACA;AACA;AACA,YAAMI,QAAQ,GAAGJ,IAAI,CAACK,MAAL,CAChB,CAAEC,WAAF,EAAenB,GAAf,KACCoB,MAAM,CAACC,MAAP,CAAeF,WAAf,EAA4B;AAC3B,SAAEnB,GAAF,GAAS,CAAEhB,KAAF,EAASC,MAAT,KAAqBA,MAAM,CAACC,SAAP,CAAkBc,GAAlB;AADH,OAA5B,CAFe,EAKhB,EALgB,CAAjB;AAQAc,MAAAA,iBAAiB,GAAGhC,iBAAiB,CACpC,uBAAiBmC,QAAjB,CADoC,CAArC;AAGA,KAjBD,MAiBO;AACNH,MAAAA,iBAAiB,GAAG,CAAE9B,KAAF,EAASC,MAAT,KAAqBA,MAAM,CAACC,SAAhD;AACA;;AAED,QAAIoC,SAAS,GAAGR,iBAAiB,CAAErB,SAAF,EAAa;AAC7CP,MAAAA,SAAS,EAAEyB,QAAQ;AAD0B,KAAb,CAAjC;AAIA,WAAO,MAAM;AACZ,YAAM3B,KAAK,GAAG8B,iBAAiB,CAAEQ,SAAF,EAAa;AAC3CpC,QAAAA,SAAS,EAAEyB,QAAQ;AADwB,OAAb,CAA/B;;AAGA,UAAK3B,KAAK,KAAKsC,SAAf,EAA2B;AAC1Bb,QAAAA,WAAW,CAACJ,GAAZ,CAAiBO,SAAjB,EAA4B5B,KAA5B;AACAsC,QAAAA,SAAS,GAAGtC,KAAZ;AACA;AACD,KARD;AASA;;AAED,SAAO;AACNuC,IAAAA,aAAa,CAAEX,SAAF,EAAaxB,OAAb,EAAuB;AACnC,UAAK,CAAEA,OAAO,CAACoC,OAAf,EAAyB;AACxB,eAAOjB,QAAQ,CAACgB,aAAT,CAAwBX,SAAxB,EAAmCxB,OAAnC,CAAP;AACA,OAHkC,CAKnC;;;AACA,YAAMqC,cAAc,GAAGhB,WAAW,CAACL,GAAZ,GAAmBQ,SAAnB,CAAvB;;AACA,UAAKa,cAAc,KAAKhC,SAAxB,EAAoC;AACnC,YAAIiC,YAAY,GAAGtC,OAAO,CAACL,OAAR,CAAiBK,OAAO,CAACsC,YAAzB,EAAuC;AACzDC,UAAAA,IAAI,EAAE;AADmD,SAAvC,CAAnB;;AAIA,YACC,2BAAeD,YAAf,KACA,2BAAeD,cAAf,CAFD,EAGE;AACD;AACA;AACA;AACA;AACA;AACAC,UAAAA,YAAY,GAAG,mBAAO,EAAP,EAAWA,YAAX,EAAyBD,cAAzB,CAAf;AACA,SAVD,MAUO;AACN;AACA;AACAC,UAAAA,YAAY,GAAGD,cAAf;AACA;;AAEDrC,QAAAA,OAAO,GAAG,EACT,GAAGA,OADM;AAETsC,UAAAA;AAFS,SAAV;AAIA;;AAED,YAAME,KAAK,GAAGrB,QAAQ,CAACgB,aAAT,CAAwBX,SAAxB,EAAmCxB,OAAnC,CAAd;AAEAwC,MAAAA,KAAK,CAACC,SAAN,CACCnB,qBAAqB,CACpBkB,KAAK,CAACjB,QADc,EAEpBC,SAFoB,EAGpBxB,OAAO,CAACoC,OAHY,CADtB;AAQA,aAAOI,KAAP;AACA;;AA9CK,GAAP;AAgDA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASE,yCAAT,CACNrB,WADM,EAENsB,eAFM,EAGL;AAAA;;AACD,QAAMC,kBAAkB,GAAG,gBAA3B;AACA,QAAMhD,KAAK,GAAGyB,WAAW,CAACL,GAAZ,EAAd;AACA,QAAM6B,iBAAiB,4BAAGjD,KAAK,CAAE+C,eAAF,CAAR,0DAAG,sBAA0BG,WAApD;AACA,QAAMC,cAAc,GAAGF,iBAAH,aAAGA,iBAAH,uBAAGA,iBAAiB,CAAEG,QAA1C;;AAEA,MAAKD,cAAL,EAAsB;AAAA;;AACrB,UAAME,cAAc,4BACnBrD,KAAK,CAAEgD,kBAAF,CADc,oFACnB,sBAA6BE,WADV,2DACnB,uBAA0CE,QAD3C,CADqB,CAIrB;;AACA,QAAK,EAAEC,cAAF,aAAEA,cAAF,eAAEA,cAAc,CAAIN,eAAJ,CAAhB,CAAL,EAA6C;AAC5C;AACA;AACA;AACAtB,MAAAA,WAAW,CAACJ,GAAZ,CAAiB2B,kBAAjB,EAAqC;AACpCE,QAAAA,WAAW,EAAE;AACZE,UAAAA,QAAQ,EAAE,EACT,GAAGC,cADM;AAET,aAAEN,eAAF,GAAqBI;AAFZ;AADE;AADuB,OAArC,EAJ4C,CAa5C;;AACA1B,MAAAA,WAAW,CAACJ,GAAZ,CAAiB0B,eAAjB,EAAkC;AACjCG,QAAAA,WAAW,EAAE,EACZ,GAAGD,iBADS;AAEZG,UAAAA,QAAQ,EAAE3C;AAFE;AADoB,OAAlC;AAMA;AACD;AACD;AAED;AACA;AACA;AACA;;;AAEAa,iBAAiB,CAACgC,iBAAlB,GAAwC9B,aAAF,IAAqB;AAC1D,QAAMC,WAAW,GAAGtB,0BAA0B,CAAEqB,aAAF,CAA9C;AAEAsB,EAAAA,yCAAyC,CACxCrB,WADwC,EAExC,mBAFwC,CAAzC;AAIAqB,EAAAA,yCAAyC,CACxCrB,WADwC,EAExC,wBAFwC,CAAzC;AAIAqB,EAAAA,yCAAyC,CAAErB,WAAF,EAAe,gBAAf,CAAzC;AACA,CAZD;;eAceH,iB","sourcesContent":["/**\n * External dependencies\n */\nimport { merge, isPlainObject } from 'lodash';\n\n/**\n * Internal dependencies\n */\nimport defaultStorage from './storage/default';\nimport { combineReducers } from '../../';\n\n/** @typedef {import('../../registry').WPDataRegistry} WPDataRegistry */\n\n/** @typedef {import('../../registry').WPDataPlugin} WPDataPlugin */\n\n/**\n * @typedef {Object} WPDataPersistencePluginOptions Persistence plugin options.\n *\n * @property {Storage} storage Persistent storage implementation. This must\n * at least implement `getItem` and `setItem` of\n * the Web Storage API.\n * @property {string} storageKey Key on which to set in persistent storage.\n *\n */\n\n/**\n * Default plugin storage.\n *\n * @type {Storage}\n */\nconst DEFAULT_STORAGE = defaultStorage;\n\n/**\n * Default plugin storage key.\n *\n * @type {string}\n */\nconst DEFAULT_STORAGE_KEY = 'WP_DATA';\n\n/**\n * Higher-order reducer which invokes the original reducer only if state is\n * inequal from that of the action's `nextState` property, otherwise returning\n * the original state reference.\n *\n * @param {Function} reducer Original reducer.\n *\n * @return {Function} Enhanced reducer.\n */\nexport const withLazySameState = ( reducer ) => ( state, action ) => {\n\tif ( action.nextState === state ) {\n\t\treturn state;\n\t}\n\n\treturn reducer( state, action );\n};\n\n/**\n * Creates a persistence interface, exposing getter and setter methods (`get`\n * and `set` respectively).\n *\n * @param {WPDataPersistencePluginOptions} options Plugin options.\n *\n * @return {Object} Persistence interface.\n */\nexport function createPersistenceInterface( options ) {\n\tconst {\n\t\tstorage = DEFAULT_STORAGE,\n\t\tstorageKey = DEFAULT_STORAGE_KEY,\n\t} = options;\n\n\tlet data;\n\n\t/**\n\t * Returns the persisted data as an object, defaulting to an empty object.\n\t *\n\t * @return {Object} Persisted data.\n\t */\n\tfunction getData() {\n\t\tif ( data === undefined ) {\n\t\t\t// If unset, getItem is expected to return null. Fall back to\n\t\t\t// empty object.\n\t\t\tconst persisted = storage.getItem( storageKey );\n\t\t\tif ( persisted === null ) {\n\t\t\t\tdata = {};\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\tdata = JSON.parse( persisted );\n\t\t\t\t} catch ( error ) {\n\t\t\t\t\t// Similarly, should any error be thrown during parse of\n\t\t\t\t\t// the string (malformed JSON), fall back to empty object.\n\t\t\t\t\tdata = {};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn data;\n\t}\n\n\t/**\n\t * Merges an updated reducer state into the persisted data.\n\t *\n\t * @param {string} key Key to update.\n\t * @param {*} value Updated value.\n\t */\n\tfunction setData( key, value ) {\n\t\tdata = { ...data, [ key ]: value };\n\t\tstorage.setItem( storageKey, JSON.stringify( data ) );\n\t}\n\n\treturn {\n\t\tget: getData,\n\t\tset: setData,\n\t};\n}\n\n/**\n * Data plugin to persist store state into a single storage key.\n *\n * @param {WPDataRegistry} registry Data registry.\n * @param {?WPDataPersistencePluginOptions} pluginOptions Plugin options.\n *\n * @return {WPDataPlugin} Data plugin.\n */\nfunction persistencePlugin( registry, pluginOptions ) {\n\tconst persistence = createPersistenceInterface( pluginOptions );\n\n\t/**\n\t * Creates an enhanced store dispatch function, triggering the state of the\n\t * given store name to be persisted when changed.\n\t *\n\t * @param {Function} getState Function which returns current state.\n\t * @param {string} storeName Store name.\n\t * @param {?Array<string>} keys Optional subset of keys to save.\n\t *\n\t * @return {Function} Enhanced dispatch function.\n\t */\n\tfunction createPersistOnChange( getState, storeName, keys ) {\n\t\tlet getPersistedState;\n\t\tif ( Array.isArray( keys ) ) {\n\t\t\t// Given keys, the persisted state should by produced as an object\n\t\t\t// of the subset of keys. This implementation uses combineReducers\n\t\t\t// to leverage its behavior of returning the same object when none\n\t\t\t// of the property values changes. This allows a strict reference\n\t\t\t// equality to bypass a persistence set on an unchanging state.\n\t\t\tconst reducers = keys.reduce(\n\t\t\t\t( accumulator, key ) =>\n\t\t\t\t\tObject.assign( accumulator, {\n\t\t\t\t\t\t[ key ]: ( state, action ) => action.nextState[ key ],\n\t\t\t\t\t} ),\n\t\t\t\t{}\n\t\t\t);\n\n\t\t\tgetPersistedState = withLazySameState(\n\t\t\t\tcombineReducers( reducers )\n\t\t\t);\n\t\t} else {\n\t\t\tgetPersistedState = ( state, action ) => action.nextState;\n\t\t}\n\n\t\tlet lastState = getPersistedState( undefined, {\n\t\t\tnextState: getState(),\n\t\t} );\n\n\t\treturn () => {\n\t\t\tconst state = getPersistedState( lastState, {\n\t\t\t\tnextState: getState(),\n\t\t\t} );\n\t\t\tif ( state !== lastState ) {\n\t\t\t\tpersistence.set( storeName, state );\n\t\t\t\tlastState = state;\n\t\t\t}\n\t\t};\n\t}\n\n\treturn {\n\t\tregisterStore( storeName, options ) {\n\t\t\tif ( ! options.persist ) {\n\t\t\t\treturn registry.registerStore( storeName, options );\n\t\t\t}\n\n\t\t\t// Load from persistence to use as initial state.\n\t\t\tconst persistedState = persistence.get()[ storeName ];\n\t\t\tif ( persistedState !== undefined ) {\n\t\t\t\tlet initialState = options.reducer( options.initialState, {\n\t\t\t\t\ttype: '@@WP/PERSISTENCE_RESTORE',\n\t\t\t\t} );\n\n\t\t\t\tif (\n\t\t\t\t\tisPlainObject( initialState ) &&\n\t\t\t\t\tisPlainObject( persistedState )\n\t\t\t\t) {\n\t\t\t\t\t// If state is an object, ensure that:\n\t\t\t\t\t// - Other keys are left intact when persisting only a\n\t\t\t\t\t// subset of keys.\n\t\t\t\t\t// - New keys in what would otherwise be used as initial\n\t\t\t\t\t// state are deeply merged as base for persisted value.\n\t\t\t\t\tinitialState = merge( {}, initialState, persistedState );\n\t\t\t\t} else {\n\t\t\t\t\t// If there is a mismatch in object-likeness of default\n\t\t\t\t\t// initial or persisted state, defer to persisted value.\n\t\t\t\t\tinitialState = persistedState;\n\t\t\t\t}\n\n\t\t\t\toptions = {\n\t\t\t\t\t...options,\n\t\t\t\t\tinitialState,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst store = registry.registerStore( storeName, options );\n\n\t\t\tstore.subscribe(\n\t\t\t\tcreatePersistOnChange(\n\t\t\t\t\tstore.getState,\n\t\t\t\t\tstoreName,\n\t\t\t\t\toptions.persist\n\t\t\t\t)\n\t\t\t);\n\n\t\t\treturn store;\n\t\t},\n\t};\n}\n\n/**\n * Move the 'features' object in local storage from the sourceStoreName to the\n * interface store.\n *\n * @param {Object} persistence The persistence interface.\n * @param {string} sourceStoreName The name of the store that has persisted\n * preferences to migrate to the interface\n * package.\n */\nexport function migrateFeaturePreferencesToInterfaceStore(\n\tpersistence,\n\tsourceStoreName\n) {\n\tconst interfaceStoreName = 'core/interface';\n\tconst state = persistence.get();\n\tconst sourcePreferences = state[ sourceStoreName ]?.preferences;\n\tconst sourceFeatures = sourcePreferences?.features;\n\n\tif ( sourceFeatures ) {\n\t\tconst targetFeatures =\n\t\t\tstate[ interfaceStoreName ]?.preferences?.features;\n\n\t\t// Avoid migrating features again if they've previously been migrated.\n\t\tif ( ! targetFeatures?.[ sourceStoreName ] ) {\n\t\t\t// Set the feature values in the interface store, the features\n\t\t\t// object is keyed by 'scope', which matches the store name for\n\t\t\t// the source.\n\t\t\tpersistence.set( interfaceStoreName, {\n\t\t\t\tpreferences: {\n\t\t\t\t\tfeatures: {\n\t\t\t\t\t\t...targetFeatures,\n\t\t\t\t\t\t[ sourceStoreName ]: sourceFeatures,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\t// Remove feature preferences from the source.\n\t\t\tpersistence.set( sourceStoreName, {\n\t\t\t\tpreferences: {\n\t\t\t\t\t...sourcePreferences,\n\t\t\t\t\tfeatures: undefined,\n\t\t\t\t},\n\t\t\t} );\n\t\t}\n\t}\n}\n\n/**\n * Deprecated: Remove this function and the code in WordPress Core that calls\n * it once WordPress 6.0 is released.\n */\n\npersistencePlugin.__unstableMigrate = ( pluginOptions ) => {\n\tconst persistence = createPersistenceInterface( pluginOptions );\n\n\tmigrateFeaturePreferencesToInterfaceStore(\n\t\tpersistence,\n\t\t'core/edit-widgets'\n\t);\n\tmigrateFeaturePreferencesToInterfaceStore(\n\t\tpersistence,\n\t\t'core/customize-widgets'\n\t);\n\tmigrateFeaturePreferencesToInterfaceStore( persistence, 'core/edit-post' );\n};\n\nexport default persistencePlugin;\n"]}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
|
|
4
|
-
|
|
5
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
6
4
|
|
|
7
5
|
Object.defineProperty(exports, "__esModule", {
|
|
@@ -33,6 +31,10 @@ var metadataSelectors = _interopRequireWildcard(require("./metadata/selectors"))
|
|
|
33
31
|
|
|
34
32
|
var metadataActions = _interopRequireWildcard(require("./metadata/actions"));
|
|
35
33
|
|
|
34
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
35
|
+
|
|
36
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
37
|
+
|
|
36
38
|
/**
|
|
37
39
|
* External dependencies
|
|
38
40
|
*/
|
|
@@ -45,11 +47,11 @@ var metadataActions = _interopRequireWildcard(require("./metadata/actions"));
|
|
|
45
47
|
* Internal dependencies
|
|
46
48
|
*/
|
|
47
49
|
|
|
48
|
-
/** @typedef {import('../types').
|
|
50
|
+
/** @typedef {import('../types').DataRegistry} DataRegistry */
|
|
49
51
|
|
|
50
|
-
/** @typedef {import('../types').
|
|
52
|
+
/** @typedef {import('../types').StoreDescriptor} StoreDescriptor */
|
|
51
53
|
|
|
52
|
-
/** @typedef {import('../types').
|
|
54
|
+
/** @typedef {import('../types').ReduxStoreConfig} ReduxStoreConfig */
|
|
53
55
|
const trimUndefinedValues = array => {
|
|
54
56
|
const result = [...array];
|
|
55
57
|
|
|
@@ -92,7 +94,7 @@ function createResolversCache() {
|
|
|
92
94
|
};
|
|
93
95
|
}
|
|
94
96
|
/**
|
|
95
|
-
* Creates a data store
|
|
97
|
+
* Creates a data store descriptor for the provided Redux store configuration containing
|
|
96
98
|
* properties describing reducer, actions, selectors, controls and resolvers.
|
|
97
99
|
*
|
|
98
100
|
* @example
|
|
@@ -107,12 +109,12 @@ function createResolversCache() {
|
|
|
107
109
|
* } );
|
|
108
110
|
* ```
|
|
109
111
|
*
|
|
110
|
-
* @param {string}
|
|
111
|
-
* @param {
|
|
112
|
-
*
|
|
113
|
-
*
|
|
112
|
+
* @param {string} key Unique namespace identifier.
|
|
113
|
+
* @param {ReduxStoreConfig} options Registered store options, with properties
|
|
114
|
+
* describing reducer, actions, selectors,
|
|
115
|
+
* and resolvers.
|
|
114
116
|
*
|
|
115
|
-
* @return {
|
|
117
|
+
* @return {StoreDescriptor} Store Object.
|
|
116
118
|
*/
|
|
117
119
|
|
|
118
120
|
|
|
@@ -143,13 +145,25 @@ function createReduxStore(key, options) {
|
|
|
143
145
|
const actions = mapActions({ ...metadataActions,
|
|
144
146
|
...options.actions
|
|
145
147
|
}, store);
|
|
146
|
-
let selectors = mapSelectors({ ...(0, _lodash.mapValues)(metadataSelectors, selector => (state
|
|
148
|
+
let selectors = mapSelectors({ ...(0, _lodash.mapValues)(metadataSelectors, selector => function (state) {
|
|
149
|
+
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
150
|
+
args[_key - 1] = arguments[_key];
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return selector(state.metadata, ...args);
|
|
154
|
+
}),
|
|
147
155
|
...(0, _lodash.mapValues)(options.selectors, selector => {
|
|
148
156
|
if (selector.isRegistrySelector) {
|
|
149
157
|
selector.registry = registry;
|
|
150
158
|
}
|
|
151
159
|
|
|
152
|
-
return (state
|
|
160
|
+
return function (state) {
|
|
161
|
+
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
|
|
162
|
+
args[_key2 - 1] = arguments[_key2];
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
return selector(state.root, ...args);
|
|
166
|
+
};
|
|
153
167
|
})
|
|
154
168
|
}, store);
|
|
155
169
|
|
|
@@ -210,12 +224,12 @@ function createReduxStore(key, options) {
|
|
|
210
224
|
/**
|
|
211
225
|
* Creates a redux store for a namespace.
|
|
212
226
|
*
|
|
213
|
-
* @param {string}
|
|
214
|
-
* @param {Object}
|
|
215
|
-
*
|
|
216
|
-
*
|
|
217
|
-
* @param {
|
|
218
|
-
* @param {Object}
|
|
227
|
+
* @param {string} key Unique namespace identifier.
|
|
228
|
+
* @param {Object} options Registered store options, with properties
|
|
229
|
+
* describing reducer, actions, selectors,
|
|
230
|
+
* and resolvers.
|
|
231
|
+
* @param {DataRegistry} registry Registry reference.
|
|
232
|
+
* @param {Object} thunkArgs Argument object for the thunk middleware.
|
|
219
233
|
* @return {Object} Newly created redux store.
|
|
220
234
|
*/
|
|
221
235
|
|
|
@@ -301,8 +315,8 @@ function mapSelectors(selectors, store) {
|
|
|
301
315
|
|
|
302
316
|
|
|
303
317
|
function mapActions(actions, store) {
|
|
304
|
-
const createBoundAction = action => (
|
|
305
|
-
return Promise.resolve(store.dispatch(action(...
|
|
318
|
+
const createBoundAction = action => function () {
|
|
319
|
+
return Promise.resolve(store.dispatch(action(...arguments)));
|
|
306
320
|
};
|
|
307
321
|
|
|
308
322
|
return (0, _lodash.mapValues)(actions, createBoundAction);
|
|
@@ -318,25 +332,31 @@ function mapActions(actions, store) {
|
|
|
318
332
|
|
|
319
333
|
|
|
320
334
|
function mapResolveSelectors(selectors, store) {
|
|
321
|
-
return (0, _lodash.mapValues)((0, _lodash.omit)(selectors, ['getIsResolving', 'hasStartedResolution', 'hasFinishedResolution', 'isResolving', 'getCachedResolvers']), (selector, selectorName) => (
|
|
322
|
-
|
|
335
|
+
return (0, _lodash.mapValues)((0, _lodash.omit)(selectors, ['getIsResolving', 'hasStartedResolution', 'hasFinishedResolution', 'isResolving', 'getCachedResolvers']), (selector, selectorName) => function () {
|
|
336
|
+
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
|
337
|
+
args[_key3] = arguments[_key3];
|
|
338
|
+
}
|
|
323
339
|
|
|
324
|
-
|
|
340
|
+
return new Promise(resolve => {
|
|
341
|
+
const hasFinished = () => selectors.hasFinishedResolution(selectorName, args);
|
|
325
342
|
|
|
343
|
+
const getResult = () => selector.apply(null, args); // trigger the selector (to trigger the resolver)
|
|
326
344
|
|
|
327
|
-
const result = getResult();
|
|
328
345
|
|
|
329
|
-
|
|
330
|
-
return resolve(result);
|
|
331
|
-
}
|
|
346
|
+
const result = getResult();
|
|
332
347
|
|
|
333
|
-
const unsubscribe = store.subscribe(() => {
|
|
334
348
|
if (hasFinished()) {
|
|
335
|
-
|
|
336
|
-
resolve(getResult());
|
|
349
|
+
return resolve(result);
|
|
337
350
|
}
|
|
351
|
+
|
|
352
|
+
const unsubscribe = store.subscribe(() => {
|
|
353
|
+
if (hasFinished()) {
|
|
354
|
+
unsubscribe();
|
|
355
|
+
resolve(getResult());
|
|
356
|
+
}
|
|
357
|
+
});
|
|
338
358
|
});
|
|
339
|
-
})
|
|
359
|
+
});
|
|
340
360
|
}
|
|
341
361
|
/**
|
|
342
362
|
* Returns resolvers with matched selectors for a given namespace.
|
|
@@ -374,7 +394,11 @@ function mapResolvers(resolvers, selectors, store, resolversCache) {
|
|
|
374
394
|
return selector;
|
|
375
395
|
}
|
|
376
396
|
|
|
377
|
-
const selectorResolver = (
|
|
397
|
+
const selectorResolver = function () {
|
|
398
|
+
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
|
399
|
+
args[_key4] = arguments[_key4];
|
|
400
|
+
}
|
|
401
|
+
|
|
378
402
|
async function fulfillSelector() {
|
|
379
403
|
const state = store.getState();
|
|
380
404
|
|
|
@@ -422,13 +446,17 @@ function mapResolvers(resolvers, selectors, store, resolversCache) {
|
|
|
422
446
|
*/
|
|
423
447
|
|
|
424
448
|
|
|
425
|
-
async function fulfillResolver(store, resolvers, selectorName
|
|
449
|
+
async function fulfillResolver(store, resolvers, selectorName) {
|
|
426
450
|
const resolver = (0, _lodash.get)(resolvers, [selectorName]);
|
|
427
451
|
|
|
428
452
|
if (!resolver) {
|
|
429
453
|
return;
|
|
430
454
|
}
|
|
431
455
|
|
|
456
|
+
for (var _len5 = arguments.length, args = new Array(_len5 > 3 ? _len5 - 3 : 0), _key5 = 3; _key5 < _len5; _key5++) {
|
|
457
|
+
args[_key5 - 3] = arguments[_key5];
|
|
458
|
+
}
|
|
459
|
+
|
|
432
460
|
const action = resolver.fulfill(...args);
|
|
433
461
|
|
|
434
462
|
if (action) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/data/src/redux-store/index.js"],"names":["trimUndefinedValues","array","result","i","length","undefined","splice","createResolversCache","cache","isRunning","selectorName","args","get","clear","delete","markAsRunning","EquivalentKeyMap","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","metadataActions","selectors","mapSelectors","metadataSelectors","state","metadata","isRegistrySelector","root","mapResolvers","resolveSelectors","mapResolveSelectors","getState","subscribe","listener","lastState","hasChanged","controls","builtinControls","normalizedControls","control","isRegistryControl","middlewares","promise","__experimentalUseThunks","push","enhancers","window","__REDUX_DEVTOOLS_EXTENSION__","instanceId","initialState","enhancedReducer","metadataReducer","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"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/data/src/redux-store/index.js"],"names":["trimUndefinedValues","array","result","i","length","undefined","splice","createResolversCache","cache","isRunning","selectorName","args","get","clear","delete","markAsRunning","EquivalentKeyMap","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","metadataActions","selectors","mapSelectors","metadataSelectors","state","metadata","isRegistrySelector","root","mapResolvers","resolveSelectors","mapResolveSelectors","getState","subscribe","listener","lastState","hasChanged","controls","builtinControls","normalizedControls","control","isRegistryControl","middlewares","promise","__experimentalUseThunks","push","enhancers","window","__REDUX_DEVTOOLS_EXTENSION__","instanceId","initialState","enhancedReducer","metadataReducer","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').DataRegistry} DataRegistry */\n/** @typedef {import('../types').StoreDescriptor} StoreDescriptor */\n/** @typedef {import('../types').ReduxStoreConfig} ReduxStoreConfig */\n\nconst trimUndefinedValues = ( array ) => {\n\tconst result = [ ...array ];\n\tfor ( let i = result.length - 1; i >= 0; i-- ) {\n\t\tif ( result[ i ] === undefined ) {\n\t\t\tresult.splice( i, 1 );\n\t\t}\n\t}\n\treturn result;\n};\n\n/**\n * Create a cache to track whether resolvers started running or not.\n *\n * @return {Object} Resolvers Cache.\n */\nfunction createResolversCache() {\n\tconst cache = {};\n\treturn {\n\t\tisRunning( selectorName, args ) {\n\t\t\treturn (\n\t\t\t\tcache[ selectorName ] &&\n\t\t\t\tcache[ selectorName ].get( trimUndefinedValues( args ) )\n\t\t\t);\n\t\t},\n\n\t\tclear( selectorName, args ) {\n\t\t\tif ( cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ].delete( trimUndefinedValues( args ) );\n\t\t\t}\n\t\t},\n\n\t\tmarkAsRunning( selectorName, args ) {\n\t\t\tif ( ! cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ] = new EquivalentKeyMap();\n\t\t\t}\n\n\t\t\tcache[ selectorName ].set( trimUndefinedValues( args ), true );\n\t\t},\n\t};\n}\n\n/**\n * Creates a data store descriptor for the provided Redux store configuration containing\n * properties describing reducer, actions, selectors, controls and resolvers.\n *\n * @example\n * ```js\n * import { createReduxStore } from '@wordpress/data';\n *\n * const store = createReduxStore( 'demo', {\n * reducer: ( state = 'OK' ) => state,\n * selectors: {\n * getValue: ( state ) => state,\n * },\n * } );\n * ```\n *\n * @param {string} key Unique namespace identifier.\n * @param {ReduxStoreConfig} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n *\n * @return {StoreDescriptor} Store Object.\n */\nexport default function createReduxStore( key, options ) {\n\treturn {\n\t\tname: key,\n\t\tinstantiate: ( registry ) => {\n\t\t\tconst reducer = options.reducer;\n\t\t\tconst thunkArgs = {\n\t\t\t\tregistry,\n\t\t\t\tget dispatch() {\n\t\t\t\t\treturn Object.assign(\n\t\t\t\t\t\t( action ) => store.dispatch( action ),\n\t\t\t\t\t\tgetActions()\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tget select() {\n\t\t\t\t\treturn Object.assign(\n\t\t\t\t\t\t( selector ) =>\n\t\t\t\t\t\t\tselector( store.__unstableOriginalGetState() ),\n\t\t\t\t\t\tgetSelectors()\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tget resolveSelect() {\n\t\t\t\t\treturn getResolveSelectors();\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst store = instantiateReduxStore(\n\t\t\t\tkey,\n\t\t\t\toptions,\n\t\t\t\tregistry,\n\t\t\t\tthunkArgs\n\t\t\t);\n\t\t\tconst resolversCache = createResolversCache();\n\n\t\t\tlet resolvers;\n\t\t\tconst actions = mapActions(\n\t\t\t\t{\n\t\t\t\t\t...metadataActions,\n\t\t\t\t\t...options.actions,\n\t\t\t\t},\n\t\t\t\tstore\n\t\t\t);\n\n\t\t\tlet selectors = mapSelectors(\n\t\t\t\t{\n\t\t\t\t\t...mapValues(\n\t\t\t\t\t\tmetadataSelectors,\n\t\t\t\t\t\t( selector ) => ( state, ...args ) =>\n\t\t\t\t\t\t\tselector( state.metadata, ...args )\n\t\t\t\t\t),\n\t\t\t\t\t...mapValues( options.selectors, ( selector ) => {\n\t\t\t\t\t\tif ( selector.isRegistrySelector ) {\n\t\t\t\t\t\t\tselector.registry = registry;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn ( state, ...args ) =>\n\t\t\t\t\t\t\tselector( state.root, ...args );\n\t\t\t\t\t} ),\n\t\t\t\t},\n\t\t\t\tstore\n\t\t\t);\n\t\t\tif ( options.resolvers ) {\n\t\t\t\tconst result = mapResolvers(\n\t\t\t\t\toptions.resolvers,\n\t\t\t\t\tselectors,\n\t\t\t\t\tstore,\n\t\t\t\t\tresolversCache\n\t\t\t\t);\n\t\t\t\tresolvers = result.resolvers;\n\t\t\t\tselectors = result.selectors;\n\t\t\t}\n\n\t\t\tconst resolveSelectors = mapResolveSelectors( selectors, store );\n\n\t\t\tconst getSelectors = () => selectors;\n\t\t\tconst getActions = () => actions;\n\t\t\tconst getResolveSelectors = () => resolveSelectors;\n\n\t\t\t// We have some modules monkey-patching the store object\n\t\t\t// It's wrong to do so but until we refactor all of our effects to controls\n\t\t\t// We need to keep the same \"store\" instance here.\n\t\t\tstore.__unstableOriginalGetState = store.getState;\n\t\t\tstore.getState = () => store.__unstableOriginalGetState().root;\n\n\t\t\t// Customize subscribe behavior to call listeners only on effective change,\n\t\t\t// not on every dispatch.\n\t\t\tconst subscribe =\n\t\t\t\tstore &&\n\t\t\t\t( ( listener ) => {\n\t\t\t\t\tlet lastState = store.__unstableOriginalGetState();\n\t\t\t\t\treturn store.subscribe( () => {\n\t\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\t\t\tconst hasChanged = state !== lastState;\n\t\t\t\t\t\tlastState = state;\n\n\t\t\t\t\t\tif ( hasChanged ) {\n\t\t\t\t\t\t\tlistener();\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t} );\n\n\t\t\t// This can be simplified to just { subscribe, getSelectors, getActions }\n\t\t\t// Once we remove the use function.\n\t\t\treturn {\n\t\t\t\treducer,\n\t\t\t\tstore,\n\t\t\t\tactions,\n\t\t\t\tselectors,\n\t\t\t\tresolvers,\n\t\t\t\tgetSelectors,\n\t\t\t\tgetResolveSelectors,\n\t\t\t\tgetActions,\n\t\t\t\tsubscribe,\n\t\t\t};\n\t\t},\n\t};\n}\n\n/**\n * Creates a redux store for a namespace.\n *\n * @param {string} key Unique namespace identifier.\n * @param {Object} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n * @param {DataRegistry} registry Registry reference.\n * @param {Object} thunkArgs Argument object for the thunk middleware.\n * @return {Object} Newly created redux store.\n */\nfunction instantiateReduxStore( key, options, registry, thunkArgs ) {\n\tconst controls = {\n\t\t...options.controls,\n\t\t...builtinControls,\n\t};\n\n\tconst normalizedControls = mapValues( controls, ( control ) =>\n\t\tcontrol.isRegistryControl ? control( registry ) : control\n\t);\n\n\tconst middlewares = [\n\t\tcreateResolversCacheMiddleware( registry, key ),\n\t\tpromise,\n\t\tcreateReduxRoutineMiddleware( normalizedControls ),\n\t];\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"]}
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.startResolution = startResolution;
|
|
7
6
|
exports.finishResolution = finishResolution;
|
|
8
|
-
exports.startResolutions = startResolutions;
|
|
9
7
|
exports.finishResolutions = finishResolutions;
|
|
10
8
|
exports.invalidateResolution = invalidateResolution;
|
|
11
9
|
exports.invalidateResolutionForStore = invalidateResolutionForStore;
|
|
12
10
|
exports.invalidateResolutionForStoreSelector = invalidateResolutionForStoreSelector;
|
|
11
|
+
exports.startResolution = startResolution;
|
|
12
|
+
exports.startResolutions = startResolutions;
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Returns an action object used in signalling that selector resolution has
|
|
@@ -27,7 +27,10 @@ var _utils = require("./utils");
|
|
|
27
27
|
*
|
|
28
28
|
* selectorName -> EquivalentKeyMap<Array,boolean>
|
|
29
29
|
*/
|
|
30
|
-
const subKeysIsResolved = (0, _utils.onSubKey)('selectorName')(
|
|
30
|
+
const subKeysIsResolved = (0, _utils.onSubKey)('selectorName')(function () {
|
|
31
|
+
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new _equivalentKeyMap.default();
|
|
32
|
+
let action = arguments.length > 1 ? arguments[1] : undefined;
|
|
33
|
+
|
|
31
34
|
switch (action.type) {
|
|
32
35
|
case 'START_RESOLUTION':
|
|
33
36
|
case 'FINISH_RESOLUTION':
|
|
@@ -72,7 +75,10 @@ const subKeysIsResolved = (0, _utils.onSubKey)('selectorName')((state = new _equ
|
|
|
72
75
|
* @return Next state.
|
|
73
76
|
*/
|
|
74
77
|
|
|
75
|
-
const isResolved = (
|
|
78
|
+
const isResolved = function () {
|
|
79
|
+
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
80
|
+
let action = arguments.length > 1 ? arguments[1] : undefined;
|
|
81
|
+
|
|
76
82
|
switch (action.type) {
|
|
77
83
|
case 'INVALIDATE_RESOLUTION_FOR_STORE':
|
|
78
84
|
return {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/data/src/redux-store/metadata/reducer.ts"],"names":["subKeysIsResolved","state","EquivalentKeyMap","action","type","isStarting","nextState","set","args","resolutionArgs","delete","isResolved","selectorName"],"mappings":";;;;;;;;;AAGA;;AACA;;AAMA;;AAVA;AACA;AACA;;AAKA;AACA;AACA;;AAgBA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,iBAA6D,GAAG,qBAGnE,cAHmE,EAGjD,
|
|
1
|
+
{"version":3,"sources":["@wordpress/data/src/redux-store/metadata/reducer.ts"],"names":["subKeysIsResolved","state","EquivalentKeyMap","action","type","isStarting","nextState","set","args","resolutionArgs","delete","isResolved","selectorName"],"mappings":";;;;;;;;;AAGA;;AACA;;AAMA;;AAVA;AACA;AACA;;AAKA;AACA;AACA;;AAgBA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,iBAA6D,GAAG,qBAGnE,cAHmE,EAGjD,YAAsD;AAAA,MAApDC,KAAoD,uEAA5C,IAAIC,yBAAJ,EAA4C;AAAA,MAApBC,MAAoB;;AAC1E,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,kBAAL;AACA,SAAK,mBAAL;AAA0B;AACzB,cAAMC,UAAU,GAAGF,MAAM,CAACC,IAAP,KAAgB,kBAAnC;AACA,cAAME,SAAS,GAAG,IAAIJ,yBAAJ,CAAsBD,KAAtB,CAAlB;AACAK,QAAAA,SAAS,CAACC,GAAV,CAAeJ,MAAM,CAACK,IAAtB,EAA4BH,UAA5B;AACA,eAAOC,SAAP;AACA;;AACD,SAAK,mBAAL;AACA,SAAK,oBAAL;AAA2B;AAC1B,cAAMD,UAAU,GAAGF,MAAM,CAACC,IAAP,KAAgB,mBAAnC;AACA,cAAME,SAAS,GAAG,IAAIJ,yBAAJ,CAAsBD,KAAtB,CAAlB;;AACA,aAAM,MAAMQ,cAAZ,IAA8BN,MAAM,CAACK,IAArC,EAA4C;AAC3CF,UAAAA,SAAS,CAACC,GAAV,CAAeE,cAAf,EAA+BJ,UAA/B;AACA;;AACD,eAAOC,SAAP;AACA;;AACD,SAAK,uBAAL;AAA8B;AAC7B,cAAMA,SAAS,GAAG,IAAIJ,yBAAJ,CAAsBD,KAAtB,CAAlB;AACAK,QAAAA,SAAS,CAACI,MAAV,CAAkBP,MAAM,CAACK,IAAzB;AACA,eAAOF,SAAP;AACA;AArBF;;AAuBA,SAAOL,KAAP;AACA,CA5BqE,CAAtE;AA8BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMU,UAAU,GAAG,YAA2D;AAAA,MAAzDV,KAAyD,uEAAxB,EAAwB;AAAA,MAApBE,MAAoB;;AAC7E,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,iCAAL;AACC,aAAO,EAAP;;AACD,SAAK,0CAAL;AACC,aAAO,iBAAKH,KAAL,EAAY,CAAEE,MAAM,CAACS,YAAT,CAAZ,IACJ,kBAAMX,KAAN,EAAa,CAAEE,MAAM,CAACS,YAAT,CAAb,CADI,GAEJX,KAFH;;AAGD,SAAK,kBAAL;AACA,SAAK,mBAAL;AACA,SAAK,mBAAL;AACA,SAAK,oBAAL;AACA,SAAK,uBAAL;AACC,aAAOD,iBAAiB,CAAEC,KAAF,EAASE,MAAT,CAAxB;AAZF;;AAcA,SAAOF,KAAP;AACA,CAhBD;;eAkBeU,U","sourcesContent":["/**\n * External dependencies\n */\nimport { omit, has } from 'lodash';\nimport EquivalentKeyMap from 'equivalent-key-map';\nimport type { Reducer } from 'redux';\n\n/**\n * Internal dependencies\n */\nimport { onSubKey } from './utils';\n\ntype Action =\n\t| ReturnType< typeof import('./actions').startResolution >\n\t| ReturnType< typeof import('./actions').finishResolution >\n\t| ReturnType< typeof import('./actions').startResolutions >\n\t| ReturnType< typeof import('./actions').finishResolutions >\n\t| ReturnType< typeof import('./actions').invalidateResolution >\n\t| ReturnType< typeof import('./actions').invalidateResolutionForStore >\n\t| ReturnType<\n\t\t\ttypeof import('./actions').invalidateResolutionForStoreSelector\n\t >;\n\nexport type State = EquivalentKeyMap< unknown[] | unknown, boolean >;\n\n/**\n * Reducer function returning next state for selector resolution of\n * subkeys, object form:\n *\n * selectorName -> EquivalentKeyMap<Array,boolean>\n */\nconst subKeysIsResolved: Reducer< Record< string, State >, Action > = onSubKey<\n\tState,\n\tAction\n>( 'selectorName' )( ( state = new EquivalentKeyMap(), action: Action ) => {\n\tswitch ( action.type ) {\n\t\tcase 'START_RESOLUTION':\n\t\tcase 'FINISH_RESOLUTION': {\n\t\t\tconst isStarting = action.type === 'START_RESOLUTION';\n\t\t\tconst nextState = new EquivalentKeyMap( state );\n\t\t\tnextState.set( action.args, isStarting );\n\t\t\treturn nextState;\n\t\t}\n\t\tcase 'START_RESOLUTIONS':\n\t\tcase 'FINISH_RESOLUTIONS': {\n\t\t\tconst isStarting = action.type === 'START_RESOLUTIONS';\n\t\t\tconst nextState = new EquivalentKeyMap( state );\n\t\t\tfor ( const resolutionArgs of action.args ) {\n\t\t\t\tnextState.set( resolutionArgs, isStarting );\n\t\t\t}\n\t\t\treturn nextState;\n\t\t}\n\t\tcase 'INVALIDATE_RESOLUTION': {\n\t\t\tconst nextState = new EquivalentKeyMap( state );\n\t\t\tnextState.delete( action.args );\n\t\t\treturn nextState;\n\t\t}\n\t}\n\treturn state;\n} );\n\n/**\n * Reducer function returning next state for selector resolution, object form:\n *\n * selectorName -> EquivalentKeyMap<Array, boolean>\n *\n * @param state Current state.\n * @param action Dispatched action.\n *\n * @return Next state.\n */\nconst isResolved = ( state: Record< string, State > = {}, action: Action ) => {\n\tswitch ( action.type ) {\n\t\tcase 'INVALIDATE_RESOLUTION_FOR_STORE':\n\t\t\treturn {};\n\t\tcase 'INVALIDATE_RESOLUTION_FOR_STORE_SELECTOR':\n\t\t\treturn has( state, [ action.selectorName ] )\n\t\t\t\t? omit( state, [ action.selectorName ] )\n\t\t\t\t: state;\n\t\tcase 'START_RESOLUTION':\n\t\tcase 'FINISH_RESOLUTION':\n\t\tcase 'START_RESOLUTIONS':\n\t\tcase 'FINISH_RESOLUTIONS':\n\t\tcase 'INVALIDATE_RESOLUTION':\n\t\t\treturn subKeysIsResolved( state, action );\n\t}\n\treturn state;\n};\n\nexport default isResolved;\n"]}
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.getCachedResolvers = getCachedResolvers;
|
|
6
7
|
exports.getIsResolving = getIsResolving;
|
|
7
|
-
exports.hasStartedResolution = hasStartedResolution;
|
|
8
8
|
exports.hasFinishedResolution = hasFinishedResolution;
|
|
9
|
+
exports.hasStartedResolution = hasStartedResolution;
|
|
9
10
|
exports.isResolving = isResolving;
|
|
10
|
-
exports.getCachedResolvers = getCachedResolvers;
|
|
11
11
|
|
|
12
12
|
var _lodash = require("lodash");
|
|
13
13
|
|
|
@@ -50,7 +50,8 @@ function getIsResolving(state, selectorName, args) {
|
|
|
50
50
|
*/
|
|
51
51
|
|
|
52
52
|
|
|
53
|
-
function hasStartedResolution(state, selectorName
|
|
53
|
+
function hasStartedResolution(state, selectorName) {
|
|
54
|
+
let args = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
54
55
|
return getIsResolving(state, selectorName, args) !== undefined;
|
|
55
56
|
}
|
|
56
57
|
/**
|
|
@@ -65,7 +66,8 @@ function hasStartedResolution(state, selectorName, args = []) {
|
|
|
65
66
|
*/
|
|
66
67
|
|
|
67
68
|
|
|
68
|
-
function hasFinishedResolution(state, selectorName
|
|
69
|
+
function hasFinishedResolution(state, selectorName) {
|
|
70
|
+
let args = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
69
71
|
return getIsResolving(state, selectorName, args) === false;
|
|
70
72
|
}
|
|
71
73
|
/**
|
|
@@ -80,7 +82,8 @@ function hasFinishedResolution(state, selectorName, args = []) {
|
|
|
80
82
|
*/
|
|
81
83
|
|
|
82
84
|
|
|
83
|
-
function isResolving(state, selectorName
|
|
85
|
+
function isResolving(state, selectorName) {
|
|
86
|
+
let args = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
84
87
|
return getIsResolving(state, selectorName, args) === true;
|
|
85
88
|
}
|
|
86
89
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/data/src/redux-store/metadata/selectors.js"],"names":["getIsResolving","state","selectorName","args","map","undefined","get","hasStartedResolution","hasFinishedResolution","isResolving","getCachedResolvers"],"mappings":";;;;;;;;;;;AAGA;;AAHA;AACA;AACA;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,cAAT,CAAyBC,KAAzB,EAAgCC,YAAhC,EAA8CC,IAA9C,EAAqD;AAC3D,QAAMC,GAAG,GAAG,iBAAKH,KAAL,EAAY,CAAEC,YAAF,CAAZ,CAAZ;;AACA,MAAK,CAAEE,GAAP,EAAa;AACZ,WAAOC,SAAP;AACA;;AAED,SAAOD,GAAG,CAACE,GAAJ,CAASH,IAAT,CAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASI,oBAAT,CAA+BN,KAA/B,EAAsCC,YAAtC,
|
|
1
|
+
{"version":3,"sources":["@wordpress/data/src/redux-store/metadata/selectors.js"],"names":["getIsResolving","state","selectorName","args","map","undefined","get","hasStartedResolution","hasFinishedResolution","isResolving","getCachedResolvers"],"mappings":";;;;;;;;;;;AAGA;;AAHA;AACA;AACA;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,cAAT,CAAyBC,KAAzB,EAAgCC,YAAhC,EAA8CC,IAA9C,EAAqD;AAC3D,QAAMC,GAAG,GAAG,iBAAKH,KAAL,EAAY,CAAEC,YAAF,CAAZ,CAAZ;;AACA,MAAK,CAAEE,GAAP,EAAa;AACZ,WAAOC,SAAP;AACA;;AAED,SAAOD,GAAG,CAACE,GAAJ,CAASH,IAAT,CAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASI,oBAAT,CAA+BN,KAA/B,EAAsCC,YAAtC,EAAgE;AAAA,MAAZC,IAAY,uEAAL,EAAK;AACtE,SAAOH,cAAc,CAAEC,KAAF,EAASC,YAAT,EAAuBC,IAAvB,CAAd,KAAgDE,SAAvD;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASG,qBAAT,CAAgCP,KAAhC,EAAuCC,YAAvC,EAAiE;AAAA,MAAZC,IAAY,uEAAL,EAAK;AACvE,SAAOH,cAAc,CAAEC,KAAF,EAASC,YAAT,EAAuBC,IAAvB,CAAd,KAAgD,KAAvD;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASM,WAAT,CAAsBR,KAAtB,EAA6BC,YAA7B,EAAuD;AAAA,MAAZC,IAAY,uEAAL,EAAK;AAC7D,SAAOH,cAAc,CAAEC,KAAF,EAASC,YAAT,EAAuBC,IAAvB,CAAd,KAAgD,IAAvD;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASO,kBAAT,CAA6BT,KAA7B,EAAqC;AAC3C,SAAOA,KAAP;AACA","sourcesContent":["/**\n * External dependencies\n */\nimport { get } from 'lodash';\n\n/** @typedef {Record<string, import('./reducer').State>} State */\n\n/**\n * Returns the raw `isResolving` value for a given selector name,\n * and arguments set. May be undefined if the selector has never been resolved\n * or not resolved for the given set of arguments, otherwise true or false for\n * resolution started and completed respectively.\n *\n * @param {State} state Data state.\n * @param {string} selectorName Selector name.\n * @param {unknown[]} args Arguments passed to selector.\n *\n * @return {boolean | undefined} isResolving value.\n */\nexport function getIsResolving( state, selectorName, args ) {\n\tconst map = get( state, [ selectorName ] );\n\tif ( ! map ) {\n\t\treturn undefined;\n\t}\n\n\treturn map.get( args );\n}\n\n/**\n * Returns true if resolution has already been triggered for a given\n * selector name, and arguments set.\n *\n * @param {State} state Data state.\n * @param {string} selectorName Selector name.\n * @param {unknown[]} [args] Arguments passed to selector (default `[]`).\n *\n * @return {boolean} Whether resolution has been triggered.\n */\nexport function hasStartedResolution( state, selectorName, args = [] ) {\n\treturn getIsResolving( state, selectorName, args ) !== undefined;\n}\n\n/**\n * Returns true if resolution has completed for a given selector\n * name, and arguments set.\n *\n * @param {State} state Data state.\n * @param {string} selectorName Selector name.\n * @param {unknown[]} [args] Arguments passed to selector.\n *\n * @return {boolean} Whether resolution has completed.\n */\nexport function hasFinishedResolution( state, selectorName, args = [] ) {\n\treturn getIsResolving( state, selectorName, args ) === false;\n}\n\n/**\n * Returns true if resolution has been triggered but has not yet completed for\n * a given selector name, and arguments set.\n *\n * @param {State} state Data state.\n * @param {string} selectorName Selector name.\n * @param {unknown[]} [args] Arguments passed to selector.\n *\n * @return {boolean} Whether resolution is in progress.\n */\nexport function isResolving( state, selectorName, args = [] ) {\n\treturn getIsResolving( state, selectorName, args ) === true;\n}\n\n/**\n * Returns the list of the cached resolvers.\n *\n * @param {State} state Data state.\n *\n * @return {State} Resolvers mapped by args and selectorName.\n */\nexport function getCachedResolvers( state ) {\n\treturn state;\n}\n"]}
|
|
@@ -16,11 +16,11 @@ exports.onSubKey = void 0;
|
|
|
16
16
|
*
|
|
17
17
|
* @return {(reducer: import('redux').Reducer<TState, TAction>) => import('redux').Reducer<Record<string, TState>, TAction>} Higher-order reducer.
|
|
18
18
|
*/
|
|
19
|
-
const onSubKey = actionProperty => reducer => (
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
const onSubKey = actionProperty => reducer => function () {
|
|
20
|
+
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] :
|
|
21
|
+
/** @type {Record<string, TState>} */
|
|
22
|
+
{};
|
|
23
|
+
let action = arguments.length > 1 ? arguments[1] : undefined;
|
|
24
24
|
// Retrieve subkey from action. Do not track if undefined; useful for cases
|
|
25
25
|
// where reducer is scoped by action shape.
|
|
26
26
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/data/src/redux-store/metadata/utils.js"],"names":["onSubKey","actionProperty","reducer","state","action","key","undefined","nextKeyState"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,QAAQ,GAAKC,cAAF,IAAwBC,OAAF,IAAe;
|
|
1
|
+
{"version":3,"sources":["@wordpress/data/src/redux-store/metadata/utils.js"],"names":["onSubKey","actionProperty","reducer","state","action","key","undefined","nextKeyState"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,QAAQ,GAAKC,cAAF,IAAwBC,OAAF,IAAe,YAIxD;AAAA,MAFJC,KAEI;AAFI;AAAwC,IAE5C;AAAA,MADJC,MACI;AACJ;AACA;;AACA;;AACA;AACA,QAAMC,GAAG,GAAGD,MAAM,CAAEH,cAAF,CAAlB;;AACA,MAAKI,GAAG,KAAKC,SAAb,EAAyB;AACxB,WAAOH,KAAP;AACA,GARG,CAUJ;AACA;;;AACA,QAAMI,YAAY,GAAGL,OAAO,CAAEC,KAAK,CAAEE,GAAF,CAAP,EAAgBD,MAAhB,CAA5B;;AACA,MAAKG,YAAY,KAAKJ,KAAK,CAAEE,GAAF,CAA3B,EAAqC;AACpC,WAAOF,KAAP;AACA;;AAED,SAAO,EACN,GAAGA,KADG;AAEN,KAAEE,GAAF,GAASE;AAFH,GAAP;AAIA,CAzBM","sourcesContent":["/**\n * Higher-order reducer creator which creates a combined reducer object, keyed\n * by a property on the action object.\n *\n * @template {any} TState\n * @template {import('redux').AnyAction} TAction\n *\n * @param {string} actionProperty Action property by which to key object.\n *\n * @return {(reducer: import('redux').Reducer<TState, TAction>) => import('redux').Reducer<Record<string, TState>, TAction>} Higher-order reducer.\n */\nexport const onSubKey = ( actionProperty ) => ( reducer ) => (\n\t/* eslint-disable jsdoc/no-undefined-types */\n\tstate = /** @type {Record<string, TState>} */ ( {} ),\n\taction\n) => {\n\t// Retrieve subkey from action. Do not track if undefined; useful for cases\n\t// where reducer is scoped by action shape.\n\t/** @type {keyof state} */\n\t/* eslint-enable jsdoc/no-undefined-types */\n\tconst key = action[ actionProperty ];\n\tif ( key === undefined ) {\n\t\treturn state;\n\t}\n\n\t// Avoid updating state if unchanged. Note that this also accounts for a\n\t// reducer which returns undefined on a key which is not yet tracked.\n\tconst nextKeyState = reducer( state[ key ], action );\n\tif ( nextKeyState === state[ key ] ) {\n\t\treturn state;\n\t}\n\n\treturn {\n\t\t...state,\n\t\t[ key ]: nextKeyState,\n\t};\n};\n"]}
|