“use strict”;

Object.defineProperty(exports, “__esModule”, {

value: true

}); exports.createItemFromDescriptor = createItemFromDescriptor; exports.createConfigItem = createConfigItem; exports.getItemDescriptor = getItemDescriptor;

function _path() {

const data = _interopRequireDefault(require("path"));

_path = function () {
  return data;
};

return data;

}

var _configDescriptors = require(“./config-descriptors”);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function createItemFromDescriptor(desc) {

return new ConfigItem(desc);

}

function createConfigItem(value, {

dirname = ".",
type

} = {}) {

const descriptor = (0, _configDescriptors.createDescriptor)(value, _path().default.resolve(dirname), {
  type,
  alias: "programmatic item"
});
return createItemFromDescriptor(descriptor);

}

function getItemDescriptor(item) {

if (item instanceof ConfigItem) {
  return item._descriptor;
}

return undefined;

}

class ConfigItem {

constructor(descriptor) {
  this._descriptor = descriptor;
  Object.defineProperty(this, "_descriptor", {
    enumerable: false
  });
  this.value = this._descriptor.value;
  this.options = this._descriptor.options;
  this.dirname = this._descriptor.dirname;
  this.name = this._descriptor.name;
  this.file = this._descriptor.file ? {
    request: this._descriptor.file.request,
    resolved: this._descriptor.file.resolved
  } : undefined;
  Object.freeze(this);
}

}

Object.freeze(ConfigItem.prototype);