{"version":3,"file":"ngx-localstorage.mjs","sources":["../../../../libs/ngx-localstorage/src/lib/utils/guards.ts","../../../../libs/ngx-localstorage/src/lib/directives/control-value-accessor.directive.ts","../../../../libs/ngx-localstorage/src/lib/utils/coercion.ts","../../../../libs/ngx-localstorage/src/lib/utils/property-utils.ts","../../../../libs/ngx-localstorage/src/lib/directives/native-value-accessor.directive.ts","../../../../libs/ngx-localstorage/src/lib/tokens/storage-config.ts","../../../../libs/ngx-localstorage/src/lib/classes/default-serializer.ts","../../../../libs/ngx-localstorage/src/lib/tokens/storage-serializer.ts","../../../../libs/ngx-localstorage/src/lib/tokens/window.ts","../../../../libs/ngx-localstorage/src/lib/tokens/localstorage.ts","../../../../libs/ngx-localstorage/src/lib/tokens/sessionstorage.ts","../../../../libs/ngx-localstorage/src/lib/tokens/storage.ts","../../../../libs/ngx-localstorage/src/lib/utils/key-utils.ts","../../../../libs/ngx-localstorage/src/lib/services/ngx-localstorage.service.ts","../../../../libs/ngx-localstorage/src/lib/interfaces/value-accessor.ts","../../../../libs/ngx-localstorage/src/lib/directives/ngx-localstorage.directive.ts","../../../../libs/ngx-localstorage/src/lib/provider.ts","../../../../libs/ngx-localstorage/src/lib/version.ts","../../../../libs/ngx-localstorage/src/index.ts","../../../../libs/ngx-localstorage/src/ngx-localstorage.ts"],"sourcesContent":["/**\n * string Guard\n */\nexport const isString = (value?: unknown): value is string => {\n  return typeof value === 'string';\n};\n","import { DestroyRef, Directive, EventEmitter, OnInit, inject } from '@angular/core';\nimport { ValueAccessor } from '../interfaces/value-accessor';\nimport { NgControl } from '@angular/forms';\nimport { isString } from '../utils/guards';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n * Directive handling `ReactiveForms` binding.\n *\n * @usageNotes\n *\n * ### Example binding a text input\n *\n * ```html\n * <input\n *   type=\"text\"\n *   id=\"demo-text-input\"\n *   controlValueAccessor\n *   initFromStorage\n *   prefix=\"demo\"\n *   [formControl]=\"textControl\"\n * />\n * ```\n */\n@Directive({\n  standalone: true\n})\nexport class ControlValueAccessorDirective implements OnInit, ValueAccessor {\n  /**\n   * Emitter for value changes.\n   */\n  public readonly valueChange = new EventEmitter<unknown>();\n  /**\n   * The control to bind to.\n   */\n  public readonly ngControl = inject(NgControl, { optional: true, self: true });\n\n  private readonly destroyRef = inject(DestroyRef);\n\n  /**\n   * Sets up event observer for value changes.\n   */\n  public ngOnInit(): void {\n    this.ngControl?.valueChanges?.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(value => {\n      this.valueChange.emit(value);\n    });\n  }\n\n  /**\n   * Writes the value to the control.\n   * @param value Value to write\n   * @param falsyTransformer *optional* transformer handling falsy values\n   */\n  public writeValue(value: unknown, falsyTransformer?: (() => unknown) | undefined): void {\n    const transformedValue = (!value || (isString(value) && value === 'false')) && !!falsyTransformer ? falsyTransformer() : value;\n    this.ngControl?.valueAccessor?.writeValue(transformedValue);\n  }\n\n  /**\n   * Gets the current control value.\n   */\n  public getValue(): unknown {\n    return this.ngControl?.value;\n  }\n}\n","/**\n * Returns an array representation of the input value.\n *\n * @param value - the input value\n * @return array representation of the input value\n */\nexport function valuePathAttribute(value: unknown): string[] {\n  if (Array.isArray(value)) {\n    return value;\n  } else if (value != null) {\n    return value.toString().split(',');\n  } else {\n    return [];\n  }\n}\n","import { isString } from './guards';\n\n/**\n * Gets an objects property based on its path.\n * @param object Object to access\n * @param path Path to the property\n */\nexport const getPropByPath = (object: unknown, path: string[]): unknown | undefined => {\n\n  const checkProperty = (o: unknown | undefined, key: string): unknown | undefined => typeof o === 'object'\n    ? (o as Record<string, unknown>)[key]\n    : undefined;\n\n  return path.slice(0).reduce<unknown | undefined>((prev: unknown | undefined, curr: string, _i: number, arr: string[]) => {\n    if (prev === undefined) {\n      arr.splice(1);\n    }\n    return checkProperty(prev, curr)\n  }, object);\n};\n\n/**\n* Sets an objects property based on its path.\n* @param object Object whose value to set\n* @param path Path to the property\n* @param value Value to set\n* @param falsyTransformer optional transformer handling falsy values\n*/\nexport const setPropByPath = (object: unknown, path: string[], value: unknown, falsyTransformer?: () => unknown): void => {\n\n  const checkProperty = (o: unknown | undefined, key: string): unknown | undefined => typeof o === 'object'\n    ? (o as Record<string, unknown>)[key]\n    : undefined;\n\n  path.slice(0).reduce<unknown | undefined>((prev: unknown | undefined, curr: string, i: number, arr: string[]) => {\n    if (prev === undefined) {\n      arr.splice(1);\n    }\n\n    // last path segment\n    if (i === path.length - 1) {\n\n      (object as Record<string, unknown>)[curr] = (!value || (isString(value) && value === 'false'))\n        && !!falsyTransformer ? falsyTransformer() : value;\n\n      arr.splice(1);\n    }\n\n    return checkProperty(prev, curr)\n  }, object);\n};\n","import { AfterViewInit, DestroyRef, Directive, ElementRef, EventEmitter, Input, inject, numberAttribute } from '@angular/core';\nimport { valuePathAttribute } from '../utils/coercion';\nimport { ValueAccessor } from '../interfaces/value-accessor';\nimport { getPropByPath, setPropByPath } from '../utils/property-utils';\nimport { debounceTime, fromEvent, map } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n * Directive handling native control binding.\n *\n * @usageNotes\n *\n * ### Example binding a text input\n *\n * ```html\n * <input\n *   type=\"text\"\n *   id=\"demo-text-input\"\n *   ngxLocalStorage=\"native-text-input\"\n *   initFromStorage\n *   prefix=\"demo\"\n *   forEvent=\"input\"\n *   valuePath=\"value\"\n * />\n * ```\n *\n */\n@Directive({\n  standalone: true\n})\nexport class NativeValueAccessorDirective implements AfterViewInit, ValueAccessor {\n  /**\n   * The event to hook onto for observing value changes.\n   */\n  @Input()\n  public forEvent?: string;\n\n  /**\n   * Provides a path to access the bound elements value property.\n   */\n  @Input({\n    transform: valuePathAttribute\n  })\n  public valuePath: string[] = [];\n\n  /**\n   * An optional debounce for storage write access after value changes.\n   */\n  @Input({\n    transform: numberAttribute\n  })\n  public storageDebounce = 0;\n\n  /**\n   * Emitter for value changes.\n   */\n  public readonly valueChange = new EventEmitter<unknown>();\n\n  private readonly elementRef = inject(ElementRef);\n  private readonly destroyRef = inject(DestroyRef);\n\n  /**\n   * Sets up event observer for value changes.\n   */\n  public ngAfterViewInit(): void {\n    if (this.forEvent) {\n      fromEvent(this.elementRef.nativeElement, this.forEvent)\n        .pipe(\n          takeUntilDestroyed(this.destroyRef),\n          debounceTime(this.storageDebounce),\n          map(() => this.getValue())\n        )\n        .subscribe(this.valueChange);\n    }\n  }\n\n  /**\n   * Writes the value to the control.\n   * @param value Value to write\n   * @param falsyTransformer *optional* transformer handling falsy values\n   */\n  public writeValue(value: unknown, falsyTransformer?: () => unknown): void {\n    setPropByPath(this.elementRef.nativeElement, this.getValuePath(), value, falsyTransformer);\n  }\n\n  /**\n   * Gets the current control value.\n   */\n  public getValue(): unknown {\n    return getPropByPath(this.elementRef.nativeElement, this.getValuePath());\n  }\n\n  private getValuePath(): string[] {\n    return this.valuePath.length ? this.valuePath : ['value'];\n  }\n}\n","import { InjectionToken } from '@angular/core';\nimport { NgxLocalstorageConfiguration } from '../interfaces/storage-configuration';\n\nexport const NGX_LOCAL_STORAGE_DEFAULT_CONFIG = (): NgxLocalstorageConfiguration => {\n  return {\n    allowNull: true,\n    storageType: 'localStorage',\n    delimiter: '_'\n  }\n};\n\n/**\n * Provides an injection token for the service configuration.\n */\nexport const NGX_LOCAL_STORAGE_CONFIG = new InjectionToken<NgxLocalstorageConfiguration>('NgxLocalstorageConfiguration', {\n  providedIn: 'root',\n  factory: NGX_LOCAL_STORAGE_DEFAULT_CONFIG\n});\n","import { StorageSerializer } from '../interfaces/storage-serializer';\nimport { Injectable } from \"@angular/core\";\n\n/**\n * Provides a default serialization mechanism using JSON.\n */\n@Injectable()\nexport class DefaultSerializer implements StorageSerializer {\n  /**\n   * @inheritdoc\n   */\n  public serialize<T = unknown>(value: T): string {\n    return JSON.stringify(value);\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public deserialize<T = unknown>(storedValue: string): T {\n    return JSON.parse(storedValue);\n  }\n}\n","import { InjectionToken } from '@angular/core';\nimport { DefaultSerializer } from '../classes/default-serializer';\nimport { StorageSerializer } from '../interfaces/storage-serializer';\n\n/**\n * Provides an injection token for the services serializer.\n */\nexport const NGX_LOCAL_STORAGE_SERIALIZER = new InjectionToken<StorageSerializer>(\n  'StorageSerializer',\n  {\n    providedIn: 'root',\n    factory: () => new DefaultSerializer()\n  }\n);\n","import { DOCUMENT } from '@angular/common';\nimport { inject, InjectionToken } from '@angular/core';\n\n/**\n * Provides an abstraction to WINDOW.\n */\nexport const WINDOW = new InjectionToken<Window>(\n  'Abstraction token for global window access',\n  {\n    factory: () => {\n      const { defaultView } = inject(DOCUMENT);\n\n      if (!defaultView) {\n        throw new Error('Window is not available');\n      }\n\n      return defaultView;\n    }\n  }\n);\n","import { inject, InjectionToken } from '@angular/core';\nimport { WINDOW } from './window';\n\n/**\n * Provides information if localstorage is available.\n */\nexport const LOCALSTORAGE_SUPPORT = new InjectionToken<boolean>(\n  'Token providing information if localStorage is available',\n  {\n    factory: () => !!inject(LOCALSTORAGE)\n  }\n);\n\n/**\n * Provides access to localstorage.\n */\nexport const LOCALSTORAGE = new InjectionToken<Storage>(\n  'Token for accessing localStorage',\n  {\n    factory: () => inject(WINDOW).localStorage\n  }\n);\n","import { inject, InjectionToken } from '@angular/core';\nimport { WINDOW } from './window';\n\n/**\n * Provides information if sessionstorage is available.\n */\nexport const SESSIONSTORAGE_SUPPORT = new InjectionToken<boolean>(\n  'Token providing information if sessionStorage is available',\n  {\n    factory: () => !!inject(SESSIONSTORAGE)\n  }\n);\n\n/**\n * Provides access to sessionstorage.\n */\nexport const SESSIONSTORAGE = new InjectionToken<Storage>(\n  'Token for accessing sessionStorage',\n  {\n    factory: () => inject(WINDOW).sessionStorage\n  }\n);\n","import { inject, InjectionToken } from '@angular/core';\nimport { LOCALSTORAGE, LOCALSTORAGE_SUPPORT } from './localstorage';\nimport { SESSIONSTORAGE, SESSIONSTORAGE_SUPPORT } from './sessionstorage';\nimport { NGX_LOCAL_STORAGE_CONFIG } from './storage-config';\n\n/**\n * Provides information if choosen stoarge is available.\n */\nexport const STORAGE_SUPPORT = new InjectionToken<boolean>(\n  'Token providing information is choosen storage is available',\n  {\n    factory: () => {\n      const { storageType } = inject(NGX_LOCAL_STORAGE_CONFIG);\n      return storageType === 'sessionStorage' ? inject(SESSIONSTORAGE_SUPPORT) : inject(LOCALSTORAGE_SUPPORT);\n    }\n  }\n);\n\n/**\n * Provides choosen storage.\n */\nexport const STORAGE = new InjectionToken<Storage>(\n  'Token providing choosen storage',\n  {\n    factory: () => {\n      const { storageType } = inject(NGX_LOCAL_STORAGE_CONFIG);\n      return storageType === 'sessionStorage' ? inject(SESSIONSTORAGE) : inject(LOCALSTORAGE);\n    }\n  }\n);\n","/**\n * Constructs the storage key based on a prefix - if given - and the key itself\n */\nexport const constructKey = (key: string, prefix?: string, configuredPrefix?: string, delimiter?: string): string => {\n  const prefixToUse = prefix || configuredPrefix;\n  if (prefixToUse) {\n    return `${prefixToUse}${delimiter || ''}${key}`;\n  }\n  return key;\n};\n","import { Injectable, Inject, OnDestroy, EventEmitter, inject } from '@angular/core';\n\nimport { NgxLocalstorageConfiguration } from '../interfaces/storage-configuration';\nimport { NGX_LOCAL_STORAGE_CONFIG, NGX_LOCAL_STORAGE_DEFAULT_CONFIG } from '../tokens/storage-config';\nimport { NGX_LOCAL_STORAGE_SERIALIZER } from '../tokens/storage-serializer';\nimport { filter, fromEvent, Observable, Subscription } from 'rxjs';\nimport { STORAGE, STORAGE_SUPPORT } from '../tokens/storage';\nimport { WINDOW } from '../tokens/window';\nimport { constructKey } from '../utils/key-utils';\nimport { ServiceOptions } from '../interfaces/service-options';\n\nconst defaultConfig = NGX_LOCAL_STORAGE_DEFAULT_CONFIG();\n\n/**\n * Provides a service to access the localstorage.\n */\n@Injectable({ providedIn: 'root' })\nexport class LocalStorageService extends Observable<StorageEvent> implements OnDestroy {\n  /**\n   * Configuration used by the service.\n   */\n  public readonly config: NgxLocalstorageConfiguration;\n\n  private readonly onError = new EventEmitter<string | Error | unknown>();\n  private readonly subscriptions = new Subscription();\n\n  private readonly serializer = inject(NGX_LOCAL_STORAGE_SERIALIZER);\n\n  private readonly storageSupport = inject(STORAGE_SUPPORT);\n\n  private readonly storage = inject(STORAGE, {\n    optional: true\n  });\n\n  private readonly window = inject(WINDOW, {\n    optional: true\n  });\n\n  /**\n   * Creates a new instance.\n   */\n  constructor(@Inject(NGX_LOCAL_STORAGE_CONFIG) _config?: NgxLocalstorageConfiguration) {\n    super(subscriber => {\n      if (!this.storageSupport) {\n        subscriber.error(new Error(`Choosen storage '${this.config?.storageType}' is not available`));\n      }\n\n      if (this.window) {\n        this.subscriptions.add(\n          fromEvent<StorageEvent>(this.window, 'storage')\n            .pipe(filter(event => !!event))\n            .subscribe(event => subscriber.next(event))\n        );\n      }\n\n      this.subscriptions.add(this.onError.subscribe(error => subscriber.error(error)));\n    });\n\n    this.config = { ...defaultConfig, ..._config };\n  }\n\n  public ngOnDestroy(): void {\n    this.subscriptions.unsubscribe();\n  }\n\n  /**\n   * Gets the number of entries in the applications storage.\n   */\n  public count(): number | undefined {\n    try {\n      return this.storage?.length;\n    } catch (error: unknown) {\n      this.error(error);\n      return undefined;\n    }\n  }\n\n  /**\n   * Returns the nth (defined by the index parameter) key in the storage.\n   * The order of keys is user-agent defined, so you should not rely on it.\n   * @param index An integer representing the number of the key you want to get the name of. This is a zero-based index.\n   */\n  public getKey(index: number): string | null | undefined {\n    if (index < 0) {\n      this.error(new Error('index has to be 0 or greater'));\n    }\n    try {\n      return this.storage?.key(index);\n    } catch (error) {\n      this.error(error);\n      return undefined;\n    }\n  }\n\n  /**\n   * Adds the value with the given key or updates an existing entry.\n   * @param key Key identifying the wanted entry.\n   * @param value Value to store.\n   * @param options Options for overwriting configuration with the following properties:\n   * * `prefix`: (Optional) Prefix to overwrite the configured one.\n   * * `serializer`: (Optional) Serializer to overwrite the configured one.\n   */\n  public set<T = unknown>(key: string, value: T, options?: ServiceOptions): void {\n    const [prefix, storageSerializer] = [options?.prefix, options?.serializer || this.serializer];\n\n    if (this.config.allowNull || (!this.config.allowNull && `${value}` !== 'null' && value !== null && value !== undefined)) {\n      this.storage?.setItem(constructKey(key, prefix, this.config.prefix, this.config.delimiter), storageSerializer.serialize(value));\n    } else {\n      this.remove(key, prefix);\n    }\n  }\n\n  /**\n   * Gets the entry specified by the given key if existing - otherwise `null`.\n   * @param key Key identifying the wanted entry.\n   * @param options Options for overwriting configuration with the following properties:\n   * * `prefix`: (Optional) Prefix to overwrite the configured one.\n   * * `serializer`: (Optional) Serializer to overwrite the configured one.\n   */\n  public get<T = unknown>(key: string, options?: ServiceOptions): T | null {\n    const [prefix, storageSerializer] = [options?.prefix, options?.serializer || this.serializer];\n\n    try {\n      const constructedKey = constructKey(key, prefix, this.config.prefix, this.config.delimiter);\n      const storageItem = this.storage?.getItem(constructedKey);\n      return storageItem ? storageSerializer.deserialize<T>(storageItem) : null;\n    } catch (error) {\n      this.error(error);\n      return null;\n    }\n  }\n\n  /**\n   * Removes the entry specified by the given key.\n   * @param key Key identifying the entry to remove.\n   * @param prefix Optional prefix to overwrite the configured one.\n   */\n  public remove(key: string, prefix?: string): void {\n    try {\n      this.storage?.removeItem(constructKey(key, prefix, this.config.prefix, this.config.delimiter));\n    } catch (error) {\n      this.error(error);\n    }\n  }\n\n  /**\n   * Clears all entries of the storage.\n   */\n  public clear(): void {\n    try {\n      this.storage?.clear();\n    } catch (error) {\n      this.error(error);\n    }\n  }\n\n  /**\n   * Triggers the service to emit the given error.\n   * @param error Error to emit through the service.\n   */\n  public error(error: string | Error | unknown): void {\n    this.onError.emit(error);\n  }\n}\n","import { EventEmitter, inject } from '@angular/core';\nimport { ControlValueAccessorDirective } from '../directives/control-value-accessor.directive';\nimport { NativeValueAccessorDirective } from '../directives/native-value-accessor.directive';\n\n/**\n * Base implementation contract for value accessors.\n */\nexport interface ValueAccessor {\n  /**\n   * Emitter for value changes.\n   */\n  valueChange: EventEmitter<unknown>;\n  /**\n   * Writes the value to the control.\n   * @param value Value to write\n   * @param falsyTransformer *optional* transformer handling falsy values\n   */\n  writeValue(value: unknown, falsyTransformer?: () => unknown): void;\n  /**\n   * Gets the current control value.\n   */\n  getValue(): unknown;\n}\n\n/**\n * Injects the matching value accessor depending on whether an `NgControl` is bound or not.\n * @returns directive mathing the binding mode\n */\nexport function injectAccessor(): ValueAccessor {\n  const controlAccessor = inject(ControlValueAccessorDirective);\n  if (controlAccessor.ngControl) {\n    return controlAccessor;\n  }\n  return inject(NativeValueAccessorDirective);\n}\n","import { AfterViewInit, DestroyRef, Directive, ElementRef, EventEmitter, Input, Output, booleanAttribute, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter } from 'rxjs/operators';\nimport { LocalStorageService } from '../services/ngx-localstorage.service';\nimport { ControlValueAccessorDirective } from './control-value-accessor.directive';\nimport { NativeValueAccessorDirective } from './native-value-accessor.directive';\nimport { injectAccessor } from '../interfaces/value-accessor';\n\n/**\n * Provide a directive to directly interact with stored values.\n */\n@Directive({\n  selector: '[ngxLocalStorage]',\n  standalone: true,\n  hostDirectives: [\n    ControlValueAccessorDirective,\n    {\n      directive: NativeValueAccessorDirective,\n      inputs: ['forEvent', 'valuePath', 'storageDebounce']\n    }\n  ]\n})\nexport class LocalStorageDirective implements AfterViewInit {\n  /**\n   * The key to use with localstorage.\n   */\n  @Input('ngxLocalStorage')\n  public key = '';\n\n  /**\n   * The keys prefix to use.\n   */\n  @Input()\n  public prefix?: string;\n\n  /**\n   * Flag if the bound elements value should be initialized from storage.\n   */\n  @Input({\n    transform: booleanAttribute\n  })\n  public initFromStorage = false;\n\n  /**\n   * An optional transformer to handle falsy values.\n   */\n  @Input()\n  public falsyTransformer?: () => unknown;\n\n  /**\n   * Event which gets fired when a bound value got stored.\n   */\n  @Output()\n  public storedValue = new EventEmitter<unknown>();\n\n  private readonly destroyRef = inject(DestroyRef);\n\n  private readonly accessor = injectAccessor();\n  private readonly elementRef = inject(ElementRef);\n  private readonly storageService = inject(LocalStorageService);\n\n  /**\n   * Sets up:\n   * * the key to use\n   * * storage observer\n   * * initalization from storage\n   * * value change observer\n   */\n  public ngAfterViewInit(): void {\n    this.initKey();\n\n    this.storageService\n      .pipe(\n        takeUntilDestroyed(this.destroyRef),\n        // TODO: filter should be more accurate\n        filter((ev: StorageEvent) => !!ev.key && ev.key.indexOf(this.key) >= 0)\n      )\n      .subscribe((ev: StorageEvent) => {\n        this.accessor.writeValue(ev.newValue, this.falsyTransformer);\n      });\n\n    this.checkInitFromStorage();\n    this.accessor.valueChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(value => {\n      this.storageService.set(this.key, value, {\n        prefix: this.prefix\n      });\n\n      this.storedValue.emit(value);\n    });\n  }\n\n  /**\n   * Initalizes the key from either the given value or the elements id or name property.\n   */\n  private initKey(): void {\n    if (!this.key) {\n      if (!this.elementRef.nativeElement.id && !this.elementRef.nativeElement.name) {\n        this.storageService.error(new Error('No key or element id or name supplied!'));\n      }\n      this.key = this.elementRef.nativeElement.id || this.elementRef.nativeElement.name;\n    }\n  }\n\n  /**\n   * Initializes the elements value from storage.\n   */\n  private checkInitFromStorage(): void {\n    if (this.initFromStorage) {\n      const storedValue = this.storageService.get(this.key, {\n        prefix: this.prefix\n      });\n\n      try {\n        this.accessor.writeValue(storedValue, this.falsyTransformer);\n      } catch (error) {\n        this.storageService.error(error);\n      }\n    }\n  }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders, Provider, Type } from '@angular/core';\nimport { NgxLocalstorageConfiguration } from './interfaces/storage-configuration';\nimport { StorageSerializer } from './interfaces/storage-serializer';\nimport { NGX_LOCAL_STORAGE_CONFIG } from './tokens/storage-config';\nimport { NGX_LOCAL_STORAGE_SERIALIZER } from './tokens/storage-serializer';\n\nenum FeatureKind {\n  Serializer\n}\n\n/**\n * @docs-private\n */\nexport interface NgxLocalstorageFeature<Kind extends FeatureKind> {\n  kind: Kind;\n  providers: Provider[];\n}\n\n/**\n * @docs-private\n */\nexport type NgxLocalStorageFeatures = SerializerFeature;\n\n/**\n * Provides the basic configuration and optional additional features.\n * @param configuration configuration used by the service and directive\n * @param features optional features; e.g. a custom serializer\n * @returns providers used by `ngx-localstorage`\n */\nexport const provideNgxLocalstorage = (\n  configuration?: NgxLocalstorageConfiguration,\n  ...features: NgxLocalStorageFeatures[]\n): EnvironmentProviders => {\n  if (features?.filter(feature => feature.kind === FeatureKind.Serializer)?.length > 1) {\n    throw new Error('Only one serializer feature is allowed!');\n  }\n\n  return makeEnvironmentProviders([\n    {\n      provide: NGX_LOCAL_STORAGE_CONFIG,\n      useValue: configuration\n    },\n    features?.map(feature => feature.providers)\n  ]);\n};\n\n/**\n * @docs-private\n */\nexport type SerializerFeature = NgxLocalstorageFeature<FeatureKind.Serializer>;\n\n/**\n * Provides a custom serializer.\n */\nexport const withSerializer = (serializer: Type<StorageSerializer>): SerializerFeature => ({\n  kind: FeatureKind.Serializer,\n  providers: [\n    {\n      provide: NGX_LOCAL_STORAGE_SERIALIZER,\n      useClass: serializer\n    }\n  ]\n});\n","export class Version {\n  public readonly major: string;\n  public readonly minor: string;\n  public readonly patch: string;\n\n  constructor(public readonly fullVersion: string) {\n    const [major, minor, patch] = fullVersion.split('.');\n    this.major = major;\n    this.minor = minor;\n    this.patch = patch;\n  }\n}\n\nexport const VERSION = new Version('6.0.0');\n","/*\n * Public API Surface of ngx-localstorage\n */\nexport { LocalStorageDirective, ControlValueAccessorDirective, NativeValueAccessorDirective } from './lib/directives';\n// services\nexport { LocalStorageService } from './lib/services/ngx-localstorage.service';\n// interfaces\nexport { NgxLocalstorageConfiguration } from './lib/interfaces/storage-configuration';\nexport { StorageSerializer } from './lib/interfaces/storage-serializer';\n// providers\nexport { NgxLocalStorageFeatures, NgxLocalstorageFeature, provideNgxLocalstorage, SerializerFeature, withSerializer } from './lib/provider';\n// tokens\nexport { NGX_LOCAL_STORAGE_CONFIG } from './lib/tokens/storage-config';\nexport { STORAGE_SUPPORT } from './lib/tokens/storage';\nexport { NGX_LOCAL_STORAGE_SERIALIZER } from './lib/tokens/storage-serializer';\nexport { VERSION } from './lib/version';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["filter","i1.ControlValueAccessorDirective","i2.NativeValueAccessorDirective"],"mappings":"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"}