vgno/roc-web

View on GitHub
src/roc/config/roc.config.meta.js

Summary

Maintainability
A
0 mins
Test Coverage
import 'source-map-support/register';

import {
    isInteger,
    isString,
    isBoolean,
    isPath,
    isArray,
    isArrayOrSingle
} from 'roc/validators';

const configMeta = {
    settings: {
        groups: {
            runtime: {
                koa: 'Settings for how Koa should handle paths.'
            }
        },
        descriptions: {
            runtime: {
                port: 'Port for the server to use.',
                debug: {
                    server: 'Filter for debug messages that should be shown for the server, see ' +
                        'https://npmjs.com/package/debug.'
                },
                serve: 'What folder the server should expose.',
                favicon: 'Path to the favicon file, specially handled on the server.',
                startBundle: 'Relative path to a bundle to start when calling "start", is not needed in most cases.',
                koa: {
                    lowercase: {
                        enabled: 'If paths should be transformed to lowercase.',
                        defer: 'If this should be performed after looking for a file on disk.'
                    },
                    normalize: {
                        enabled: 'If paths should be normalized, that is remove extra slashes.',
                        defer: 'If this should be performed after looking for a file on disk.'
                    },
                    trailingSlashes: {
                        enabled: 'Set to true to enforce trailing slashes, false to remove them and null for no rule.',
                        defer: 'If this should be performed after looking for a file on disk.'
                    }
                }
            },

            dev: {
                debug: 'Filter for debug messages that should be shown for the server, see ' +
                    'https://npmjs.com/package/debug.',
                port: 'Port for the dev server, will need to be a free range of at least 3.',
                watch: 'Files/folders that should trigger a restart of the server.',
                reloadOnServerChange: 'If Browsersync should reload the browser when the server is rebuilt.',
                open: 'If Browsersync should open the server when it has started.',
                devMiddleware: {
                    noInfo: 'If no info should be sent to the console.',
                    quiet: 'If nothing should be sent to the console.'
                },
                hotMiddleware: {
                    reload: 'If the browser should be reloaded if it fails to hot update the code.',
                    noInfo: 'If no info should be sent to the console.',
                    quiet: 'If nothing should be sent to the console.'
                }
            },

            build: {
                path: 'The basepath for the application.',
                assets: 'An array of files to include into the build process.',
                verbose: 'If verbose mode should be used, returns more output during build.',
                mode: 'What mode the application should be built for. Possible values are "dev", "dist" and "test".',
                target: 'For what target the application should be built for. Possible values are "client" & "server".',
                disableProgressbar: 'Should the progress bar be disabled for builds.',
                entry: {
                    client: 'The client entry point file.',
                    server: 'The server entry point file.'
                },
                outputName: 'The name of the generated application bundle, will be appended "roc.js".',
                outputPath: {
                    client: 'The output directory for the client build.',
                    server: 'The output directory for the server build.'
                },
                moduleBuild: 'NOT IMPLEMENTED YET',
                moduleStyle: 'NOT IMPLEMENTED YET',
                koaMiddlewares: 'The koa middlewares to add to the server instance, will be added after the default ' +
                    ' middlewares.',
                useDefaultKoaMiddlewares: 'If Roc should use internally defined koa middlewares, please look at the ' +
                    ' documentation for what middlewares that are included.'
            }
        },

        validations: {
            runtime: {
                port: isInteger,
                debug: {
                    server: isString
                },
                serve: isArrayOrSingle(isPath),
                favicon: isString,
                startBundle: isPath,
                koa: {
                    lowercase: {
                        enabled: isBoolean,
                        defer: isBoolean
                    },
                    normalize: {
                        enabled: isBoolean,
                        defer: isBoolean
                    },
                    trailingSlashes: {
                        enabled: isBoolean,
                        defer: isBoolean
                    }
                }
            },

            dev: {
                debug: isString,
                port: isInteger,
                watch: isArrayOrSingle(isPath),
                reloadOnServerChange: isBoolean,
                open: isBoolean,
                devMiddleware: {
                    noInfo: isBoolean,
                    quiet: isBoolean
                },
                hotMiddleware: {
                    reload: isBoolean,
                    noInfo: isBoolean,
                    quiet: isBoolean
                }
            },

            build: {
                path: isPath,
                assets: isArray(isPath),
                mode: /^dev|dist|test$/i,
                target: isArray(/^client|server$/i),
                disableProgressbar: isBoolean,
                entry: {
                    client: isPath,
                    server: isPath
                },
                outputName: isString,
                outputPath: {
                    client: isPath,
                    server: isPath
                },
                koaMiddlewares: isPath,
                useDefaultKoaMiddlewares: isBoolean
            }
        }
    },

    commands: {
        'build': {
            settings: ['build'],
            description: 'Build the current project.'
        },
        'start': {
            settings: ['runtime'],
            description: 'Starts the current project.',
            arguments: [{
                name: 'artifact',
                validation: isPath
            }]
        },
        'dev': {
            settings: true,
            description: 'Starts the current project in dev mode.'
        },
        'list-settings': {
            description: 'Prints all the available settings can be changed.'
        },
        'markdown-settings': {
            description: 'Prints all the available settings can be changed in a markdown format.'
        }
    },

    plugins: {
        createBuilder: 'Used to define and extend the internal builder. See documentation for more information.'
    }
};

/**
 * Exports the `roc.config.meta.js`.
 *
 * @return {object} The `roc.config.meta.js`.
 */
export default configMeta;