tailwindcss 0.0.0-insiders.ea139f2 → 0.0.0-insiders.ea4e1cd

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. package/LICENSE +1 -2
  2. package/README.md +15 -7
  3. package/colors.d.ts +3 -0
  4. package/colors.js +2 -1
  5. package/defaultConfig.d.ts +3 -0
  6. package/defaultConfig.js +2 -1
  7. package/defaultTheme.d.ts +4 -0
  8. package/defaultTheme.js +2 -1
  9. package/lib/cli/build/deps.js +62 -0
  10. package/lib/cli/build/index.js +54 -0
  11. package/lib/cli/build/plugin.js +378 -0
  12. package/lib/cli/build/utils.js +88 -0
  13. package/lib/cli/build/watching.js +182 -0
  14. package/lib/cli/help/index.js +73 -0
  15. package/lib/cli/index.js +230 -0
  16. package/lib/cli/init/index.js +63 -0
  17. package/lib/cli-peer-dependencies.js +28 -7
  18. package/lib/cli.js +4 -703
  19. package/lib/corePluginList.js +12 -3
  20. package/lib/corePlugins.js +2373 -1863
  21. package/lib/css/preflight.css +10 -8
  22. package/lib/featureFlags.js +49 -26
  23. package/lib/index.js +1 -31
  24. package/lib/lib/cacheInvalidation.js +92 -0
  25. package/lib/lib/collapseAdjacentRules.js +30 -10
  26. package/lib/lib/collapseDuplicateDeclarations.js +60 -4
  27. package/lib/lib/content.js +181 -0
  28. package/lib/lib/defaultExtractor.js +243 -0
  29. package/lib/lib/detectNesting.js +21 -10
  30. package/lib/lib/evaluateTailwindFunctions.js +115 -50
  31. package/lib/lib/expandApplyAtRules.js +467 -161
  32. package/lib/lib/expandTailwindAtRules.js +160 -133
  33. package/lib/lib/findAtConfigPath.js +46 -0
  34. package/lib/lib/generateRules.js +553 -200
  35. package/lib/lib/getModuleDependencies.js +88 -37
  36. package/lib/lib/load-config.js +42 -0
  37. package/lib/lib/normalizeTailwindDirectives.js +46 -33
  38. package/lib/lib/offsets.js +306 -0
  39. package/lib/lib/partitionApplyAtRules.js +58 -0
  40. package/lib/lib/regex.js +74 -0
  41. package/lib/lib/remap-bitfield.js +89 -0
  42. package/lib/lib/resolveDefaultsAtRules.js +98 -58
  43. package/lib/lib/setupContextUtils.js +773 -321
  44. package/lib/lib/setupTrackingContext.js +70 -75
  45. package/lib/lib/sharedState.js +78 -10
  46. package/lib/lib/substituteScreenAtRules.js +14 -10
  47. package/lib/oxide/cli/build/deps.js +89 -0
  48. package/lib/oxide/cli/build/index.js +53 -0
  49. package/lib/oxide/cli/build/plugin.js +375 -0
  50. package/lib/oxide/cli/build/utils.js +87 -0
  51. package/lib/oxide/cli/build/watching.js +179 -0
  52. package/lib/oxide/cli/help/index.js +72 -0
  53. package/lib/oxide/cli/index.js +214 -0
  54. package/lib/oxide/cli/init/index.js +52 -0
  55. package/lib/oxide/cli.js +5 -0
  56. package/lib/oxide/postcss-plugin.js +2 -0
  57. package/lib/plugin.js +98 -0
  58. package/{nesting → lib/postcss-plugins/nesting}/README.md +2 -2
  59. package/lib/postcss-plugins/nesting/index.js +21 -0
  60. package/lib/postcss-plugins/nesting/plugin.js +89 -0
  61. package/lib/processTailwindFeatures.js +39 -26
  62. package/lib/public/colors.js +272 -246
  63. package/lib/public/create-plugin.js +9 -5
  64. package/lib/public/default-config.js +10 -6
  65. package/lib/public/default-theme.js +10 -6
  66. package/lib/public/load-config.js +12 -0
  67. package/lib/public/resolve-config.js +11 -6
  68. package/lib/util/applyImportantSelector.js +36 -0
  69. package/lib/util/bigSign.js +6 -1
  70. package/lib/util/buildMediaQuery.js +13 -6
  71. package/lib/util/cloneDeep.js +9 -6
  72. package/lib/util/cloneNodes.js +23 -3
  73. package/lib/util/color.js +70 -38
  74. package/lib/util/colorNames.js +752 -0
  75. package/lib/util/configurePlugins.js +7 -2
  76. package/lib/util/createPlugin.js +8 -6
  77. package/lib/util/createUtilityPlugin.js +16 -16
  78. package/lib/util/dataTypes.js +173 -108
  79. package/lib/util/defaults.js +14 -3
  80. package/lib/util/escapeClassName.js +13 -8
  81. package/lib/util/escapeCommas.js +7 -2
  82. package/lib/util/flattenColorPalette.js +11 -12
  83. package/lib/util/formatVariantSelector.js +228 -151
  84. package/lib/util/getAllConfigs.js +33 -12
  85. package/lib/util/hashConfig.js +9 -4
  86. package/lib/util/isKeyframeRule.js +7 -2
  87. package/lib/util/isPlainObject.js +7 -2
  88. package/lib/util/{isValidArbitraryValue.js → isSyntacticallyValidPropertyValue.js} +25 -15
  89. package/lib/util/log.js +27 -13
  90. package/lib/util/nameClass.js +27 -10
  91. package/lib/util/negateValue.js +25 -8
  92. package/lib/util/normalizeConfig.js +139 -65
  93. package/lib/util/normalizeScreens.js +131 -11
  94. package/lib/util/parseAnimationValue.js +44 -40
  95. package/lib/util/parseBoxShadowValue.js +34 -23
  96. package/lib/util/parseDependency.js +39 -55
  97. package/lib/util/parseGlob.js +36 -0
  98. package/lib/util/parseObjectStyles.js +15 -10
  99. package/lib/util/pluginUtils.js +159 -69
  100. package/lib/util/prefixSelector.js +30 -12
  101. package/lib/util/pseudoElements.js +229 -0
  102. package/lib/util/removeAlphaVariables.js +31 -0
  103. package/lib/util/resolveConfig.js +97 -75
  104. package/lib/util/resolveConfigPath.js +30 -12
  105. package/lib/util/responsive.js +11 -6
  106. package/lib/util/splitAtTopLevelOnly.js +51 -0
  107. package/lib/util/tap.js +6 -1
  108. package/lib/util/toColorValue.js +7 -3
  109. package/lib/util/toPath.js +26 -3
  110. package/lib/util/transformThemeValue.js +40 -30
  111. package/lib/util/validateConfig.js +37 -0
  112. package/lib/util/validateFormalSyntax.js +26 -0
  113. package/lib/util/withAlphaVariable.js +27 -15
  114. package/loadConfig.d.ts +4 -0
  115. package/loadConfig.js +2 -0
  116. package/nesting/index.js +2 -12
  117. package/package.json +66 -57
  118. package/peers/index.js +75964 -55560
  119. package/plugin.d.ts +11 -0
  120. package/plugin.js +2 -1
  121. package/resolveConfig.d.ts +12 -0
  122. package/resolveConfig.js +2 -1
  123. package/scripts/generate-types.js +105 -0
  124. package/scripts/release-channel.js +18 -0
  125. package/scripts/release-notes.js +21 -0
  126. package/scripts/swap-engines.js +40 -0
  127. package/scripts/type-utils.js +27 -0
  128. package/src/cli/build/deps.js +56 -0
  129. package/src/cli/build/index.js +49 -0
  130. package/src/cli/build/plugin.js +444 -0
  131. package/src/cli/build/utils.js +76 -0
  132. package/src/cli/build/watching.js +229 -0
  133. package/src/cli/help/index.js +70 -0
  134. package/src/cli/index.js +216 -0
  135. package/src/cli/init/index.js +79 -0
  136. package/src/cli-peer-dependencies.js +7 -1
  137. package/src/cli.js +4 -765
  138. package/src/corePluginList.js +1 -1
  139. package/src/corePlugins.js +786 -306
  140. package/src/css/preflight.css +10 -8
  141. package/src/featureFlags.js +21 -5
  142. package/src/index.js +1 -34
  143. package/src/lib/cacheInvalidation.js +52 -0
  144. package/src/lib/collapseAdjacentRules.js +21 -2
  145. package/src/lib/collapseDuplicateDeclarations.js +66 -1
  146. package/src/lib/content.js +208 -0
  147. package/src/lib/defaultExtractor.js +217 -0
  148. package/src/lib/detectNesting.js +9 -1
  149. package/src/lib/evaluateTailwindFunctions.js +79 -8
  150. package/src/lib/expandApplyAtRules.js +515 -153
  151. package/src/lib/expandTailwindAtRules.js +115 -86
  152. package/src/lib/findAtConfigPath.js +48 -0
  153. package/src/lib/generateRules.js +545 -147
  154. package/src/lib/getModuleDependencies.js +70 -30
  155. package/src/lib/load-config.ts +31 -0
  156. package/src/lib/normalizeTailwindDirectives.js +7 -1
  157. package/src/lib/offsets.js +373 -0
  158. package/src/lib/partitionApplyAtRules.js +52 -0
  159. package/src/lib/regex.js +74 -0
  160. package/src/lib/remap-bitfield.js +82 -0
  161. package/src/lib/resolveDefaultsAtRules.js +59 -17
  162. package/src/lib/setupContextUtils.js +701 -175
  163. package/src/lib/setupTrackingContext.js +51 -62
  164. package/src/lib/sharedState.js +58 -7
  165. package/src/oxide/cli/build/deps.ts +91 -0
  166. package/src/oxide/cli/build/index.ts +47 -0
  167. package/src/oxide/cli/build/plugin.ts +442 -0
  168. package/src/oxide/cli/build/utils.ts +74 -0
  169. package/src/oxide/cli/build/watching.ts +225 -0
  170. package/src/oxide/cli/help/index.ts +69 -0
  171. package/src/oxide/cli/index.ts +204 -0
  172. package/src/oxide/cli/init/index.ts +59 -0
  173. package/src/oxide/cli.ts +1 -0
  174. package/src/oxide/postcss-plugin.ts +1 -0
  175. package/src/plugin.js +107 -0
  176. package/src/postcss-plugins/nesting/README.md +42 -0
  177. package/src/postcss-plugins/nesting/index.js +13 -0
  178. package/src/postcss-plugins/nesting/plugin.js +80 -0
  179. package/src/processTailwindFeatures.js +12 -2
  180. package/src/public/colors.js +22 -0
  181. package/src/public/default-config.js +1 -1
  182. package/src/public/default-theme.js +2 -2
  183. package/src/public/load-config.js +2 -0
  184. package/src/util/applyImportantSelector.js +27 -0
  185. package/src/util/buildMediaQuery.js +5 -3
  186. package/src/util/cloneNodes.js +19 -2
  187. package/src/util/color.js +44 -12
  188. package/src/util/colorNames.js +150 -0
  189. package/src/util/dataTypes.js +51 -16
  190. package/src/util/defaults.js +6 -0
  191. package/src/util/formatVariantSelector.js +264 -144
  192. package/src/util/getAllConfigs.js +21 -2
  193. package/src/util/{isValidArbitraryValue.js → isSyntacticallyValidPropertyValue.js} +1 -1
  194. package/src/util/log.js +11 -7
  195. package/src/util/nameClass.js +4 -0
  196. package/src/util/negateValue.js +11 -3
  197. package/src/util/normalizeConfig.js +57 -5
  198. package/src/util/normalizeScreens.js +105 -7
  199. package/src/util/parseBoxShadowValue.js +4 -3
  200. package/src/util/parseDependency.js +37 -42
  201. package/src/util/parseGlob.js +24 -0
  202. package/src/util/pluginUtils.js +123 -24
  203. package/src/util/prefixSelector.js +30 -10
  204. package/src/util/pseudoElements.js +170 -0
  205. package/src/util/removeAlphaVariables.js +24 -0
  206. package/src/util/resolveConfig.js +74 -26
  207. package/src/util/resolveConfigPath.js +12 -1
  208. package/src/util/splitAtTopLevelOnly.js +52 -0
  209. package/src/util/toPath.js +23 -1
  210. package/src/util/transformThemeValue.js +13 -3
  211. package/src/util/validateConfig.js +26 -0
  212. package/src/util/validateFormalSyntax.js +34 -0
  213. package/src/util/withAlphaVariable.js +1 -1
  214. package/stubs/.gitignore +1 -0
  215. package/stubs/.prettierrc.json +6 -0
  216. package/stubs/{defaultConfig.stub.js → config.full.js} +206 -166
  217. package/stubs/postcss.config.js +6 -0
  218. package/stubs/tailwind.config.cjs +2 -0
  219. package/stubs/tailwind.config.js +2 -0
  220. package/stubs/tailwind.config.ts +3 -0
  221. package/types/config.d.ts +368 -0
  222. package/types/generated/.gitkeep +0 -0
  223. package/types/generated/colors.d.ts +298 -0
  224. package/types/generated/corePluginList.d.ts +1 -0
  225. package/types/generated/default-theme.d.ts +371 -0
  226. package/types/index.d.ts +7 -0
  227. package/CHANGELOG.md +0 -1843
  228. package/lib/constants.js +0 -37
  229. package/lib/lib/setupWatchingContext.js +0 -288
  230. package/nesting/plugin.js +0 -41
  231. package/scripts/install-integrations.js +0 -27
  232. package/scripts/rebuildFixtures.js +0 -68
  233. package/src/constants.js +0 -17
  234. package/src/lib/setupWatchingContext.js +0 -311
  235. /package/stubs/{simpleConfig.stub.js → config.simple.js} +0 -0
  236. /package/stubs/{defaultPostCssConfig.stub.js → postcss.config.cjs} +0 -0
@@ -1,21 +1,17 @@
1
- import fs from 'fs'
2
- import path from 'path'
1
+ // @ts-check
3
2
 
4
- import fastGlob from 'fast-glob'
5
- import LRU from 'quick-lru'
6
- import normalizePath from 'normalize-path'
3
+ import fs from 'fs'
4
+ import LRU from '@alloc/quick-lru'
7
5
 
8
6
  import hash from '../util/hashConfig'
9
- import getModuleDependencies from '../lib/getModuleDependencies'
10
-
11
7
  import resolveConfig from '../public/resolve-config'
12
-
13
8
  import resolveConfigPath from '../util/resolveConfigPath'
14
-
15
- import { env } from './sharedState'
16
-
17
9
  import { getContext, getFileModifiedMap } from './setupContextUtils'
18
10
  import parseDependency from '../util/parseDependency'
11
+ import { validateConfig } from '../util/validateConfig.js'
12
+ import { parseCandidateFiles, resolvedChangedContent } from './content.js'
13
+ import { loadConfig } from '../lib/load-config'
14
+ import getModuleDependencies from './getModuleDependencies'
19
15
 
20
16
  let configPathCache = new LRU({ maxSize: 100 })
21
17
 
@@ -26,9 +22,7 @@ function getCandidateFiles(context, tailwindConfig) {
26
22
  return candidateFilesCache.get(context)
27
23
  }
28
24
 
29
- let candidateFiles = tailwindConfig.content.files
30
- .filter((item) => typeof item === 'string')
31
- .map((contentPath) => normalizePath(contentPath))
25
+ let candidateFiles = parseCandidateFiles(context, tailwindConfig)
32
26
 
33
27
  return candidateFilesCache.set(context, candidateFiles).get(context)
34
28
  }
@@ -41,7 +35,7 @@ function getTailwindConfig(configOrPath) {
41
35
  let [prevConfig, prevConfigHash, prevDeps, prevModified] =
42
36
  configPathCache.get(userConfigPath) || []
43
37
 
44
- let newDeps = getModuleDependencies(userConfigPath).map((dep) => dep.file)
38
+ let newDeps = getModuleDependencies(userConfigPath)
45
39
 
46
40
  let modified = false
47
41
  let newModified = new Map()
@@ -62,7 +56,7 @@ function getTailwindConfig(configOrPath) {
62
56
  for (let file of newDeps) {
63
57
  delete require.cache[file]
64
58
  }
65
- let newConfig = resolveConfig(require(userConfigPath))
59
+ let newConfig = validateConfig(resolveConfig(loadConfig(userConfigPath)))
66
60
  let newHash = hash(newConfig)
67
61
  configPathCache.set(userConfigPath, [newConfig, newHash, newDeps, newModified])
68
62
  return [newConfig, userConfigPath, newHash, newDeps]
@@ -73,37 +67,9 @@ function getTailwindConfig(configOrPath) {
73
67
  configOrPath.config === undefined ? configOrPath : configOrPath.config
74
68
  )
75
69
 
76
- return [newConfig, null, hash(newConfig), []]
77
- }
78
-
79
- function resolvedChangedContent(context, candidateFiles, fileModifiedMap) {
80
- let changedContent = context.tailwindConfig.content.files
81
- .filter((item) => typeof item.raw === 'string')
82
- .map(({ raw, extension = 'html' }) => ({ content: raw, extension }))
83
-
84
- for (let changedFile of resolveChangedFiles(candidateFiles, fileModifiedMap)) {
85
- let content = fs.readFileSync(changedFile, 'utf8')
86
- let extension = path.extname(changedFile).slice(1)
87
- changedContent.push({ content, extension })
88
- }
89
- return changedContent
90
- }
70
+ newConfig = validateConfig(newConfig)
91
71
 
92
- function resolveChangedFiles(candidateFiles, fileModifiedMap) {
93
- let changedFiles = new Set()
94
- env.DEBUG && console.time('Finding changed files')
95
- let files = fastGlob.sync(candidateFiles)
96
- for (let file of files) {
97
- let prevModified = fileModifiedMap.has(file) ? fileModifiedMap.get(file) : -Infinity
98
- let modified = fs.statSync(file).mtimeMs
99
-
100
- if (modified > prevModified) {
101
- changedFiles.add(file)
102
- fileModifiedMap.set(file, modified)
103
- }
104
- }
105
- env.DEBUG && console.timeEnd('Finding changed files')
106
- return changedFiles
72
+ return [newConfig, null, hash(newConfig), []]
107
73
  }
108
74
 
109
75
  // DISABLE_TOUCH = TRUE
@@ -119,11 +85,12 @@ export default function setupTrackingContext(configOrPath) {
119
85
 
120
86
  let contextDependencies = new Set(configDependencies)
121
87
 
122
- // If there are no @tailwind rules, we don't consider this CSS file or it's dependencies
123
- // to be dependencies of the context. Can reuse the context even if they change.
124
- // We may want to think about `@layer` being part of this trigger too, but it's tough
125
- // because it's impossible for a layer in one file to end up in the actual @tailwind rule
126
- // in another file since independent sources are effectively isolated.
88
+ // If there are no @tailwind or @apply rules, we don't consider this CSS
89
+ // file or its dependencies to be dependencies of the context. Can reuse
90
+ // the context even if they change. We may want to think about `@layer`
91
+ // being part of this trigger too, but it's tough because it's impossible
92
+ // for a layer in one file to end up in the actual @tailwind rule in
93
+ // another file since independent sources are effectively isolated.
127
94
  if (tailwindDirectives.size > 0) {
128
95
  // Add current css file as a context dependencies.
129
96
  contextDependencies.add(result.opts.from)
@@ -136,7 +103,7 @@ export default function setupTrackingContext(configOrPath) {
136
103
  }
137
104
  }
138
105
 
139
- let [context] = getContext(
106
+ let [context, , mTimesToCommit] = getContext(
140
107
  root,
141
108
  result,
142
109
  tailwindConfig,
@@ -145,30 +112,45 @@ export default function setupTrackingContext(configOrPath) {
145
112
  contextDependencies
146
113
  )
147
114
 
115
+ let fileModifiedMap = getFileModifiedMap(context)
116
+
148
117
  let candidateFiles = getCandidateFiles(context, tailwindConfig)
149
118
 
150
- // If there are no @tailwind rules, we don't consider this CSS file or it's dependencies
151
- // to be dependencies of the context. Can reuse the context even if they change.
119
+ // If there are no @tailwind or @apply rules, we don't consider this CSS file or it's
120
+ // dependencies to be dependencies of the context. Can reuse the context even if they change.
152
121
  // We may want to think about `@layer` being part of this trigger too, but it's tough
153
122
  // because it's impossible for a layer in one file to end up in the actual @tailwind rule
154
123
  // in another file since independent sources are effectively isolated.
155
124
  if (tailwindDirectives.size > 0) {
156
- let fileModifiedMap = getFileModifiedMap(context)
157
-
158
125
  // Add template paths as postcss dependencies.
159
- for (let fileOrGlob of candidateFiles) {
160
- let dependency = parseDependency(fileOrGlob)
161
- if (dependency) {
126
+ for (let contentPath of candidateFiles) {
127
+ for (let dependency of parseDependency(contentPath)) {
162
128
  registerDependency(dependency)
163
129
  }
164
130
  }
165
131
 
166
- for (let changedContent of resolvedChangedContent(
132
+ let [changedContent, contentMTimesToCommit] = resolvedChangedContent(
167
133
  context,
168
134
  candidateFiles,
169
135
  fileModifiedMap
170
- )) {
171
- context.changedContent.push(changedContent)
136
+ )
137
+
138
+ for (let content of changedContent) {
139
+ context.changedContent.push(content)
140
+ }
141
+
142
+ // Add the mtimes of the content files to the commit list
143
+ // We can overwrite the existing values because unconditionally
144
+ // This is because:
145
+ // 1. Most of the files here won't be in the map yet
146
+ // 2. If they are that means it's a context dependency
147
+ // and we're reading this after the context. This means
148
+ // that the mtime we just read is strictly >= the context
149
+ // mtime. Unless the user / os is doing something weird
150
+ // in which the mtime would be going backwards. If that
151
+ // happens there's already going to be problems.
152
+ for (let [path, mtime] of contentMTimesToCommit.entries()) {
153
+ mTimesToCommit.set(path, mtime)
172
154
  }
173
155
  }
174
156
 
@@ -176,6 +158,13 @@ export default function setupTrackingContext(configOrPath) {
176
158
  registerDependency({ type: 'dependency', file })
177
159
  }
178
160
 
161
+ // "commit" the new modified time for all context deps
162
+ // We do this here because we want content tracking to
163
+ // read the "old" mtime even when it's a context dependency.
164
+ for (let [path, mtime] of mTimesToCommit.entries()) {
165
+ fileModifiedMap.set(path, mtime)
166
+ }
167
+
179
168
  return context
180
169
  }
181
170
  }
@@ -1,10 +1,61 @@
1
- export const env = {
2
- TAILWIND_MODE: process.env.TAILWIND_MODE,
3
- NODE_ENV: process.env.NODE_ENV,
4
- DEBUG: process.env.DEBUG !== undefined && process.env.DEBUG !== '0',
5
- TAILWIND_DISABLE_TOUCH: process.env.TAILWIND_DISABLE_TOUCH !== undefined,
6
- TAILWIND_TOUCH_DIR: process.env.TAILWIND_TOUCH_DIR,
7
- }
1
+ import pkg from '../../package.json'
2
+
3
+ export const env =
4
+ typeof process !== 'undefined'
5
+ ? {
6
+ NODE_ENV: process.env.NODE_ENV,
7
+ DEBUG: resolveDebug(process.env.DEBUG),
8
+ ENGINE: pkg.tailwindcss.engine,
9
+ }
10
+ : {
11
+ NODE_ENV: 'production',
12
+ DEBUG: false,
13
+ ENGINE: pkg.tailwindcss.engine,
14
+ }
15
+
8
16
  export const contextMap = new Map()
9
17
  export const configContextMap = new Map()
10
18
  export const contextSourcesMap = new Map()
19
+ export const sourceHashMap = new Map()
20
+ export const NOT_ON_DEMAND = new String('*')
21
+
22
+ export const NONE = Symbol('__NONE__')
23
+
24
+ export function resolveDebug(debug) {
25
+ if (debug === undefined) {
26
+ return false
27
+ }
28
+
29
+ // Environment variables are strings, so convert to boolean
30
+ if (debug === 'true' || debug === '1') {
31
+ return true
32
+ }
33
+
34
+ if (debug === 'false' || debug === '0') {
35
+ return false
36
+ }
37
+
38
+ // Keep the debug convention into account:
39
+ // DEBUG=* -> This enables all debug modes
40
+ // DEBUG=projectA,projectB,projectC -> This enables debug for projectA, projectB and projectC
41
+ // DEBUG=projectA:* -> This enables all debug modes for projectA (if you have sub-types)
42
+ // DEBUG=projectA,-projectB -> This enables debug for projectA and explicitly disables it for projectB
43
+
44
+ if (debug === '*') {
45
+ return true
46
+ }
47
+
48
+ let debuggers = debug.split(',').map((d) => d.split(':')[0])
49
+
50
+ // Ignoring tailwindcss
51
+ if (debuggers.includes('-tailwindcss')) {
52
+ return false
53
+ }
54
+
55
+ // Including tailwindcss
56
+ if (debuggers.includes('tailwindcss')) {
57
+ return true
58
+ }
59
+
60
+ return false
61
+ }
@@ -0,0 +1,91 @@
1
+ import packageJson from '../../../../package.json'
2
+ import browserslist from 'browserslist'
3
+ import { Result } from 'postcss'
4
+
5
+ import {
6
+ // @ts-ignore
7
+ lazyPostcss,
8
+
9
+ // @ts-ignore
10
+ lazyPostcssImport,
11
+
12
+ // @ts-ignore
13
+ lazyCssnano,
14
+
15
+ // @ts-ignore
16
+ } from '../../../../peers/index'
17
+
18
+ export function lazyLightningCss() {
19
+ // TODO: Make this lazy/bundled
20
+ return require('lightningcss')
21
+ }
22
+
23
+ let lightningCss
24
+
25
+ function loadLightningCss() {
26
+ if (lightningCss) {
27
+ return lightningCss
28
+ }
29
+
30
+ // Try to load a local version first
31
+ try {
32
+ return (lightningCss = require('lightningcss'))
33
+ } catch {}
34
+
35
+ return (lightningCss = lazyLightningCss())
36
+ }
37
+
38
+ export async function lightningcss(shouldMinify: boolean, result: Result) {
39
+ let css = loadLightningCss()
40
+
41
+ try {
42
+ let transformed = css.transform({
43
+ filename: result.opts.from || 'input.css',
44
+ code: Buffer.from(result.css, 'utf-8'),
45
+ minify: shouldMinify,
46
+ sourceMap: !!result.map,
47
+ inputSourceMap: result.map ? result.map.toString() : undefined,
48
+ targets: css.browserslistToTargets(browserslist(packageJson.browserslist)),
49
+ drafts: {
50
+ nesting: true,
51
+ },
52
+ })
53
+
54
+ return Object.assign(result, {
55
+ css: transformed.code.toString('utf8'),
56
+ map: result.map
57
+ ? Object.assign(result.map, {
58
+ toString() {
59
+ return transformed.map.toString()
60
+ },
61
+ })
62
+ : result.map,
63
+ })
64
+ } catch (err) {
65
+ console.error('Unable to use Lightning CSS. Using raw version instead.')
66
+ console.error(err)
67
+
68
+ return result
69
+ }
70
+ }
71
+
72
+ /**
73
+ * @returns {import('postcss')}
74
+ */
75
+ export function loadPostcss() {
76
+ // Try to load a local `postcss` version first
77
+ try {
78
+ return require('postcss')
79
+ } catch {}
80
+
81
+ return lazyPostcss()
82
+ }
83
+
84
+ export function loadPostcssImport() {
85
+ // Try to load a local `postcss-import` version first
86
+ try {
87
+ return require('postcss-import')
88
+ } catch {}
89
+
90
+ return lazyPostcssImport()
91
+ }
@@ -0,0 +1,47 @@
1
+ import fs from 'fs'
2
+ import path from 'path'
3
+ import { resolveDefaultConfigPath } from '../../../util/resolveConfigPath'
4
+ import { createProcessor } from './plugin'
5
+
6
+ export async function build(args) {
7
+ let input = args['--input']
8
+ let shouldWatch = args['--watch']
9
+
10
+ // TODO: Deprecate this in future versions
11
+ if (!input && args['_'][1]) {
12
+ console.error('[deprecation] Running tailwindcss without -i, please provide an input file.')
13
+ input = args['--input'] = args['_'][1]
14
+ }
15
+
16
+ if (input && input !== '-' && !fs.existsSync((input = path.resolve(input)))) {
17
+ console.error(`Specified input file ${args['--input']} does not exist.`)
18
+ process.exit(9)
19
+ }
20
+
21
+ if (args['--config'] && !fs.existsSync((args['--config'] = path.resolve(args['--config'])))) {
22
+ console.error(`Specified config file ${args['--config']} does not exist.`)
23
+ process.exit(9)
24
+ }
25
+
26
+ // TODO: Reference the @config path here if exists
27
+ let configPath = args['--config'] ? args['--config'] : resolveDefaultConfigPath()
28
+
29
+ let processor = await createProcessor(args, configPath)
30
+
31
+ if (shouldWatch) {
32
+ // Abort the watcher if stdin is closed to avoid zombie processes
33
+ // You can disable this behavior with --watch=always
34
+ if (args['--watch'] !== 'always') {
35
+ process.stdin.on('end', () => process.exit(0))
36
+ }
37
+
38
+ process.stdin.resume()
39
+
40
+ await processor.watch()
41
+ } else {
42
+ await processor.build().catch((e) => {
43
+ console.error(e)
44
+ process.exit(1)
45
+ })
46
+ }
47
+ }