blob: d3c7d2b43152eb5a9d2a67fa8e44108291890056 [file] [log] [blame]
{"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"]}