Skip to content

Commit c0fa901

Browse files
Handle pre-compiled createTheme destructuring in Babel plugin (#391)
1 parent a9b7905 commit c0fa901

File tree

3 files changed

+55
-0
lines changed

3 files changed

+55
-0
lines changed

.changeset/flat-colts-cheer.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@vanilla-extract/babel-plugin': patch
3+
---
4+
5+
Handle array destructuring from `createTheme` when it's already been compiled

packages/babel-plugin/src/index.test.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,32 @@ describe('babel plugin', () => {
411411
`);
412412
});
413413

414+
it('should handle createTheme using destructuring when already compiled', () => {
415+
const source = `
416+
import { createTheme } from '@vanilla-extract/css';
417+
418+
var _createTheme = createTheme({}),
419+
_createTheme2 = _slicedToArray(_createTheme, 2),
420+
myThemeClass = _createTheme2[0],
421+
vars = _createTheme2[1];
422+
`;
423+
424+
expect(transform(source)).toMatchInlineSnapshot(`
425+
"import * as __vanilla_filescope__ from '@vanilla-extract/css/fileScope';
426+
427+
__vanilla_filescope__.setFileScope(\\"src/dir/mockFilename.css.ts\\", \\"@vanilla-extract/babel-plugin\\");
428+
429+
import { createTheme } from '@vanilla-extract/css';
430+
431+
var _createTheme = createTheme({}, \\"myThemeClass\\"),
432+
_createTheme2 = _slicedToArray(_createTheme, 2),
433+
myThemeClass = _createTheme2[0],
434+
vars = _createTheme2[1];
435+
436+
__vanilla_filescope__.endFileScope();"
437+
`);
438+
});
439+
414440
it('should handle createGlobalTheme', () => {
415441
const source = `
416442
import { createGlobalTheme } from '@vanilla-extract/css';

packages/babel-plugin/src/index.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,30 @@ const getDebugId = (path: NodePath<t.CallExpression>) => {
8787
return;
8888
}
8989

90+
// Special case: Handle `export const [themeClass, vars] = createTheme({});`
91+
// when it's already been compiled into this:
92+
//
93+
// var _createTheme = createTheme({}),
94+
// _createTheme2 = _slicedToArray(_createTheme, 2),
95+
// themeClass = _createTheme2[0],
96+
// vars = _createTheme2[1];
97+
if (
98+
t.isVariableDeclaration(firstRelevantParentPath.parent) &&
99+
firstRelevantParentPath.parent.declarations.length === 4
100+
) {
101+
const [themeDeclarator, , classNameDeclarator] =
102+
firstRelevantParentPath.parent.declarations;
103+
104+
if (
105+
t.isCallExpression(themeDeclarator.init) &&
106+
t.isIdentifier(themeDeclarator.init.callee, { name: 'createTheme' }) &&
107+
t.isVariableDeclarator(classNameDeclarator) &&
108+
t.isIdentifier(classNameDeclarator.id)
109+
) {
110+
return classNameDeclarator.id.name;
111+
}
112+
}
113+
90114
const relevantParent = firstRelevantParentPath.node;
91115

92116
if (

0 commit comments

Comments
 (0)