ngx-webstorage
Version:
### Local and session storage - Angular service This library provides an easy to use service to manage the web storages (local and session) from your Angular application. It provides also two decorators to synchronize the component attributes and the web
85 lines • 12.5 kB
JavaScript
import { APP_INITIALIZER, inject, InjectionToken, makeEnvironmentProviders } from '@angular/core';
import { StrategyIndex } from '../public_api';
import { InMemoryStorageStrategyProvider, LocalStorageStrategyProvider, SessionStorageStrategyProvider } from './strategies';
import { LocalStorageProvider, SessionStorageProvider } from './core/nativeStorage';
import { LocalStorageServiceProvider } from './services/localStorage';
import { SessionStorageServiceProvider } from './services/sessionStorage';
import { DefaultIsCaseSensitive, DefaultPrefix, DefaultSeparator } from './constants/config';
import { StorageKeyManager } from './helpers/storageKeyManager';
export const LIB_CONFIG = new InjectionToken('ngx_webstorage_config');
export var InternalNgxWebstorageFeatureKind;
(function (InternalNgxWebstorageFeatureKind) {
InternalNgxWebstorageFeatureKind[InternalNgxWebstorageFeatureKind["Config"] = 1] = "Config";
InternalNgxWebstorageFeatureKind[InternalNgxWebstorageFeatureKind["LocalStorage"] = 2] = "LocalStorage";
InternalNgxWebstorageFeatureKind[InternalNgxWebstorageFeatureKind["SessionStorage"] = 3] = "SessionStorage";
})(InternalNgxWebstorageFeatureKind || (InternalNgxWebstorageFeatureKind = {}));
function appInit() {
const config = inject(LIB_CONFIG);
const index = inject(StrategyIndex);
return () => {
StorageKeyManager.consumeConfiguration(config);
index.indexStrategies();
};
}
/**
* Provide ngx-webstorage basic features.
*
* - You can customise the configuration with the `withConfiguration` feature.
* - You can enable the `LocalStorage` features with the `withLocalStorage` feature.
* - You can enable the `SessionStorage` features with the `withSessionStorage` feature.
*
* @default config { prefix: 'ngx-webstorage', separator: '|', caseSensitive: false }
*/
export function provideNgxWebstorage(...features) {
const { configProvider, featureProviders } = parseFeatures(features);
return makeEnvironmentProviders([
configProvider,
InMemoryStorageStrategyProvider,
{ provide: APP_INITIALIZER, useFactory: appInit, multi: true },
...featureProviders,
]);
}
function parseFeatures(features) {
let configProvider;
const featureProviders = [];
const parsedFeatures = new Set();
for (const feature of features) {
if (parsedFeatures.has(feature.kind))
throw new Error(`Feature ${feature.kind} is already provided.`);
if (feature.kind === InternalNgxWebstorageFeatureKind.Config) {
configProvider = feature.providers[0];
}
else
featureProviders.push(...feature.providers);
parsedFeatures.add(feature.kind);
}
return {
configProvider: configProvider ?? {
provide: LIB_CONFIG,
useValue: { prefix: DefaultPrefix, separator: DefaultSeparator, caseSensitive: DefaultIsCaseSensitive }
},
featureProviders
};
}
export function makeNgxWebstorageFeature(kind, providers) {
return { kind, providers };
}
export function withNgxWebstorageConfig(config) {
return makeNgxWebstorageFeature(InternalNgxWebstorageFeatureKind.Config, [{ provide: LIB_CONFIG, useValue: config }]);
}
/** Provides everything necessary to use the `LocalStorage` features. */
export function withLocalStorage() {
return makeNgxWebstorageFeature(InternalNgxWebstorageFeatureKind.LocalStorage, [
LocalStorageProvider,
LocalStorageServiceProvider,
LocalStorageStrategyProvider,
]);
}
export function withSessionStorage() {
return makeNgxWebstorageFeature(InternalNgxWebstorageFeatureKind.SessionStorage, [
SessionStorageProvider,
SessionStorageServiceProvider,
SessionStorageStrategyProvider,
]);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtd2Vic3RvcmFnZS9zcmMvbGliL3Byb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxlQUFlLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSx3QkFBd0IsRUFBVyxNQUFNLGVBQWUsQ0FBQztBQUUxRyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBQywrQkFBK0IsRUFBRSw0QkFBNEIsRUFBRSw4QkFBOEIsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUMzSCxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRixPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RSxPQUFPLEVBQUMsc0JBQXNCLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDM0YsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFFOUQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUErQyxJQUFJLGNBQWMsQ0FBNkIsdUJBQXVCLENBQUMsQ0FBQztBQUU5SSxNQUFNLENBQU4sSUFBWSxnQ0FJWDtBQUpELFdBQVksZ0NBQWdDO0lBQzNDLDJGQUFVLENBQUE7SUFDVix1R0FBZ0IsQ0FBQTtJQUNoQiwyR0FBa0IsQ0FBQTtBQUNuQixDQUFDLEVBSlcsZ0NBQWdDLEtBQWhDLGdDQUFnQyxRQUkzQztBQVNELFNBQVMsT0FBTztJQUNmLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNsQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDcEMsT0FBTyxHQUFHLEVBQUU7UUFDWCxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQyxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEdBQUcsUUFBMEQ7SUFDakcsTUFBTSxFQUFDLGNBQWMsRUFBRSxnQkFBZ0IsRUFBQyxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuRSxPQUFPLHdCQUF3QixDQUFDO1FBQy9CLGNBQWM7UUFDZCwrQkFBK0I7UUFDL0IsRUFBQyxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQztRQUM1RCxHQUFHLGdCQUFnQjtLQUNuQixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsUUFBMEQ7SUFDaEYsSUFBSSxjQUF3QixDQUFDO0lBQzdCLE1BQU0sZ0JBQWdCLEdBQWUsRUFBRSxDQUFDO0lBRXhDLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxFQUE0QixDQUFDO0lBRTNELEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDaEMsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsT0FBTyxDQUFDLElBQUksdUJBQXVCLENBQUMsQ0FBQztRQUV0RyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssZ0NBQWdDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDOUQsY0FBYyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkMsQ0FBQzs7WUFBTSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFbkQsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELE9BQU87UUFDTixjQUFjLEVBQUUsY0FBYyxJQUFJO1lBQ2pDLE9BQU8sRUFBRSxVQUFVO1lBQ25CLFFBQVEsRUFBRSxFQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxzQkFBc0IsRUFBQztTQUNyRztRQUNELGdCQUFnQjtLQUNoQixDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0IsQ0FBK0MsSUFBaUIsRUFBRSxTQUFxQjtJQUM5SCxPQUFPLEVBQUMsSUFBSSxFQUFFLFNBQVMsRUFBQyxDQUFDO0FBQzFCLENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsTUFBa0M7SUFDekUsT0FBTyx3QkFBd0IsQ0FBQyxnQ0FBZ0MsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUMsQ0FBQztBQUNySCxDQUFDO0FBRUQsd0VBQXdFO0FBQ3hFLE1BQU0sVUFBVSxnQkFBZ0I7SUFDL0IsT0FBTyx3QkFBd0IsQ0FBQyxnQ0FBZ0MsQ0FBQyxZQUFZLEVBQUU7UUFDOUUsb0JBQW9CO1FBQ3BCLDJCQUEyQjtRQUMzQiw0QkFBNEI7S0FDNUIsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0I7SUFDakMsT0FBTyx3QkFBd0IsQ0FBQyxnQ0FBZ0MsQ0FBQyxjQUFjLEVBQUU7UUFDaEYsc0JBQXNCO1FBQ3RCLDZCQUE2QjtRQUM3Qiw4QkFBOEI7S0FDOUIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QVBQX0lOSVRJQUxJWkVSLCBpbmplY3QsIEluamVjdGlvblRva2VuLCBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMsIFByb3ZpZGVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Tmd4V2Vic3RvcmFnZUNvbmZpZ3VyYXRpb259IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7U3RyYXRlZ3lJbmRleH0gZnJvbSAnLi4vcHVibGljX2FwaSc7XG5pbXBvcnQge0luTWVtb3J5U3RvcmFnZVN0cmF0ZWd5UHJvdmlkZXIsIExvY2FsU3RvcmFnZVN0cmF0ZWd5UHJvdmlkZXIsIFNlc3Npb25TdG9yYWdlU3RyYXRlZ3lQcm92aWRlcn0gZnJvbSAnLi9zdHJhdGVnaWVzJztcbmltcG9ydCB7TG9jYWxTdG9yYWdlUHJvdmlkZXIsIFNlc3Npb25TdG9yYWdlUHJvdmlkZXJ9IGZyb20gJy4vY29yZS9uYXRpdmVTdG9yYWdlJztcbmltcG9ydCB7TG9jYWxTdG9yYWdlU2VydmljZVByb3ZpZGVyfSBmcm9tICcuL3NlcnZpY2VzL2xvY2FsU3RvcmFnZSc7XG5pbXBvcnQge1Nlc3Npb25TdG9yYWdlU2VydmljZVByb3ZpZGVyfSBmcm9tICcuL3NlcnZpY2VzL3Nlc3Npb25TdG9yYWdlJztcbmltcG9ydCB7RGVmYXVsdElzQ2FzZVNlbnNpdGl2ZSwgRGVmYXVsdFByZWZpeCwgRGVmYXVsdFNlcGFyYXRvcn0gZnJvbSAnLi9jb25zdGFudHMvY29uZmlnJztcbmltcG9ydCB7U3RvcmFnZUtleU1hbmFnZXJ9IGZyb20gJy4vaGVscGVycy9zdG9yYWdlS2V5TWFuYWdlcic7XG5cbmV4cG9ydCBjb25zdCBMSUJfQ09ORklHOiBJbmplY3Rpb25Ub2tlbjxOZ3hXZWJzdG9yYWdlQ29uZmlndXJhdGlvbj4gPSBuZXcgSW5qZWN0aW9uVG9rZW48Tmd4V2Vic3RvcmFnZUNvbmZpZ3VyYXRpb24+KCduZ3hfd2Vic3RvcmFnZV9jb25maWcnKTtcblxuZXhwb3J0IGVudW0gSW50ZXJuYWxOZ3hXZWJzdG9yYWdlRmVhdHVyZUtpbmQge1xuXHRDb25maWcgPSAxLFxuXHRMb2NhbFN0b3JhZ2UgPSAyLFxuXHRTZXNzaW9uU3RvcmFnZSA9IDMsXG59XG5cbmV4cG9ydCB0eXBlIE5neFdlYnN0b3JhZ2VGZWF0dXJlS2luZCA9IHN0cmluZyB8IEludGVybmFsTmd4V2Vic3RvcmFnZUZlYXR1cmVLaW5kO1xuXG5leHBvcnQgdHlwZSBOZ3hXZWJzdG9yYWdlRmVhdHVyZTxGZWF0dXJlS2luZCBleHRlbmRzIE5neFdlYnN0b3JhZ2VGZWF0dXJlS2luZD4gPSB7XG5cdGtpbmQ6IEZlYXR1cmVLaW5kO1xuXHRwcm92aWRlcnM6IFByb3ZpZGVyW107XG59O1xuXG5mdW5jdGlvbiBhcHBJbml0KCkge1xuXHRjb25zdCBjb25maWcgPSBpbmplY3QoTElCX0NPTkZJRyk7XG5cdGNvbnN0IGluZGV4ID0gaW5qZWN0KFN0cmF0ZWd5SW5kZXgpO1xuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdFN0b3JhZ2VLZXlNYW5hZ2VyLmNvbnN1bWVDb25maWd1cmF0aW9uKGNvbmZpZyk7XG5cdFx0aW5kZXguaW5kZXhTdHJhdGVnaWVzKCk7XG5cdH07XG59XG5cbi8qKlxuICogUHJvdmlkZSBuZ3gtd2Vic3RvcmFnZSBiYXNpYyBmZWF0dXJlcy5cbiAqXG4gKiAtIFlvdSBjYW4gY3VzdG9taXNlIHRoZSBjb25maWd1cmF0aW9uIHdpdGggdGhlIGB3aXRoQ29uZmlndXJhdGlvbmAgZmVhdHVyZS5cbiAqIC0gWW91IGNhbiBlbmFibGUgdGhlIGBMb2NhbFN0b3JhZ2VgIGZlYXR1cmVzIHdpdGggdGhlIGB3aXRoTG9jYWxTdG9yYWdlYCBmZWF0dXJlLlxuICogLSBZb3UgY2FuIGVuYWJsZSB0aGUgYFNlc3Npb25TdG9yYWdlYCBmZWF0dXJlcyB3aXRoIHRoZSBgd2l0aFNlc3Npb25TdG9yYWdlYCBmZWF0dXJlLlxuICpcbiAqIEBkZWZhdWx0IGNvbmZpZyB7IHByZWZpeDogJ25neC13ZWJzdG9yYWdlJywgc2VwYXJhdG9yOiAnfCcsIGNhc2VTZW5zaXRpdmU6IGZhbHNlIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVOZ3hXZWJzdG9yYWdlKC4uLmZlYXR1cmVzOiBOZ3hXZWJzdG9yYWdlRmVhdHVyZTxOZ3hXZWJzdG9yYWdlRmVhdHVyZUtpbmQ+W10pIHtcblx0Y29uc3Qge2NvbmZpZ1Byb3ZpZGVyLCBmZWF0dXJlUHJvdmlkZXJzfSA9IHBhcnNlRmVhdHVyZXMoZmVhdHVyZXMpO1xuXHRyZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcblx0XHRjb25maWdQcm92aWRlcixcblx0XHRJbk1lbW9yeVN0b3JhZ2VTdHJhdGVneVByb3ZpZGVyLFxuXHRcdHtwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsIHVzZUZhY3Rvcnk6IGFwcEluaXQsIG11bHRpOiB0cnVlfSxcblx0XHQuLi5mZWF0dXJlUHJvdmlkZXJzLFxuXHRdKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGZWF0dXJlcyhmZWF0dXJlczogTmd4V2Vic3RvcmFnZUZlYXR1cmU8Tmd4V2Vic3RvcmFnZUZlYXR1cmVLaW5kPltdKSB7XG5cdGxldCBjb25maWdQcm92aWRlcjogUHJvdmlkZXI7XG5cdGNvbnN0IGZlYXR1cmVQcm92aWRlcnM6IFByb3ZpZGVyW10gPSBbXTtcblxuXHRjb25zdCBwYXJzZWRGZWF0dXJlcyA9IG5ldyBTZXQ8Tmd4V2Vic3RvcmFnZUZlYXR1cmVLaW5kPigpO1xuXG5cdGZvciAoY29uc3QgZmVhdHVyZSBvZiBmZWF0dXJlcykge1xuXHRcdGlmIChwYXJzZWRGZWF0dXJlcy5oYXMoZmVhdHVyZS5raW5kKSkgdGhyb3cgbmV3IEVycm9yKGBGZWF0dXJlICR7ZmVhdHVyZS5raW5kfSBpcyBhbHJlYWR5IHByb3ZpZGVkLmApO1xuXG5cdFx0aWYgKGZlYXR1cmUua2luZCA9PT0gSW50ZXJuYWxOZ3hXZWJzdG9yYWdlRmVhdHVyZUtpbmQuQ29uZmlnKSB7XG5cdFx0XHRjb25maWdQcm92aWRlciA9IGZlYXR1cmUucHJvdmlkZXJzWzBdO1xuXHRcdH0gZWxzZSBmZWF0dXJlUHJvdmlkZXJzLnB1c2goLi4uZmVhdHVyZS5wcm92aWRlcnMpO1xuXG5cdFx0cGFyc2VkRmVhdHVyZXMuYWRkKGZlYXR1cmUua2luZCk7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGNvbmZpZ1Byb3ZpZGVyOiBjb25maWdQcm92aWRlciA/PyB7XG5cdFx0XHRwcm92aWRlOiBMSUJfQ09ORklHLFxuXHRcdFx0dXNlVmFsdWU6IHtwcmVmaXg6IERlZmF1bHRQcmVmaXgsIHNlcGFyYXRvcjogRGVmYXVsdFNlcGFyYXRvciwgY2FzZVNlbnNpdGl2ZTogRGVmYXVsdElzQ2FzZVNlbnNpdGl2ZX1cblx0XHR9LFxuXHRcdGZlYXR1cmVQcm92aWRlcnNcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VOZ3hXZWJzdG9yYWdlRmVhdHVyZTxGZWF0dXJlS2luZCBleHRlbmRzIE5neFdlYnN0b3JhZ2VGZWF0dXJlS2luZD4oa2luZDogRmVhdHVyZUtpbmQsIHByb3ZpZGVyczogUHJvdmlkZXJbXSk6IE5neFdlYnN0b3JhZ2VGZWF0dXJlPEZlYXR1cmVLaW5kPiB7XG5cdHJldHVybiB7a2luZCwgcHJvdmlkZXJzfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhOZ3hXZWJzdG9yYWdlQ29uZmlnKGNvbmZpZzogTmd4V2Vic3RvcmFnZUNvbmZpZ3VyYXRpb24pIHtcblx0cmV0dXJuIG1ha2VOZ3hXZWJzdG9yYWdlRmVhdHVyZShJbnRlcm5hbE5neFdlYnN0b3JhZ2VGZWF0dXJlS2luZC5Db25maWcsIFt7cHJvdmlkZTogTElCX0NPTkZJRywgdXNlVmFsdWU6IGNvbmZpZ31dKTtcbn1cblxuLyoqIFByb3ZpZGVzIGV2ZXJ5dGhpbmcgbmVjZXNzYXJ5IHRvIHVzZSB0aGUgYExvY2FsU3RvcmFnZWAgZmVhdHVyZXMuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aExvY2FsU3RvcmFnZSgpIHtcblx0cmV0dXJuIG1ha2VOZ3hXZWJzdG9yYWdlRmVhdHVyZShJbnRlcm5hbE5neFdlYnN0b3JhZ2VGZWF0dXJlS2luZC5Mb2NhbFN0b3JhZ2UsIFtcblx0XHRMb2NhbFN0b3JhZ2VQcm92aWRlcixcblx0XHRMb2NhbFN0b3JhZ2VTZXJ2aWNlUHJvdmlkZXIsXG5cdFx0TG9jYWxTdG9yYWdlU3RyYXRlZ3lQcm92aWRlcixcblx0XSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoU2Vzc2lvblN0b3JhZ2UoKSB7XG5cdHJldHVybiBtYWtlTmd4V2Vic3RvcmFnZUZlYXR1cmUoSW50ZXJuYWxOZ3hXZWJzdG9yYWdlRmVhdHVyZUtpbmQuU2Vzc2lvblN0b3JhZ2UsIFtcblx0XHRTZXNzaW9uU3RvcmFnZVByb3ZpZGVyLFxuXHRcdFNlc3Npb25TdG9yYWdlU2VydmljZVByb3ZpZGVyLFxuXHRcdFNlc3Npb25TdG9yYWdlU3RyYXRlZ3lQcm92aWRlcixcblx0XSk7XG59XG4iXX0=