{"ScriptPreparationCode":"const teamsTheme = {\r\n root: props =\u003E ({\r\n display: \u0022flex\u0022,\r\n ...(props.open \u0026\u0026 { flexDirection: \u0022columns\u0022 })\r\n }),\r\n icon: () =\u003E ({\r\n display: \u0022block\u0022\r\n }),\r\n content: () =\u003E ({\r\n display: \u0022inline-block\u0022\r\n })\r\n };\r\n \r\n const teamsDarkTheme = {\r\n root: props =\u003E ({\r\n display: \u0022grid\u0022\r\n })\r\n };\r\n \r\n const teamsConstrastTheme = {\r\n root: props =\u003E ({\r\n display: \u0022inline-grid\u0022\r\n })\r\n };\r\n \r\n //\r\n //\r\n //\r\n \r\n const callable = possibleFunction =\u003E (...args) =\u003E {\r\n return typeof possibleFunction === \u0022function\u0022\r\n ? possibleFunction(...args)\r\n : possibleFunction;\r\n };\r\n \r\n const mergeComponentStyles = (...sources) =\u003E {\r\n const initial = {};\r\n \r\n return sources.reduce((partStylesPrepared, stylesByPart) =\u003E {\r\n _.forEach(stylesByPart, (partStyle, partName) =\u003E {\r\n // Break references to avoid an infinite loop.\r\n // We are replacing functions with a new ones that calls the originals.\r\n const originalTarget = partStylesPrepared[partName];\r\n const originalSource = partStyle;\r\n \r\n partStylesPrepared[partName] = styleParam =\u003E {\r\n return _.merge(\r\n callable(originalTarget)(styleParam),\r\n callable(originalSource)(styleParam)\r\n );\r\n };\r\n });\r\n \r\n return partStylesPrepared;\r\n }, initial);\r\n };\r\n \r\n const mergeComponentStylesDeepMerge = (...sources) =\u003E {\r\n const initial = {};\r\n \r\n return sources.reduce((partStylesPrepared, stylesByPart) =\u003E {\r\n _.forEach(stylesByPart, (partStyle, partName) =\u003E {\r\n // Break references to avoid an infinite loop.\r\n // We are replacing functions with a new ones that calls the originals.\r\n const originalTarget = partStylesPrepared[partName];\r\n const originalSource = partStyle;\r\n \r\n partStylesPrepared[partName] = styleParam =\u003E {\r\n return deepmerge(\r\n callable(originalTarget)(styleParam),\r\n callable(originalSource)(styleParam)\r\n );\r\n };\r\n });\r\n \r\n return partStylesPrepared;\r\n }, initial);\r\n };\r\n \r\n const mergeComponentStylesWithoutEmptyFrames = (...sources) =\u003E {\r\n const initial = {};\r\n \r\n return sources.reduce((partStylesPrepared, stylesByPart) =\u003E {\r\n _.forEach(stylesByPart, (partStyle, partName) =\u003E {\r\n // Break references to avoid an infinite loop.\r\n // We are replacing functions with a new ones that calls the originals.\r\n const originalTarget = partStylesPrepared[partName];\r\n const originalSource = partStyle;\r\n \r\n if (originalTarget \u0026\u0026 originalSource) {\r\n partStylesPrepared[partName] = styleParam =\u003E {\r\n return _.merge(\r\n callable(originalTarget)(styleParam),\r\n callable(originalSource)(styleParam)\r\n );\r\n };\r\n }\r\n \r\n if (originalTarget) {\r\n partStylesPrepared[partName] = callable(originalTarget);\r\n }\r\n \r\n if (originalSource) {\r\n partStylesPrepared[partName] = callable(originalSource);\r\n }\r\n });\r\n \r\n return partStylesPrepared;\r\n }, initial);\r\n };\r\n \r\n var resolveStyles = (styles, props) =\u003E {\r\n if (styles.length === 1) {\r\n return styles[0](props);\r\n }\r\n \r\n const resolvedStyles = [];\r\n styles.forEach(styleFn =\u003E resolvedStyles.push(styleFn(props)));\r\n \r\n return _.merge(...resolvedStyles);\r\n };\r\n \r\n //\r\n //\r\n //\r\n \r\n var mergedTheme = mergeComponentStyles(\r\n teamsTheme,\r\n teamsDarkTheme,\r\n teamsConstrastTheme\r\n );\r\n \r\n var mergedThemeDeepMerge = mergeComponentStylesDeepMerge(\r\n teamsTheme,\r\n teamsDarkTheme,\r\n teamsConstrastTheme\r\n );\r\n \r\n var mergedThemeCompact = mergeComponentStylesWithoutEmptyFrames(\r\n teamsTheme,\r\n teamsDarkTheme,\r\n teamsConstrastTheme\r\n );\r\n \r\n var flattenTheme = {\r\n root: [teamsTheme.root, teamsDarkTheme.root, teamsConstrastTheme.root],\r\n icon: [teamsTheme.icon],\r\n content: [teamsTheme.content]\r\n };\r\n \r\n var props = {};\r\n \r\n\r\n\r\n","TestCases":[{"Name":"Original","Code":"const styles = {\r\n root: mergedTheme.root(props),\r\n icon: mergedTheme.icon(props),\r\n content: mergedTheme.content(props)\r\n }","IsDeferred":false},{"Name":"Compact","Code":"const styles = {\r\n root: mergedThemeCompact.root(props),\r\n icon: mergedThemeCompact.icon(props),\r\n content: mergedThemeCompact.content(props)\r\n }","IsDeferred":false},{"Name":"Flatten","Code":"\t\r\nconst styles = {\r\n root: resolveStyles(flattenTheme.root, props),\r\n icon: resolveStyles(flattenTheme.icon, props),\r\n content: resolveStyles(flattenTheme.content, props)\r\n }","IsDeferred":false},{"Name":"deepmerge on original","Code":"const styles = {\r\n root: mergedThemeDeepMerge.root(props),\r\n icon: mergedThemeDeepMerge.icon(props),\r\n content: mergedThemeDeepMerge.content(props)\r\n }","IsDeferred":false}]}