{"version":3,"file":"ngspot-rxjs-decorators.mjs","sources":["../../../../packages/rxjs/decorators/share/share.ts","../../../../packages/rxjs/decorators/ngspot-rxjs-decorators.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Observable } from 'rxjs';\r\nimport { share, tap } from 'rxjs/operators';\r\n\r\nexport type MethodReturning<T> = (...args: any[]) => T;\r\n\r\nexport interface ShareOptions {\r\n  when?: MethodReturning<boolean>;\r\n}\r\n\r\nexport function Share(opts: ShareOptions = {}) {\r\n  return (\r\n    target: object,\r\n    propertyKey: string | symbol,\r\n    descriptor: TypedPropertyDescriptor<MethodReturning<Observable<any>>>\r\n  ) => {\r\n    if (!descriptor.value) {\r\n      return descriptor;\r\n    }\r\n\r\n    const originalMethod = descriptor.value;\r\n    const cachePropName = Symbol('cacheProp');\r\n\r\n    descriptor.value = function (this: any) {\r\n      // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n      const context = this;\r\n\r\n      if (!context[cachePropName]) {\r\n        context[cachePropName] = new Map<string, Observable<any>>();\r\n      }\r\n\r\n      const cache = context[cachePropName];\r\n      // eslint-disable-next-line prefer-rest-params\r\n      const args = arguments;\r\n      const key = `${String(propertyKey)}-${JSON.stringify([...args])}`;\r\n\r\n      const updatedCall = (\r\n        originalMethod.apply(context, args as any) as Observable<any>\r\n      ).pipe(\r\n        share(),\r\n        tap(() => cache.delete(key))\r\n      );\r\n\r\n      if (!opts.when || (opts.when as any).apply(context, args)) {\r\n        const loadingInProcess = cache.get(key);\r\n\r\n        if (loadingInProcess) {\r\n          return loadingInProcess;\r\n        }\r\n\r\n        cache.set(key, updatedCall);\r\n      }\r\n\r\n      return updatedCall;\r\n    };\r\n\r\n    return descriptor;\r\n  };\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;AAUgB,SAAA,KAAK,CAAC,IAAA,GAAqB,EAAE,EAAA;AAC3C,IAAA,OAAO,CACL,MAAc,EACd,WAA4B,EAC5B,UAAqE,KACnE;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AACrB,YAAA,OAAO,UAAU,CAAC;AACnB,SAAA;AAED,QAAA,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC;AACxC,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QAE1C,UAAU,CAAC,KAAK,GAAG,YAAA;;YAEjB,MAAM,OAAO,GAAG,IAAI,CAAC;AAErB,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;AAC3B,gBAAA,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,GAAG,EAA2B,CAAC;AAC7D,aAAA;AAED,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;;YAErC,MAAM,IAAI,GAAG,SAAS,CAAC;AACvB,YAAA,MAAM,GAAG,GAAG,CAAA,EAAG,MAAM,CAAC,WAAW,CAAC,CAAI,CAAA,EAAA,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC;AAElE,YAAA,MAAM,WAAW,GACf,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,IAAW,CAC1C,CAAC,IAAI,CACJ,KAAK,EAAE,EACP,GAAG,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAC7B,CAAC;AAEF,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAK,IAAI,CAAC,IAAY,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;gBACzD,MAAM,gBAAgB,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAExC,gBAAA,IAAI,gBAAgB,EAAE;AACpB,oBAAA,OAAO,gBAAgB,CAAC;AACzB,iBAAA;AAED,gBAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;AAC7B,aAAA;AAED,YAAA,OAAO,WAAW,CAAC;AACrB,SAAC,CAAC;AAEF,QAAA,OAAO,UAAU,CAAC;AACpB,KAAC,CAAC;AACJ;;AC1DA;;AAEG;;;;"}