Skip to content

Commit 09c0aab

Browse files
Include simple config objects when extracting static plugins
1 parent ec24b7a commit 09c0aab

File tree

3 files changed

+376
-53
lines changed

3 files changed

+376
-53
lines changed

packages/@tailwindcss-upgrade/src/migrate-js-config.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { deepMerge } from '../../tailwindcss/src/compat/config/deep-merge'
1414
import { mergeThemeExtension } from '../../tailwindcss/src/compat/config/resolve-config'
1515
import type { ThemeConfig } from '../../tailwindcss/src/compat/config/types'
1616
import { darkModePlugin } from '../../tailwindcss/src/compat/dark-mode'
17-
import { findStaticPlugins } from './utils/extract-static-plugins'
17+
import { findStaticPlugins, type StaticPluginOptions } from './utils/extract-static-plugins'
1818
import { info } from './utils/renderer'
1919

2020
const __filename = fileURLToPath(import.meta.url)
@@ -45,7 +45,7 @@ export async function migrateJsConfig(
4545
}
4646

4747
let sources: { base: string; pattern: string }[] = []
48-
let plugins: { base: string; path: string }[] = []
48+
let plugins: { base: string; path: string; options: null | StaticPluginOptions }[] = []
4949
let cssConfigs: string[] = []
5050

5151
if ('darkMode' in unresolvedConfig) {
@@ -63,8 +63,8 @@ export async function migrateJsConfig(
6363

6464
let simplePlugins = findStaticPlugins(source)
6565
if (simplePlugins !== null) {
66-
for (let plugin of simplePlugins) {
67-
plugins.push({ base, path: plugin })
66+
for (let [path, options] of simplePlugins) {
67+
plugins.push({ base, path, options })
6868
}
6969
}
7070

packages/@tailwindcss-upgrade/src/utils/extract-static-plugins.test.ts

Lines changed: 159 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,12 @@ describe('findStaticPlugins', () => {
1515
plugins: [plugin1, plugin2, 'plugin3', require('./plugin4')]
1616
}
1717
`),
18-
).toEqual(['./plugin1', './plugin2', 'plugin3', './plugin4'])
18+
).toEqual([
19+
['./plugin1', null],
20+
['./plugin2', null],
21+
['plugin3', null],
22+
['./plugin4', null],
23+
])
1924

2025
expect(
2126
findStaticPlugins(js`
@@ -26,7 +31,12 @@ describe('findStaticPlugins', () => {
2631
plugins: [plugin1, plugin2, 'plugin3', require('./plugin4')]
2732
} as any
2833
`),
29-
).toEqual(['./plugin1', './plugin2', 'plugin3', './plugin4'])
34+
).toEqual([
35+
['./plugin1', null],
36+
['./plugin2', null],
37+
['plugin3', null],
38+
['./plugin4', null],
39+
])
3040

3141
expect(
3242
findStaticPlugins(js`
@@ -37,7 +47,12 @@ describe('findStaticPlugins', () => {
3747
plugins: [plugin1, plugin2, 'plugin3', require('./plugin4')]
3848
} satisfies any
3949
`),
40-
).toEqual(['./plugin1', './plugin2', 'plugin3', './plugin4'])
50+
).toEqual([
51+
['./plugin1', null],
52+
['./plugin2', null],
53+
['plugin3', null],
54+
['./plugin4', null],
55+
])
4156

4257
expect(
4358
findStaticPlugins(js`
@@ -47,7 +62,11 @@ describe('findStaticPlugins', () => {
4762
plugins: [plugin1, 'plugin2', require('./plugin3')]
4863
} as any
4964
`),
50-
).toEqual(['./plugin1', 'plugin2', './plugin3'])
65+
).toEqual([
66+
['./plugin1', null],
67+
['plugin2', null],
68+
['./plugin3', null],
69+
])
5170

5271
expect(
5372
findStaticPlugins(js`
@@ -57,7 +76,11 @@ describe('findStaticPlugins', () => {
5776
plugins: [plugin1, 'plugin2', require('./plugin3')]
5877
} satisfies any
5978
`),
60-
).toEqual(['./plugin1', 'plugin2', './plugin3'])
79+
).toEqual([
80+
['./plugin1', null],
81+
['plugin2', null],
82+
['./plugin3', null],
83+
])
6184

6285
expect(
6386
findStaticPlugins(js`
@@ -67,7 +90,87 @@ describe('findStaticPlugins', () => {
6790
plugins: [plugin1, 'plugin2', require('./plugin3')]
6891
}
6992
`),
70-
).toEqual(['./plugin1', 'plugin2', './plugin3'])
93+
).toEqual([
94+
['./plugin1', null],
95+
['plugin2', null],
96+
['./plugin3', null],
97+
])
98+
})
99+
100+
test('can extract plugin options', () => {
101+
expect(
102+
findStaticPlugins(js`
103+
import plugin1 from './plugin1'
104+
import * as plugin2 from './plugin2'
105+
106+
export default {
107+
plugins: [
108+
plugin1({
109+
foo: 'bar',
110+
}),
111+
plugin2({
112+
foo: 'bar',
113+
}),
114+
require('./plugin3')({
115+
foo: 'bar',
116+
}),
117+
]
118+
}
119+
`),
120+
).toEqual([
121+
['./plugin1', { foo: 'bar' }],
122+
['./plugin2', { foo: 'bar' }],
123+
['./plugin3', { foo: 'bar' }],
124+
])
125+
})
126+
127+
test('can extract all supported data types', () => {
128+
expect(
129+
findStaticPlugins(js`
130+
import plugin from 'plugin'
131+
132+
export default {
133+
plugins: [
134+
plugin({
135+
'is-arr-mixed': [null, true, false, 1234567, 1.35, 'foo', 'bar', 'true'],
136+
'is-arr': ['foo', 'bar'],
137+
'is-null': null,
138+
'is-true': true,
139+
'is-false': false,
140+
'is-int': 1234567,
141+
'is-float': 1.35,
142+
'is-sci': 1.35e-5,
143+
'is-str-null': 'null',
144+
'is-str-true': 'true',
145+
'is-str-false': 'false',
146+
'is-str-int': '1234567',
147+
'is-str-float': '1.35',
148+
'is-str-sci': '1.35e-5',
149+
}),
150+
]
151+
}
152+
`),
153+
).toEqual([
154+
[
155+
'plugin',
156+
{
157+
'is-arr-mixed': [null, true, false, 1234567, 1.35, 'foo', 'bar', 'true'],
158+
'is-arr': ['foo', 'bar'],
159+
'is-null': null,
160+
'is-true': true,
161+
'is-false': false,
162+
'is-int': 1234567,
163+
'is-float': 1.35,
164+
'is-sci': 1.35e-5,
165+
'is-str-null': 'null',
166+
'is-str-true': 'true',
167+
'is-str-false': 'false',
168+
'is-str-int': '1234567',
169+
'is-str-float': '1.35',
170+
'is-str-sci': '1.35e-5',
171+
},
172+
],
173+
])
71174
})
72175

73176
test('bails out on inline plugins', () => {
@@ -114,21 +217,67 @@ describe('findStaticPlugins', () => {
114217
).toEqual(null)
115218
})
116219

117-
test('bails for plugins with options', () => {
220+
test('bails on invalid plugin options', () => {
118221
expect(
119222
findStaticPlugins(js`
120-
import plugin1 from './plugin1'
223+
import plugin from './plugin'
224+
225+
export default {
226+
plugins: [
227+
plugin({ foo }),
228+
]
229+
}
230+
`),
231+
).toEqual(null)
232+
233+
expect(
234+
findStaticPlugins(js`
235+
import plugin from './plugin'
121236
122237
export default {
123-
plugins: [plugin1({foo:'bar'})]
238+
plugins: [
239+
plugin(),
240+
]
124241
}
125242
`),
126243
).toEqual(null)
127244

128245
expect(
129246
findStaticPlugins(js`
247+
import plugin from './plugin'
248+
249+
export default {
250+
plugins: [
251+
plugin({ foo: { bar: 2 } }),
252+
]
253+
}
254+
`),
255+
).toEqual(null)
256+
257+
expect(
258+
findStaticPlugins(js`
259+
import plugin from './plugin'
260+
261+
const OPTIONS = { foo: 1 }
262+
263+
export default {
264+
plugins: [
265+
plugin(OPTIONS),
266+
]
267+
}
268+
`),
269+
).toEqual(null)
270+
271+
expect(
272+
findStaticPlugins(js`
273+
import plugin from './plugin'
274+
275+
let something = 1
276+
130277
export default {
131-
plugins: [require('@tailwindcss/typography')({foo:'bar'})]
278+
plugins: [
279+
plugin({ foo: something }),
280+
]
132281
}
133282
`),
134283
).toEqual(null)

0 commit comments

Comments
 (0)