{"version":3,"file":"framework.js","sourceRoot":"","sources":["../../src/karma/framework.ts"],"names":[],"mappings":";;AAOA;IAMI,mBAAY,OAAgB,EAAE,MAAqB,EAAE,QAAkB;QAAvE,iBAyBC;QA3BO,cAAS,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAI/C,IAAI,CAAC,MAAM,GAAG,UAAC,WAA0B,EAAE,MAAW;YAClD,KAAI,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;YAEvD,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAC/B,QAAQ,CAAC,UAAU,EAAE,CAAC;YAEtB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;gBAClC,OAAO,CAAC,MAAM,CAAE,WAAW,CAAC,KAAa,CAAC,CAAC;aAC9C;YAED,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,UAAC,CAAC;gBACvC,IAAI,CAAC,CAAC,UAAU,EAAE;oBACd,CAAC,CAAC,UAAU,CAAC;wBACT,SAAS,EAAE,MAAM,CAAC,YAAY;wBAC9B,KAAK,EAAE,WAAW,CAAC,QAAQ;qBAC9B,CAAC,CAAC;iBACN;YACL,CAAC,CAAC,CAAC;YAEH,KAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QACjF,CAAC,CAAC;QAED,IAAI,CAAC,MAAc,CAAC,OAAO,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC;IAEO,4BAAQ,GAAhB,UAAiB,GAAW,EAAE,KAAa;QACvC,IAAI,GAAG,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;YACpC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;SAC9C;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IACL,gBAAC;AAAD,CAAC,AAvCD,IAuCC;AAvCY,8BAAS","sourcesContent":["import { ConfigOptions } from \"karma\";\nimport { Logger } from \"log4js\";\n\nimport { Bundler } from \"../bundler/bundler\";\nimport { Resolver } from \"../bundler/resolve/resolver\";\nimport { Configuration } from \"../shared/configuration\";\n\nexport class Framework {\n\n    public create: (karmaConfig: ConfigOptions, helper: any, logger: any) => void;\n    private log: Logger;\n    private stringify = require(\"json-stringify-safe\");\n\n    constructor(bundler: Bundler, config: Configuration, resolver: Resolver) {\n\n        this.create = (karmaConfig: ConfigOptions, logger: any) => {\n            this.log = logger.create(\"framework.karma-typescript\");\n\n            config.initialize(karmaConfig);\n            resolver.initialize();\n\n            if (!config.hasFramework(\"commonjs\")) {\n                bundler.attach((karmaConfig.files as any));\n            }\n\n            config.bundlerOptions.transforms.forEach((t) => {\n                if (t.initialize) {\n                    t.initialize({\n                        appenders: config.logAppenders,\n                        level: karmaConfig.logLevel\n                    });\n                }\n            });\n\n            this.log.debug(\"Configuration:\\n\", this.stringify(config, this.replacer, 3));\n        };\n\n        (this.create as any).$inject = [\"config\", \"logger\"];\n    }\n\n    private replacer(key: string, value: string) {\n        if (key && typeof value === \"function\") {\n            return (value + \"\").substr(0, 100) + \"...\";\n        }\n        return value;\n    }\n}\n"]}