diff --git a/src/index.js b/src/index.js index 1f68b3c8..00e05ecd 100644 --- a/src/index.js +++ b/src/index.js @@ -41,6 +41,10 @@ function sortClasses( classStr, { env, ignoreFirst = false, ignoreLast = false } ) { + if (typeof classStr !== 'string' || classStr === '') { + return classStr + } + // Ignore class attributes containing `{{`, to match Prettier behaviour: // https://github.com/prettier/prettier/blob/main/src/language-html/embed.js#L83-L88 if (classStr.includes('{{')) { @@ -268,6 +272,9 @@ function sortTemplateLiteral(node, { env }) { function transformJavaScript(ast, { env }) { visit(ast, { JSXAttribute(node) { + if (!node.value) { + return + } if (['class', 'className'].includes(node.name.name)) { if (isStringLiteral(node.value)) { sortStringLiteral(node.value, { env }) diff --git a/tests/test.js b/tests/test.js index b85c46e6..aa5efa8e 100644 --- a/tests/test.js +++ b/tests/test.js @@ -50,6 +50,8 @@ let html = [ t`
`, t`
`, ['
', '
'], + t`
`, + t`
`, ] let css = [ @@ -72,6 +74,8 @@ let javascript = [ t`;
`, t`;
`, t`;
`, + t`;
`, + t`;
`, [ `;
`, `;
`, @@ -86,13 +90,15 @@ let javascript = [ ], ] javascript = javascript.concat( - javascript.map((test) => test.map((t) => t.replace(/class=/g, 'className='))) + javascript.map((test) => test.map((t) => t.replace(/class/g, 'className'))) ) let vue = [ ...html, t`
`, t``, + t`
`, + t`
`, t`
`, t`
`, t`
`, @@ -138,6 +144,8 @@ let tests = { meriyah: javascript, svelte: [ t`
`, + t`
`, + t`
`, t`
`, t`
`, t`
`,