gooddata-js v13.5.0

File: src/gooddata.ts

                        // (C) 2007-2020 GoodData Corporation
                        import cloneDeep from "lodash/cloneDeep";
                        import { XhrModule } from "./xhr";
                        import { UserModule } from "./user";
                        import { MetadataModule } from "./metadata";
                        import { ExecutionModule } from "./execution";
                        import { ProjectModule } from "./project";
                        import { ReportModule } from "./report/report";
                        import { DashboardModule } from "./dashboard/dashboard";
                        import { sanitizeConfig, IConfigStorage, ConfigModule } from "./config";
                        import { CatalogueModule } from "./catalogue";
                        import { LdmModule } from "./ldm";
                        
                        import { AttributesMapLoaderModule } from "./utils/attributesMapLoader";
                        import { getAttributesDisplayForms } from "./utils/visualizationObjectHelper";
                        import { convertReferencesToUris, convertUrisToReferences, ReferenceConverter } from "./referenceHandling";
                        import { MetadataModuleExt } from "./metadataExt";
                        import { BootstrapModule } from "./bootstrap";
                        
                        /**
                         * # JS SDK
                         * Here is a set of functions that mostly are a thin wraper over the [GoodData API](https://developer.gooddata.com/api).
                         * Before calling any of those functions, you need to authenticate with a valid GoodData
                         * user credentials. After that, every subsequent call in the current session is authenticated.
                         * You can find more about the GD authentication mechanism here.
                         *
                         * ## GD Authentication Mechansim
                         * In this JS SDK library we provide you with a simple `login(username, passwd)` function
                         * that does the magic for you.
                         * To fully understand the authentication mechansim, please read
                         * [Authentication via API article](http://developer.gooddata.com/article/authentication-via-api)
                         * on [GoodData Developer Portal](http://developer.gooddata.com/)
                         *
                         * @module sdk
                         * @class sdk
                         */
                        export class SDK {
                            public config: ConfigModule;
                            public xhr: XhrModule;
                            public user: UserModule;
                            public md: MetadataModule;
                            public mdExt: MetadataModuleExt;
                            public execution: ExecutionModule;
                            public project: ProjectModule;
                            public report: ReportModule;
                            public dashboard: DashboardModule;
                            public catalogue: CatalogueModule;
                            public bootstrap: BootstrapModule;
                            public ldm: LdmModule;
                            public configStorage: IConfigStorage;
                            public utils: {
                                loadAttributesMap: any;
                                getAttributesDisplayForms: any;
                                convertReferencesToUris: ReferenceConverter;
                                convertUrisToReferences: ReferenceConverter;
                            };
                        
                            constructor(private fetchMethod: typeof fetch, config = {}) {
                                this.configStorage = sanitizeConfig(config); // must be plain object, SDK modules MUST use this storage
                        
                                this.config = new ConfigModule(this.configStorage);
                                this.xhr = new XhrModule(fetchMethod, this.configStorage);
                                this.user = new UserModule(this.xhr);
                                this.md = new MetadataModule(this.xhr);
                                this.mdExt = new MetadataModuleExt(this.xhr);
                                this.execution = new ExecutionModule(this.xhr, this.md);
                                this.project = new ProjectModule(this.xhr);
                                this.report = new ReportModule(this.xhr);
                                this.dashboard = new DashboardModule(this.xhr);
                                this.catalogue = new CatalogueModule(this.xhr, this.execution);
                                this.bootstrap = new BootstrapModule(this.xhr);
                                this.ldm = new LdmModule(this.xhr);
                        
                                const attributesMapLoaderModule = new AttributesMapLoaderModule(this.md);
                                this.utils = {
                                    loadAttributesMap: attributesMapLoaderModule.loadAttributesMap.bind(attributesMapLoaderModule),
                                    getAttributesDisplayForms,
                                    convertReferencesToUris,
                                    convertUrisToReferences,
                                };
                            }
                        
                            public clone() {
                                return new SDK(this.fetchMethod, cloneDeep(this.configStorage));
                            }
                        }
                        
                        /**
                         * # Factory for creating SDK instances
                         *
                         * @param {object|null} config object to be passed to SDK constructor
                         * @method setCustomDomain
                         */
                        export const factory = (fetchMethod: typeof fetch) => (config = {}) => new SDK(fetchMethod, config);