diff --git a/integrations/vite/resolvers.test.ts b/integrations/vite/resolvers.test.ts
new file mode 100644
index 000000000000..b7098d47fc68
--- /dev/null
+++ b/integrations/vite/resolvers.test.ts
@@ -0,0 +1,143 @@
+import { describe, expect } from 'vitest'
+import { candidate, css, fetchStyles, html, js, retryAssertion, test, ts, txt } from '../utils'
+
+for (let transformer of ['postcss', 'lightningcss']) {
+ describe(transformer, () => {
+ test(
+ `resolves aliases in production build`,
+ {
+ fs: {
+ 'package.json': txt`
+ {
+ "type": "module",
+ "dependencies": {
+ "@tailwindcss/vite": "workspace:^",
+ "tailwindcss": "workspace:^"
+ },
+ "devDependencies": {
+ ${transformer === 'lightningcss' ? `"lightningcss": "^1.26.0",` : ''}
+ "vite": "^5.3.5"
+ }
+ }
+ `,
+ 'vite.config.ts': ts`
+ import tailwindcss from '@tailwindcss/vite'
+ import { defineConfig } from 'vite'
+ import { fileURLToPath } from 'node:url'
+
+ export default defineConfig({
+ css: ${transformer === 'postcss' ? '{}' : "{ transformer: 'lightningcss' }"},
+ build: { cssMinify: false },
+ plugins: [tailwindcss()],
+ resolve: {
+ alias: {
+ '#css-alias': fileURLToPath(new URL('./src/alias.css', import.meta.url)),
+ '#js-alias': fileURLToPath(new URL('./src/plugin.js', import.meta.url)),
+ },
+ },
+ })
+ `,
+ 'index.html': html`
+
+
+
+
+ Hello, world!
+
+ `,
+ 'src/index.css': css`
+ @import '#css-alias';
+ @plugin '#js-alias';
+ `,
+ 'src/alias.css': css`
+ @import 'tailwindcss/theme' theme(reference);
+ @import 'tailwindcss/utilities';
+ `,
+ 'src/plugin.js': js`
+ export default function ({ addUtilities }) {
+ addUtilities({ '.custom-underline': { 'border-bottom': '1px solid green' } })
+ }
+ `,
+ },
+ },
+ async ({ fs, exec }) => {
+ await exec('pnpm vite build')
+
+ let files = await fs.glob('dist/**/*.css')
+ expect(files).toHaveLength(1)
+ let [filename] = files[0]
+
+ await fs.expectFileToContain(filename, [candidate`underline`, candidate`custom-underline`])
+ },
+ )
+
+ test(
+ `resolves aliases in dev mode`,
+ {
+ fs: {
+ 'package.json': txt`
+ {
+ "type": "module",
+ "dependencies": {
+ "@tailwindcss/vite": "workspace:^",
+ "tailwindcss": "workspace:^"
+ },
+ "devDependencies": {
+ ${transformer === 'lightningcss' ? `"lightningcss": "^1.26.0",` : ''}
+ "vite": "^5.3.5"
+ }
+ }
+ `,
+ 'vite.config.ts': ts`
+ import tailwindcss from '@tailwindcss/vite'
+ import { defineConfig } from 'vite'
+ import { fileURLToPath } from 'node:url'
+
+ export default defineConfig({
+ css: ${transformer === 'postcss' ? '{}' : "{ transformer: 'lightningcss' }"},
+ build: { cssMinify: false },
+ plugins: [tailwindcss()],
+ resolve: {
+ alias: {
+ '#css-alias': fileURLToPath(new URL('./src/alias.css', import.meta.url)),
+ '#js-alias': fileURLToPath(new URL('./src/plugin.js', import.meta.url)),
+ },
+ },
+ })
+ `,
+ 'index.html': html`
+
+
+
+
+ Hello, world!
+
+ `,
+ 'src/index.css': css`
+ @import '#css-alias';
+ @plugin '#js-alias';
+ `,
+ 'src/alias.css': css`
+ @import 'tailwindcss/theme' theme(reference);
+ @import 'tailwindcss/utilities';
+ `,
+ 'src/plugin.js': js`
+ export default function ({ addUtilities }) {
+ addUtilities({ '.custom-underline': { 'border-bottom': '1px solid green' } })
+ }
+ `,
+ },
+ },
+ async ({ root, spawn, getFreePort, fs }) => {
+ let port = await getFreePort()
+ await spawn(`pnpm vite dev --port ${port}`)
+
+ await retryAssertion(async () => {
+ let styles = await fetchStyles(port, '/index.html')
+ expect(styles).toContain(candidate`underline`)
+ expect(styles).toContain(candidate`custom-underline`)
+ })
+ },
+ )
+ })
+}
diff --git a/packages/@tailwindcss-node/src/compile.ts b/packages/@tailwindcss-node/src/compile.ts
index 396b7116e54a..11b72ce1419b 100644
--- a/packages/@tailwindcss-node/src/compile.ts
+++ b/packages/@tailwindcss-node/src/compile.ts
@@ -11,25 +11,33 @@ import {
import { getModuleDependencies } from './get-module-dependencies'
import { rewriteUrls } from './urls'
+export type Resolver = (id: string, base: string) => Promise
+
export async function compile(
css: string,
{
base,
onDependency,
shouldRewriteUrls,
+
+ customCssResolver,
+ customJsResolver,
}: {
base: string
onDependency: (path: string) => void
shouldRewriteUrls?: boolean
+
+ customCssResolver?: Resolver
+ customJsResolver?: Resolver
},
) {
let compiler = await _compile(css, {
base,
async loadModule(id, base) {
- return loadModule(id, base, onDependency)
+ return loadModule(id, base, onDependency, customJsResolver)
},
async loadStylesheet(id, base) {
- let sheet = await loadStylesheet(id, base, onDependency)
+ let sheet = await loadStylesheet(id, base, onDependency, customCssResolver)
if (shouldRewriteUrls) {
sheet.content = await rewriteUrls({
@@ -80,9 +88,14 @@ export async function __unstable__loadDesignSystem(css: string, { base }: { base
})
}
-export async function loadModule(id: string, base: string, onDependency: (path: string) => void) {
+export async function loadModule(
+ id: string,
+ base: string,
+ onDependency: (path: string) => void,
+ customJsResolver?: Resolver,
+) {
if (id[0] !== '.') {
- let resolvedPath = await resolveJsId(id, base)
+ let resolvedPath = await resolveJsId(id, base, customJsResolver)
if (!resolvedPath) {
throw new Error(`Could not resolve '${id}' from '${base}'`)
}
@@ -94,7 +107,7 @@ export async function loadModule(id: string, base: string, onDependency: (path:
}
}
- let resolvedPath = await resolveJsId(id, base)
+ let resolvedPath = await resolveJsId(id, base, customJsResolver)
if (!resolvedPath) {
throw new Error(`Could not resolve '${id}' from '${base}'`)
}
@@ -113,8 +126,13 @@ export async function loadModule(id: string, base: string, onDependency: (path:
}
}
-async function loadStylesheet(id: string, base: string, onDependency: (path: string) => void) {
- let resolvedPath = await resolveCssId(id, base)
+async function loadStylesheet(
+ id: string,
+ base: string,
+ onDependency: (path: string) => void,
+ cssResolver?: Resolver,
+) {
+ let resolvedPath = await resolveCssId(id, base, cssResolver)
if (!resolvedPath) throw new Error(`Could not resolve '${id}' from '${base}'`)
onDependency(resolvedPath)
@@ -163,7 +181,11 @@ const cssResolver = EnhancedResolve.ResolverFactory.createResolver({
mainFields: ['style'],
conditionNames: ['style'],
})
-async function resolveCssId(id: string, base: string): Promise {
+async function resolveCssId(
+ id: string,
+ base: string,
+ customCssResolver?: Resolver,
+): Promise {
if (typeof globalThis.__tw_resolve === 'function') {
let resolved = globalThis.__tw_resolve(id, base)
if (resolved) {
@@ -171,6 +193,10 @@ async function resolveCssId(id: string, base: string): Promise {
+function resolveJsId(
+ id: string,
+ base: string,
+ customJsResolver?: Resolver,
+): Promise {
if (typeof globalThis.__tw_resolve === 'function') {
let resolved = globalThis.__tw_resolve(id, base)
if (resolved) {
return Promise.resolve(resolved)
}
}
+
+ if (customJsResolver) {
+ return customJsResolver(id, base)
+ }
+
return runResolver(esmResolver, id, base).catch(() => runResolver(cjsResolver, id, base))
}
diff --git a/packages/@tailwindcss-vite/src/index.ts b/packages/@tailwindcss-vite/src/index.ts
index 2c08920bb2e6..e14b84cf7f2d 100644
--- a/packages/@tailwindcss-vite/src/index.ts
+++ b/packages/@tailwindcss-vite/src/index.ts
@@ -35,9 +35,31 @@ export default function tailwindcss(): Plugin[] {
let moduleGraphCandidates = new DefaultMap>(() => new Set())
let moduleGraphScanner = new Scanner({})
- let roots: DefaultMap = new DefaultMap(
- (id) => new Root(id, () => moduleGraphCandidates, config!.base),
- )
+ let roots: DefaultMap = new DefaultMap((id) => {
+ let cssResolver = config!.createResolver({
+ ...config!.resolve,
+ extensions: ['.css'],
+ mainFields: ['style'],
+ conditions: ['style', 'development|production'],
+ tryIndex: false,
+ preferRelative: true,
+ })
+ function customCssResolver(id: string, base: string) {
+ return cssResolver(id, base, false, isSSR)
+ }
+
+ let jsResolver = config!.createResolver(config!.resolve)
+ function customJsResolver(id: string, base: string) {
+ return jsResolver(id, base, true, isSSR)
+ }
+ return new Root(
+ id,
+ () => moduleGraphCandidates,
+ config!.base,
+ customCssResolver,
+ customJsResolver,
+ )
+ })
function scanFile(id: string, content: string, extension: string, isSSR: boolean) {
let updated = false
@@ -423,6 +445,9 @@ class Root {
private id: string,
private getSharedCandidates: () => Map>,
private base: string,
+
+ private customCssResolver: (id: string, base: string) => Promise,
+ private customJsResolver: (id: string, base: string) => Promise,
) {}
// Generate the CSS for the root file. This can return false if the file is
@@ -448,6 +473,9 @@ class Root {
addWatchFile(path)
this.dependencies.add(path)
},
+
+ customCssResolver: this.customCssResolver,
+ customJsResolver: this.customJsResolver,
})
env.DEBUG && console.timeEnd('[@tailwindcss/vite] Setup compiler')
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 472b7b2feaa4..d8a0a94d7377 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1322,81 +1322,171 @@ packages:
cpu: [arm]
os: [android]
+ '@rollup/rollup-android-arm-eabi@4.27.4':
+ resolution: {integrity: sha512-2Y3JT6f5MrQkICUyRVCw4oa0sutfAsgaSsb0Lmmy1Wi2y7X5vT9Euqw4gOsCyy0YfKURBg35nhUKZS4mDcfULw==}
+ cpu: [arm]
+ os: [android]
+
'@rollup/rollup-android-arm64@4.20.0':
resolution: {integrity: sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==}
cpu: [arm64]
os: [android]
+ '@rollup/rollup-android-arm64@4.27.4':
+ resolution: {integrity: sha512-wzKRQXISyi9UdCVRqEd0H4cMpzvHYt1f/C3CoIjES6cG++RHKhrBj2+29nPF0IB5kpy9MS71vs07fvrNGAl/iA==}
+ cpu: [arm64]
+ os: [android]
+
'@rollup/rollup-darwin-arm64@4.20.0':
resolution: {integrity: sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==}
cpu: [arm64]
os: [darwin]
+ '@rollup/rollup-darwin-arm64@4.27.4':
+ resolution: {integrity: sha512-PlNiRQapift4LNS8DPUHuDX/IdXiLjf8mc5vdEmUR0fF/pyy2qWwzdLjB+iZquGr8LuN4LnUoSEvKRwjSVYz3Q==}
+ cpu: [arm64]
+ os: [darwin]
+
'@rollup/rollup-darwin-x64@4.20.0':
resolution: {integrity: sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==}
cpu: [x64]
os: [darwin]
+ '@rollup/rollup-darwin-x64@4.27.4':
+ resolution: {integrity: sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-freebsd-arm64@4.27.4':
+ resolution: {integrity: sha512-NBI2/i2hT9Q+HySSHTBh52da7isru4aAAo6qC3I7QFVsuhxi2gM8t/EI9EVcILiHLj1vfi+VGGPaLOUENn7pmw==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.27.4':
+ resolution: {integrity: sha512-wYcC5ycW2zvqtDYrE7deary2P2UFmSh85PUpAx+dwTCO9uw3sgzD6Gv9n5X4vLaQKsrfTSZZ7Z7uynQozPVvWA==}
+ cpu: [x64]
+ os: [freebsd]
+
'@rollup/rollup-linux-arm-gnueabihf@4.20.0':
resolution: {integrity: sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==}
cpu: [arm]
os: [linux]
+ '@rollup/rollup-linux-arm-gnueabihf@4.27.4':
+ resolution: {integrity: sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w==}
+ cpu: [arm]
+ os: [linux]
+
'@rollup/rollup-linux-arm-musleabihf@4.20.0':
resolution: {integrity: sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==}
cpu: [arm]
os: [linux]
+ '@rollup/rollup-linux-arm-musleabihf@4.27.4':
+ resolution: {integrity: sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A==}
+ cpu: [arm]
+ os: [linux]
+
'@rollup/rollup-linux-arm64-gnu@4.20.0':
resolution: {integrity: sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==}
cpu: [arm64]
os: [linux]
+ '@rollup/rollup-linux-arm64-gnu@4.27.4':
+ resolution: {integrity: sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg==}
+ cpu: [arm64]
+ os: [linux]
+
'@rollup/rollup-linux-arm64-musl@4.20.0':
resolution: {integrity: sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==}
cpu: [arm64]
os: [linux]
+ '@rollup/rollup-linux-arm64-musl@4.27.4':
+ resolution: {integrity: sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==}
+ cpu: [arm64]
+ os: [linux]
+
'@rollup/rollup-linux-powerpc64le-gnu@4.20.0':
resolution: {integrity: sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==}
cpu: [ppc64]
os: [linux]
+ '@rollup/rollup-linux-powerpc64le-gnu@4.27.4':
+ resolution: {integrity: sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==}
+ cpu: [ppc64]
+ os: [linux]
+
'@rollup/rollup-linux-riscv64-gnu@4.20.0':
resolution: {integrity: sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==}
cpu: [riscv64]
os: [linux]
+ '@rollup/rollup-linux-riscv64-gnu@4.27.4':
+ resolution: {integrity: sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==}
+ cpu: [riscv64]
+ os: [linux]
+
'@rollup/rollup-linux-s390x-gnu@4.20.0':
resolution: {integrity: sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==}
cpu: [s390x]
os: [linux]
+ '@rollup/rollup-linux-s390x-gnu@4.27.4':
+ resolution: {integrity: sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==}
+ cpu: [s390x]
+ os: [linux]
+
'@rollup/rollup-linux-x64-gnu@4.20.0':
resolution: {integrity: sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==}
cpu: [x64]
os: [linux]
+ '@rollup/rollup-linux-x64-gnu@4.27.4':
+ resolution: {integrity: sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q==}
+ cpu: [x64]
+ os: [linux]
+
'@rollup/rollup-linux-x64-musl@4.20.0':
resolution: {integrity: sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==}
cpu: [x64]
os: [linux]
+ '@rollup/rollup-linux-x64-musl@4.27.4':
+ resolution: {integrity: sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==}
+ cpu: [x64]
+ os: [linux]
+
'@rollup/rollup-win32-arm64-msvc@4.20.0':
resolution: {integrity: sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==}
cpu: [arm64]
os: [win32]
+ '@rollup/rollup-win32-arm64-msvc@4.27.4':
+ resolution: {integrity: sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A==}
+ cpu: [arm64]
+ os: [win32]
+
'@rollup/rollup-win32-ia32-msvc@4.20.0':
resolution: {integrity: sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==}
cpu: [ia32]
os: [win32]
+ '@rollup/rollup-win32-ia32-msvc@4.27.4':
+ resolution: {integrity: sha512-KtwEJOaHAVJlxV92rNYiG9JQwQAdhBlrjNRp7P9L8Cb4Rer3in+0A+IPhJC9y68WAi9H0sX4AiG2NTsVlmqJeQ==}
+ cpu: [ia32]
+ os: [win32]
+
'@rollup/rollup-win32-x64-msvc@4.20.0':
resolution: {integrity: sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==}
cpu: [x64]
os: [win32]
+ '@rollup/rollup-win32-x64-msvc@4.27.4':
+ resolution: {integrity: sha512-3j4jx1TppORdTAoBJRd+/wJRGCPC0ETWkXOecJ6PPZLj6SptXkrXcNqdj0oclbKML6FkQltdz7bBA3rUSirZug==}
+ cpu: [x64]
+ os: [win32]
+
'@rtsao/scc@1.1.0':
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
@@ -2758,8 +2848,8 @@ packages:
magic-string@0.30.11:
resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==}
- magic-string@0.30.12:
- resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==}
+ magic-string@0.30.13:
+ resolution: {integrity: sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==}
mdn-data@2.0.30:
resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
@@ -3194,6 +3284,11 @@ packages:
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
+ rollup@4.27.4:
+ resolution: {integrity: sha512-RLKxqHEMjh/RGLsDxAEsaLO3mWgyoU6x9w6n1ikAzet4B3gI2/3yP6PWY2p9QzRTh6MfEIXB3MwsOY0Iv3vNrw==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
@@ -4329,51 +4424,105 @@ snapshots:
'@rollup/rollup-android-arm-eabi@4.20.0':
optional: true
+ '@rollup/rollup-android-arm-eabi@4.27.4':
+ optional: true
+
'@rollup/rollup-android-arm64@4.20.0':
optional: true
+ '@rollup/rollup-android-arm64@4.27.4':
+ optional: true
+
'@rollup/rollup-darwin-arm64@4.20.0':
optional: true
+ '@rollup/rollup-darwin-arm64@4.27.4':
+ optional: true
+
'@rollup/rollup-darwin-x64@4.20.0':
optional: true
+ '@rollup/rollup-darwin-x64@4.27.4':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.27.4':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.27.4':
+ optional: true
+
'@rollup/rollup-linux-arm-gnueabihf@4.20.0':
optional: true
+ '@rollup/rollup-linux-arm-gnueabihf@4.27.4':
+ optional: true
+
'@rollup/rollup-linux-arm-musleabihf@4.20.0':
optional: true
+ '@rollup/rollup-linux-arm-musleabihf@4.27.4':
+ optional: true
+
'@rollup/rollup-linux-arm64-gnu@4.20.0':
optional: true
+ '@rollup/rollup-linux-arm64-gnu@4.27.4':
+ optional: true
+
'@rollup/rollup-linux-arm64-musl@4.20.0':
optional: true
+ '@rollup/rollup-linux-arm64-musl@4.27.4':
+ optional: true
+
'@rollup/rollup-linux-powerpc64le-gnu@4.20.0':
optional: true
+ '@rollup/rollup-linux-powerpc64le-gnu@4.27.4':
+ optional: true
+
'@rollup/rollup-linux-riscv64-gnu@4.20.0':
optional: true
+ '@rollup/rollup-linux-riscv64-gnu@4.27.4':
+ optional: true
+
'@rollup/rollup-linux-s390x-gnu@4.20.0':
optional: true
+ '@rollup/rollup-linux-s390x-gnu@4.27.4':
+ optional: true
+
'@rollup/rollup-linux-x64-gnu@4.20.0':
optional: true
+ '@rollup/rollup-linux-x64-gnu@4.27.4':
+ optional: true
+
'@rollup/rollup-linux-x64-musl@4.20.0':
optional: true
+ '@rollup/rollup-linux-x64-musl@4.27.4':
+ optional: true
+
'@rollup/rollup-win32-arm64-msvc@4.20.0':
optional: true
+ '@rollup/rollup-win32-arm64-msvc@4.27.4':
+ optional: true
+
'@rollup/rollup-win32-ia32-msvc@4.20.0':
optional: true
+ '@rollup/rollup-win32-ia32-msvc@4.27.4':
+ optional: true
+
'@rollup/rollup-win32-x64-msvc@4.20.0':
optional: true
+ '@rollup/rollup-win32-x64-msvc@4.27.4':
+ optional: true
+
'@rtsao/scc@1.1.0': {}
'@rushstack/eslint-patch@1.10.4': {}
@@ -6113,7 +6262,7 @@ snapshots:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
- magic-string@0.30.12:
+ magic-string@0.30.13:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
@@ -6539,6 +6688,30 @@ snapshots:
'@rollup/rollup-win32-x64-msvc': 4.20.0
fsevents: 2.3.3
+ rollup@4.27.4:
+ dependencies:
+ '@types/estree': 1.0.6
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.27.4
+ '@rollup/rollup-android-arm64': 4.27.4
+ '@rollup/rollup-darwin-arm64': 4.27.4
+ '@rollup/rollup-darwin-x64': 4.27.4
+ '@rollup/rollup-freebsd-arm64': 4.27.4
+ '@rollup/rollup-freebsd-x64': 4.27.4
+ '@rollup/rollup-linux-arm-gnueabihf': 4.27.4
+ '@rollup/rollup-linux-arm-musleabihf': 4.27.4
+ '@rollup/rollup-linux-arm64-gnu': 4.27.4
+ '@rollup/rollup-linux-arm64-musl': 4.27.4
+ '@rollup/rollup-linux-powerpc64le-gnu': 4.27.4
+ '@rollup/rollup-linux-riscv64-gnu': 4.27.4
+ '@rollup/rollup-linux-s390x-gnu': 4.27.4
+ '@rollup/rollup-linux-x64-gnu': 4.27.4
+ '@rollup/rollup-linux-x64-musl': 4.27.4
+ '@rollup/rollup-win32-arm64-msvc': 4.27.4
+ '@rollup/rollup-win32-ia32-msvc': 4.27.4
+ '@rollup/rollup-win32-x64-msvc': 4.27.4
+ fsevents: 2.3.3
+
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
@@ -6758,7 +6931,7 @@ snapshots:
estree-walker: 3.0.3
is-reference: 3.0.3
locate-character: 3.0.0
- magic-string: 0.30.12
+ magic-string: 0.30.13
periscopic: 3.1.0
tailwindcss@3.4.14:
@@ -7023,8 +7196,8 @@ snapshots:
vite@5.4.0(@types/node@20.14.13)(lightningcss@1.26.0(patch_hash=5hwfyehqvg5wjb7mwtdvubqbl4))(terser@5.31.6):
dependencies:
esbuild: 0.21.5
- postcss: 8.4.47
- rollup: 4.20.0
+ postcss: 8.4.49
+ rollup: 4.27.4
optionalDependencies:
'@types/node': 20.14.13
fsevents: 2.3.3