{"ScriptPreparationCode":"var str = \u0027style\u0027;\r\nvar obj = {\r\n \u0027style-2\u0027: true,\r\n \u0027style-3\u0027: false,\r\n \u0027style-4\u0027: true,\r\n}\r\nvar arr = [\u0027style-5\u0027, \u0027style-6\u0027]\r\n\r\nconst isArray = (value) =\u003E Array.isArray(value)\r\nconst isUndefined = (value) =\u003E typeof value === \u0022undefined\u0022\r\nconst isString = (value) =\u003E typeof value === \u0022string\u0022\r\nconst isNumber = (value) =\u003E !Number.isNaN(value) \u0026\u0026 typeof value === \u0022number\u0022\r\nconst isObject = (value) =\u003E !isArray(value) \u0026\u0026 value !== null \u0026\u0026 typeof value === \u0022object\u0022\r\n\r\nfunction composeClass(...values) {\r\n if (!values.length) {\r\n return\r\n }\r\n\r\n const classNameStack = []\r\n\r\n for (const value of values) {\r\n switch (true) {\r\n case !value: {\r\n continue\r\n }\r\n case isString(value):\r\n case isNumber(value): {\r\n classNameStack.push(value)\r\n continue\r\n }\r\n case isArray(value) \u0026\u0026 value.length \u003E 0: {\r\n const valueFromArray = Reflect.apply(composeClass, undefined, value)\r\n\r\n if (!isUndefined(valueFromArray)) {\r\n classNameStack.push(valueFromArray)\r\n }\r\n continue\r\n }\r\n case isObject(value): {\r\n for (const key in value) {\r\n if (value[key]) {\r\n classNameStack.push(key)\r\n }\r\n }\r\n continue\r\n }\r\n }\r\n }\r\n\r\n return classNameStack.length \u003E 0 ? classNameStack.join(\u0022 \u0022) : undefined\r\n}","TestCases":[{"Name":"classnames","Code":"let result = window.classNames(str, obj, arr, \u0027test classname\u0027)","IsDeferred":false},{"Name":"clsx","Code":"let result = window.clsx(str, obj, arr, \u0027test classname\u0027)","IsDeferred":false},{"Name":"custom implemenatation","Code":"let result = composeClass(str, obj, arr, \u0027test classname\u0027)","IsDeferred":false}]}