{"version":3,"file":"toolbox-storage.mjs","sources":["../../../projects/toolbox/storage/local-storage.ts","../../../projects/toolbox/storage/session-storage.ts","../../../projects/toolbox/storage/local-storage.service.ts","../../../projects/toolbox/storage/session-storage.service.ts","../../../projects/toolbox/storage/public-api.ts","../../../projects/toolbox/storage/toolbox-storage.ts"],"sourcesContent":["// eslint-disable-next-line max-classes-per-file\r\nimport { isPlatformBrowser } from \"@angular/common\";\r\nimport {\r\n  ClassProvider,\r\n  FactoryProvider,\r\n  InjectionToken,\r\n  PLATFORM_ID\r\n} from \"@angular/core\";\r\n\r\n/* Create a new injection token for injecting local storage into a component. */\r\nexport const LOCAL_STORAGE = new InjectionToken( \"LocalStorageToken\" );\r\n\r\n/* Define abstract class for obtaining reference to the global local storage object. */\r\nexport abstract class LocalStorageRef {\r\n  /** Gets the native local storage reference. */\r\n  // eslint-disable-next-line class-methods-use-this\r\n  public get nativeLocalStorage(): Storage | object {\r\n    throw new Error( \"Not implemented.\" );\r\n  }\r\n}\r\n\r\n/* Define class that implements the abstract class\r\n and returns the native local storage object. */\r\nexport class BrowserLocalStorageRef extends LocalStorageRef {\r\n  /** Initializes a new instance of the {@link BrowserLocalStorageRef} class. */\r\n  public constructor() {\r\n    super();\r\n  }\r\n\r\n  /** Gets the native local storage object. */\r\n  // eslint-disable-next-line class-methods-use-this\r\n  public get nativeLocalStorage(): Storage | object {\r\n    return window.localStorage;\r\n  }\r\n}\r\n\r\n/* Create a factory function that returns the native local storage object. */\r\nexport const localStorageFactory = (\r\n  browserLocalStorageRef: BrowserLocalStorageRef,\r\n  platformId: object\r\n): Storage | object => {\r\n  if( isPlatformBrowser( platformId ) ) {\r\n    return browserLocalStorageRef.nativeLocalStorage;\r\n  }\r\n\r\n  return {};\r\n};\r\n\r\n/**\r\n * Create an injectable provider for the WindowRef token that uses\r\n * the BrowserWindowRef class.\r\n */\r\nconst browserLocalStorageProvider: ClassProvider = {\r\n  provide: LocalStorageRef,\r\n  useClass: BrowserLocalStorageRef\r\n};\r\n\r\n/* Create an injectable provider that uses the localStorageFactory function\r\n for returning the native window object. */\r\nconst localStorageProvider: FactoryProvider = {\r\n  provide: LOCAL_STORAGE,\r\n  useFactory: localStorageFactory,\r\n  deps: [LocalStorageRef, PLATFORM_ID]\r\n};\r\n\r\n/* Create an array of providers. */\r\nexport const LOCALSTORAGE_PROVIDERS = [\r\n  browserLocalStorageProvider,\r\n  localStorageProvider\r\n];\r\n","// eslint-disable-next-line max-classes-per-file\r\nimport { isPlatformBrowser } from \"@angular/common\";\r\nimport {\r\n  ClassProvider,\r\n  FactoryProvider,\r\n  InjectionToken,\r\n  PLATFORM_ID\r\n} from \"@angular/core\";\r\n\r\n/* Create a new injection token for injecting session storage into a component. */\r\nexport const SESSION_STORAGE = new InjectionToken( \"SessionStorageToken\" );\r\n\r\n/* Define abstract class for obtaining reference to the global session storage object. */\r\nexport abstract class SessionStorageRef {\r\n  /** Gets the native session storage reference. */\r\n  // eslint-disable-next-line class-methods-use-this\r\n  public get nativeSessionStorage(): Storage | object {\r\n    throw new Error( \"Not implemented.\" );\r\n  }\r\n}\r\n\r\n/* Define class that implements the abstract class\r\n and returns the native session storage object. */\r\nexport class BrowserSessionStorageRef extends SessionStorageRef {\r\n  /** Initializes a new instance of the {@link BrowserSessionStorageRef} class. */\r\n  public constructor() {\r\n    super();\r\n  }\r\n\r\n  /** Gets the native session storage object. */\r\n  // eslint-disable-next-line class-methods-use-this\r\n  public get nativeSessionStorage(): Storage | object {\r\n    return window.sessionStorage;\r\n  }\r\n}\r\n\r\n/* Create a factory function that returns the native session storage object. */\r\nexport const sessionStorageFactory = (\r\n  browserSessionStorageRef: BrowserSessionStorageRef,\r\n  platformId: object\r\n): Storage | object => {\r\n  if( isPlatformBrowser( platformId ) ) {\r\n    return browserSessionStorageRef.nativeSessionStorage;\r\n  }\r\n\r\n  return {};\r\n};\r\n\r\n/**\r\n * Create an injectable provider for the WindowRef token that uses\r\n * the BrowserWindowRef class.\r\n */\r\nconst browserSessionStorageProvider: ClassProvider = {\r\n  provide: SessionStorageRef,\r\n  useClass: BrowserSessionStorageRef\r\n};\r\n\r\n/* Create an injectable provider that uses the sessionStorageFactory function\r\n for returning the native window object. */\r\nconst sessionStorageProvider: FactoryProvider = {\r\n  provide: SESSION_STORAGE,\r\n  useFactory: sessionStorageFactory,\r\n  deps: [SessionStorageRef, PLATFORM_ID]\r\n};\r\n\r\n/* Create an array of providers. */\r\nexport const SESSIONSTORAGE_PROVIDERS = [\r\n  browserSessionStorageProvider,\r\n  sessionStorageProvider\r\n];\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { inject, Injectable } from \"@angular/core\";\r\nimport { LOCAL_STORAGE } from \"./local-storage\";\r\n\r\n@Injectable( { providedIn: \"root\" } )\r\nexport class TbxLocalStorage {\r\n  [name: string]: any;\r\n\r\n  public readonly localStorage = inject<Storage>( LOCAL_STORAGE );\r\n  public readonly length: number = this.localStorage.length;\r\n\r\n  public constructor() {\r\n    return new Proxy( this, {\r\n      get( target: TbxLocalStorage, name: string ): string | null {\r\n        if( name in target ) {\r\n          const result = target[name];\r\n\r\n          return typeof result === \"function\" ? result.bind( target ) : result;\r\n        }\r\n\r\n        return target.getItem( name );\r\n      },\r\n      set( target: TbxLocalStorage, name: string, newValue: string ): boolean {\r\n        if( name in target ) {\r\n          target[name] = newValue;\r\n        }\r\n        else {\r\n          target.setItem( name, newValue );\r\n        }\r\n\r\n        return true;\r\n      }\r\n    } );\r\n  }\r\n\r\n  /** @inheritDoc */\r\n  public getItem( key: string ): string | null {\r\n    return this.localStorage.getItem( key );\r\n  }\r\n\r\n  /** @inheritDoc */\r\n  public setItem( key: string, value: string ): void {\r\n    this.localStorage.setItem( key, value );\r\n  }\r\n\r\n  /** @inheritDoc */\r\n  public clear(): void {\r\n    this.localStorage.clear();\r\n  }\r\n\r\n  /** @inheritDoc */\r\n  public key( index: number ): string | null {\r\n    return this.localStorage.key( index );\r\n  }\r\n\r\n  /** @inheritDoc */\r\n  public removeItem( key: string ): void {\r\n    this.localStorage.removeItem( key );\r\n  }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { inject, Injectable } from \"@angular/core\";\r\nimport { SESSION_STORAGE } from \"./session-storage\";\r\n\r\n@Injectable( { providedIn: \"root\" } )\r\nexport class TbxSessionStorage implements Storage {\r\n  [name: string]: any;\r\n  public readonly sessionStorage = inject<Storage>( SESSION_STORAGE );\r\n  public readonly length: number = this.sessionStorage.length;\r\n\r\n  public constructor() {\r\n    return new Proxy( this, {\r\n      get( target: TbxSessionStorage, name: string ): string | null {\r\n        if( name in target ) {\r\n          const result = target[name];\r\n\r\n          return typeof result === \"function\" ? result.bind( target ) : result;\r\n        }\r\n\r\n        return target.getItem( name );\r\n      },\r\n      set( target: TbxSessionStorage, name: string, newValue: string ): boolean {\r\n       if( name in target ) {\r\n         target[name] = newValue;\r\n       } else {\r\n         target.setItem( name, newValue );\r\n       }\r\n\r\n       return true;\r\n      }\r\n    } );\r\n  }\r\n\r\n  /** @inheritDoc */\r\n  public getItem( key: string ): string | null {\r\n    return this.sessionStorage.getItem( key );\r\n  }\r\n\r\n  /** @inheritDoc */\r\n  public setItem( key: string, value: string ): void {\r\n    this.sessionStorage.setItem( key, value );\r\n  }\r\n\r\n  /** @inheritDoc */\r\n  public clear(): void {\r\n    this.sessionStorage.clear();\r\n  }\r\n\r\n  /** @inheritDoc */\r\n  public key( index: number ): string | null {\r\n    return this.sessionStorage.key( index );\r\n  }\r\n\r\n  /** @inheritDoc */\r\n  public removeItem( key: string ): void {\r\n    this.sessionStorage.removeItem( key );\r\n  }\r\n}\r\n","import { LOCALSTORAGE_PROVIDERS } from \"./local-storage\";\r\nimport { SESSIONSTORAGE_PROVIDERS } from \"./session-storage\";\r\n\r\n/**\r\n * Provides safe access to the Browser's {@link localStorage} object. Inject the\r\n * {@link TbxLocalStorage} service to have access to the storage instead of\r\n * calling window.localStorage directly.\r\n */\r\nexport const provideLocalStorage = () => LOCALSTORAGE_PROVIDERS;\r\n\r\n/**\r\n * Provides safe access to the Browser's {@link sessionStorage} object. Inject the\r\n * {@link TbxSessionStorage} service to have access to the storage instead of\r\n * calling window.sessionStorage directly.\r\n */\r\nexport const provideSessionStorage = () => SESSIONSTORAGE_PROVIDERS;\r\n\r\nexport * from \"./local-storage\";\r\nexport * from \"./local-storage.service\";\r\n\r\nexport * from \"./session-storage\";\r\nexport * from \"./session-storage.service\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}