/**
 * {{doc.overview}}
 * @namespace {{doc.namespace}}
 * @author {{meta.author.name}}
 *
 */

{{#if prototype}}var prototype = require('{{prototype.path}}');
/**
 * Define an object property getter to access prototype property.
 * @private
 */
function getPrototypeProperty (key) {
    return {
        enumerable: true,
        get: function () {
            return prototype[key];
        }
    };
}

// Export prototype properties with lazy loading.
Object.defineProperties(exports, {
{{#each prototype.modules}}    {{exportsName}}: getPrototypeProperty('{{exportsName}}'){{#if hasNext}},{{/if}}
{{/each}}
});
{{/if}}
{{#if hasModules}}
/**
 * Define an object property getter with require function.
 * @private
 */
function getRequire (moduleName) {
    return {
        enumerable: true,
        get: function () {
            return require(moduleName);
        }
    };
}

// Export modules with lazy loading.
Object.defineProperties(exports, {
{{#each modules}}    {{exportsName}}: getRequire('{{requireName}}'){{#if hasNext}},{{/if}}
{{/each}}
});
{{/if}}