Home Identifier Source Repository

lib/Generic/UniversalRequire.js

/**
 * Created by AlexanderC on 5/27/15.
 */

'use strict';

import path from 'path';

export class UniversalRequire {
  constructor() {
    this._require = this._guessRequireFunc();
  }

  /**
   * @param {String} module
   * @param {Function} cb
   * @returns {*}
   */
  require(module, cb) {
    if (UniversalRequire._isFrontend) {
      module = path.normalize(module); // avoid './' or '../'
    }

    return this._require(module, cb);
  }

  /**
   * @returns {Boolean}
   * @private
   */
  static get _isFrontend() {
    return typeof window !== 'undefined' &&
      typeof document !== 'undefined';
  }

  /**
   * @returns {Function}
   * @private
   */
  _guessRequireFunc() {
    if (!UniversalRequire._isFrontend) {
      return (module, cb) => {
        try {
          cb(null, require(module));
        } catch (e) {
          cb(e, null);
        }
      };
    }

    require('./require1k.js');

    return window.__deepRequireBrowser__;
  }
}