/**
 * Task worker modules
 * @namespace task.worker
 * @author Taka Okunishi
 *
 */

var prototype = require('./_prototype.js');
/**
 * 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, {
    _evaluateData: getPrototypeProperty('_evaluateData'),
    _newRenderData: getPrototypeProperty('_newRenderData'),
    _runTest: getPrototypeProperty('_runTest'),
    changeMode: getPrototypeProperty('changeMode'),
    cleanDeadSymlinks: getPrototypeProperty('cleanDeadSymlinks'),
    cleanDirectory: getPrototypeProperty('cleanDirectory'),
    cutAndReplaceLinks: getPrototypeProperty('cutAndReplaceLinks'),
    execCommand: getPrototypeProperty('execCommand'),
    generateApiguide: getPrototypeProperty('generateApiguide'),
    generateIndex: getPrototypeProperty('generateIndex'),
    generateIndexTest: getPrototypeProperty('generateIndexTest'),
    generateInstruments: getPrototypeProperty('generateInstruments'),
    generatePackageJson: getPrototypeProperty('generatePackageJson'),
    generateStructure: getPrototypeProperty('generateStructure'),
    generateTestFiles: getPrototypeProperty('generateTestFiles'),
    generateUnitTestFiles: getPrototypeProperty('generateUnitTestFiles'),
    installNodeModules: getPrototypeProperty('installNodeModules'),
    linkNpmPackage: getPrototypeProperty('linkNpmPackage'),
    packNpmPackage: getPrototypeProperty('packNpmPackage'),
    reportToCoveralls: getPrototypeProperty('reportToCoveralls'),
    runMocha: getPrototypeProperty('runMocha'),
    runNodeunit: getPrototypeProperty('runNodeunit'),
    tagOnGit: getPrototypeProperty('tagOnGit'),
    versionUp: getPrototypeProperty('versionUp'),
    generateApemanHelperData: getPrototypeProperty('generateApemanHelperData'),
    inheritTemplates: getPrototypeProperty('inheritTemplates'),
    _basenameWithoutExt: getPrototypeProperty('_basenameWithoutExt'),
    _beautifyJavascriptString: getPrototypeProperty('_beautifyJavascriptString'),
    _colorCategories: getPrototypeProperty('_colorCategories'),
    _colorThemesData: getPrototypeProperty('_colorThemesData'),
    _convertDirectory: getPrototypeProperty('_convertDirectory'),
    _createAliases: getPrototypeProperty('_createAliases'),
    _ensureThemeDataGuideIndex: getPrototypeProperty('_ensureThemeDataGuideIndex'),
    _expandGlobUnlessIgnored: getPrototypeProperty('_expandGlobUnlessIgnored'),
    _flattenThemesData: getPrototypeProperty('_flattenThemesData'),
    _generateStyleguideOverview: getPrototypeProperty('_generateStyleguideOverview'),
    _minifyFiles: getPrototypeProperty('_minifyFiles'),
    _randomColor: getPrototypeProperty('_randomColor'),
    _randomFont: getPrototypeProperty('_randomFont'),
    _schemeColors: getPrototypeProperty('_schemeColors'),
    _themeNameForIndex: getPrototypeProperty('_themeNameForIndex'),
    _unlinkFiles: getPrototypeProperty('_unlinkFiles'),
    compileCoffeeDirectory: getPrototypeProperty('compileCoffeeDirectory'),
    compileJadeDirectory: getPrototypeProperty('compileJadeDirectory'),
    compileLessDirectory: getPrototypeProperty('compileLessDirectory'),
    concatAndCompileCoffeeScriptFiles: getPrototypeProperty('concatAndCompileCoffeeScriptFiles'),
    concatFiles: getPrototypeProperty('concatFiles'),
    executeTravisEncrypt: getPrototypeProperty('executeTravisEncrypt'),
    generateBasenameLink: getPrototypeProperty('generateBasenameLink'),
    generateClientsideLocaleFiles: getPrototypeProperty('generateClientsideLocaleFiles'),
    generateColorLess: getPrototypeProperty('generateColorLess'),
    generateColorThemesLessFiles: getPrototypeProperty('generateColorThemesLessFiles'),
    generateConstantsJson: getPrototypeProperty('generateConstantsJson'),
    generateDataJson: getPrototypeProperty('generateDataJson'),
    generateFontLessFiles: getPrototypeProperty('generateFontLessFiles'),
    generateGitTagDataJson: getPrototypeProperty('generateGitTagDataJson'),
    generateHtmlFromMarkdown: getPrototypeProperty('generateHtmlFromMarkdown'),
    generateIcoImage: getPrototypeProperty('generateIcoImage'),
    generateIndexLessFile: getPrototypeProperty('generateIndexLessFile'),
    generateSizedImageFiles: getPrototypeProperty('generateSizedImageFiles'),
    generateStyleguide: getPrototypeProperty('generateStyleguide'),
    generateStyleguideLess: getPrototypeProperty('generateStyleguideLess'),
    generateThemeFaviconFiles: getPrototypeProperty('generateThemeFaviconFiles'),
    generateThemeLessFiles: getPrototypeProperty('generateThemeLessFiles'),
    generateThemeStartupImageFiles: getPrototypeProperty('generateThemeStartupImageFiles'),
    installBowerComponents: getPrototypeProperty('installBowerComponents'),
    linkThemeFiles: getPrototypeProperty('linkThemeFiles'),
    minifyCssFiles: getPrototypeProperty('minifyCssFiles'),
    minifyJsFiles: getPrototypeProperty('minifyJsFiles'),
    precompileJadeDirectory: getPrototypeProperty('precompileJadeDirectory'),
    publishHtmlFiles: getPrototypeProperty('publishHtmlFiles'),
    publishStaticFiles: getPrototypeProperty('publishStaticFiles'),
    runKarmaTest: getPrototypeProperty('runKarmaTest'),
    watchForTask: getPrototypeProperty('watchForTask')

});


/**
 * 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, {
    _debug: getRequire('./_debug'),
    _evaluateSeedEntry: getRequire('./_evaluate_seed_entry'),
    _loadLocalTmpl: getRequire('./_load_local_tmpl'),
    _scaffoldData: getRequire('./_scaffold_data'),
    _writeFileUnlessExists: getRequire('./_write_file_unless_exists'),
    expandDataSeedFiles: getRequire('./expand_data_seed_files'),
    generateDataSeedScaffold: getRequire('./generate_data_seed_scaffold'),
    generateDefineModelScaffold: getRequire('./generate_define_model_scaffold'),
    generateScaffold: getRequire('./generate_scaffold')

});
