@fmal/cerebral-storage
Version:
Storage provider for Cerebral
64 lines (51 loc) • 2.01 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = exports.StorageProviderError = void 0;
var _StorageProvider = _interopRequireDefault(require("./StorageProvider"));
var _StorageProviderError = _interopRequireDefault(require("./StorageProviderError"));
exports.StorageProviderError = _StorageProviderError.default;
var _default = function _default(options) {
if (options === void 0) {
options = {};
}
return function (_ref) {
var _providers;
var app = _ref.app,
name = _ref.name;
var _options = options,
_options$target = _options.target,
targetStorage = _options$target === void 0 ? localStorage : _options$target,
_options$json = _options.json,
json = _options$json === void 0 ? true : _options$json,
sync = _options.sync,
prefix = _options.prefix;
var finalPrefix = prefix ? prefix + '.' : '';
app.once('initialized:model', function () {
Object.keys(sync || {}).forEach(function (syncKey) {
var value = targetStorage.getItem(finalPrefix + syncKey);
if (!value) {
return;
}
var path = sync[syncKey].split('.');
app.model.set(path, json ? JSON.parse(value) : value);
});
});
if (sync) {
app.on('flush', function (changes) {
changes.forEach(function (change) {
Object.keys(sync).forEach(function (syncKey) {
if (change.path.join('.').indexOf(sync[syncKey]) === 0) {
var value = app.getState(sync[syncKey]);
value === undefined ? targetStorage.removeItem(finalPrefix + syncKey) : targetStorage.setItem(finalPrefix + syncKey, json ? JSON.stringify(value) : value);
}
});
});
});
}
return {
providers: (_providers = {}, _providers[name] = (0, _StorageProvider.default)(options), _providers)
};
};
};
exports.default = _default;