File size: 5,072 Bytes
6927c07 d0828e4 621b880 6927c07 5a437ee d8a277f d1d23d8 d8a277f 5a437ee 49c7129 d1d23d8 d8a277f d1d23d8 d8a277f d1d23d8 d8a277f d1d23d8 6927c07 d8a277f d1d23d8 63abf52 d1d23d8 d8a277f 637ad2b 6927c07 621b880 49c7129 621b880 6927c07 fb8191e c4c7362 6927c07 d0828e4 621b880 6927c07 c4c7362 49217f2 6927c07 d0828e4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
import { cloudflareDevProxyVitePlugin as remixCloudflareDevProxy, vitePlugin as remixVitePlugin } from '@remix-run/dev';
import UnoCSS from 'unocss/vite';
import { defineConfig, type ViteDevServer } from 'vite';
import { nodePolyfills } from 'vite-plugin-node-polyfills';
import { optimizeCssModules } from 'vite-plugin-optimize-css-modules';
import tsconfigPaths from 'vite-tsconfig-paths';
// import * as dotenv from 'dotenv';
import { execSync } from 'child_process';
import { readFileSync } from 'fs';
import { join } from 'path';
// dotenv.config();
// Get detailed git info with fallbacks
const getGitInfo = () => {
try {
return {
commitHash: execSync('git rev-parse --short HEAD').toString().trim(),
branch: execSync('git rev-parse --abbrev-ref HEAD').toString().trim(),
commitTime: execSync('git log -1 --format=%cd').toString().trim(),
author: execSync('git log -1 --format=%an').toString().trim(),
email: execSync('git log -1 --format=%ae').toString().trim(),
remoteUrl: execSync('git config --get remote.origin.url').toString().trim(),
repoName: execSync('git config --get remote.origin.url')
.toString()
.trim()
.replace(/^.*github.com[:/]/, '')
.replace(/\.git$/, ''),
};
} catch {
return {
commitHash: 'no-git-info',
branch: 'unknown',
commitTime: 'unknown',
author: 'unknown',
email: 'unknown',
remoteUrl: 'unknown',
repoName: 'unknown',
};
}
};
// Read package.json with detailed dependency info
const getPackageJson = () => {
try {
const pkgPath = join(process.cwd(), 'package.json');
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
return {
name: pkg.name,
description: pkg.description,
license: pkg.license,
dependencies: pkg.dependencies || {},
devDependencies: pkg.devDependencies || {},
peerDependencies: pkg.peerDependencies || {},
optionalDependencies: pkg.optionalDependencies || {},
};
} catch {
return {
name: 'bolt.diy',
description: 'A DIY LLM interface',
license: 'MIT',
dependencies: {},
devDependencies: {},
peerDependencies: {},
optionalDependencies: {},
};
}
};
const pkg = getPackageJson();
const gitInfo = getGitInfo();
export default defineConfig((config) => {
return {
define: {
__COMMIT_HASH: JSON.stringify(gitInfo.commitHash),
__GIT_BRANCH: JSON.stringify(gitInfo.branch),
__GIT_COMMIT_TIME: JSON.stringify(gitInfo.commitTime),
__GIT_AUTHOR: JSON.stringify(gitInfo.author),
__GIT_EMAIL: JSON.stringify(gitInfo.email),
__GIT_REMOTE_URL: JSON.stringify(gitInfo.remoteUrl),
__GIT_REPO_NAME: JSON.stringify(gitInfo.repoName),
__APP_VERSION: JSON.stringify(process.env.npm_package_version),
__PKG_NAME: JSON.stringify(pkg.name),
__PKG_DESCRIPTION: JSON.stringify(pkg.description),
__PKG_LICENSE: JSON.stringify(pkg.license),
__PKG_DEPENDENCIES: JSON.stringify(pkg.dependencies),
__PKG_DEV_DEPENDENCIES: JSON.stringify(pkg.devDependencies),
__PKG_PEER_DEPENDENCIES: JSON.stringify(pkg.peerDependencies),
__PKG_OPTIONAL_DEPENDENCIES: JSON.stringify(pkg.optionalDependencies),
},
build: {
target: 'esnext',
},
plugins: [
nodePolyfills({
include: ['path', 'buffer', 'process'],
}),
config.mode !== 'test' && remixCloudflareDevProxy(),
remixVitePlugin({
future: {
v3_fetcherPersist: true,
v3_relativeSplatPath: true,
v3_throwAbortReason: true,
v3_lazyRouteDiscovery: true,
},
}),
UnoCSS(),
tsconfigPaths(),
chrome129IssuePlugin(),
config.mode === 'production' && optimizeCssModules({ apply: 'build' }),
],
envPrefix: [
'VITE_',
'OPENAI_LIKE_API_BASE_URL',
'OLLAMA_API_BASE_URL',
'LMSTUDIO_API_BASE_URL',
'TOGETHER_API_BASE_URL',
],
css: {
preprocessorOptions: {
scss: {
api: 'modern-compiler',
},
},
},
};
});
function chrome129IssuePlugin() {
return {
name: 'chrome129IssuePlugin',
configureServer(server: ViteDevServer) {
server.middlewares.use((req, res, next) => {
const raw = req.headers['user-agent']?.match(/Chrom(e|ium)\/([0-9]+)\./);
if (raw) {
const version = parseInt(raw[2], 10);
if (version === 129) {
res.setHeader('content-type', 'text/html');
res.end(
'<body><h1>Please use Chrome Canary for testing.</h1><p>Chrome 129 has an issue with JavaScript modules & Vite local development, see <a href="https://github.com/stackblitz/bolt.new/issues/86#issuecomment-2395519258">for more information.</a></p><p><b>Note:</b> This only impacts <u>local development</u>. `pnpm run build` and `pnpm run start` will work fine in this browser.</p></body>',
);
return;
}
}
next();
});
},
};
}
|