No Description

featureFlags.js 1.7KB

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