{"version":3,"file":"ngx-kodbox.mjs","sources":["../../projects/kodbox/src/lib/kodbox.service.ts","../../projects/kodbox/src/public-api.ts","../../projects/kodbox/src/ngx-kodbox.ts"],"sourcesContent":["import { Injectable, isDevMode } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nexport interface STORAGECHILD {\n    SIGN: string; // SECRET SAUCE - MUST BE UNIQUE\n    TYPE: string;\n    Description?: {\n        short: string;\n        long: string;\n    };\n    domestic?: boolean;\n}\n\n/**\n * Storage Box Service - KodBox\n *  - This is meant to simplify communication between components\n *\n */\n@Injectable({\n    providedIn: 'root'\n})\nexport class KodBoxService {\n\n\n    // Lets create a dynamic object that can be used to store all the properties\n    private storageBoxProperty: any = {};\n    private lambdaProperty: any = {};\n    private _sBoxObservable: BehaviorSubject<any> = new BehaviorSubject<any>(this.storageBoxProperty);\n\n    sBoxObservable$: Observable<any> = this._sBoxObservable.asObservable();\n\n    constructor() { }\n\n    // -----------------------------------------------------------------------------------------------------\n    // @ Private mutation methods\n    // -----------------------------------------------------------------------------------------------------\n\n    // safe guard to prevent a loop\n    private firewallSetOnceOpened: boolean = false;\n\n    private setStorageBox(newStorageBox:any, beingSet: boolean = false): void {\n        // lets set the peristence of the property\n        if (beingSet && this.firewallSetOnceOpened) {\n            this.firewallSetOnceOpened = false;\n            this.savePersistence(newStorageBox);\n        }\n        this._sBoxObservable.next(newStorageBox);\n    }\n    private savePersistence(newStorageBox:any): void {\n        // if(isDevMode)console.log(\"Saving StorageBox Properties to Session Storage\");\n        // if(isDevMode)console.log(\"Origin of Persistence Save is : \", newStorageBox?.user?.iComeFrom);\n        sessionStorage.setItem('StorageBox', JSON.stringify(newStorageBox));\n    }\n    private async savePersistenceAsync(newStorageBox:any): Promise<void> {\n        return new Promise<void>(resolve => {\n            // if(isDevMode)console.log(\"Saving StorageBox Properties to Session Storage\");\n            // if(isDevMode)console.log(\"Origin of Persistence Save is : \", newStorageBox?.user?.iComeFrom);\n            var savedStorageBox = JSON.stringify(newStorageBox);\n            sessionStorage.setItem('StorageBox', savedStorageBox );\n            return resolve();\n        });\n    }\n\n\n    // -----------------------------------------------------------------------------------------------------\n    // @ Public mutation methods\n    // -----------------------------------------------------------------------------------------------------\n\n    // allow for an object key to be passed back with the value\n    getProperty(key: string): any {\n        return this.storageBoxProperty[key];\n    }\n\n    // allow for an object key to be passed in and set the value\n    setProperty(key: string, value: any): void {\n        this.storageBoxProperty[key] = value;\n    }\n    setLambda(functionName: string, bindedFunctionReference: any): void {\n        if(isDevMode())console.warn(\"\\t\\tBinding Function { \" + functionName + \" } to the lambdaProperty object\");\n        this.lambdaProperty[functionName] = bindedFunctionReference;\n    }\n    get(key: string): any {\n        if (this.storageBoxProperty.hasOwnProperty(key)) {\n            return this.storageBoxProperty[key];\n        } else {\n            // lets check the session storage\n            if (sessionStorage.getItem('StorageBox')) {\n                // search the session storage before restoring it\n                let storageBoxProperties = JSON.parse(sessionStorage.getItem('StorageBox')!);\n                if (storageBoxProperties.hasOwnProperty(key)) {\n                    // lets set the storageBox properties to the session storage\n                    this.storageBoxProperty = JSON.parse(sessionStorage.getItem('StorageBox')!);\n                    this.firewallSetOnceOpened = true;\n                    this.setStorageBox(this.storageBoxProperty, true);\n                    return this.storageBoxProperty[key];\n                } else {\n                    return null;\n                }\n            } else {\n                return null;\n            }\n        }\n    }\n    set(key: string, value: any, readonly: boolean = false, updatePersitence: boolean = false): void {\n\n        if (!readonly) {\n            this.storageBoxProperty[key] = value;\n        } else {\n            Object.defineProperty(this.storageBoxProperty, key, {\n                value: value,\n                writable: false,\n                enumerable: true,\n                configurable: true\n            });\n        }\n\n        if (updatePersitence) {\n            this.savePersistence(this.storageBoxProperty);\n        }\n        this.setStorageBox(this.storageBoxProperty); // automatically update the observable\n    }\n    async setAsync(key: string, value: any, readonly: boolean = false, updatePersitence: boolean = false, refreshPersistence: boolean = false): Promise<void> {\n        return new Promise<void>(async resolve => {\n            if (!readonly) {\n                this.storageBoxProperty[key] = value;\n            } else {\n                Object.defineProperty(this.storageBoxProperty, key, {\n                    value: value,\n                    writable: false,\n                    enumerable: true,\n                    configurable: true\n                });\n            }\n\n            if (updatePersitence) {\n                // Might not be necessary since in setStorageBox we are saving the persistence\n                if(refreshPersistence){\n                    // Destroy the current storage box\n                    sessionStorage.removeItem('StorageBox')\n                }\n                await this.savePersistenceAsync(this.storageBoxProperty);\n            }\n            this.setStorageBox(this.storageBoxProperty); // automatically update the observable\n            return resolve();\n        });\n    }\n    // Domestic Properties are reserved for methods and functions\n    lambda(bindedFunctionName: string): any {\n        if (this.lambdaProperty.hasOwnProperty(bindedFunctionName)) {\n            return this.lambdaProperty[bindedFunctionName];\n        } else {\n            console.error(\"\\tFunction \" + bindedFunctionName + \" does not exist inside the lambdaProperty object, maybe it was never bound?\");\n        }\n    }\n    async lambdaAsync(key: string): Promise<any> {\n        return this.lambdaProperty[key];\n    }\n\n    // check if the key exists in the storageBoxProperty object and lambdaProperty object\n    has(key: string): boolean {\n        return this.storageBoxProperty.hasOwnProperty(key) || this.lambdaProperty.hasOwnProperty(key);\n    }\n    // checks if the signature is bound to a function as well as a property\n    binded(key: string): boolean {\n        return this.storageBoxProperty.hasOwnProperty(key) && this.lambdaProperty.hasOwnProperty(key);\n    }\n\n    update() {\n        // ? should we null out the storageBoxProperty object?\n        // ? and then reset it to the original values? hmmm...\n        this.setStorageBox(this.storageBoxProperty);\n    }\n\n    /**\n     * Async Function of Observable Update\n     * Function will perform a observable update for\n     * storage values inside the storageBox object.\n     *\n     * (pass in a boolean of true to rewrite the Session Storage as well)\n     */\n    async updateAsync(rewriteSessionStorage: boolean = false): Promise<void> {\n        if (rewriteSessionStorage) {\n            this.firewallSetOnceOpened = true;\n        }\n        this.setStorageBox(this.storageBoxProperty, rewriteSessionStorage);\n    }\n\n    // Note : If we delete a property we might want to remove it from the session storage as well\n    remove(key: string, destroy: boolean = false): void {\n        if (destroy) {\n            delete this.storageBoxProperty[key];\n        } else {\n            const propertyDescriptor = Object.getOwnPropertyDescriptor(this.storageBoxProperty, key);\n            if (propertyDescriptor && propertyDescriptor.writable) {\n                delete this.storageBoxProperty[key];\n            } else {\n                console.error(key, \" Property is readonly. Cannot be removed.\");\n            }\n        }\n    }\n\n    // destroy the storageBoxProperty object and empty session storage\n    destroy(): void {\n        this.storageBoxProperty = {};\n        this.lambdaProperty = {};\n        sessionStorage.removeItem('StorageBox');\n        this.setStorageBox(this.storageBoxProperty);\n    }\n\n    // print the storageBoxProperty object contents to the console\n    print(detailed: boolean = false, printData: boolean = false): any {\n\n        if (detailed) console.log(Object.getOwnPropertyDescriptors(this.storageBoxProperty));\n\n        Object.keys(this.storageBoxProperty).forEach(key => {\n            if (printData) {\n                if (detailed) console.log(Object.getOwnPropertyDescriptor(this.storageBoxProperty, key));\n                console.log(key, this.storageBoxProperty[key]);\n            } else {\n                if (detailed) {\n                    console.log(\"StorageBox Property : \", key, \"\\n\", Object.getOwnPropertyDescriptor(this.storageBoxProperty, key));\n                } else {\n                    console.log(\"StorageBox Property : \", key);\n                }\n            }\n        });\n    }\n\n\n}\n","/*\n * Public API Surface of kodbox\n */\nexport * from './lib/kodbox.service';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;AAaA;;;;AAIG;MAIU,aAAa,CAAA;AAUtB,IAAA,WAAA,GAAA;;QANQ,IAAkB,CAAA,kBAAA,GAAQ,EAAE,CAAC;QAC7B,IAAc,CAAA,cAAA,GAAQ,EAAE,CAAC;QACzB,IAAe,CAAA,eAAA,GAAyB,IAAI,eAAe,CAAM,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAElG,QAAA,IAAA,CAAA,eAAe,GAAoB,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;;;;;QAS/D,IAAqB,CAAA,qBAAA,GAAY,KAAK,CAAC;KAP9B;AAST,IAAA,aAAa,CAAC,aAAiB,EAAE,QAAA,GAAoB,KAAK,EAAA;;AAE9D,QAAA,IAAI,QAAQ,IAAI,IAAI,CAAC,qBAAqB,EAAE;AACxC,YAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;AACnC,YAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;SACvC;AACD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KAC5C;AACO,IAAA,eAAe,CAAC,aAAiB,EAAA;;;AAGrC,QAAA,cAAc,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;KACvE;IACO,MAAM,oBAAoB,CAAC,aAAiB,EAAA;AAChD,QAAA,OAAO,IAAI,OAAO,CAAO,OAAO,IAAG;;;YAG/B,IAAI,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;AACpD,YAAA,cAAc,CAAC,OAAO,CAAC,YAAY,EAAE,eAAe,CAAE,CAAC;YACvD,OAAO,OAAO,EAAE,CAAC;AACrB,SAAC,CAAC,CAAC;KACN;;;;;AAQD,IAAA,WAAW,CAAC,GAAW,EAAA;AACnB,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;KACvC;;IAGD,WAAW,CAAC,GAAW,EAAE,KAAU,EAAA;AAC/B,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;KACxC;IACD,SAAS,CAAC,YAAoB,EAAE,uBAA4B,EAAA;AACxD,QAAA,IAAG,SAAS,EAAE;YAAC,OAAO,CAAC,IAAI,CAAC,yBAAyB,GAAG,YAAY,GAAG,iCAAiC,CAAC,CAAC;AAC1G,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,GAAG,uBAAuB,CAAC;KAC/D;AACD,IAAA,GAAG,CAAC,GAAW,EAAA;QACX,IAAI,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;AAC7C,YAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;SACvC;aAAM;;AAEH,YAAA,IAAI,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;;AAEtC,gBAAA,IAAI,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,CAAE,CAAC,CAAC;AAC7E,gBAAA,IAAI,oBAAoB,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;;AAE1C,oBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,CAAE,CAAC,CAAC;AAC5E,oBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;oBAClC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;AAClD,oBAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;iBACvC;qBAAM;AACH,oBAAA,OAAO,IAAI,CAAC;iBACf;aACJ;iBAAM;AACH,gBAAA,OAAO,IAAI,CAAC;aACf;SACJ;KACJ;IACD,GAAG,CAAC,GAAW,EAAE,KAAU,EAAE,QAAoB,GAAA,KAAK,EAAE,gBAAA,GAA4B,KAAK,EAAA;QAErF,IAAI,CAAC,QAAQ,EAAE;AACX,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;SACxC;aAAM;YACH,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE;AAChD,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,YAAY,EAAE,IAAI;AACrB,aAAA,CAAC,CAAC;SACN;QAED,IAAI,gBAAgB,EAAE;AAClB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;SACjD;QACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;KAC/C;AACD,IAAA,MAAM,QAAQ,CAAC,GAAW,EAAE,KAAU,EAAE,QAAoB,GAAA,KAAK,EAAE,gBAAA,GAA4B,KAAK,EAAE,qBAA8B,KAAK,EAAA;AACrI,QAAA,OAAO,IAAI,OAAO,CAAO,OAAM,OAAO,KAAG;YACrC,IAAI,CAAC,QAAQ,EAAE;AACX,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;aACxC;iBAAM;gBACH,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE;AAChD,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,YAAY,EAAE,IAAI;AACrB,iBAAA,CAAC,CAAC;aACN;YAED,IAAI,gBAAgB,EAAE;;gBAElB,IAAG,kBAAkB,EAAC;;AAElB,oBAAA,cAAc,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;iBAC1C;gBACD,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;aAC5D;YACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC5C,OAAO,OAAO,EAAE,CAAC;AACrB,SAAC,CAAC,CAAC;KACN;;AAED,IAAA,MAAM,CAAC,kBAA0B,EAAA;QAC7B,IAAI,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE;AACxD,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;SAClD;aAAM;YACH,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG,kBAAkB,GAAG,6EAA6E,CAAC,CAAC;SACrI;KACJ;IACD,MAAM,WAAW,CAAC,GAAW,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;KACnC;;AAGD,IAAA,GAAG,CAAC,GAAW,EAAA;AACX,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;KACjG;;AAED,IAAA,MAAM,CAAC,GAAW,EAAA;AACd,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;KACjG;IAED,MAAM,GAAA;;;AAGF,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;KAC/C;AAED;;;;;;AAMG;AACH,IAAA,MAAM,WAAW,CAAC,qBAAA,GAAiC,KAAK,EAAA;QACpD,IAAI,qBAAqB,EAAE;AACvB,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;SACrC;QACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,CAAC;KACtE;;AAGD,IAAA,MAAM,CAAC,GAAW,EAAE,OAAA,GAAmB,KAAK,EAAA;QACxC,IAAI,OAAO,EAAE;AACT,YAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;SACvC;aAAM;AACH,YAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,wBAAwB,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;AACzF,YAAA,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,QAAQ,EAAE;AACnD,gBAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;aACvC;iBAAM;AACH,gBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,2CAA2C,CAAC,CAAC;aACnE;SACJ;KACJ;;IAGD,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AACzB,QAAA,cAAc,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;KAC/C;;AAGD,IAAA,KAAK,CAAC,QAAA,GAAoB,KAAK,EAAE,YAAqB,KAAK,EAAA;AAEvD,QAAA,IAAI,QAAQ;AAAE,YAAA,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,yBAAyB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAErF,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;YAC/C,IAAI,SAAS,EAAE;AACX,gBAAA,IAAI,QAAQ;AAAE,oBAAA,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,wBAAwB,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,CAAC;AACzF,gBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;aAClD;iBAAM;gBACH,IAAI,QAAQ,EAAE;oBACV,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,wBAAwB,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,CAAC;iBACnH;qBAAM;AACH,oBAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;iBAC9C;aACJ;AACL,SAAC,CAAC,CAAC;KACN;8GA7MQ,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFV,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAET,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA,CAAA;;;ACpBD;;AAEG;;ACFH;;AAEG;;;;"}