Skip to content

Commit

Permalink
chore: improving types for config (#635)
Browse files Browse the repository at this point in the history
* chore: improving types for config

* move type outside

---------

Co-authored-by: Sébastien Chopin <seb@nuxt.com>
  • Loading branch information
ineshbose and Atinux committed Mar 21, 2023
1 parent de2e45d commit af1f613
Showing 1 changed file with 14 additions and 19 deletions.
33 changes: 14 additions & 19 deletions src/module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import {
addVitePlugin,
isNuxt3, findPath, requireModule
} from '@nuxt/kit'
import { Config } from 'tailwindcss'
import type { Config } from 'tailwindcss'
import { eventHandler, sendRedirect } from 'h3'
import { name, version } from '../package.json'
import vitePlugin from './hmr'
Expand All @@ -38,12 +38,14 @@ const layerPaths = (srcDir: string) => ([
`${srcDir}/error.{js,ts,vue}`
])

export interface ModuleHooks {
'tailwindcss:config': (tailwindConfig: any) => void
}

type Arrayable<T> = T | T[]

declare module '@nuxt/schema' {
interface NuxtHooks {
'tailwindcss:config': (tailwindConfig: Config) => void
}
}

interface ExtendTailwindConfig {
content: Config['content'] | ((contentDefaults: string[]) => Config['content']);
}
Expand Down Expand Up @@ -101,15 +103,9 @@ export default defineNuxtModule<ModuleOptions>({

// Support `extends` directories
if (nuxt.options._layers && nuxt.options._layers.length > 1) {
interface NuxtLayer {
config: any
configFile: string
cwd: string
}

// nuxt.options._layers is from rootDir to nested level
// We need to reverse the order to give the deepest tailwind.config the lowest priority
const layers = (nuxt.options._layers as NuxtLayer[]).slice().reverse()
const layers = nuxt.options._layers.slice().reverse()
for (const layer of layers) {
await addConfigPath(layer?.config?.tailwindcss?.configPath || join(layer.cwd, 'tailwind.config'))
contentPaths.push(...layerPaths(layer.cwd))
Expand Down Expand Up @@ -138,10 +134,10 @@ export default defineNuxtModule<ModuleOptions>({
}

// Default tailwind config
let tailwindConfig: any = defuArrayFn(moduleOptions.config, { content: contentPaths })
let tailwindConfig = defuArrayFn(moduleOptions.config, { content: contentPaths }) as Config
// Recursively resolve each config and merge tailwind configs together.
for (const configPath of configPaths) {
let _tailwindConfig
let _tailwindConfig: Config | undefined
try {
_tailwindConfig = requireModule(configPath, { clearCache: true })
} catch (e) {
Expand All @@ -158,12 +154,12 @@ export default defineNuxtModule<ModuleOptions>({
}

// Write cjs version of config to support vscode extension
const resolveConfig: any = await import('tailwindcss/resolveConfig.js').then(r => r.default || r)
const resolvedConfig = resolveConfig(tailwindConfig)
const resolveConfig = await import('tailwindcss/resolveConfig.js').then(r => r.default || r)
const resolvedConfig = resolveConfig(tailwindConfig) as Config
// Avoid creating null plugins for intelisense
resolvedConfig.plugins = []
resolvedConfig.presets = resolvedConfig.presets.map(
(preset: any) => preset?.plugins ? { ...preset, plugins: [] } : preset
resolvedConfig.presets = (resolvedConfig.presets || []).map(
preset => preset?.plugins ? { ...preset, plugins: [] } : preset
)
addTemplate({
filename: 'tailwind.config.cjs',
Expand All @@ -178,7 +174,6 @@ export default defineNuxtModule<ModuleOptions>({
}

// Allow extending tailwindcss config by other modules
// @ts-ignore
await nuxt.callHook('tailwindcss:config', tailwindConfig)

// Compute tailwindConfig hash
Expand Down

0 comments on commit af1f613

Please sign in to comment.