Current File : //lib/node_modules/bower/packages/bower-registry-client/Client.js
var async = require('async');
var methods = require('./lib');
var Cache = require('./lib/util/Cache');

function RegistryClient(config, logger) {
    this._logger = logger;
    this._config = config;

    if (!this._config.registry) {
        throw new Error(
            'You need to pass config as read by bower-config module. Registry field is missing.'
        );
    }

    // Cache defaults to storage registry
    if (!Object.prototype.hasOwnProperty.call(this._config, 'cache')) {
        this._config.cache = this._config.storage
            ? this._config.storage.registry
            : null;
    }

    // Init the cache
    this._initCache();
}

// Add every method to the prototype
RegistryClient.prototype.lookup = methods.lookup;
RegistryClient.prototype.search = methods.search;
RegistryClient.prototype.list = methods.list;
RegistryClient.prototype.register = methods.register;
RegistryClient.prototype.unregister = methods.unregister;

RegistryClient.prototype.clearCache = function(name, callback) {
    if (typeof name === 'function') {
        callback = name;
        name = null;
    }

    async.parallel(
        [
            this.lookup.clearCache.bind(this, name),
            this.search.clearCache.bind(this, name),
            this.list.clearCache.bind(this)
        ],
        callback
    );
};

RegistryClient.prototype.resetCache = function(name) {
    this.lookup.resetCache.call(this, name);
    this.search.resetCache.call(this, name);
    this.list.resetCache.call(this);

    return this;
};

RegistryClient.clearRuntimeCache = function() {
    Cache.clearRuntimeCache();
};

// -----------------------------

RegistryClient.prototype._initCache = function() {
    var cache;
    var dir = this._config.cache;

    // Cache is stored/retrieved statically to ensure singularity
    // among instances
    cache = this.constructor._cache = this.constructor._cache || {};
    this._cache = cache[dir] = cache[dir] || {};

    this.lookup.initCache.call(this);
    this.search.initCache.call(this);
    this.list.initCache.call(this);
};

module.exports = RegistryClient;