mirror of
https://github.com/tailwindlabs/tailwindcss.git
synced 2025-12-08 21:36:08 +00:00
* add generate-types script This script will generate the full list of core plugins, which will allow you to get code completion for the `corePlugins` section. It will also generate all the colors (and deprecated colors) which is used in multiple places in the config. * add types for the `tailwind.config.js` config file * annotate stubs with a JSDoc pointing to the types * add types to package.json - Updated the files to make sure that the types are being published - Add a `types` section in the `package.json`, otherwise your editor by default will look for the `DefinitelyTyped` types which got me really confused for a second. - Added some scripts to make sure that the generation of types happens when needed (before tests and before building). This way you never ever have to think about generating them when working on Tailwind CSS internals. * re-export types top-level Having a `colors.d.ts` next to the `colors.js` file allows us to type the `colors.js` file and your editor will pickup the types from `colors.d.ts`. * also publish generated types * update changelog * enable TypeScript only when using `init --types` for now * update tests to verify that `--types` works
53 lines
1.5 KiB
JavaScript
53 lines
1.5 KiB
JavaScript
import prettier from 'prettier'
|
|
import { corePlugins } from '../src/corePlugins'
|
|
import colors from '../src/public/colors'
|
|
import fs from 'fs'
|
|
import path from 'path'
|
|
|
|
fs.writeFileSync(
|
|
path.join(process.cwd(), 'types', 'generated', 'corePluginList.d.ts'),
|
|
`export type CorePluginList = ${Object.keys(corePlugins)
|
|
.map((p) => `'${p}'`)
|
|
.join(' | ')}`
|
|
)
|
|
|
|
let colorsWithoutDeprecatedColors = Object.fromEntries(
|
|
Object.entries(Object.getOwnPropertyDescriptors(colors))
|
|
.filter(([_, { value }]) => {
|
|
return typeof value !== 'undefined'
|
|
})
|
|
.map(([name, definition]) => [name, definition.value])
|
|
)
|
|
|
|
let deprecatedColors = Object.entries(Object.getOwnPropertyDescriptors(colors))
|
|
.filter(([_, { value }]) => {
|
|
return typeof value === 'undefined'
|
|
})
|
|
.map(([name, definition]) => {
|
|
let warn = console.warn
|
|
let messages = []
|
|
console.warn = (...args) => messages.push(args.pop())
|
|
definition.get()
|
|
console.warn = warn
|
|
let message = messages.join(' ').trim()
|
|
let newColor = message.match(/renamed to `(.*)`/)[1]
|
|
return `/** @deprecated ${message} */${name}: DefaultColors['${newColor}'],`
|
|
})
|
|
.join('\n')
|
|
|
|
fs.writeFileSync(
|
|
path.join(process.cwd(), 'types', 'generated', 'colors.d.ts'),
|
|
prettier.format(
|
|
`export interface DefaultColors { ${JSON.stringify(colorsWithoutDeprecatedColors).slice(
|
|
1,
|
|
-1
|
|
)}\n${deprecatedColors}\n}`,
|
|
{
|
|
semi: false,
|
|
singleQuote: true,
|
|
printWidth: 100,
|
|
parser: 'typescript',
|
|
}
|
|
)
|
|
)
|