mirror of
https://github.com/tailwindlabs/tailwindcss.git
synced 2025-12-08 21:36:08 +00:00
Closes #17448 Closes #13133 This PR adds an a new Oxide target for `wasm32-wasip1-threads`: `@tailwindcss/oxide-wasm32-wasi`. The goal of this is to enable more environments to run Oxide, including (but not limited to) StackBlitz. We're making use of `napi-rs`'s upcoming v3 features to simplify the setup here, meaning `napi-rs` will configure the WASM target and create an npm package that works across Node and browser environments. ## MacOS AArch64 issues While setting up an integration test for the new WASM target, I ran into an issue where FS reads where not terminating on macOS. After some research I found this to be a limitation of the Node.js container interface right now, see: https://github.com/nodejs/node/issues/47193 ### Windows issues We also found that the Node.js wasi container does not properly support Windows: https://github.com/nodejs/uvwasi/issues/11 For now we, it's probably best for MacOS AArch64 users and Windows users to use the native modules instead. ## Test plan The `@tailwindcss/oxide-wasm32-wasi` npm package can be built locally via `pnpm build` and then run with the Oxide API. A usage example can be taken from the newly added integration test. Furthermore this was tested to work as a polyfill on StackBlitz: https://stackblitz.com/edit/vitejs-vite-uks3gt5p [ci-all] --------- Co-authored-by: Robin Malfait <malfait.robin@gmail.com>
33 lines
745 B
TypeScript
33 lines
745 B
TypeScript
import { js, json, test } from '../utils'
|
|
|
|
test(
|
|
'@tailwindcss/oxide can be loaded into a Node.js worker thread',
|
|
{
|
|
fs: {
|
|
'package.json': json`
|
|
{
|
|
"dependencies": {
|
|
"@tailwindcss/oxide": "workspace:^"
|
|
}
|
|
}
|
|
`,
|
|
'start.js': js`
|
|
let { Worker } = require('worker_threads')
|
|
new Worker('./worker.js')
|
|
`,
|
|
'worker.js': js`
|
|
require('@tailwindcss/oxide')
|
|
process.on('exit', () => console.log('worker thread exited'))
|
|
`,
|
|
},
|
|
},
|
|
async ({ exec, expect }) => {
|
|
let output = await exec('node ./start.js').then(
|
|
(out) => out.trim(),
|
|
(err) => `${err}`,
|
|
)
|
|
|
|
expect(output).toEqual('worker thread exited')
|
|
},
|
|
)
|