tailwindcss/packages/@tailwindcss-node/src
Robin Malfait 352d1b9fcf
Ensure Symbol.dispose and Symbol.asyncDispose are available (#15404)
We recently introduced some better instrumentation
(https://github.com/tailwindlabs/tailwindcss/pull/15303) which uses the
new `using` keyword. I made sure that this was compiled correctly for
environments where `using` is not available yet.

The issue is that this also relies on `Symbol.dispose` being available.
In my testing on our minimal required Node.js version (18) it did work
fine. However, turns out that I was using `18.20.x` locally where
`Symbol.dispose` **_is_** available, but on older version of Node.js 18
(e.g.: `18.17.x`) it is **_not_** available. This now results in some
completely broken builds, e.g.: when running on Cloudflare Pages. See:
#15399

I could reproduce this error in CI, by temporarily downgrading the used
Node.js version to `18.17.0`. See:

<img width="1142" alt="image"
src="https://github.com/user-attachments/assets/5bf30f80-9ca0-40d9-ad02-d1ffb4e0e5dd"
/>

Implementing the proper polyfill, as recommended by the TypeScript docs
( see:
https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html#:~:text=Symbol.dispose,-??=%20Symbol(%22Symbol.dispose
), the error goes away. (If you look at CI after the polyfill, it still
fails but for different reasons unrelated to this change)

Fixes: #15399

---

## Test plan

1. I reproduced it in CI, and I kept the commits so that you can take a
look where it fails with the `Object not disposable`.
2. Using the provided reproduction from #15399:

### Before

It works on Node.js v18.20.x, but switching to Node.js v18.17.x you can
see it fail:

<img width="1607" alt="image"
src="https://github.com/user-attachments/assets/cb6ab73a-8eb2-4003-bab7-b2390f1c879d"
/>

### After

Using pnpm's overrides, we can apply the fix from this PR and test it in
the reproduction. You'll notice that it now works in both Node.js
v18.20.x and v18.17.x

<img width="1604" alt="image"
src="https://github.com/user-attachments/assets/b3a65557-0658-4cb0-a2f9-e3079c7936d5"
/>
2024-12-16 14:17:44 +01:00
..
compile.ts Use AST transformations in @tailwindcss/postcss (#15297) 2024-12-04 15:43:59 +01:00
env.ts Expose timing information in debug mode (#14553) 2024-09-30 14:39:21 +00:00
esm-cache.loader.mts Support loading config files via @config (#14239) 2024-09-02 18:03:16 +02:00
get-module-dependencies.ts Support loading config files via @config (#14239) 2024-09-02 18:03:16 +02:00
index.cts Improve debug logs (#15303) 2024-12-11 15:27:20 +01:00
index.ts Improve debug logs (#15303) 2024-12-11 15:27:20 +01:00
instrumentation.test.ts Improve debug logs (#15303) 2024-12-11 15:27:20 +01:00
instrumentation.ts Ensure Symbol.dispose and Symbol.asyncDispose are available (#15404) 2024-12-16 14:17:44 +01:00
normalize-path.ts Resolve @import in core (#14446) 2024-09-23 17:05:55 +02:00
require-cache.cts Support loading config files via @config (#14239) 2024-09-02 18:03:16 +02:00
urls.test.ts Update changelog and add test for absolute url rebasing (#15282) 2024-12-03 13:48:52 +01:00
urls.ts Vite: Don't rebase absolute url()s (#15275) 2024-12-02 14:23:38 -05:00