{"version":3,"file":"configuration.js","sourceRoot":"","sources":["../../src/shared/configuration.ts"],"names":[],"mappings":"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","sourcesContent":["import * as lodash from \"lodash\";\nimport * as log4js from \"log4js\";\n\nimport { ConfigOptions } from \"karma\";\nimport { merge } from \"lodash\";\n\nimport {\n    BundlerOptions,\n    CoverageOptions,\n    Extendable,\n    KarmaTypescriptConfig,\n    RemapOptions,\n    Reports\n} from \"../api\";\n\nexport interface LoggerList {\n    [key: string]: log4js.Logger;\n}\n\nexport interface Configuration {\n    [key: string]: any;\n}\n\nexport class Configuration implements KarmaTypescriptConfig {\n\n    public karma: ConfigOptions;\n    public bundlerOptions: BundlerOptions;\n    public compilerDelay: number;\n    public compilerOptions: any;\n    public coverageOptions: CoverageOptions;\n    public coverageReporter: any;\n    public defaultTsconfig: any;\n    public exclude: string[] | Extendable;\n    public include: string[] | Extendable;\n    public logAppenders: { [name: string]: log4js.Appender };\n    public remapOptions: RemapOptions;\n    public reporters: string[];\n    public reports: Reports;\n    public transformPath: (filepath: string) => string;\n    public tsconfig: string;\n\n    public hasCoverageThreshold: boolean;\n\n    private asserted: boolean;\n    private karmaTypescriptConfig: KarmaTypescriptConfig;\n    private callbacks: Array<() => void> = [];\n\n    constructor(private loggers: LoggerList) {}\n\n    public initialize(config: ConfigOptions) {\n\n        this.karma = config || {};\n        this.karmaTypescriptConfig = (config as any).karmaTypescriptConfig || {};\n\n        this.configureLogging();\n        this.configureBundler();\n        this.configureCoverage();\n        this.configureProject();\n        this.configurePreprocessor();\n        this.configureReporter();\n        this.configureKarmaCoverage();\n        this.assertConfiguration();\n\n        for (const callback of this.callbacks) {\n            callback();\n        }\n    }\n\n    public whenReady(callback: () => void) {\n        this.callbacks.push(callback);\n    }\n\n    public hasFramework(name: string): boolean {\n        return this.karma.frameworks.indexOf(name) !== -1;\n    }\n\n    public hasPreprocessor(name: string): boolean {\n        for (const preprocessor in this.karma.preprocessors) {\n            if (this.karma.preprocessors[preprocessor] &&\n                this.karma.preprocessors[preprocessor].indexOf(name) !== -1) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    public hasReporter(name: string): boolean {\n        return this.karma.reporters.indexOf(name) !== -1;\n    }\n\n    private configureLogging() {\n        this.logAppenders = this.karma.loggers instanceof Array\n            ? this.karma.loggers.reduce((logAppenders, logger, index) =>\n                Object.assign(logAppenders, { [logger.type + index]: logger }), {})\n            : this.karma.loggers;\n\n        if (this.logAppenders != null) {\n            log4js.configure({\n                appenders: this.logAppenders,\n                categories: {\n                    default: {\n                        appenders: Object.keys(this.logAppenders),\n                        level: this.karma.logLevel\n                    }\n                }\n            });\n        }\n\n        Object.keys(this.loggers).forEach((key) => {\n            this.loggers[key].level = this.karma.logLevel;\n        });\n    }\n\n    private configureBundler(): void {\n\n        const defaultBundlerOptions: BundlerOptions = {\n            acornOptions: {\n                ecmaVersion: 7,\n                sourceType: \"module\"\n            },\n            addNodeGlobals: true,\n            constants: {},\n            entrypoints: /.*/,\n            exclude: [],\n            ignore: [],\n            noParse: [],\n            resolve: {\n                alias: {},\n                directories: [\"node_modules\"],\n                extensions: [\".js\", \".json\", \".ts\", \".tsx\"]\n            },\n            sourceMap: false,\n            transforms: [],\n            validateSyntax: true\n        };\n\n        this.bundlerOptions = merge(defaultBundlerOptions, this.karmaTypescriptConfig.bundlerOptions);\n    }\n\n    private configureCoverage() {\n\n        const defaultCoverageOptions: CoverageOptions = {\n            exclude: /\\.(d|spec|test)\\.ts$/i,\n            instrumentation: true,\n            threshold: {\n                file: {\n                    branches: 0,\n                    excludes: [],\n                    functions: 0,\n                    lines: 0,\n                    overrides: {},\n                    statements: 0\n                },\n                global: {\n                    branches: 0,\n                    excludes: [],\n                    functions: 0,\n                    lines: 0,\n                    statements: 0\n                }\n            }\n        };\n\n        this.hasCoverageThreshold = !!this.karmaTypescriptConfig.coverageOptions &&\n            !!this.karmaTypescriptConfig.coverageOptions.threshold;\n        this.coverageOptions = merge(defaultCoverageOptions, this.karmaTypescriptConfig.coverageOptions);\n        this.assertCoverageExclude(this.coverageOptions.exclude);\n    }\n\n    private configureProject(): void {\n\n        this.compilerDelay = this.karmaTypescriptConfig.compilerDelay || 250;\n        this.compilerOptions = this.karmaTypescriptConfig.compilerOptions;\n\n        this.defaultTsconfig = {\n            compilerOptions: {\n                emitDecoratorMetadata: true,\n                experimentalDecorators: true,\n                jsx: \"react\",\n                module: \"commonjs\",\n                sourceMap: true,\n                target: \"ES5\"\n            },\n            exclude: [\"node_modules\"]\n        };\n\n        this.exclude = this.karmaTypescriptConfig.exclude;\n        this.include = this.karmaTypescriptConfig.include;\n        this.tsconfig = this.karmaTypescriptConfig.tsconfig;\n        this.assertExtendable(\"exclude\");\n        this.assertExtendable(\"include\");\n    }\n\n    private configurePreprocessor() {\n\n        const transformPath = (filepath: string) => {\n            return filepath.replace(/\\.(ts|tsx)$/, \".js\");\n        };\n\n        this.transformPath = this.karmaTypescriptConfig.transformPath || transformPath;\n    }\n\n    private configureReporter() {\n        this.reports = this.karmaTypescriptConfig.reports || { html: \"coverage\" };\n        this.remapOptions = this.karmaTypescriptConfig.remapOptions || {};\n    }\n\n    private configureKarmaCoverage() {\n\n        const defaultCoverageReporter = {\n            instrumenterOptions: {\n                istanbul: { noCompact: true }\n            }\n        };\n\n        this.coverageReporter = merge(defaultCoverageReporter, (this.karma as any).coverageReporter);\n\n        if (Array.isArray(this.karma.reporters)) {\n            this.reporters = this.karma.reporters.slice();\n            if (this.karma.reporters.indexOf(\"coverage\") === -1){\n                this.reporters.push(\"coverage\");\n            }\n        }\n        else {\n            this.reporters = [\"coverage\"];\n        }\n    }\n\n    private assertConfiguration() {\n        if (!this.asserted) {\n            this.asserted = true;\n            this.assertFrameworkConfiguration();\n            this.assertDeprecatedOptions();\n        }\n    }\n\n    private assertFrameworkConfiguration() {\n        if (this.hasPreprocessor(\"karma-typescript\") &&\n          (!this.karma.frameworks || this.karma.frameworks.indexOf(\"karma-typescript\") === -1)) {\n            throw new Error(\"Missing karma-typescript framework, please add\" +\n                            \"'frameworks: [\\\"karma-typescript\\\"]' to your Karma config\");\n        }\n    }\n\n    private assertExtendable(key: string) {\n        const extendable = (this[key] as Extendable);\n\n        if (extendable === undefined) {\n            return;\n        }\n\n        if (Array.isArray(extendable)) {\n            extendable.forEach((item) => {\n                if (!lodash.isString(item)) {\n                    throw new Error(\"Expected a string in 'karmaTypescriptConfig.\" + key + \"', got [\" +\n                        typeof item + \"]: \" + item);\n                }\n            });\n            return;\n        }\n\n        if (lodash.isObject(extendable)) {\n            if ([\"merge\", \"replace\"].indexOf(extendable.mode) === -1) {\n                throw new Error(\"Expected 'karmaTypescriptConfig.\" + key + \".mode' to be 'merge|replace', got '\" +\n                    extendable.mode + \"'\");\n            }\n            if (Array.isArray(extendable.values)) {\n                extendable.values.forEach((item) => {\n                    if (!lodash.isString(item)) {\n                        throw new Error(\"Expected a string in 'karmaTypescriptConfig.\" + key + \".values', got [\" +\n                            typeof item + \"]: \" + item);\n                    }\n                });\n            }\n            return;\n        }\n\n        throw new Error(\"The option 'karmaTypescriptConfig.\" + key +\n                        \"' must be an array of strings or { mode: \\\"replace|extend\\\", values: [string, string], got [\" +\n                    typeof this.exclude + \"]: \" + this.exclude);\n    }\n\n    private assertDeprecatedOptions() {\n        if ((this.bundlerOptions as any).ignoredModuleNames) {\n            throw new Error(\"The option 'karmaTypescriptConfig.bundlerOptions.ignoredModuleNames' has been \" +\n                            \"removed, please use 'karmaTypescriptConfig.bundlerOptions.exclude' instead\");\n        }\n\n        if ((this.karmaTypescriptConfig as any).excludeFromCoverage !== undefined) {\n            throw new Error(\"The option 'karmaTypescriptConfig.excludeFromCoverage' has been \" +\n                            \"removed, please use 'karmaTypescriptConfig.coverageOptions.exclude' instead\");\n        }\n\n        if ((this.karmaTypescriptConfig as any).disableCodeCoverageInstrumentation !== undefined) {\n            throw new Error(\"The option 'karmaTypescriptConfig.disableCodeCoverageInstrumentation' has been \" +\n                            \"removed, please use 'karmaTypescriptConfig.coverageOptions.instrumentation' instead\");\n        }\n    }\n\n    private assertCoverageExclude(regex: any) {\n        if (regex instanceof RegExp || !regex) {\n            return regex;\n        }\n        else if (Array.isArray(regex)) {\n            regex.forEach((r) => {\n                if (!(r instanceof RegExp)) {\n                    this.throwCoverageExcludeError(r);\n                }\n            });\n            return regex;\n        }\n\n        this.throwCoverageExcludeError(regex);\n    }\n\n    private throwCoverageExcludeError(regex: any) {\n        throw new Error(\"karmaTypescriptConfig.coverageOptions.exclude \" +\n            \"must be a single RegExp or an Array of RegExp, got [\" + typeof regex + \"]: \" + regex);\n    }\n}\n"]}