Skip to content

Commit

Permalink
🩹 fix(patch): fix #2639
Browse files Browse the repository at this point in the history
  • Loading branch information
kellymears committed Aug 19, 2024
1 parent 8defe34 commit 6938f59
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 19 deletions.
6 changes: 5 additions & 1 deletion sources/@roots/bud-tailwindcss/src/extension/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,11 @@ class BudTailwindCss extends BudTailwindOptionsApi {
*/
@bind
public override async configAfter(bud: Bud) {
bud.postcss.setPluginOptions(`tailwindcss`, this.resolveConfig())
bud.postcss.setPluginOptions(
`tailwindcss`,
// @ts-ignore
this.editedConfig ? this.resolveConfig() : this.configPath,
)
}

/**
Expand Down
44 changes: 26 additions & 18 deletions sources/@roots/bud-tailwindcss/src/extension/options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ type BudTailwindOptionsPublicInterface = {
],
})),
configPath: undefined,
resolvedConfig: undefined,
})
class BudTailwindOptionsApi
extends Extension<Options>
Expand All @@ -65,30 +64,29 @@ class BudTailwindOptionsApi
* Tailwind config
*/
public declare config: BudTailwindOptionsPublicInterface[`config`]
public declare getConfig: BudTailwindOptionsPublicInterface[`getConfig`]
public declare setConfig: BudTailwindOptionsPublicInterface[`setConfig`]

/**
* Tailwind config path
*/
public declare configPath: BudTailwindOptionsPublicInterface[`configPath`]
public declare getConfig: BudTailwindOptionsPublicInterface[`getConfig`]

public declare getConfigPath: BudTailwindOptionsPublicInterface[`getConfigPath`]
public declare getResolvedConfig: BudTailwindOptionsPublicInterface[`getResolvedConfig`]
public declare setConfigPath: BudTailwindOptionsPublicInterface[`setConfigPath`]

/**
* Tailwind config (resolved)
* Flag if config has been edited
*/
public declare resolvedConfig: BudTailwindOptionsPublicInterface[`resolvedConfig`]

public declare setConfig: BudTailwindOptionsPublicInterface[`setConfig`]
public declare setConfigPath: BudTailwindOptionsPublicInterface[`setConfigPath`]
public declare setResolvedConfig: BudTailwindOptionsPublicInterface[`setResolvedConfig`]
public editedConfig: boolean = false

@bind
public extendTheme<
K extends `${keyof ThemeConfig & string}` | undefined,
V extends Partial<ThemeConfig>,
VK extends Partial<ThemeConfig>[K],
>(...params: [K, VK] | [V]) {
this.editedConfig = true

if (params.length === 1) {
const [value] = params

Expand Down Expand Up @@ -143,25 +141,31 @@ class BudTailwindOptionsApi
>
| boolean = true,
) {
const makeStaticModule = (key: `${keyof ThemeConfig & string}`) => {
const makeStaticModule = (
resolvedConfig: Options[`resolvedConfig`],
key: `${keyof Options[`resolvedConfig`][`theme`]}`,
) => {
this.logger.log(`@tailwind/${key}`, `generating module`)

const value = get(this.resolvedConfig.theme, key)
const value = get(resolvedConfig.theme, key)
return `export default ${JSON.stringify(value)};`
}

this.app.hooks.action(`config.after`, async bud => {
this.resolveConfig()
const config = this.resolveConfig()

const importableKeys = Array.isArray(imports)
? imports
: Object.keys(this.resolvedConfig.theme)
: Object.keys(config.theme)

const modules = importableKeys.reduce(
(acc, key) => ({
...acc,
[bud.path(`@src`, `__bud`, `@tailwind`, `${key}.mjs`)]:
makeStaticModule(key as `${keyof ThemeConfig & string}`),
makeStaticModule(
config,
key as `${keyof Options[`resolvedConfig`][`theme`]}`,
),
}),
{},
)
Expand Down Expand Up @@ -203,8 +207,7 @@ class BudTailwindOptionsApi

@bind
public resolveConfig() {
this.setResolvedConfig({...resolveConfig({...this.config})})
return this.resolvedConfig
return {...resolveConfig({...this.config})}
}

/**
Expand Down Expand Up @@ -245,12 +248,16 @@ class BudTailwindOptionsApi

@bind
public setContent(content: Config[`content`]) {
this.editedConfig = true

this.setConfig((config = {content: []}) => ({...config, content}))
return this
}

@bind
public setPlugins(plugins: Config[`plugins`]) {
this.editedConfig = true

this.setConfig((config = {content: []}) => ({
...config,
plugins,
Expand All @@ -268,6 +275,8 @@ class BudTailwindOptionsApi
| ((theme: Partial<ThemeConfig>[K]) => Partial<ThemeConfig>[K])
| Partial<ThemeConfig>[K],
>(...params: [K, VK] | [V]) {
this.editedConfig = true

if (params.length === 1) {
const [value] = params
this.setConfig((config = {content: []}) => ({
Expand Down Expand Up @@ -296,7 +305,6 @@ class BudTailwindOptionsApi

config.path && this.setConfigPath(config.path)
config.module && this.setConfig({...(await config.module())})
this.resolveConfig()
} catch (error) {
this.logger.error(error)
}
Expand Down

0 comments on commit 6938f59

Please sign in to comment.