@wordpress/data
Version:
Data module for WordPress.
150 lines (148 loc) • 5.05 kB
JavaScript
;
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// packages/data/src/plugins/persistence/index.js
var persistence_exports = {};
__export(persistence_exports, {
createPersistenceInterface: () => createPersistenceInterface,
default: () => persistence_default,
withLazySameState: () => withLazySameState
});
module.exports = __toCommonJS(persistence_exports);
var import_is_plain_object = require("is-plain-object");
var import_deepmerge = __toESM(require("deepmerge"));
var import_default = __toESM(require("./storage/default"));
var import__ = require("../../");
var DEFAULT_STORAGE = import_default.default;
var DEFAULT_STORAGE_KEY = "WP_DATA";
var withLazySameState = (reducer) => (state, action) => {
if (action.nextState === state) {
return state;
}
return reducer(state, action);
};
function createPersistenceInterface(options) {
const { storage = DEFAULT_STORAGE, storageKey = DEFAULT_STORAGE_KEY } = options;
let data;
function getData() {
if (data === void 0) {
const persisted = storage.getItem(storageKey);
if (persisted === null) {
data = {};
} else {
try {
data = JSON.parse(persisted);
} catch (error) {
data = {};
}
}
}
return data;
}
function setData(key, value) {
data = { ...data, [key]: value };
storage.setItem(storageKey, JSON.stringify(data));
}
return {
get: getData,
set: setData
};
}
function persistencePlugin(registry, pluginOptions) {
const persistence = createPersistenceInterface(pluginOptions);
function createPersistOnChange(getState, storeName, keys) {
let getPersistedState;
if (Array.isArray(keys)) {
const reducers = keys.reduce(
(accumulator, key) => Object.assign(accumulator, {
[key]: (state, action) => action.nextState[key]
}),
{}
);
getPersistedState = withLazySameState(
(0, import__.combineReducers)(reducers)
);
} else {
getPersistedState = (state, action) => action.nextState;
}
let lastState = getPersistedState(void 0, {
nextState: getState()
});
return () => {
const state = getPersistedState(lastState, {
nextState: getState()
});
if (state !== lastState) {
persistence.set(storeName, state);
lastState = state;
}
};
}
return {
registerStore(storeName, options) {
if (!options.persist) {
return registry.registerStore(storeName, options);
}
const persistedState = persistence.get()[storeName];
if (persistedState !== void 0) {
let initialState = options.reducer(options.initialState, {
type: "@@WP/PERSISTENCE_RESTORE"
});
if ((0, import_is_plain_object.isPlainObject)(initialState) && (0, import_is_plain_object.isPlainObject)(persistedState)) {
initialState = (0, import_deepmerge.default)(initialState, persistedState, {
isMergeableObject: import_is_plain_object.isPlainObject
});
} else {
initialState = persistedState;
}
options = {
...options,
initialState
};
}
const store = registry.registerStore(storeName, options);
store.subscribe(
createPersistOnChange(
store.getState,
storeName,
options.persist
)
);
return store;
}
};
}
persistencePlugin.__unstableMigrate = () => {
};
var persistence_default = persistencePlugin;
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
createPersistenceInterface,
withLazySameState
});
//# sourceMappingURL=index.js.map