Source: resolvers/TSFResolver.js

import { Utils } from '../common/Utils';
import { BaseResolver } from './BaseResolver';

const __ = {
	private: Symbol('private'),
}
function _initPrivateMembers(that, param) {
	that[__.private] = {};
	const _private = that[__.private];

	_private.getIndexByURI = (uri) => {
		let index = null;
		if (Array.isArray(uri)) {
			index = uri.map(url => {
				return _private.getIndexByURI(url);
			});
		}
		else {
			index = _private.URIs.indexOf(uri);
			if (index == -1) {
				index = _private.URIs.push(uri) - 1;
			}
		}

		return index;
	}
	_private.getURIByIndex = (index) => {
		let uri = null;
		if (Array.isArray(index)) {
			uri = index.map(i => {
				return _private.getURIByIndex(i);
			});
		}
		else {
			uri = _private.URIs[index];
		}

		return uri;
	}
	_private.init = (param) => {
		if (!param || !Utils.isFunction(param.getURIs)) {
			Utils.error("the param is invalid");
			return;
		}
		_private.URIs = param.getURIs();
	}
	_private.init(param);
}

/**
 * @class TSFResolver
 * The tsf resolver
 * @memberof THING.EXTEND
 * @extends THING.EXTEND.BaseResolver
 */
class TSFResolver extends BaseResolver {

	constructor(param = {}) {
		super();
		_initPrivateMembers(this, param);
	}
	getURIByIndex(index) {
		let _private = this[__.private];
		return _private.getURIByIndex(index);
	}
	getIndexByURI(uri) {
		let _private = this[__.private];
		return _private.getIndexByURI(uri);
	}

}

export { TSFResolver }