art-config
Version:
A powerful yet simple tool for configuring all your libraries consistently.
895 lines (755 loc) • 32.7 kB
JavaScript
module.exports =
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/*!**********************!*\
!*** ./index.coffee ***!
\**********************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__(/*! ./source/Art.Config */ 1);
/***/ }),
/* 1 */
/*!************************************!*\
!*** ./source/Art.Config/index.js ***!
\************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
// generated by Neptune Namespaces v4.x.x
// file: Art.Config/index.js
(module.exports = __webpack_require__(/*! ./namespace */ 2))
.includeInNamespace(__webpack_require__(/*! ./Config */ 5))
.addModules({
ConfigRegistry: __webpack_require__(/*! ./ConfigRegistry */ 10),
Configurable: __webpack_require__(/*! ./Configurable */ 13),
Configuration: __webpack_require__(/*! ./Configuration */ 6),
Lib: __webpack_require__(/*! ./Lib */ 12),
Main: __webpack_require__(/*! ./Main */ 11)
});
/***/ }),
/* 2 */
/*!****************************************!*\
!*** ./source/Art.Config/namespace.js ***!
\****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
// generated by Neptune Namespaces v4.x.x
// file: Art.Config/namespace.js
module.exports = __webpack_require__(/*! neptune-namespaces */ 3).addNamespace(
'Art.Config',
(class Config extends Neptune.PackageNamespace {})
._configureNamespace(__webpack_require__(/*! ../../package.json */ 4))
);
/***/ }),
/* 3 */
/*!*************************************************************************************!*\
!*** external "require('neptune-namespaces' /* ABC - not inlining fellow NPM *_/)" ***!
\*************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
module.exports = require('neptune-namespaces' /* ABC - not inlining fellow NPM */);
/***/ }),
/* 4 */
/*!**********************!*\
!*** ./package.json ***!
\**********************/
/*! exports provided: author, bugs, dependencies, description, devDependencies, homepage, license, name, repository, scripts, version, default */
/***/ (function(module) {
module.exports = JSON.parse("{\"author\":\"Shane Brinkman-Davis Delamore, Imikimi LLC\",\"bugs\":\"https:/github.com/art-suite/art-suite-foundations2/issues\",\"dependencies\":{\"art-build-configurator\":\"*\",\"art-events\":\"*\"},\"description\":\"A powerful yet simple tool for configuring all your libraries consistently.\",\"devDependencies\":{\"art-testbench\":\"*\",\"case-sensitive-paths-webpack-plugin\":\"^2.2.0\",\"chai\":\"^4.2.0\",\"coffee-loader\":\"^0.7.3\",\"css-loader\":\"^3.0.0\",\"json-loader\":\"^0.5.7\",\"mocha\":\"^7.0.0\",\"mock-fs\":\"^4.10.0\",\"script-loader\":\"^0.7.2\",\"style-loader\":\"^1.0.0\",\"webpack\":\"^4.39.1\",\"webpack-cli\":\"*\",\"webpack-dev-server\":\"^3.7.2\",\"webpack-merge\":\"^4.2.1\",\"webpack-node-externals\":\"^1.7.2\",\"webpack-stylish\":\"^0.1.8\"},\"homepage\":\"https://github.com/art-suite/art-suite-foundations2\",\"license\":\"ISC\",\"name\":\"art-config\",\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/art-suite/art-suite-foundations2.git\"},\"scripts\":{\"build\":\"webpack --progress\",\"start\":\"webpack-dev-server --hot --inline --progress --env.devServer\",\"test\":\"nn -s;mocha -u tdd\",\"testInBrowser\":\"webpack-dev-server --progress --env.devServer\"},\"version\":\"1.13.0\"}");
/***/ }),
/* 5 */
/*!*****************************************!*\
!*** ./source/Art.Config/Config.coffee ***!
\*****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
var defaultArtConfigName;
module.exports = [
{
Config: __webpack_require__(/*! ./Configuration */ 6),
config: {
yesArtConfig: true
},
configName: defaultArtConfigName = "Development",
defaultArtConfigName: defaultArtConfigName
}, __webpack_require__(/*! ./Main */ 11)
];
/***/ }),
/* 6 */
/*!************************************************!*\
!*** ./source/Art.Config/Configuration.coffee ***!
\************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
/* WEBPACK VAR INJECTION */(function(module) {var BaseObject, ConfigRegistry, Configuration, deepMerge, defineModule, log, merge, mergeInto, ref,
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
hasProp = {}.hasOwnProperty;
ref = __webpack_require__(/*! art-standard-lib */ 8), defineModule = ref.defineModule, log = ref.log, merge = ref.merge, mergeInto = ref.mergeInto, deepMerge = ref.deepMerge;
BaseObject = __webpack_require__(/*! art-class-system */ 9).BaseObject;
ConfigRegistry = __webpack_require__(/*! ./ConfigRegistry */ 10);
defineModule(module, Configuration = (function(superClass) {
extend(Configuration, superClass);
function Configuration() {
return Configuration.__super__.constructor.apply(this, arguments);
}
Configuration.abstractClass();
Configuration.register = function() {
return ConfigRegistry.registerConfig(this.getName(), this.getProps());
};
Configuration.postCreateConcreteClass = function(arg) {
var hotReloaded, superclass;
hotReloaded = arg.hotReloaded;
if (superclass = this.getSuperclass()) {
this.deepMergeInDefaults(superclass.getConcretePrototypeProperties());
}
this.register();
if (hotReloaded) {
ConfigRegistry.reload();
}
return Configuration.__super__.constructor.postCreateConcreteClass.apply(this, arguments);
};
Configuration.getProps = function() {
return this.getConcretePrototypeProperties();
};
Configuration.deepMergeInDefaults = function(defaults) {
return mergeInto(this.prototype, deepMerge(defaults, this.getProps()));
};
Configuration.deepMergeInConfig = function(config) {
return mergeInto(this.prototype, deepMerge(this.getProps(), config));
};
return Configuration;
})(BaseObject));
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/module.js */ 7)(module)))
/***/ }),
/* 7 */
/*!***********************************!*\
!*** (webpack)/buildin/module.js ***!
\***********************************/
/*! no static exports found */
/***/ (function(module, exports) {
module.exports = function(module) {
if (!module.webpackPolyfill) {
module.deprecate = function() {};
module.paths = [];
// module.parent = undefined by default
if (!module.children) module.children = [];
Object.defineProperty(module, "loaded", {
enumerable: true,
get: function() {
return module.l;
}
});
Object.defineProperty(module, "id", {
enumerable: true,
get: function() {
return module.i;
}
});
module.webpackPolyfill = 1;
}
return module;
};
/***/ }),
/* 8 */
/*!***********************************************************************************!*\
!*** external "require('art-standard-lib' /* ABC - not inlining fellow NPM *_/)" ***!
\***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
module.exports = require('art-standard-lib' /* ABC - not inlining fellow NPM */);
/***/ }),
/* 9 */
/*!***********************************************************************************!*\
!*** external "require('art-class-system' /* ABC - not inlining fellow NPM *_/)" ***!
\***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
module.exports = require('art-class-system' /* ABC - not inlining fellow NPM */);
/***/ }),
/* 10 */
/*!*************************************************!*\
!*** ./source/Art.Config/ConfigRegistry.coffee ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
/* WEBPACK VAR INJECTION */(function(module) {var BaseObject, ConfigRegistry, Promise, clone, compactFlatten, deepMerge, defineModule, expandPathedProperties, formattedInspect, inspect, isPlainObject, isString, log, merge, mergeInto, parseQuery, pushIfNotPresent, ref, upperCamelCase,
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
hasProp = {}.hasOwnProperty,
slice = [].slice;
ref = __webpack_require__(/*! art-standard-lib */ 8), defineModule = ref.defineModule, log = ref.log, Promise = ref.Promise, inspect = ref.inspect, formattedInspect = ref.formattedInspect, merge = ref.merge, deepMerge = ref.deepMerge, mergeInto = ref.mergeInto, parseQuery = ref.parseQuery, pushIfNotPresent = ref.pushIfNotPresent, isPlainObject = ref.isPlainObject, isString = ref.isString, upperCamelCase = ref.upperCamelCase, expandPathedProperties = ref.expandPathedProperties, clone = ref.clone, compactFlatten = ref.compactFlatten;
BaseObject = __webpack_require__(/*! art-class-system */ 9).BaseObject;
defineModule(module, ConfigRegistry = (function(superClass) {
extend(ConfigRegistry, superClass);
function ConfigRegistry() {
return ConfigRegistry.__super__.constructor.apply(this, arguments);
}
ConfigRegistry.configurables = [];
ConfigRegistry.configs = {};
ConfigRegistry.registerConfig = function(name, config) {
if (!isPlainObject(config)) {
throw new Error("config must be a plain object");
}
return ConfigRegistry.configs[name] = config;
};
ConfigRegistry.registerConfigurable = function(configurable) {
return pushIfNotPresent(ConfigRegistry.configurables, configurable);
};
ConfigRegistry.configure = function() {
var args, ref1;
args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
console.error("DEPRICATED: use Art.Config.configure");
return (ref1 = Neptune.Art.Config).configure.apply(ref1, args);
};
return ConfigRegistry;
})(BaseObject));
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/module.js */ 7)(module)))
/***/ }),
/* 11 */
/*!***************************************!*\
!*** ./source/Art.Config/Main.coffee ***!
\***************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
/* WEBPACK VAR INJECTION */(function(module) {var ConfigRegistry, Main, Promise, clone, compactFlatten, deepMerge, defineModule, expandPathedProperties, formattedInspect, getExternalEnvironment, inspect, isPlainObject, isString, log, merge, mergeInto, normalizeArtConfigName, parseQuery, pushIfNotPresent, ref, ref1, upperCamelCase,
slice = [].slice;
ref = __webpack_require__(/*! art-standard-lib */ 8), defineModule = ref.defineModule, log = ref.log, Promise = ref.Promise, inspect = ref.inspect, formattedInspect = ref.formattedInspect, merge = ref.merge, deepMerge = ref.deepMerge, mergeInto = ref.mergeInto, parseQuery = ref.parseQuery, pushIfNotPresent = ref.pushIfNotPresent, isPlainObject = ref.isPlainObject, isString = ref.isString, upperCamelCase = ref.upperCamelCase, expandPathedProperties = ref.expandPathedProperties, clone = ref.clone, compactFlatten = ref.compactFlatten;
ConfigRegistry = __webpack_require__(/*! ./ConfigRegistry */ 10);
ref1 = __webpack_require__(/*! ./Lib */ 12), normalizeArtConfigName = ref1.normalizeArtConfigName, getExternalEnvironment = ref1.getExternalEnvironment;
defineModule(module, Main = (function() {
var getArtConfig, getArtConfigName, getDefaultArtConfigName, setArtConfigName;
function Main() {}
Main.getArtConfigName = getArtConfigName = function() {
return Neptune.Art.Config.configName;
};
Main.getArtConfig = getArtConfig = function() {
return Neptune.Art.Config.config;
};
Main.getDefaultArtConfigName = getDefaultArtConfigName = function() {
return Neptune.Art.Config.defaultArtConfigName;
};
/* getArtConfigSave
OUT: artConfig, but only the non-default values
*/
Main.getArtConfigSave = function() {
var configurable, i, len, out, ref2, saveConfig;
out = {};
ref2 = ConfigRegistry.configurables;
for (i = 0, len = ref2.length; i < len; i++) {
configurable = ref2[i];
if (saveConfig = configurable.getConfigSave()) {
mergeInto(out, saveConfig);
}
}
return out;
};
setArtConfigName = function(name) {
return Neptune.Art.Config.configName = name;
};
/*
IN: configureOptions:
artConfigName: string
can be passed in:
as an argument
via process.env
via the browser query string
default: "Development"
EFFECT:
ArtConfig.configName =
externalEnvironment.artConfigName ||
artConfigName
artConfig: JSON string OR plain object structure
can be passed in:
as an argument
via process.env
via the browser query string
default: {}
EFFECT:
mergeInto ArtConfig.config, deepMerge
ConfigRegistry.configs[artConfigName]
global.artConfig
artConfig
externalEnvironment.artConfig
onConfig: (config) ->
gets called as soon as config completes with the final config
EFFECTS:
callback @artConfig for callback in ConfigRegistry.configurables
Note the priority order of artConfig sources:
Priority:
#1. externalEnvironment.artConfig
#2. the artConfig passed into configure
EXAMPLES:
* artConfig = verbose: true
ConfigRegistry.configure
verbose: true
* artConfig = verbose: true
* artConfigName = "Production"
ConfigRegistry.configure
artConfigName: "Production"
verbose: true
* artConfig = verbose: true
* artConfigName = "Production"
ConfigRegistry.configure
artConfigName: "Production"
artConfig: verbose: true
TEST INPUTS: the second and third inputs are env and
queryString, and are only there as mocks for testing.
*/
Main.configure = function() {
var __testEnv, artConfigArgument, artConfigNameArgument, c, conf, config, configName, configurable, configureOptions, defaultArtConfigName, externalEnvironment, i, len, obj, onConfig, ref2, ref3, ref4, verbose;
configureOptions = 1 <= arguments.length ? slice.call(arguments, 0) : [];
ref2 = Main.configureOptions = deepMerge.apply(null, configureOptions), artConfigNameArgument = ref2.artConfigName, artConfigArgument = ref2.artConfig, __testEnv = ref2.__testEnv, onConfig = ref2.onConfig;
externalEnvironment = getExternalEnvironment(__testEnv);
config = getArtConfig();
defaultArtConfigName = getDefaultArtConfigName();
configName = normalizeArtConfigName(externalEnvironment.artConfigName || artConfigNameArgument || global.artConfigName) ? (configName = normalizeArtConfigName(externalEnvironment.artConfigName || artConfigNameArgument || global.artConfigName), configName && !ConfigRegistry.configs[configName] ? log.warn("ArtConfig.configure: no config registered with name: '" + configName + "'") : void 0, configName) : defaultArtConfigName;
setArtConfigName(configName);
Main.resetCurrentConfig();
ref3 = compactFlatten([
(function() {
var j, len, ref3, results;
ref3 = ConfigRegistry.configurables;
results = [];
for (j = 0, len = ref3.length; j < len; j++) {
configurable = ref3[j];
results.push(configurable.getPathedDefaultConfig());
}
return results;
})(), ConfigRegistry.configs[configName], global.artConfig, artConfigArgument, externalEnvironment.artConfig
]);
for (i = 0, len = ref3.length; i < len; i++) {
conf = ref3[i];
expandPathedProperties(conf, config);
}
verbose = config.verbose;
verbose || (verbose = (ref4 = Main.configureOptions) != null ? ref4.verbose : void 0);
if (verbose) {
log("------------- ConfigRegistry: inputs");
log({
ConfigRegistry: {
configNames: Object.keys(ConfigRegistry.configs),
configurables: (function() {
var j, len1, ref5, results;
ref5 = ConfigRegistry.configurables;
results = [];
for (j = 0, len1 = ref5.length; j < len1; j++) {
c = ref5[j];
results.push(c.namespacePath);
}
return results;
})(),
setConfigName: {
algorithm: "select LAST non-null",
inputs: {
defaultArtConfigName: defaultArtConfigName,
"global.artConfigName": global.artConfigName,
"arguments.artConfigName": artConfigNameArgument,
"environment.artConfigName": externalEnvironment.artConfigName
}
},
setConfig: {
algorithm: "deep, pathed merge-all, LAST has priority",
inputs: (
obj = {
defaultConfigs: (function() {
var j, len1, ref5, results;
ref5 = ConfigRegistry.configurables;
results = [];
for (j = 0, len1 = ref5.length; j < len1; j++) {
configurable = ref5[j];
results.push(configurable.getPathedDefaultConfig());
}
return results;
})()
},
obj["configs." + configName] = ConfigRegistry.configs[configName],
obj["global.artConfig"] = global.artConfig,
obj["arguments.artConfig"] = artConfigArgument,
obj["environment.artConfig"] = externalEnvironment.artConfig,
obj
)
}
}
});
log("------------- ConfigRegistry: configuring Configurables...");
}
Main._configureAllConfigurables();
if (verbose) {
log("------------- ConfigRegistry: configured");
log({
Art: {
configName: configName,
config: config
}
});
log("------------- ConfigRegistry: done");
}
if (typeof onConfig === "function") {
onConfig(config);
}
global.artConfig = config;
global.artConfigName = configName;
return config;
};
Main.resetCurrentConfig = function() {
var config, k, results, v;
config = getArtConfig();
results = [];
for (k in config) {
v = config[k];
results.push(delete config[k]);
}
return results;
};
Main.reload = function() {
return Main.configure(Main.configureOptions);
};
Main._configureAllConfigurables = function() {
var configurable, i, len, ref2;
ref2 = ConfigRegistry.configurables;
for (i = 0, len = ref2.length; i < len; i++) {
configurable = ref2[i];
configurable.configure(getArtConfig());
}
return this._notifyConfigurablesConfigured();
};
Main._notifyConfigurablesConfigured = function() {
var configurable, i, len, ref2, results;
ref2 = ConfigRegistry.configurables;
results = [];
for (i = 0, len = ref2.length; i < len; i++) {
configurable = ref2[i];
results.push(configurable.configured());
}
return results;
};
return Main;
})());
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/module.js */ 7)(module)))
/***/ }),
/* 12 */
/*!**************************************!*\
!*** ./source/Art.Config/Lib.coffee ***!
\**************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
/* WEBPACK VAR INJECTION */(function(module) {var Lib, Promise, clone, compactFlatten, deepMerge, defineModule, expandPathedProperties, formattedInspect, getEnv, inspect, isPlainObject, isString, jsonParsableRegexp, log, merge, mergeInto, parseQuery, pushIfNotPresent, ref, upperCamelCase;
ref = __webpack_require__(/*! art-standard-lib */ 8), defineModule = ref.defineModule, log = ref.log, Promise = ref.Promise, inspect = ref.inspect, formattedInspect = ref.formattedInspect, merge = ref.merge, deepMerge = ref.deepMerge, mergeInto = ref.mergeInto, parseQuery = ref.parseQuery, pushIfNotPresent = ref.pushIfNotPresent, isPlainObject = ref.isPlainObject, isString = ref.isString, upperCamelCase = ref.upperCamelCase, expandPathedProperties = ref.expandPathedProperties, clone = ref.clone, compactFlatten = ref.compactFlatten, getEnv = ref.getEnv;
jsonParsableRegexp = /^(\[.*\]|\{.*\}|\".*\"|((-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?)|true|false|null))$/;
defineModule(module, Lib = (function() {
var smartJsonDecode;
function Lib() {}
Lib.smartJsonDecode = smartJsonDecode = function(value) {
if (isString(value) && jsonParsableRegexp.test(value)) {
return JSON.parse(value);
} else {
return value != null ? value : null;
}
};
Lib.getExternalEnvironment = function(externalEnvironment) {
var artConfig, artConfigName, e, k, m, v;
if (externalEnvironment == null) {
externalEnvironment = getEnv();
}
artConfig = externalEnvironment.artConfig, artConfigName = externalEnvironment.artConfigName;
artConfig = (function() {
if (isPlainObject(artConfig)) {
return artConfig;
} else if (isString(artConfig)) {
try {
return JSON.parse(artConfig);
} catch (error) {
e = error;
log.error("\nInvalid 'artConfig' from externalEnvironment. Must be valid JSON.\n\n" + (formattedInspect({
externalEnvironment: externalEnvironment
})) + "\n\nartConfig: " + (formattedInspect(artConfig)) + "\n\nerror: " + e + "\n");
return null;
}
} else {
return {};
}
})();
for (k in externalEnvironment) {
v = externalEnvironment[k];
if (m = k.match(/^artConfig([\._])(.+)$/)) {
if (m[1] === "_") {
artConfig[m[2].replace(/_/g, '.')] = smartJsonDecode(v);
} else {
artConfig[m[2]] = smartJsonDecode(v);
}
}
}
return {
artConfig: artConfig,
artConfigName: artConfigName
};
};
/*
normalized:
map standard aliases (dev and prod)
upperCamelCase
*/
Lib.normalizeArtConfigName = function(artConfigName) {
switch (artConfigName) {
case "dev":
return "Development";
case "prod":
return "Production";
default:
return artConfigName && upperCamelCase(artConfigName);
}
};
return Lib;
})());
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/module.js */ 7)(module)))
/***/ }),
/* 13 */
/*!***********************************************!*\
!*** ./source/Art.Config/Configurable.coffee ***!
\***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
/* WEBPACK VAR INJECTION */(function(module) {var BaseClass, ConfigRegistry, Configurable, ErrorWithInfo, EventedMixin, deepMerge, defineModule, isPlainObject, log, merge, mergeInto, namespace, neq, ref,
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
hasProp = {}.hasOwnProperty,
slice = [].slice;
ref = __webpack_require__(/*! art-standard-lib */ 8), defineModule = ref.defineModule, log = ref.log, merge = ref.merge, isPlainObject = ref.isPlainObject, mergeInto = ref.mergeInto, deepMerge = ref.deepMerge, isPlainObject = ref.isPlainObject, ErrorWithInfo = ref.ErrorWithInfo, neq = ref.neq;
BaseClass = __webpack_require__(/*! art-class-system */ 9).BaseClass;
namespace = __webpack_require__(/*! ./namespace */ 2);
ConfigRegistry = __webpack_require__(/*! ./ConfigRegistry */ 10);
EventedMixin = __webpack_require__(/*! art-events */ 14).EventedMixin;
/*
TO USE:
1) Inherit from Configurable and
2) OPTIONAL: call @defaults to set configuration defaults
3) OPTIONAL, override one of:
@configure
@preprocessConfig
@configured
*/
defineModule(module, Configurable = (function(superClass) {
extend(Configurable, superClass);
function Configurable() {
return Configurable.__super__.constructor.apply(this, arguments);
}
Configurable.abstractClass();
Configurable.declarable({
defaults: {}
});
Configurable.getDefaultConfig = function() {
return this.getDefaults();
};
Configurable.extendConfig = function() {
if (this.hasOwnProperty("config")) {
return this.config;
} else {
return this.config = {};
}
};
Configurable.reset = function() {
var config, defaults, k, ref1, v;
defaults = this.getDefaults();
config = this.extendConfig();
for (k in config) {
v = config[k];
if (defaults[k] == null) {
delete config[k];
}
}
mergeInto(config, defaults);
if (this.namespace !== namespace) {
if ((ref1 = this.namespace) != null) {
ref1.config || (ref1.config = config);
}
}
return config;
};
Configurable.getInspectedObjects = function() {
var obj;
return (
obj = {},
obj["" + (this.getConfigurationPathString())] = this.config,
obj
);
};
Configurable.getPathedDefaultConfig = function() {
var obj;
return (
obj = {},
obj["" + (this.getConfigurationPathString())] = this.getDefaults(),
obj
);
};
Configurable.configure = function(globalConfig) {
var obj;
globalConfig.verbose && log({
Configurable: (
obj = {},
obj["" + (this.getConfigurationPathString())] = this.getConfigurationFromPath(globalConfig),
obj
)
});
return mergeInto(this.reset(), this.getConfigurationFromPath(globalConfig));
};
Configurable.getConfigSave = function() {
var count, defaults, k, obj, out, ref1, ref2, v;
out = {};
defaults = this.getDefaults();
count = 0;
ref2 = (ref1 = this.config) != null ? ref1 : {};
for (k in ref2) {
v = ref2[k];
if (!(neq(v, defaults[k]))) {
continue;
}
count++;
out[k] = v;
}
if (count > 0) {
return (
obj = {},
obj["" + (this.getConfigurationPathString())] = out,
obj
);
}
};
Configurable.on = function() {
var a, ref1;
a = 1 <= arguments.length ? slice.call(arguments, 0) : [];
return (ref1 = this.getSingleton()).on.apply(ref1, a);
};
Configurable.configured = function() {
return this.getSingleton().handleEvent("configured", {
config: this.config
});
};
Configurable.getConfigurationPath = function() {
var _Configurable, _Neptune, i, path, ref1;
ref1 = this.getNamespacePath().split('.'), _Neptune = ref1[0], path = 3 <= ref1.length ? slice.call(ref1, 1, i = ref1.length - 1) : (i = 1, []), _Configurable = ref1[i++];
return path;
};
Configurable.getConfigurationPathString = function() {
return this.getConfigurationPath().join('.');
};
Configurable.getConfigurationFromPath = function(config, path) {
var el, i, len;
if (path == null) {
path = this.getConfigurationPath();
}
for (i = 0, len = path.length; i < len; i++) {
el = path[i];
config = config != null ? config[el] : void 0;
}
return config;
};
Configurable._register = function() {
this.reset();
return ConfigRegistry.registerConfigurable(this);
};
Configurable.postCreateConcreteClass = function(arg) {
var hotReloaded;
hotReloaded = arg.hotReloaded;
if (hotReloaded) {
ConfigRegistry.reload();
} else {
this._register();
}
return Configurable.__super__.constructor.postCreateConcreteClass.apply(this, arguments);
};
return Configurable;
})(EventedMixin(BaseClass)));
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/module.js */ 7)(module)))
/***/ }),
/* 14 */
/*!*****************************************************************************!*\
!*** external "require('art-events' /* ABC - not inlining fellow NPM *_/)" ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
module.exports = require('art-events' /* ABC - not inlining fellow NPM */);
/***/ })
/******/ ]);