{ "version": 3, "sources": ["src/app/core/services/feature-flag.service.ts"], "sourcesContent": ["import {\n Inject,\n Injectable,\n Signal,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { LOCALSTORAGE } from './local-storage.service';\n\nconst FEATURE_FLAGS = {\n SELF_BOOKING: false,\n};\n\nexport type FeatureFlag = keyof typeof FEATURE_FLAGS;\n\nexport const FeatureFlags: Record = Object.assign(\n {},\n ...Object.keys(FEATURE_FLAGS).map(key => ({ [key]: key }))\n);\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FeatureFlagService {\n private featureFlagSignals: {\n [key in FeatureFlag]: WritableSignal;\n } = Object.assign(\n {},\n ...Object.entries(FEATURE_FLAGS).map(([key, value]) => ({\n [key]: signal(value),\n }))\n );\n\n constructor(@Inject(LOCALSTORAGE) private localStorage: Storage) {\n Object.entries(this.featureFlagSignals).forEach(([key, signal]) => {\n if (this.localStorage.getItem(`feature_flag_${key}`)) {\n signal.set(\n this.localStorage.getItem(`feature_flag_${key}`) === 'true'\n );\n }\n });\n }\n\n getFeatureFlag(flag: FeatureFlag): Signal {\n return this.featureFlagSignals[flag].asReadonly();\n }\n\n setFeatureFlag(\n flag: FeatureFlag,\n state: boolean,\n persist: boolean = false\n ): void {\n this.featureFlagSignals[flag].set(state);\n if (persist) {\n this.localStorage.setItem(`feature_flag_${flag}`, state.toString());\n }\n }\n}\n\ninterface FeatureFlagResolverData {\n featureFlag: FeatureFlag;\n value?: boolean;\n persist?: boolean;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class FeatureFlagResolver {\n constructor(private featureFlagService: FeatureFlagService) {}\n\n resolve(route: ActivatedRouteSnapshot) {\n if (!route.data['featureFlags']) {\n return;\n }\n route.data['featureFlags'].forEach(\n ({ featureFlag, value, persist }: FeatureFlagResolverData) => {\n if (!value) {\n this.featureFlagService.setFeatureFlag(\n featureFlag,\n FEATURE_FLAGS[featureFlag]\n );\n } else {\n this.featureFlagService.setFeatureFlag(\n featureFlag,\n value,\n persist\n );\n }\n }\n );\n }\n}\n"], "mappings": "iGAUA,IAAMA,EAAgB,CAClBC,aAAc,IAKLC,EAAiDC,OAAOC,OACjE,CAAA,EACA,GAAGD,OAAOE,KAAKL,CAAa,EAAEM,IAAIC,IAAQ,CAAE,CAACA,CAAG,EAAGA,CAAG,EAAG,CAAC,EAMjDC,GAAkB,IAAA,CAAzB,MAAOA,CAAkB,CAU3BC,YAA0CC,EAAqB,CAArB,KAAAA,aAAAA,EATlC,KAAAC,mBAEJR,OAAOC,OACP,CAAA,EACA,GAAGD,OAAOS,QAAQZ,CAAa,EAAEM,IAAI,CAAC,CAACC,EAAKM,CAAK,KAAO,CACpD,CAACN,CAAG,EAAGO,EAAOD,CAAK,GACrB,CAAC,EAIHV,OAAOS,QAAQ,KAAKD,kBAAkB,EAAEI,QAAQ,CAAC,CAACR,EAAKO,CAAM,IAAK,CAC1D,KAAKJ,aAAaM,QAAQ,gBAAgBT,CAAG,EAAE,GAC/CO,EAAOG,IACH,KAAKP,aAAaM,QAAQ,gBAAgBT,CAAG,EAAE,IAAM,MAAM,CAGvE,CAAC,CACL,CAEAW,eAAeC,EAAiB,CAC5B,OAAO,KAAKR,mBAAmBQ,CAAI,EAAEC,WAAU,CACnD,CAEAC,eACIF,EACAG,EACAC,EAAmB,GAAK,CAExB,KAAKZ,mBAAmBQ,CAAI,EAAEF,IAAIK,CAAK,EACnCC,GACA,KAAKb,aAAac,QAAQ,gBAAgBL,CAAI,GAAIG,EAAMG,SAAQ,CAAE,CAE1E,iDAjCSjB,GAAkBkB,EAUPC,CAAY,CAAA,CAAA,CAAA,iCAVvBnB,EAAkBoB,QAAlBpB,EAAkBqB,UAAAC,WAFf,MAAM,CAAA,CAAA,SAETtB,CAAkB,GAAA,EA2ClBuB,GAAmB,IAAA,CAA1B,MAAOA,CAAmB,CAC5BtB,YAAoBuB,EAAsC,CAAtC,KAAAA,mBAAAA,CAAyC,CAE7DC,QAAQC,EAA6B,CAC5BA,EAAMC,KAAK,cAGhBD,EAAMC,KAAK,aAAgBpB,QACvB,CAAC,CAAEqB,YAAAA,EAAavB,MAAAA,EAAOU,QAAAA,CAAO,IAA+B,CACpDV,EAMD,KAAKmB,mBAAmBX,eACpBe,EACAvB,EACAU,CAAO,EARX,KAAKS,mBAAmBX,eACpBe,EACApC,EAAcoC,CAAW,CAAC,CAStC,CAAC,CAET,iDAvBSL,GAAmBL,EAAAlB,CAAA,CAAA,CAAA,CAAA,iCAAnBuB,EAAmBH,QAAnBG,EAAmBF,UAAAC,WADN,MAAM,CAAA,CAAA,SACnBC,CAAmB,GAAA", "names": ["FEATURE_FLAGS", "SELF_BOOKING", "FeatureFlags", "Object", "assign", "keys", "map", "key", "FeatureFlagService", "constructor", "localStorage", "featureFlagSignals", "entries", "value", "signal", "forEach", "getItem", "set", "getFeatureFlag", "flag", "asReadonly", "setFeatureFlag", "state", "persist", "setItem", "toString", "\u0275\u0275inject", "LOCALSTORAGE", "factory", "\u0275fac", "providedIn", "FeatureFlagResolver", "featureFlagService", "resolve", "route", "data", "featureFlag"] }