Skip to content

Commit 80ad8a4

Browse files
committed
Support 'all' keyword for feature flags
1 parent cafbc65 commit 80ad8a4

File tree

1 file changed

+42
-14
lines changed

1 file changed

+42
-14
lines changed

src/featureFlags.js

Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,58 +8,86 @@ const featureFlags = {
88

99
export function flagEnabled(config, flag) {
1010
if (featureFlags.future.includes(flag)) {
11-
return _.get(config, ['future', flag], false)
11+
return config.future === 'all' || _.get(config, ['future', flag], false)
1212
}
1313

1414
if (featureFlags.experimental.includes(flag)) {
15-
return _.get(config, ['experimental', flag], false)
15+
return config.experimental === 'all' || _.get(config, ['experimental', flag], false)
1616
}
1717

1818
return false
1919
}
2020

21+
function futureFlagsEnabled(config) {
22+
if (config.future === 'all') {
23+
return featureFlags.future
24+
}
25+
26+
return Object.keys(_.get(config, 'future', {})).filter(
27+
flag => featureFlags.future.includes(flag) && config.future[flag]
28+
)
29+
}
30+
31+
function experimentalFlagsEnabled(config) {
32+
if (config.experimental === 'all') {
33+
return featureFlags.experimental
34+
}
35+
36+
return Object.keys(_.get(config, 'experimental', {})).filter(
37+
flag => featureFlags.experimental.includes(flag) && config.experimental[flag]
38+
)
39+
}
40+
41+
function futureFlagsAvailable(config) {
42+
if (config.future === 'all') {
43+
return []
44+
}
45+
46+
return featureFlags.future.filter(flag => !_.has(config, ['future', flag]))
47+
}
48+
2149
export function issueFlagNotices(config) {
2250
const log = {
2351
info(message) {
24-
console.log(chalk.bold.cyan(' info'), '-', message)
52+
console.log(chalk.bold.cyan('info'), '-', message)
2553
},
2654
warn(message) {
27-
console.log(chalk.bold.yellow(' warn'), '-', message)
55+
console.log(chalk.bold.yellow('warn'), '-', message)
2856
},
2957
risk(message) {
30-
console.log(chalk.bold.magenta(' risk'), '-', message)
58+
console.log(chalk.bold.magenta('risk'), '-', message)
3159
},
3260
}
3361

34-
if (_.some(featureFlags.future, flag => _.get(config, ['future', flag], false))) {
35-
const changes = Object.keys(config.future)
36-
.filter(flag => featureFlags.future.includes(flag) && config.future[flag])
62+
if (futureFlagsEnabled(config).length > 0) {
63+
const changes = futureFlagsEnabled(config)
3764
.map(s => chalk.cyan(s))
3865
.join(', ')
66+
3967
console.log()
4068
log.info(`You have opted-in to future-facing breaking changes: ${changes}`)
4169
log.info(
4270
'These changes are stable and will be the default behavior in the next major version of Tailwind.'
4371
)
4472
}
4573

46-
if (_.some(featureFlags.experimental, flag => _.get(config, ['experimental', flag], false))) {
47-
const changes = Object.keys(config.experimental)
48-
.filter(flag => featureFlags.experimental.includes(flag) && config.experimental[flag])
74+
if (experimentalFlagsEnabled(config).length > 0) {
75+
const changes = experimentalFlagsEnabled(config)
4976
.map(s => chalk.yellow(s))
5077
.join(', ')
78+
5179
console.log()
5280
log.warn(`You have enabled experimental features: ${changes}`)
5381
log.warn(
5482
'Experimental features are not covered by semver, may introduce breaking changes, and can change at any time.'
5583
)
5684
}
5785

58-
if (Object.keys(_.get(config, 'future', {})).length < featureFlags.future.length) {
59-
const changes = featureFlags.future
60-
.filter(flag => !_.has(config, ['future', flag]))
86+
if (futureFlagsAvailable(config).length > 0) {
87+
const changes = futureFlagsAvailable(config)
6188
.map(s => chalk.magenta(s))
6289
.join(', ')
90+
6391
console.log()
6492
log.risk(`There are upcoming breaking changes: ${changes}`)
6593
log.risk(

0 commit comments

Comments
 (0)