constructor()

in src/core.js [46:131]


  constructor(coreConfig) {
    this.debug = coreConfig.debug || false;
    this.verbose = coreConfig.verbose || false;
    this.quiet = coreConfig.quiet || false;
    this.config = {};

    assert(coreConfig, 'coreConfig is missing');

    this.coreConfig = coreConfig;
    this.overallGathererNames = ['docai'];

    // Initialize helper. Use Node helper by default.
    coreConfig.helper = coreConfig.helper || 'sheets';
    this.log(`Use helper: ${coreConfig.helper}`);
    switch (coreConfig.helper.toLowerCase()) {
      case 'sheets':
        let { SheetsApiHandler } = require('./helpers/sheets-helper');
        this.apiHandler = new SheetsApiHandler();
        break;

      case 'fake':
        // Use a dummy ApiHandler for test purpose.
        let ApiHandler = require('./helpers/api-handler');
        this.apiHandler = new ApiHandler();
        break;

      default:
        throw new Error(
          `Helper ${coreConfig.helper} is not supported.`);
        break;
    }

    if (coreConfig.connector === 'fake') {
      this.connector = {
        getEnvVars: () => { },
      };
    } else {
      this.connector = this.getConnector(coreConfig["sheets"]);
    }
    this.envVars = this.connector.getEnvVars();

    // Initialize extensions.
    this.log(`Use extensions: ${coreConfig.extensions}`);
    this.extensions = {};
    if (coreConfig.extensions) {
      coreConfig.extensions.forEach(extension => {
        let ExtensionClass;
        let extConfig = coreConfig[extension] || {};

        // Adding mandatory properties.
        extConfig.connector = this.connector;
        extConfig.apiHandler = this.apiHandler;
        extConfig.debug = this.debug;

        switch (extension) {
          case 'sheets':
            ExtensionClass = require('./extensions/sheets-extension');
            break;

          case 'docai':
            ExtensionClass = require('./extensions/docai-extension');
            break;

          default:
            try {
              ExtensionClass = require('./extensions/' + extension);
            } catch (e) {
              console.error(e);
              throw new Error(`Unable to load extension: ./extensions/${extension}`);
            }
            break;
        }
        this.extensions[extension] = new ExtensionClass(extConfig,
          this.envVars);
      });
    }

    // Initialize overall gatherers from coreConfig.
    this.gatherers = {};

    // The frequency of when to write data back via a connector.
    // E.g. batchUpdateBuffer = 10 means for every 10 run or retrieve, it will
    // update the data by calling connector.updateSourceList or updateResultList.
    // When batchUpdateBuffer is 0, it will write back after all iteration.
    this.batchUpdateBuffer = coreConfig.batchUpdateBuffer || 10;
  }