74 lines
2.3 KiB
TypeScript
74 lines
2.3 KiB
TypeScript
|
|
import fs from 'node:fs/promises'
|
||
|
|
import path from 'node:path'
|
||
|
|
import { js, json, test } from '../utils'
|
||
|
|
|
||
|
|
test(
|
||
|
|
'@tailwindcss/oxide will fail when architecture-specific packages are missing',
|
||
|
|
{
|
||
|
|
fs: {
|
||
|
|
'package.json': json`
|
||
|
|
{
|
||
|
|
"dependencies": {
|
||
|
|
"@tailwindcss/oxide": "workspace:^"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
`,
|
||
|
|
'test.js': js`
|
||
|
|
try {
|
||
|
|
let Scanner = require('@tailwindcss/oxide')
|
||
|
|
console.log('SUCCESS: @tailwindcss/oxide loaded successfully', Scanner)
|
||
|
|
} catch (error) {
|
||
|
|
console.log('FAILURE: Failed to load @tailwindcss/oxide:', error.message)
|
||
|
|
}
|
||
|
|
`,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
async ({ exec, root, expect, fs }) => {
|
||
|
|
await removePlatformSpecificExtensions(path.join(root, 'node_modules'))
|
||
|
|
|
||
|
|
// Get last published version
|
||
|
|
let version = (await exec('npm show @tailwindcss/oxide version')).trim()
|
||
|
|
// Ensure that we don't depend on a specific version number in the download
|
||
|
|
// script in case we bump the version number in the repository and CI is run
|
||
|
|
// before a release
|
||
|
|
let packageJson = JSON.parse(await fs.read('node_modules/@tailwindcss/oxide/package.json'))
|
||
|
|
packageJson.version = version
|
||
|
|
await fs.write(
|
||
|
|
'node_modules/@tailwindcss/oxide/package.json',
|
||
|
|
JSON.stringify(packageJson, null, 2),
|
||
|
|
)
|
||
|
|
|
||
|
|
let opts = {
|
||
|
|
// Ensure that we don't include any node paths from the test runner
|
||
|
|
env: { NODE_PATH: '' },
|
||
|
|
}
|
||
|
|
|
||
|
|
expect(await exec('node test.js', opts)).toMatch(/FAILURE/)
|
||
|
|
|
||
|
|
// Now run the post-install script
|
||
|
|
await exec('node node_modules/@tailwindcss/oxide/scripts/install.js', opts)
|
||
|
|
|
||
|
|
expect(await exec('node test.js', opts)).toMatch(/SUCCESS/)
|
||
|
|
},
|
||
|
|
)
|
||
|
|
|
||
|
|
async function removePlatformSpecificExtensions(directory: string) {
|
||
|
|
let entries = await fs.readdir(directory, { withFileTypes: true })
|
||
|
|
|
||
|
|
for (let entry of entries) {
|
||
|
|
let fullPath = path.join(directory, entry.name)
|
||
|
|
|
||
|
|
if (entry.name.startsWith('oxide-')) {
|
||
|
|
if (entry.isSymbolicLink()) {
|
||
|
|
await fs.unlink(fullPath)
|
||
|
|
} else if (entry.isFile()) {
|
||
|
|
await fs.unlink(fullPath)
|
||
|
|
} else if (entry.isDirectory()) {
|
||
|
|
await fs.rm(fullPath, { recursive: true, force: true })
|
||
|
|
}
|
||
|
|
} else if (entry.isDirectory()) {
|
||
|
|
await removePlatformSpecificExtensions(fullPath)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|