All Downloads are FREE. Search and download functionalities are using the official Maven repository.

crud_javascript_client_app.javascript.gulp.configFactory.js.ftl Maven / Gradle / Ivy

The newest version!
var configFactory = function (externalConfig) {
    'use strict';
    var $s = require('string'), _ = require('lodash'),
        paths = externalConfig.paths,
        modules = externalConfig.modules,
        builder = (function () {
            return {
                expandModule: function (module) {
                    var modules;
                    if (module && module.indexOf('/') >= 0) {
                        modules = module.split('/');
                        return {
                            module: modules[0],
                            submodule: modules[1]
                        };
                    } else {
                        return {
                            module: module
                        };
                    }
                },
                build: function (path, module, submodule) {
                    return $s(path)
                        .replaceAll('{module}', module)
                        .replaceAll('{submodule}', submodule)
                        .replaceAll('{app}', paths.app)
                        .replaceAll('{tmp}', paths.tmp)
                        .replaceAll('{test}', paths.test)
                        .replaceAll('{dist}', paths.dist).s;
                },
                buildForModules: function (patterns) {
                    var i, j, result = [];
                    for (i = 0; i < modules.length; i += 1) {
                        for (j = 0; j < arguments.length; j += 1) {
                            result.push(builder.build(arguments[j], modules[i]));
                        }
                    }
                    return result;
                },
                visitModules: function (factoryFn) {
                    var i, result = [], item;
                    for (i = 0; i < modules.length; i += 1) {
                        item = factoryFn(modules[i]);
                        if (item) {
                            result.push(item);
                        }
                    }
                    return result;
                }
            };
        }());
    return {
        builder: builder,
        context: externalConfig.proxyContext,
        proxy: externalConfig.proxy + externalConfig.proxyContext,
        app: {
            src: function () {
                return builder.build('{app}');
            },
            tmp: function () {
                return builder.build('{tmp}');
            },
            test: function () {
                return builder.build('{test}');
            },
            dist: function () {
                return builder.build('{dist}');
            },
            externalConfig: function (rawKey) {
                return externalConfig[rawKey];
            }
        },
        js: {
            src: function () {
                var appModule = externalConfig.appBuild === true ?
                    [
                        builder.build('{app}/*.module.js')
                    ] :
                    [

                    ];
                return _.flatten([
                    appModule,
                    builder.buildForModules(
                        '{app}/{module}/js/**/**.module.js',
                        '{app}/{module}/js/**/!(*spec|*mock).js',
                        '{tmp}/{module}/js/**/*.js'
                    )
                ]);
            },
            testSrc: function () {
                return _.flatten([
                    builder.buildForModules(
                        '{app}/{module}/js/**/*.mock.js'
                    ),
                    builder.buildForModules(
                        '{app}/{module}/js/**/*.spec.js'
                    ),
                    builder.buildForModules(
                        '{app}/*.spec.js'
                    )
                ]);
            },
            lintSrc: function () {
                return _.flatten([
                    [
                        builder.build('{app}/*.module.js')
                    ],
                    builder.buildForModules(
                        '{app}/{module}/js/**/**.js'
                    )
                ]);
            }
        },
        index: {
            src: function () {
                return builder.build('{app}/index.html');
            }
        },
        css: {
            src: function (all) {
                return builder.visitModules(function (module) {
                    var subModuleDef = builder.expandModule(module), basePattern, suffixPattern;
                    if (subModuleDef.submodule) {
                        basePattern = '{app}/{module}/{submodule}/css';
                        suffixPattern = '/{submodule}.less';
                    } else {
                        basePattern = '{app}/{module}/css';
                        suffixPattern = '/{module}.less';
                    }

                    if (all) {
                        suffixPattern = '/**/*.less';
                    }
                    return builder.build(basePattern + suffixPattern, subModuleDef.module, subModuleDef.submodule);
                });
            },
            includePaths: function () {
                return builder.build('{app}');
            },
            dest: {
                file: function () {
                    return builder.build('css/oasp.css');
                },
                path: function () {
                    return builder.build('{tmp}/css/oasp.css');
                }
            },
            inject: function () {
                return builder.build('{tmp}/css/*.css');
            }
        },
        html: {
            src: function () {
                return builder.buildForModules(
                    '{app}/{module}/html/**/*.html',
                    '!{app}/{module}/html/cached/**/*.html'
                );
            }
        },
        img: {
            src: function (all) {
                if (all) {
                    return builder.buildForModules(
                        '{app}/{module}/img/**/*.*'
                    );
                }
                else {
                    return builder.buildForModules(
                        '{app}/{module}/img/**/*.*',
                        '!{app}/{module}/img/sprite/**'
                    );
                }
            }
        },
        i18n: {
            src: function () {
                return builder.buildForModules(
                    '{app}/{module}/i18n/**/*.*'
                );
            }
        },
        sprite: {
            src: function () {
                return builder.buildForModules(
                    '{app}/{module}/img/sprite/**/*.png'
                );
            },
            dest: {
                css: function () {
                    return builder.build('css/sprite.css');
                },
                img: function () {
                    return builder.build('img/sprite.png');
                }
            }
        },
        ngTemplates: {
            conf: function () {
                return builder.visitModules(function (module) {
                    var subModuleDef = builder.expandModule(module);
                    if (subModuleDef.submodule) {
                        return {
                            module: $s(subModuleDef.module).camelize().s + '.' + $s(subModuleDef.submodule).camelize().s + '.templates',
                            file: builder.build('{submodule}.templates.js', subModuleDef.module, subModuleDef.submodule),
                            moduleBasePath: builder.build('{module}/{submodule}/html', subModuleDef.module, subModuleDef.submodule),
                            dest: builder.build('{tmp}/{module}/{submodule}/js', subModuleDef.module, subModuleDef.submodule),
                            src: builder.build('{app}/{module}/{submodule}/html/cached/**/*.html', subModuleDef.module, subModuleDef.submodule)
                        };
                    } else {
                        return {
                            module: 'app.' + $s(module).camelize().s + '.templates',
                            file: builder.build('{module}.templates.js', module),
                            moduleBasePath: builder.build('{module}/html', module),
                            dest: builder.build('{tmp}/{module}/js', module),
                            src: builder.build('{app}/{module}/html/cached/**/*.html', module)
                        };

                    }
                });
            }
        }
    };
};


module.exports = configFactory;




© 2015 - 2024 Weber Informatics LLC | Privacy Policy