UNPKG

art-config

Version:

A powerful yet simple tool for configuring all your libraries consistently.

895 lines (755 loc) 32.7 kB
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 */); /***/ }) /******/ ]);