tailwindcss/packages/@tailwindcss-node/src/esm-cache.loader.mts
Jordan Pittman 52012d90d7
Support loading config files via @config (#14239)
In Tailwind v4 the CSS file is the main entry point to your project and
is generally configured via `@theme`. However, given that all v3
projects were configured via a `tailwind.config.js` file we definitely
need to support those. This PR adds support for loading existing
Tailwind config files by adding an `@config` directive to the CSS —
similar to how v3 supported multiple config files except that this is
now _required_ to use a config file.

You can load a config file like so:

```
@import "tailwindcss";
@config "./path/to/tailwind.config.js";
```

A few notes:
- Both CommonJS and ESM config files are supported (loaded directly via
`import()` in Node)
- This is not yet supported in Intellisense or Prettier — should
hopefully land next week
- TypeScript is **not yet** supported in the config file — this will be
handled in a future PR.

---------

Co-authored-by: Philipp Spiess <hello@philippspiess.com>
Co-authored-by: Adam Wathan <adam.wathan@gmail.com>
Co-authored-by: Robin Malfait <malfait.robin@gmail.com>
2024-09-02 18:03:16 +02:00

23 lines
563 B
TypeScript

import { isBuiltin, type ResolveHook } from 'node:module'
export let resolve: ResolveHook = async (specifier, context, nextResolve) => {
let result = await nextResolve(specifier, context)
if (result.url === import.meta.url) return result
if (isBuiltin(result.url)) return result
if (!context.parentURL) return result
let parent = new URL(context.parentURL)
let id = parent.searchParams.get('id')
if (id === null) return result
let url = new URL(result.url)
url.searchParams.set('id', id)
return {
...result,
url: `${url}`,
}
}