{"version":3,"file":"commonjs.js","sourceRoot":"","sources":["../../src/client/commonjs.ts"],"names":[],"mappings":"AAAA,CAAC,UAAC,MAAW;IACT,YAAY,CAAC;IACb,MAAM,CAAC,0BAA0B,GAAI,EAAE,CAAC;IACxC,IAAM,EAAE,GAAG,CAAC,CAAC;IACb,IAAM,EAAE,GAAG,CAAC,CAAC;IACb,IAAM,GAAG,GAAG,CAAC,CAAC;IACd,IAAM,OAAO,GAAG,UAAC,QAAa,EAAE,SAAc,EAAE,QAAa;QACzD,IAAI,OAAY,CAAC;QACjB,IAAI,MAAM,GAAG,MAAM,CAAC,0BAA0B,CAAE,QAAQ,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,EAAE;YACT,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,CAAC,OAAO,EAAE;gBACV,MAAM,IAAI,KAAK,CAAC,aAAa,GAAG,QAAQ,GAAG,IAAI,GAAG,QAAQ,GAAG,iBAAiB,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC;aACrG;YACD,MAAM,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;YACzD,MAAM,CAAC,0BAA0B,CAAE,QAAQ,CAAC,GAAG,MAAM,CAAC;YACtD,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,UAAC,UAAe;gBAC7C,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;YACnE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YACnF,IAAI,MAAM,CAAC,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAClD,CAAC,OAAO,MAAM,CAAC,OAAO,KAAK,UAAU,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;mBAC5E,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EACjC;gBACE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE;oBAC5B,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE;wBAChD,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI;qBACrE,CAAC,CAAC;iBACN;gBACD,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE;oBAC7C,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI;iBAC/E,CAAC,CAAC;aACN;SACJ;QACD,OAAO,MAAM,CAAC,OAAO,CAAC;IAC1B,CAAC,CAAC;IACF,IAAM,YAAY,GAAG,UAAC,GAAQ;QAC1B,OAAO,CAAC,OAAO,GAAG,KAAK,UAAU,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAC9F,CAAC,CAAC;IACF,CAAC,MAAM,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAC,QAAa;QACrD,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC","sourcesContent":["((global: any) => {\n    \"use strict\";\n    global.__karmaTypescriptModules__ =  {};\n    const fn = 0;\n    const id = 1;\n    const map = 2;\n    const require = (filename: any, requiring: any, required: any) => {\n        let wrapper: any;\n        let module = global.__karmaTypescriptModules__ [filename];\n        if (!module) {\n            wrapper = global.wrappers[filename];\n            if (!wrapper) {\n                throw new Error(\"Can't find \" + required + \" [\" + filename + \"] (required by \" + requiring + \")\");\n            }\n            module = { exports: {}, id: wrapper[id], uri: filename };\n            global.__karmaTypescriptModules__ [filename] = module;\n            wrapper[fn].call(module.exports, (dependency: any) => {\n                return require(wrapper[map][dependency], filename, dependency);\n            }, module, module.exports, filename.slice(0, filename.lastIndexOf(\"/\")), filename);\n            if (module.exports && isExtensible(module.exports) && (\n                (typeof module.exports === \"function\" && module.exports !== module.exports.default)\n                    || !module.exports.default)\n            ) {\n                if (!module.exports.__esModule) {\n                    Object.defineProperty(module.exports, \"__esModule\", {\n                        configurable: true, enumerable: false, value: true, writable: true\n                    });\n                }\n                Object.defineProperty(module.exports, \"default\", {\n                    configurable: true, enumerable: false, value: module.exports, writable: true\n                });\n            }\n        }\n        return module.exports;\n    };\n    const isExtensible = (obj: any) => {\n        return (typeof obj === \"function\" || typeof obj === \"object\") && Object.isExtensible(obj);\n    };\n    (global.entrypointFilenames || []).forEach((filename: any) => {\n        require(filename, \"commonjs.js\", \"entrypoint\");\n    });\n})(this);\n"]}