* Improve `purge` performance in layers mode
In layers mode, skip `purgecss` completely if source stylesheet does
not have any tailwind layers. For the legacy codebases with a lot of
non-tailwind stylesheets, it dratically improves the performance of
the production build.
* fix: purgecss should respect safelist.variables
* Generate plugin list file
Removes the importing of all plugins in src/util/resolveConfig to avoid importing CSS.
Import the built plugin list file instead.
* Use `process.cwd()` instead of `__dirname` to resolve path
Co-authored-by: Federico Ciardi <fed.ciardi@gmail.com>
* Import core plugin list in resolveConfig test
* Generate plugin list prebabelify and on install
* Move generation from install to postinstall
Co-authored-by: Federico Ciardi <fed.ciardi@gmail.com>
Co-authored-by: Federico Ciardi <fed.ciardi@gmail.com>
* add nesting plugin
* rename @tailwindcss/nesting to tailwindcss/nesting
* ignore the built `nesting` plugin
* add a postcss7 compat version
* include `nesting` plugin when publishing
* add `build-plugins` script
This will allow us to keep the plugins in their dedicated folders +
tests + postcss7 compatibility files. However, when we copy over the
plugins to the root. For example `plugins/nesting/` -> `nesting/` we
skip files like `.test.js` and `.postcss7.js`.
* build plugins when running `prepublishOnly`
* improve compat mode
We will use a glob so that we can move all *.postcss7.* files to just
*.* likewise we will also backup to *.* to *.postcss8.* for restoring
purposes.
Concrete example:
- Current state:
- index.js // PostCSS 8 implementation
- index.postcss7.js // PostCSS 7 implementation
- Run "compat"
- index.js // PostCSS 7 implementation
- index.postcss7.js // PostCSS 7 implementation
- index.postcss8.js // PostCSS 8 implementation (Backup of original)
- Run "compat:restore"
- index.js // PostCSS 8 implementation
- index.postcss7.js // PostCSS 7 implementation
- X index.postcss8.js // PostCSS 8 implementation (Removed)
* Update README.md
* ensure we `npm install` before publishing
Co-authored-by: Adam Wathan <adam.wathan@gmail.com>
* use `~/.cache/tailwindcss` as default touch dir
When more tools catch up with the latest postcss dependency tracking,
then we probably don't even need this anymore. However, it is a good
practice to put (global) caches in ~/.cache and (global) configs in
~/.config
Fixes: #4569
* change test to verify @tailwind base slightly
Because of some changes in tailwind itself, the base selector contains a
ton of new --tw-* custom properties. Keeping this up to date might be a
bit of an annoying challenge. So instead we now check for the selector
to be present.
* add `tmp` package
* use a (simple) temporary file, instead of a full cache dir
* remove unused file
using syntax.js instead
* add a way to remove files that are generated from the tests
Essentially setting the restore cache contents to `null` as a special
value.
* combine the stdout and stderr output
* add jest-diff instead of relying on it existing *somewhere*
This also came with a small API change.
* add `--runInBand` to the test script
* add dedicated cli tests for the new Tailwind CLI
* add integration test tools
* setup jest in the integrations folder
* add `test:integrations` script
The default `npm test` script will ignore all the tests in the
`integrations` folder.
* add integration tests with `webpack 5`
* add integration tests with `postcss-cli`
* add `npm run install:integrations` script
This script will run `npm install` in every integration, and in the
integrations folder itself (to setup Jest for example).
* add `toIncludeCss` custom matcher
* increate Jest timeout for integration tests
* add integration tests with `vite`
* add integration tests with `webpack 4`
* add isomorphic fetch
* add the ability to wait for specific stdout/stderr output
* write vite tests, assert using API calls
We will wait for the correct stdout/stderr output, once we know that we
can request the fresh css, we will fetch it and make assertions
accordingly.
Port is currently hardcoded, maybe we should use a packaage to ensure
that we use a free port.
* add integration tests with `rollup`
* add integration tests with `parcel`
* run all integration tests in band
* add .gitignore in integrations folder