/** * @fileoverview Define module * @author NHN. * FE Development Lab * @dependency type.js, defineNamespace.js */ 'use strict'; var defineNamespace = require('./defineNamespace'); var type = require('./type'); var INITIALIZATION_METHOD_NAME = 'initialize'; /** * Define module * @param {string} namespace - Namespace of module * @param {Object} moduleDefinition - Object literal for module * @returns {Object} Defined module * @memberof tui.util * @example * //-- #1. Get Module --// * var util = require('tui-code-snippet'); // node, commonjs * var util = tui.util; // distribution file * * //-- #2. Use property --// * var myModule = util.defineModule('modules.myModule', { * name: 'john', * message: '', * initialize: function() { * this.message = 'hello world'; * }, * getMessage: function() { * return this.name + ': ' + this.message * } * }); * * console.log(myModule.getMessage()); // 'john: hello world'; */ function defineModule(namespace, moduleDefinition) { var base = moduleDefinition || {}; if (type.isFunction(base[INITIALIZATION_METHOD_NAME])) { base[INITIALIZATION_METHOD_NAME](); } return defineNamespace(namespace, base); } module.exports = defineModule;