UNPKG

1.64 kBJavaScriptView Raw
1import colors from 'picocolors'
2import log from './util/log'
3
4let defaults = {
5 optimizeUniversalDefaults: false,
6 generalizedModifiers: true,
7}
8
9let featureFlags = {
10 future: [
11 'hoverOnlyWhenSupported',
12 'respectDefaultRingColorOpacity',
13 'disableColorOpacityUtilitiesByDefault',
14 'relativeContentPathsByDefault',
15 ],
16 experimental: [
17 'optimizeUniversalDefaults',
18 'generalizedModifiers',
19 // 'variantGrouping',
20 ],
21}
22
23export function flagEnabled(config, flag) {
24 if (featureFlags.future.includes(flag)) {
25 return config.future === 'all' || (config?.future?.[flag] ?? defaults[flag] ?? false)
26 }
27
28 if (featureFlags.experimental.includes(flag)) {
29 return (
30 config.experimental === 'all' || (config?.experimental?.[flag] ?? defaults[flag] ?? false)
31 )
32 }
33
34 return false
35}
36
37function experimentalFlagsEnabled(config) {
38 if (config.experimental === 'all') {
39 return featureFlags.experimental
40 }
41
42 return Object.keys(config?.experimental ?? {}).filter(
43 (flag) => featureFlags.experimental.includes(flag) && config.experimental[flag]
44 )
45}
46
47export function issueFlagNotices(config) {
48 if (process.env.JEST_WORKER_ID !== undefined) {
49 return
50 }
51
52 if (experimentalFlagsEnabled(config).length > 0) {
53 let changes = experimentalFlagsEnabled(config)
54 .map((s) => colors.yellow(s))
55 .join(', ')
56
57 log.warn('experimental-flags-enabled', [
58 `You have enabled experimental features: ${changes}`,
59 'Experimental features in Tailwind CSS are not covered by semver, may introduce breaking changes, and can change at any time.',
60 ])
61 }
62}
63
64export default featureFlags