@@ -8,58 +8,86 @@ const featureFlags = {
8
8
9
9
export function flagEnabled ( config , flag ) {
10
10
if ( featureFlags . future . includes ( flag ) ) {
11
- return _ . get ( config , [ 'future' , flag ] , false )
11
+ return config . future === 'all' || _ . get ( config , [ 'future' , flag ] , false )
12
12
}
13
13
14
14
if ( featureFlags . experimental . includes ( flag ) ) {
15
- return _ . get ( config , [ 'experimental' , flag ] , false )
15
+ return config . experimental === 'all' || _ . get ( config , [ 'experimental' , flag ] , false )
16
16
}
17
17
18
18
return false
19
19
}
20
20
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
+
21
49
export function issueFlagNotices ( config ) {
22
50
const log = {
23
51
info ( message ) {
24
- console . log ( chalk . bold . cyan ( ' info' ) , '-' , message )
52
+ console . log ( chalk . bold . cyan ( 'info' ) , '-' , message )
25
53
} ,
26
54
warn ( message ) {
27
- console . log ( chalk . bold . yellow ( ' warn' ) , '-' , message )
55
+ console . log ( chalk . bold . yellow ( 'warn' ) , '-' , message )
28
56
} ,
29
57
risk ( message ) {
30
- console . log ( chalk . bold . magenta ( ' risk' ) , '-' , message )
58
+ console . log ( chalk . bold . magenta ( 'risk' ) , '-' , message )
31
59
} ,
32
60
}
33
61
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 )
37
64
. map ( s => chalk . cyan ( s ) )
38
65
. join ( ', ' )
66
+
39
67
console . log ( )
40
68
log . info ( `You have opted-in to future-facing breaking changes: ${ changes } ` )
41
69
log . info (
42
70
'These changes are stable and will be the default behavior in the next major version of Tailwind.'
43
71
)
44
72
}
45
73
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 )
49
76
. map ( s => chalk . yellow ( s ) )
50
77
. join ( ', ' )
78
+
51
79
console . log ( )
52
80
log . warn ( `You have enabled experimental features: ${ changes } ` )
53
81
log . warn (
54
82
'Experimental features are not covered by semver, may introduce breaking changes, and can change at any time.'
55
83
)
56
84
}
57
85
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 )
61
88
. map ( s => chalk . magenta ( s ) )
62
89
. join ( ', ' )
90
+
63
91
console . log ( )
64
92
log . risk ( `There are upcoming breaking changes: ${ changes } ` )
65
93
log . risk (
0 commit comments