{"version":3,"file":"vsirotin-keeper-master-data.mjs","sources":["../../../../projects/keeper-master-data/src/lib/i-repository-adapters.ts","../../../../projects/keeper-master-data/src/lib/specific-adapters/local-storage-adapter/local-storage-adapter.ts","../../../../projects/keeper-master-data/src/lib/specific-adapters/local-storage-adapter/local-storage-adapter-for-number-and-categories.ts","../../../../projects/keeper-master-data/src/lib/specific-readers/reader-default.ts","../../../../projects/keeper-master-data/src/lib/i-keyed-keeper-master-data.ts","../../../../projects/keeper-master-data/src/lib/keeper-master-data-key-value-sync.ts","../../../../projects/keeper-master-data/src/lib/specific-readers/reader-browser-language.ts","../../../../projects/keeper-master-data/src/lib/specific-keepers/keeper-current-user-language.ts","../../../../projects/keeper-master-data/src/lib/keeper-master-data-key-value-async.ts","../../../../projects/keeper-master-data/src/lib/specific-readers/reader-http.ts","../../../../projects/keeper-master-data/src/lib/specific-keepers/keeper-master-data-browser-local-store-htpp-default.ts","../../../../projects/keeper-master-data/src/lib/specific-keepers/keeper-master-data-browser-local-store-htpp.ts","../../../../projects/keeper-master-data/src/public-api.ts","../../../../projects/keeper-master-data/src/vsirotin-keeper-master-data.ts"],"sourcesContent":["import { ILogger, LoggerFactory } from \"@vsirotin/log4ts\";\n\n/*\n    API for a repository reader.\n*/\nexport interface IRepositoryReader<T>{\n    /*\n        Shows if an reader is async.\n        This strange method is needed because a specific of TypeScript.\n    */\n    readonly isAsync: boolean;\n}\n/*\n    API (abstract class) for a synchronesly repository reader.\n*/\nexport abstract class RepositoryReaderSync<T> implements IRepositoryReader<T> {\n    /*\n        Read synchronesly an object from repository by key.\n        @param key Key\n        @param object Object\n    */\n    abstract readSync(key: string): T|undefined;\n\n    readonly isAsync: boolean = false;\n}\n\n/*\n    API (abstarct class) for asynchronesly repository reader.\n*/\nexport abstract class RepositoryReaderAsync<T> implements IRepositoryReader<T> {\n    /*\n        Read asynchronesly an object from repository by key.\n        @param key Key\n        @param object Object\n        @returns Promise with object or undefined\n    */\n    abstract readAsync(key: string): Promise<T|undefined>;\n\n    readonly isAsync: boolean = true\n}\n\n/*\n    API (abstarct class) for a repository writer.\n*/\nexport interface IRepositoryWiter<T>{\n\n    /*\n        Shows if an writer is async.\n        This strange method is needed because a specific of TypeScript.\n    */\n    readonly isAsync: boolean;\n}\n/*\n    API (abstarct class) for a writable repository reader.\n*/\nexport abstract class RepositoryWriterSync<T> implements IRepositoryWiter<T> {\n\n    /*\n        Save an object to repository by key synchronesly.\n        @param key Key\n        @param object Object\n    */\n    abstract saveSync(key: string, data: T): void;\n\n    readonly isAsync: boolean = false;\n}\n\n/*\n    API (abstarct class) for an asynchronesly repository writer.\n*/\n\nexport abstract class RepositoryWriterAsync<T> implements IRepositoryWiter<T> {\n\n    /*\n        Save an object to repository by key asynchronesly.\n        @param key Key\n        @param object Object\n    */\n    abstract saveAsync(key: string, object: any): Promise<void>;\n\n    readonly isAsync: boolean = true;\n}\n\n/*\n    API for a repository adapter. \n    An adapter connects a repository reader and a repository writer.\n*/\nexport interface RepositoryAdapter<T>  {\n    readonly isAsync: boolean;\n}\n/*\n    API (abstarct class) for a synchronesly repository adapter.\n*/\nexport abstract class RepositoryAdapterSync<T> implements RepositoryAdapter<T> {\n\n    private logger: ILogger = LoggerFactory.getLogger(\"eu.sirotin.kmd.RepositoryAdapterSync\");\n\n    constructor(private reader: RepositoryReaderSync<T>, private writer: RepositoryWriterSync<T>) {};\n    readonly isAsync: boolean = false;\n\n    /*\n        Save an object to repository by key synchronesly.\n        @param key Key\n        @param object Object\n    */\n    saveSync(key: string, object: any): void{\n        this.logger.log(\"In saveSync key=\" + key + \" object=\" + object);\n        this.writer.saveSync(key, object);\n    }\n\n    /*\n        Read an object from repository by key synchronesly.\n        @param key Key\n        @returns Object\n    */\n    readSync(key: string): T|undefined{\n        const result = this.reader.readSync(key);\n        this.logger.log(\"In readSync key=\", key, \" result=\", result);\n        return result;\n    }\n\n    /*\n        Remove an object from adapter's own storage by key synchronesly.\n        @param key  Key\n    */\n    abstract removeValueForkeySync(key: string): void;\n}\n/*\n    API (abstarct class) for an asynchronesly repository adapter.\n*/\nexport abstract class RepositoryAdapterAsync<T> implements RepositoryAdapter<T> {\n\n    private logger: ILogger = LoggerFactory.getLogger(\"eu.sirotin.kmd.RepositoryAdapterAsync\");\n\n    constructor(private reader: RepositoryReaderAsync<T>, private writer: RepositoryWriterAsync<T>) {};\n\n    readonly isAsync: boolean = true;\n\n    /*\n        Save an object to repository by key asynchronesly.\n        @param key Key\n        @param object Object\n    */\n    saveAsync(key: string, object: any): Promise<void>{\n        this.logger.log(\"In saveAsync key=\" + key + \" object=\" + object);\n        return this.writer.saveAsync(key, object);\n        \n    }\n\n    /*\n        Read an object from repository by key asynchronesly.\n        @param key Key\n        @returns Object\n    */\n    readAsync(key: string): Promise<T|undefined>{\n        this.logger.log(\"In readAsync key=\" + key);\n        return this.reader.readAsync(key);\n    }\n\n    /*\n        Remove an object from adapter's own storage by key asynchronesly.\n        @param key  Key\n    */\n    abstract removeValueForkeyAsync(key: string): void;\n}\n","import { ILogger, LoggerFactory } from \"@vsirotin/log4ts\";\nimport { RepositoryAdapterSync, RepositoryReaderSync, RepositoryWriterSync } from \"../../i-repository-adapters\";\n\n/*\n    Implementation of Repository Reader for local storage based key-value repository.\n*/\nexport class LocalStorageReader<T> implements RepositoryReaderSync<T> {\n    private logger: ILogger = LoggerFactory.getLogger(\"eu.sirotin.kmd.LocalStorageReader\");\n    \n    /*\n        Read an object from repository by key synchronesly.\n        @param key Key\n        @returns Object\n    */\n    readSync(key: string): T | undefined {\n        const res = localStorage.getItem(key);\n        if (res === null) {\n            this.logger.log(\"In readSync 1 key=\", key, \" res=null\");\n            return undefined;\n        }\n        this.logger.log(\"In readSync 2 key=\", key, \" res=\", res);\n    \n        try {\n            return JSON.parse(res) as T;\n        } catch (e) {\n            this.logger.log(\"In readSync 3 res not parseable, brobably it is a string\");\n        }\n        return res as unknown as T;\n    }\n    /*\n        Shows if an adapter is async.\n    */\n    isAsync: boolean = false;\n}\n\n/*\n    Implementation of Repository Writer for local storage based key-value repository.\n*/\nexport class LocalStorageWriter<T> implements RepositoryWriterSync<T> {\n    private logger: ILogger = LoggerFactory.getLogger(\"eu.sirotin.kmd.LocalStorageWriter\");\n\n    /*\n        Save an object to repository by key synchronesly.\n        @param key Key\n        @param data saved data \n    */\n    saveSync(key: string, data: T): void {\n        const type = typeof data;\n        this.logger.log(\"In saveSync key=\", key, \" type=\", type, \" data=\", data);\n        if(type === \"string\") {\n            localStorage.setItem(key, data as unknown as string);\n            return;\n        }\n        localStorage.setItem(key, JSON.stringify(data));\n    }\n\n    /*\n        Shows if an adapter is async.\n    */\n    isAsync: boolean = false;\n\n}\n\n/*\n    Internal implementation of RepositoryAdapter for local storage based key-value repository.\n    Not recomended to use directly. Use LocalStorageAdapter instead.\n*/\nexport class LocalStorageAdapterSync<T> extends RepositoryAdapterSync<T> {\n\n    private logger1: ILogger = LoggerFactory.getLogger(\"eu.sirotin.kmd.LocalStorageAdapter\");\n\n    constructor() {\n        super(new LocalStorageReader<T>(), new LocalStorageWriter<T>());\n        this.logger1.log(\"constructor: created\");\n    }\n\n    /*\n        Remove an object from repository by key synchronesly.\n        @param key Key\n    */\n    override removeValueForkeySync(key: string): void {\n        this.logger1.log(\"In removeValueForkeySync key=\", key);\n        localStorage.removeItem(key);\n    }\n}\n\n/*\n    Implementation of Repository Adapter for local storage based key-value repository.\n*/\nexport class LocalStorageAdapter<T>  {\n\n    private logger: ILogger = LoggerFactory.getLogger(\"eu.sirotin.kmd.LocalStorageAdapter\");\n\n    private implementation: LocalStorageAdapterSync<T> = new LocalStorageAdapterSync<T>();\n\n    constructor(private key: string, private defaultValue: T) {\n        this.logger.log(\"constructor: created\");\n    }\n\n    /**\n     * Read the value of the key given in the constructor\n     * @returns the value of the key\n     */\n    readValue(): T {\n        this.logger.log(\"In read key=\", this.key);\n        const res = this.implementation.readSync(this.key);\n        if (res === undefined) {\n            this.logger.log(\"In read 1 key=\", this.key, \" res=undefined\");\n            return this.defaultValue;\n        }\n        this.logger.log(\"In read 2 key=\", this.key, \" res=\", res);\n        return res;\n    }\n\n    /**\n     * Save the value of the key given in the constructor\n     * @param value the value to be saved\n     */\n    saveValue(value: T): void {\n        this.logger.log(\"In save key=\", this.key, \" value=\", value);\n        this.implementation.saveSync(this.key, value);\n    }\n\n    /**\n     * Remove the value of the key given in the constructor\n     */\n    removeValue(): void {\n        this.logger.log(\"In remove key=\", this.key);\n        this.implementation.removeValueForkeySync(this.key);    \n    }\n}\n","import { ILogger, LoggerFactory } from \"@vsirotin/log4ts\";\nimport { RepositoryAdapterSync } from \"../../i-repository-adapters\";\nimport { LocalStorageReader, LocalStorageWriter } from \"./local-storage-adapter\";\n\n/*\n    Implementation of RepositoryAdapter for local storage based key-value repository with versions and categories.\n*/\nexport class LocalStorageAdapterWithVersionsAndCategories extends RepositoryAdapterSync<string> {\n    private prefix: string;\n\n    private logger1: ILogger = LoggerFactory.getLogger(\"eu.sirotin.kms.LocalStorageAdapterWithVersionsAndCategories\");\n\n    constructor(private version: number, ...categories: string[]) {\n        super(new LocalStorageReaderWithVersionsAndCategories(version, ...categories), \n        new LocalStorageWriterWithVersionsAndCategories(version, ...categories));\n        this.prefix = categories.join(\"-\") + \"-v-\" + version;\n        this.logger1.log(\"constructor: Instance created\");\n    }\n\n\n    /*\n        Remove an object from repository by key synchronesly.\n        @param key Key\n    */\n    override removeValueForkeySync(key: string): void {\n        this.logger1.log(\"removeValueForkeySync: key=\", key);\n        localStorage.removeItem(generateStorageKey(key, this.prefix));\n    }\n\n    \n}\n\n/**\n    Generate a key for local storage based on the key and the prefix.\n*/\nfunction generateStorageKey(key: string, prefix: string): string {\n    return prefix + \"-\" + key;\n}\n\n/**\n * Implementation of LocalStorageReader for local storage based key-value repository with versions and categories.\n */\nexport class LocalStorageReaderWithVersionsAndCategories<T> extends LocalStorageReader<T> {\n    private prefix: string;\n    private logger1: ILogger = LoggerFactory.getLogger(\"eu.sirotin.kmd.LocalStorageReaderWithVersionsAndCategories\");\n\n    constructor(private version: number, ...categories: string[]) {\n        super();\n        this.prefix = categories.join(\"-\") + \"-v-\" + version;\n        this.logger1.log(\"constructor: Instance created for prefix=\", this.prefix);\n    }\n\n    /*\n        Read an object from repository by key synchronesly.\n        @param key Key\n        @returns Object or undefined\n    */\n    override readSync(key: string): T | undefined {\n        const generatedKey = generateStorageKey(key, this.prefix);\n        const result = super.readSync(generatedKey);\n        const isUnderfined = result === undefined;\n        this.logger1.log(\"readSync: generatedKey=\", generatedKey, \", result=\", result, \" isUnderfined=\", isUnderfined);\n        return result;\n    }\n\n}\n\n/**\n * Implementation of LocalStorageWriter for local storage based key-value repository with versions and categories.\n */\nexport class LocalStorageWriterWithVersionsAndCategories<T> extends LocalStorageWriter<T> {\n    private prefix: string;\n    private logger2: ILogger = LoggerFactory.getLogger(\"eu.sirotin.kmd.LocalStorageWriterWithVersionsAndCategories\");\n\n    constructor(private version: number, ...categories: string[]) {\n        super();\n        this.prefix = categories.join(\"-\") + \"-v-\" + version;\n        this.logger2.log(\" created for prefix=\", this.prefix);\n    }\n\n    /**\n     * Save an object to repository by key synchronesly.\n     * @param key key\n     * @param data data to be saved\n     */\n\n    override saveSync(key: string, data: T): void {\n        const generatedKey = generateStorageKey(key, this.prefix);\n        super.saveSync(generatedKey, data);\n        this.logger2.log(\"saveSync: generatedKey=\", generatedKey, \", data=\", data);\n    }\n\n}\n","import { ILogger, LoggerFactory } from \"@vsirotin/log4ts\";\nimport { RepositoryReaderSync } from \"../i-repository-adapters\";\n\n/**\n * Default reader. Simply always return default value.\n */\nexport class ReaderDefault<T> extends RepositoryReaderSync<T> {\n\n    loggger: ILogger = LoggerFactory.getLogger(\"eu.sirotin.kmd.ReaderDefault\");\n\n    constructor(private defaultData: T) {\n        super();\n        this.loggger.log(\"constructor: created for \", defaultData);\n    }\n\n    /**\n     * Read the default data synchronously.\n     * @param key key for searching the data\n     * @returns \n     */\n    override readSync(key: string): T | undefined {\n        this.loggger.log(\"readSync for \", key, \" returns \", this.defaultData);\n        return this.defaultData;\n    }\n}\n","/**\n * Says if a keeper master data is async or not.\n */\nexport interface IKeeperMasterData<T> {\n    isAsync: boolean;\n}\n\n/*\n    API for a asynchronesly keeper master data with key-value based data model.\n    Keeper generally tryies to keep the data in some own storage.\n    By finding, if it not founds data in its storage, it tryies to fetch from known repositories.\n*/\nexport abstract class KeeperMasterDataAsync<T> implements IKeeperMasterData<T> {\n    /*\n        Save an object to repository by key.\n        @param key Key\n        @param object Object\n        @returns Promise\n    */\n    abstract saveAsync(key: string, data: T): Promise<void>;\n\n    /*\n        Find an object in repository by key.\n        @param key Key\n        @returns Promise with object or undefined\n    */\n    abstract findAsync(key: string): Promise<T|undefined>;\n    isAsync: boolean = true;\n}\n\n/*\n    API for a synchronesly keeper master data with key-value based data model.\n    Keeper generally tryies to keep the data in some own storage.\n    By finding, if it not founds data in its storage, it tryies to fetch from known repositories.\n*/\nexport abstract class KeeperMasterDataSync<T> implements IKeeperMasterData<T> {\n\n    /*\n        Save an object to repository by key.\n        @param key Key\n        @param object Object\n    */\n    abstract saveSync(key: string, data: T): void;\n\n    /*\n        Find an object in repository by key.\n        @param key Key\n        @returns Object or undefined\n    */\n    abstract findSync(key: string): T|undefined;\n    isAsync: boolean = false;\n}\n","import { ILogger, LoggerFactory } from \"@vsirotin/log4ts\";\nimport { KeeperMasterDataSync } from \"./i-keyed-keeper-master-data\";\nimport { RepositoryAdapterSync, RepositoryReaderSync, RepositoryWriterAsync, RepositoryWriterSync } from \"./i-repository-adapters\";\n/*\n    Synchrone implementation of IKeeperMasterDataKeyValue with key-value based data model.\n*/\nexport class KeeperMasterDataKeyValueSync<T> extends KeeperMasterDataSync<T> {\n    private logger: ILogger = LoggerFactory.getLogger(\"eu.sirotin.kmd.KeeperMasterDataKeyValueSync\");\n\n    /*\n        Constructor.\n        @param repositoryAdapter Adapter for repository\n        @param readers List of readers\n        @param logger Logger\n    */\n    constructor(protected repositoryAdapter: RepositoryAdapterSync<T>, \n        protected readers: RepositoryReaderSync<T>[] = []) {\n        super();\n        this.logger.log(\"constructor: created\");\n    }\n\n    /*\n        Save an object to repository by key.\n        @param key Key\n        @param object Object\n    */\n    override saveSync(key: string, data: T): void {\n        this.logger.log(\"In saveSync key=\" + key + \" data=\" + data);\n        (this.repositoryAdapter as RepositoryAdapterSync<T>).saveSync(key, data);\n    }\n\n    /*\n        Find an object in repository by key.\n        @param key Key\n        @returns Object of type T or undefined\n    */\n    override findSync(key: string): T|undefined {\n\n        let result = this.repositoryAdapter.readSync(key);\n        this.logger.log(\"In findSync after adapterSync.readSync key=\", key, \" result=\", result);\n\n        if(result) {\n            return result;\n        }\n\n        for(const reader of this.readers) {\n            result = reader.readSync(key);\n            this.logger.log(\"In findSync after readerSync.readSync key=\", key, \" result=\", result);\n            if(result) {\n                //If we are heare, we have found the value is not keeped repositoryAdapter. So we need to save it in it.\n                this.repositoryAdapter.saveSync(key, result);             \n                this.logger.log(\"In findSync after adapterSync.saveSync key=\", key, \" result=\", result);\n                break;\n            }\n        }\n        this.logger.log(\"In findSync before return key=\", key, \" result=\", result);\n        return result;\n    }\n}\n\n\n","\nimport { ILogger, LoggerFactory } from \"@vsirotin/log4ts\";\nimport { RepositoryReaderSync } from \"../i-repository-adapters\";\n\n/**\n * Reads prefrable user's language in current browser.\n */\nexport class ReaderBrowserLanguage extends RepositoryReaderSync<string> {\n\n    loggger: ILogger = LoggerFactory.getLogger(\"eu.sirotin.kmd.ReaderBrowserLanguage\");\n\n    constructor() {\n        super();\n        this.loggger.log(\"constructor: created\");\n    }\n\n    /**\n    * Reads prefrable user's language in current browser.\n    */\n    override readSync(_: string): string  {\n        const lang = navigator.language;\n        this.loggger.log(\"readSync: lang= \", lang);\n        return lang;\n    }\n}\n","import { ILogger, LoggerFactory } from \"@vsirotin/log4ts\";\nimport { ReaderDefault } from \"../specific-readers/reader-default\";\nimport { KeeperMasterDataKeyValueSync } from \"../keeper-master-data-key-value-sync\";\nimport { LocalStorageAdapterSync } from \"../specific-adapters/local-storage-adapter/local-storage-adapter\";\nimport { ReaderBrowserLanguage } from \"../specific-readers/reader-browser-language\";\n\n\n/*\n    Keeper of information about the current user language.\n*/\nexport class KeeperCurrentUserLanguage  {\n\n    private loggger: ILogger = LoggerFactory.getLogger(\"eu.sirotin.kmd.KeeperCurrentUserLanguage\");\n    private keeperImpl: KeeperMasterDataKeyValueSync<string>;\n    private adapter: LocalStorageAdapterSync<string> = new LocalStorageAdapterSync<string>();\n\n    /**\n     * Create a keeper master data with key-value based data model.\n     * @param key place in local storage, where to store the data.\n     * @param defaultLanguageTag default data\n     */\n    constructor(private key: string, private defaultLanguageTag: string) {\n        this.keeperImpl = new KeeperMasterDataKeyValueSync(\n            this.adapter, \n            [new ReaderBrowserLanguage(),\n            new ReaderDefault<string>(defaultLanguageTag)\n        ]);\n        this.loggger.log(\"constructor: created for \", key, \" defaultData\", defaultLanguageTag);\n    }\n\n    /**\n     * Read the current language of the user from local storage.\n     * @returns the current language of the user\n     */\n    readCurrentLang(): string   {\n        const res = this.keeperImpl.findSync(this.key) as string;\n        this.loggger.log(\"readCurrentLang: read \", res, \" for key \", this.key);\n        return res;\n    }\n\n    /**\n     * Write the current language of the user in local storage.\n     * @param lang the language to be saved\n     */\n    writeCurrentLang(lang: string): void {\n        this.keeperImpl.saveSync(this.key, lang);\n        this.loggger.log(\"writeCurrentLang: saved \", lang, \" for key \", this.key);\n    }\n\n    /**\n     * Remove the current language of the user from local storage.\n     */\n    removeCurrentLang(): void {\n        this.adapter.removeValueForkeySync(this.key);\n        this.loggger.log(\"removeCurrentLang: removed for key \", this.key);\n    }\n\n    /**\n     * Checks if the current language of the user is saved in local storage.\n     * @returns true if the current language is saved, false otherwise\n     */\n    isCurrentLangSaved(): boolean {\n        const res = this.adapter.readSync(this.key) != null;\n        this.loggger.log(\"isCurrentLangSaved: \", res, \" for key \", this.key);\n        return res\n    }\n\n}\n\n\n","import { ILogger, LoggerFactory } from \"@vsirotin/log4ts\";\nimport { KeeperMasterDataAsync } from \"./i-keyed-keeper-master-data\";\nimport { RepositoryAdapter, IRepositoryReader, RepositoryAdapterSync, RepositoryAdapterAsync, RepositoryReaderAsync, RepositoryReaderSync } from \"./i-repository-adapters\";\n\n/*\n    Aynchrone implementation of KeeperMasterData with key-value based data model.\n*/\nexport class KeeperMasterDataKeyValueAsync<T> extends KeeperMasterDataAsync<T> {\n    private logger: ILogger = LoggerFactory.getLogger(\"eu.sirotin.kmd.KeeperMasterDataKeyValueAsync\");\n    /*\n        Constructor.\n        @param repositoryAdapter Adapter for repository, can be async or sync\n        @param readers List of readers, can be async or sync\n        @param logger Logger\n    */\n    constructor(protected repositoryAdapter: RepositoryAdapter<T>,\n        protected readers: IRepositoryReader<T>[] = []) {\n        super();\n        this.logger.log(\"constructor:  created\");\n    }\n\n    /*\n        Save an object to repository by key.\n        @param key Key\n        @param object Object\n        @returns Promise\n    */\n    override async saveAsync(key: string, data: T): Promise<void> {\n        this.logger.log(\"In saveAsync key=\" + key + \" data=\" + data);\n        if (!this.repositoryAdapter.isAsync) {\n            return (this.repositoryAdapter as RepositoryAdapterSync<T>).saveSync(key, data);\n        }\n        return (this.repositoryAdapter as RepositoryAdapterAsync<T>).saveAsync(key, data);\n    }\n\n    /*\n        Find an object in repository by key.\n        @param key Key\n        @returns Promise with object of type T or undefined\n    */\n    override async findAsync(key: string): Promise<T | undefined> {\n        this.logger.log(\"In findAsync key=\" + key);\n        let result: Awaited<T> | undefined = undefined;\n        if (this.repositoryAdapter.isAsync) {\n\n            const adapterAsync = this.repositoryAdapter as RepositoryAdapterAsync<T>;\n\n            result = await adapterAsync.readAsync(key);\n            this.logger.log(\"In findAsync 1 key=\", key, \" result=\", result);\n\n            if (result) {\n                return result;\n            }\n        } else {\n            const adapterSync = this.repositoryAdapter as RepositoryAdapterSync<T>;\n            const resSync = adapterSync.readSync(key);\n            this.logger.log(\"In findAsync 2 key=\", key, \" resSync=\", resSync);\n            if (resSync) {\n                result = Promise.resolve(resSync) as Awaited<T>;\n                this.logger.log(\"In findAsync 3 key=\", key, \" result=\", result);\n                return result;\n            }\n        }\n\n        this.logger.log(\"In findAsync before starts call readers\");\n        for (const reader of this.readers) {\n            if (reader.isAsync) {\n                const readerAsync = reader as RepositoryReaderAsync<T>;\n                result = await readerAsync.readAsync(key);\n                this.logger.log(\"In findAsync after readerAsync.readAsync key=\", key, \" result=\", result);\n                if (result) {\n                    break;\n                }\n            } else {\n                const readerSync = reader as RepositoryReaderSync<T>;\n                const resultSync = readerSync.readSync(key);\n                this.logger.log(\"In findSync after readerSync.readSync key=\", key, \" resultSync=\", resultSync);\n                if (resultSync) {\n                    result = Promise.resolve(resultSync) as Awaited<T>;\n                    this.logger.log(\"In findAsync after results.push result=\", result);\n                    break;\n                }\n            }\n        }\n\n\n        if (result) {\n            //If we are heare, we have found the value is not keeped repositoryAdapter. So we need to save it in it.\n            const pureRsult = await result as T;\n            await this.saveAsync(key, pureRsult);\n            this.logger.log(\"In findAsync after call saveAsync key=\", key, \" pureRsult=\", pureRsult);\n            return result;\n        }\n        \n\n        this.logger.log(\"In findAsync 4 key=\", key, \" result undefined\");\n        return undefined;\n    }\n\n}\n","import { ILogger, LoggerFactory } from \"@vsirotin/log4ts\";\nimport { RepositoryReaderAsync } from \"../i-repository-adapters\";\n\n/*\n    Implementation of Reader for HTTP-based key-value repository.\n*/\nexport class HTTPKeyValueRepositoryReader  extends RepositoryReaderAsync<Object> {\n\n    private logger: ILogger;\n    constructor(private urlPrefix: string) {\n        super();\n        this.logger = LoggerFactory.getLogger(\"eu.sirotin.kmd.HTTPKeyValueRepositoryReader for \" + urlPrefix);\n        this.logger.log(\"constructor: created for \", urlPrefix);\n    }\n\n    /*\n        Fetch (load) an object from repository by key.\n        @param key Key\n        @param object Object\n    */\n    override async readAsync(key: string):  Promise<Object | undefined>  {\n    \n        let path = this.urlPrefix + key + \".json\";\n        this.logger.debug(\"readAsync: Start of fetching from path=\", path);\n        const result = fetch(path);\n        if(await result === undefined) {\n            return result;\n        }\n \n        return await result.then(response => {\n                this.logger.debug(\"readAsync: After fetching for path=\", path, \" response.status=\", response.status, \" response.ok=\", response.ok, \n                    \" response.statusText=\", response.statusText);\n                if (!response.ok) {\n                    this.logger.warn(\"readAsync: HTTP error. Status=\",\n                        response.status, \" response.statusText=\", response.statusText, \" by fetching from \", path);\n                }\n                return response.json();\n            }).catch((error) => {\n                this.logger.warn(\"readAsync: In readAsync error=\" + error);\n                return undefined;\n            });\n    }\n}","import { ILogger, LoggerFactory } from \"@vsirotin/log4ts\";\nimport { KeeperMasterDataKeyValueAsync } from \"../keeper-master-data-key-value-async\";\nimport { LocalStorageAdapterWithVersionsAndCategories } from \"../specific-adapters/local-storage-adapter/local-storage-adapter-for-number-and-categories\";\nimport { HTTPKeyValueRepositoryReader } from \"../specific-readers/reader-http\";\n\n\n/*\n    Keeper of KeeperMasterData for browser local storage with HTTP reader.\n    This keeper holds data in local storage. \n    By finding it looks for the data in local storage and if it is not found it tries to find it in the HTTP repository.\n*/\nexport class KeeperMasterDataBrowserLocalStoreHtppDefaultForComponentWithVersion<T> extends KeeperMasterDataKeyValueAsync<T> {\n\n    loggger: ILogger = LoggerFactory.getLogger(\"eu.sirotin.kmd.KeeperMasterDataBrowserLocalStoreHtppDEfaultForComponentWithVersion\");\n\n    /**\n     * Create a keeper master data with key-value based data model.\n     * @param componentCoordinate Component coordinate\n     * @param componentVersion Component version\n     * @returns instance of IKeeperMasterDataKeyValue\n     */\n    constructor(componentCoordinate: string, componentVersion: number, private defaultData: T) {\n        super(new LocalStorageAdapterWithVersionsAndCategories(componentVersion, componentCoordinate), \n        [new HTTPKeyValueRepositoryReader(componentCoordinate + \"/\" + componentVersion + \"/\")]);\n        this.loggger.log(\"constructor. created for \", componentCoordinate, \" v.\", componentVersion);\n    }\n\n    /**\n     * Search the data in local storage and if it is not found, search in the HTTP repository.\n     * @param key key for searching the data\n     * @returns Promise with the data\n     */\n    override async findAsync(key: string): Promise<T | undefined> {\n        let res = await super.findAsync(key);\n        if (res == undefined) {\n            this.loggger.log(\"findAsync: Data not found in local storage, returns default.\");\n            res = Promise.resolve(this.defaultData) as Awaited<T>;\n        }\n        return res;\n    }\n\n}\n\n\n","import { ILogger, LoggerFactory } from \"@vsirotin/log4ts\";\nimport { KeeperMasterDataKeyValueAsync } from \"../keeper-master-data-key-value-async\";\nimport { LocalStorageAdapterWithVersionsAndCategories } from \"../specific-adapters/local-storage-adapter/local-storage-adapter-for-number-and-categories\";\nimport { HTTPKeyValueRepositoryReader } from \"../specific-readers/reader-http\";\n\n\n/*\n    Keeper of KeeperMasterData for browser local storage with HTTP reader.\n    This keeper holds data in local storage. \n    By finding it looks for the data in local storage and if it is not found it tries to find it in the HTTP repository.\n*/\nexport class KeeperMasterDataBrowserLocalStoreHtppForComponentWithVersion<T> extends KeeperMasterDataKeyValueAsync<T> {\n\n    loggger: ILogger = LoggerFactory.getLogger(\"eu.sirotin.kmd.KeeperMasterDataBrowserLocalStoreHtppForComponentWithVersion\");\n\n    /**\n     * Create a keeper master data with key-value based data model.\n     * @param componentCoordinate Component coordinate\n     * @param componentVersion Component version\n     * @returns instance of IKeeperMasterDataKeyValue\n     */\n    constructor(componentCoordinate: string, componentVersion: number) {\n        super(new LocalStorageAdapterWithVersionsAndCategories(componentVersion, componentCoordinate), \n        [new HTTPKeyValueRepositoryReader(componentCoordinate + \"/\" + componentVersion + \"/\")]);\n        this.loggger.log(\"constructor: created for \" + componentCoordinate + \" v.\" + componentVersion);\n    }\n\n}\n","/*\n * Public API Surface of keeper-master-data\n */\nexport * from './lib/specific-adapters/local-storage-adapter/local-storage-adapter-for-number-and-categories';\nexport * from './lib/specific-adapters/local-storage-adapter/local-storage-adapter';\n\nexport * from './lib/specific-keepers/keeper-current-user-language';\nexport * from './lib/specific-keepers/keeper-master-data-browser-local-store-htpp-default';\nexport * from './lib/specific-keepers/keeper-master-data-browser-local-store-htpp';\n\nexport * from './lib/specific-readers/reader-browser-language';\nexport * from './lib/specific-readers/reader-browser-language';\nexport * from './lib/specific-readers/reader-default';\nexport * from './lib/specific-readers/reader-http';\nexport * from './lib/i-keyed-keeper-master-data';\nexport * from './lib/i-repository-adapters';\nexport * from './lib/keeper-master-data-key-value-sync';\nexport * from './lib/keeper-master-data-key-value-async';\n\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}