tailwindcss 3.4.11 → 3.4.13

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.
package/CHANGELOG.md CHANGED
@@ -9,6 +9,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
 
10
10
  - Nothing yet!
11
11
 
12
+ ## [3.4.13] - 2024-09-23
13
+
14
+ ### Fixed
15
+
16
+ - Improve source glob verification performance ([#14481](https://github.com/tailwindlabs/tailwindcss/pull/14481))
17
+
18
+ ## [3.4.12] - 2024-09-17
19
+
20
+ ### Fixed
21
+
22
+ - Ensure using `@apply` with utilities that use `@defaults` works with rules defined in the base layer when using `optimizeUniversalDefaults` ([#14427](https://github.com/tailwindlabs/tailwindcss/pull/14427))
23
+
12
24
  ## [3.4.11] - 2024-09-11
13
25
 
14
26
  ### Fixed
@@ -2437,7 +2449,9 @@ No release notes
2437
2449
 
2438
2450
  - Everything!
2439
2451
 
2440
- [unreleased]: https://github.com/tailwindlabs/tailwindcss/compare/v3.4.11...HEAD
2452
+ [unreleased]: https://github.com/tailwindlabs/tailwindcss/compare/v3.4.13...HEAD
2453
+ [3.4.13]: https://github.com/tailwindlabs/tailwindcss/compare/v3.4.12...v3.4.13
2454
+ [3.4.12]: https://github.com/tailwindlabs/tailwindcss/compare/v3.4.11...v3.4.12
2441
2455
  [3.4.11]: https://github.com/tailwindlabs/tailwindcss/compare/v3.4.10...v3.4.11
2442
2456
  [3.4.10]: https://github.com/tailwindlabs/tailwindcss/compare/v3.4.9...v3.4.10
2443
2457
  [3.4.9]: https://github.com/tailwindlabs/tailwindcss/compare/v3.4.8...v3.4.9
@@ -173,9 +173,19 @@ function createBroadPatternCheck(paths) {
173
173
  if (!maybeBroadPattern) {
174
174
  return ()=>{};
175
175
  }
176
- // All globs that explicitly contain any of the known large directories (e.g.:
177
- // node_modules).
178
- let explicitGlobs = paths.filter((path)=>LARGE_DIRECTORIES_REGEX.test(path));
176
+ // All glob matchers
177
+ let matchers = [];
178
+ // All glob matchers that explicitly contain any of the known large
179
+ // directories (e.g.: node_modules).
180
+ let explicitMatchers = [];
181
+ // Create matchers for all paths
182
+ for (let path of paths){
183
+ let matcher = _micromatch.default.matcher(path);
184
+ if (LARGE_DIRECTORIES_REGEX.test(path)) {
185
+ explicitMatchers.push(matcher);
186
+ }
187
+ matchers.push(matcher);
188
+ }
179
189
  // Keep track of whether we already warned about the broad pattern issue or
180
190
  // not. The `log.warn` function already does something similar where we only
181
191
  // output the log once. However, with this we can also skip the other checks
@@ -185,11 +195,12 @@ function createBroadPatternCheck(paths) {
185
195
  * @param {string} file
186
196
  */ return (file)=>{
187
197
  if (warned) return; // Already warned about the broad pattern
188
- if (_micromatch.default.isMatch(file, explicitGlobs)) return; // Explicitly included, so we can skip further checks
198
+ if (explicitMatchers.some((matcher)=>matcher(file))) return; // Explicitly included, so we can skip further checks
189
199
  // When a broad pattern is used, we have to double check that the file was
190
200
  // not explicitly included in the globs.
191
- let matchingGlob = paths.find((path)=>_micromatch.default.isMatch(file, path));
192
- if (!matchingGlob) return; // This should never happen
201
+ let matchingGlobIndex = matchers.findIndex((matcher)=>matcher(file));
202
+ if (matchingGlobIndex === -1) return; // This should never happen
203
+ let matchingGlob = paths[matchingGlobIndex];
193
204
  // Create relative paths to make the output a bit more readable.
194
205
  let relativeMatchingGlob = _path.default.relative(process.cwd(), matchingGlob);
195
206
  if (relativeMatchingGlob[0] !== ".") relativeMatchingGlob = `./${relativeMatchingGlob}`;
@@ -203,8 +203,8 @@ function expandTailwindAtRules(context) {
203
203
  // Replace any Tailwind directives with generated CSS
204
204
  if (layerNodes.base) {
205
205
  layerNodes.base.before((0, _cloneNodes.default)([
206
- ...baseNodes,
207
- ...defaultNodes
206
+ ...defaultNodes,
207
+ ...baseNodes
208
208
  ], layerNodes.base.source, {
209
209
  layer: "base"
210
210
  }));
@@ -120,21 +120,19 @@ function resolveDefaultsAtRules({ tailwindConfig }) {
120
120
  selectors.add(selector);
121
121
  }
122
122
  }
123
- if ((0, _featureFlags.flagEnabled)(tailwindConfig, "optimizeUniversalDefaults")) {
124
- if (selectorGroups.size === 0) {
125
- universal.remove();
126
- continue;
127
- }
128
- for (let [, selectors] of selectorGroups){
129
- let universalRule = _postcss.default.rule({
130
- source: universal.source
131
- });
132
- universalRule.selectors = [
133
- ...selectors
134
- ];
135
- universalRule.append(universal.nodes.map((node)=>node.clone()));
136
- universal.before(universalRule);
137
- }
123
+ if (selectorGroups.size === 0) {
124
+ universal.remove();
125
+ continue;
126
+ }
127
+ for (let [, selectors] of selectorGroups){
128
+ let universalRule = _postcss.default.rule({
129
+ source: universal.source
130
+ });
131
+ universalRule.selectors = [
132
+ ...selectors
133
+ ];
134
+ universalRule.append(universal.nodes.map((node)=>node.clone()));
135
+ universal.before(universalRule);
138
136
  }
139
137
  universal.remove();
140
138
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tailwindcss",
3
- "version": "3.4.11",
3
+ "version": "3.4.13",
4
4
  "description": "A utility-first CSS framework for rapidly building custom user interfaces.",
5
5
  "license": "MIT",
6
6
  "main": "lib/index.js",
@@ -210,9 +210,22 @@ export function createBroadPatternCheck(paths) {
210
210
  return () => {}
211
211
  }
212
212
 
213
- // All globs that explicitly contain any of the known large directories (e.g.:
214
- // node_modules).
215
- let explicitGlobs = paths.filter((path) => LARGE_DIRECTORIES_REGEX.test(path))
213
+ // All glob matchers
214
+ let matchers = []
215
+
216
+ // All glob matchers that explicitly contain any of the known large
217
+ // directories (e.g.: node_modules).
218
+ let explicitMatchers = []
219
+
220
+ // Create matchers for all paths
221
+ for (let path of paths) {
222
+ let matcher = micromatch.matcher(path)
223
+ if (LARGE_DIRECTORIES_REGEX.test(path)) {
224
+ explicitMatchers.push(matcher)
225
+ }
226
+
227
+ matchers.push(matcher)
228
+ }
216
229
 
217
230
  // Keep track of whether we already warned about the broad pattern issue or
218
231
  // not. The `log.warn` function already does something similar where we only
@@ -225,12 +238,13 @@ export function createBroadPatternCheck(paths) {
225
238
  */
226
239
  return (file) => {
227
240
  if (warned) return // Already warned about the broad pattern
228
- if (micromatch.isMatch(file, explicitGlobs)) return // Explicitly included, so we can skip further checks
241
+ if (explicitMatchers.some((matcher) => matcher(file))) return // Explicitly included, so we can skip further checks
229
242
 
230
243
  // When a broad pattern is used, we have to double check that the file was
231
244
  // not explicitly included in the globs.
232
- let matchingGlob = paths.find((path) => micromatch.isMatch(file, path))
233
- if (!matchingGlob) return // This should never happen
245
+ let matchingGlobIndex = matchers.findIndex((matcher) => matcher(file))
246
+ if (matchingGlobIndex === -1) return // This should never happen
247
+ let matchingGlob = paths[matchingGlobIndex]
234
248
 
235
249
  // Create relative paths to make the output a bit more readable.
236
250
  let relativeMatchingGlob = path.relative(process.cwd(), matchingGlob)
@@ -192,7 +192,7 @@ export default function expandTailwindAtRules(context) {
192
192
 
193
193
  if (layerNodes.base) {
194
194
  layerNodes.base.before(
195
- cloneNodes([...baseNodes, ...defaultNodes], layerNodes.base.source, {
195
+ cloneNodes([...defaultNodes, ...baseNodes], layerNodes.base.source, {
196
196
  layer: 'base',
197
197
  })
198
198
  )
@@ -118,22 +118,20 @@ export default function resolveDefaultsAtRules({ tailwindConfig }) {
118
118
  }
119
119
  }
120
120
 
121
- if (flagEnabled(tailwindConfig, 'optimizeUniversalDefaults')) {
122
- if (selectorGroups.size === 0) {
123
- universal.remove()
124
- continue
125
- }
121
+ if (selectorGroups.size === 0) {
122
+ universal.remove()
123
+ continue
124
+ }
126
125
 
127
- for (let [, selectors] of selectorGroups) {
128
- let universalRule = postcss.rule({
129
- source: universal.source,
130
- })
126
+ for (let [, selectors] of selectorGroups) {
127
+ let universalRule = postcss.rule({
128
+ source: universal.source,
129
+ })
131
130
 
132
- universalRule.selectors = [...selectors]
131
+ universalRule.selectors = [...selectors]
133
132
 
134
- universalRule.append(universal.nodes.map((node) => node.clone()))
135
- universal.before(universalRule)
136
- }
133
+ universalRule.append(universal.nodes.map((node) => node.clone()))
134
+ universal.before(universalRule)
137
135
  }
138
136
 
139
137
  universal.remove()