LibreChat/packages/client/tsdown.config.mjs
Lacy dea71c8396
🪟 fix: Cross-Platform Absolute-Path Check in tsdown neverBundle Predicates (#13700)
The deps.neverBundle predicates in the four package tsdown configs detect
first-party (resolved) module ids with !id.startsWith('/'). On Windows,
resolved ids are absolute paths like C:\..., which never match, so every
project module is externalized. Builds still exit 0 but emit near-empty
bundles — e.g. packages/client dist/index.mjs drops from ~276 kB to
~2.7 kB and dist/style.css is never produced, breaking the client dev
server with "Failed to resolve import @librechat/client/style.css".

Replace the startsWith('/') check with path.isAbsolute(id), which is
behavior-identical on POSIX and correct on Windows.

Co-authored-by: phoenixtekk <phoenixtekk@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-06-13 11:04:46 -04:00

33 lines
1.5 KiB
JavaScript

import path from 'node:path';
import { defineConfig } from 'tsdown';
// Mirror the prior Rollup `@rollup/plugin-replace` substitutions: only these three are
// baked at lib-build time. `import.meta.env.MODE` and `REACT_APP_*` are intentionally left
// intact so the consuming Vite app resolves them at app-build time.
const define = {
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'production'),
'process.env.VITE_ENABLE_LOGGER': JSON.stringify(process.env.VITE_ENABLE_LOGGER || 'false'),
'process.env.VITE_LOGGER_FILTER': JSON.stringify(process.env.VITE_LOGGER_FILTER || ''),
};
export default defineConfig({
entry: ['src/index.ts'],
format: ['esm', 'cjs'],
platform: 'browser',
dts: { oxc: true },
outDir: 'dist',
sourcemap: true,
// Force .mjs/.cjs (and .d.mts/.d.cts) regardless of package `type`, so the package can stay
// CommonJS (jest.config.js / babel.config.js are CJS) while still shipping dual ESM/CJS.
fixedExtension: true,
define,
// Extract all component CSS into a single `dist/style.css` (no import left in the JS, so the
// CJS output stays valid CommonJS). Consumers import `@librechat/client/style.css` once.
css: { inject: false },
// Externalize every third-party import (consumers provide the peers + react/jsx-runtime);
// bundle only relative, `~`-aliased, and absolute sources.
deps: {
neverBundle: (id) => !id.startsWith('.') && !id.startsWith('~') && !path.isAbsolute(id),
onlyBundle: false,
},
});