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