mirror of
https://github.com/johndoe6345789/low-code-react-app-b.git
synced 2026-04-24 13:44:54 +00:00
154 lines
6.1 KiB
JavaScript
154 lines
6.1 KiB
JavaScript
import { randomBytes } from 'crypto';
|
|
import sparkAgent from './agentPlugin.js';
|
|
import { tagSourcePlugin, designerHost } from './designerPlugin.js';
|
|
import { heartbeatPlugin } from './heartbeatPlugin.js';
|
|
import createIconImportProxy from './vitePhosphorIconProxyPlugin.js';
|
|
import fs from 'fs';
|
|
import path from 'path';
|
|
import { createRequire } from 'node:module';
|
|
import { readFileSync } from 'node:fs';
|
|
import 'os';
|
|
|
|
const require$1 = createRequire(import.meta.url);
|
|
const runtimeBuildPlugin = () => {
|
|
return {
|
|
name: 'runtime-wrapper',
|
|
apply: 'build',
|
|
generateBundle(options, bundle) {
|
|
try {
|
|
const runtimeProxyContent = readFileSync(require$1.resolve('./runtimeProxy'), 'utf-8');
|
|
this.emitFile({
|
|
type: 'asset',
|
|
fileName: 'proxy.js',
|
|
source: runtimeProxyContent
|
|
});
|
|
const sparkPackageJsonContent = readFileSync(require$1.resolve('./spark.package.json'), 'utf-8');
|
|
this.emitFile({
|
|
type: 'asset',
|
|
fileName: 'package.json',
|
|
source: sparkPackageJsonContent
|
|
});
|
|
console.log('Emitted proxy files to build output');
|
|
}
|
|
catch (error) {
|
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
console.warn('⚠ Could not resolve files:', errorMessage);
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
function findProjectRoot(startDir = process.cwd()) {
|
|
let currentDir = startDir;
|
|
while (currentDir !== path.dirname(currentDir)) {
|
|
if (fs.existsSync(path.join(currentDir, 'package.json'))) {
|
|
return currentDir;
|
|
}
|
|
currentDir = path.dirname(currentDir);
|
|
}
|
|
return process.cwd();
|
|
}
|
|
function readSparkConfig() {
|
|
try {
|
|
const projectRoot = findProjectRoot();
|
|
const configPath = path.join(projectRoot, 'runtime.config.json');
|
|
if (fs.existsSync(configPath)) {
|
|
const configContent = fs.readFileSync(configPath, 'utf-8');
|
|
const config = JSON.parse(configContent);
|
|
return config;
|
|
}
|
|
}
|
|
catch (error) {
|
|
console.warn('Warning: Could not read spark.json configuration file:', error);
|
|
}
|
|
return null;
|
|
}
|
|
const addGitHubAuth = (proxy, options) => {
|
|
proxy.on('proxyReq', (proxyReq, req, res) => {
|
|
if (process.env.GITHUB_TOKEN) {
|
|
proxyReq.setHeader('Authorization', `bearer ${process.env.GITHUB_TOKEN}`);
|
|
}
|
|
});
|
|
};
|
|
function sparkVitePlugin(opts = {}) {
|
|
const { serverURL = process.env.SPARK_AGENT_URL, agentDisabled = false, includeProxy = true, outputDir = process.env.OUTPUT_DIR || 'dist', githubRuntimeName = readSparkConfig()?.app || process.env.GITHUB_RUNTIME_PERMANENT_NAME, githubApiUrl = process.env.GITHUB_API_URL || 'https://api.github.com', port = 5000, corsOrigin = /^https?:\/\/(?:(?:[^:]+\.)?localhost|127\.0\.0\.1|\[::1\]|(?:.*\.)?github\.com)(?::\d+)?$/, hmrOverlay = false, } = opts;
|
|
const runningInWorkbench = !!process.env.SPARK_WORKBENCH_ID;
|
|
const plugins = [
|
|
createIconImportProxy(),
|
|
// Main configuration plugin
|
|
{
|
|
name: 'spark-config',
|
|
config: () => ({
|
|
build: {
|
|
outDir: outputDir
|
|
},
|
|
define: {
|
|
GITHUB_RUNTIME_PERMANENT_NAME: JSON.stringify(githubRuntimeName),
|
|
BASE_KV_SERVICE_URL: JSON.stringify('/_spark/kv'),
|
|
VITE_SERVER_SESSION_ID: JSON.stringify(randomBytes(16).toString('hex')),
|
|
VITE_WORKBENCH_ORIGIN: JSON.stringify(process.env.SPARK_WORKBENCH_ORIGIN || 'https://github.com'),
|
|
},
|
|
optimizeDeps: {
|
|
include: [
|
|
"@phosphor-icons/react",
|
|
"@github/spark/hooks",
|
|
"sonner",
|
|
"react",
|
|
"recharts",
|
|
"react-day-picker",
|
|
"tailwind-merge",
|
|
]
|
|
},
|
|
server: {
|
|
port,
|
|
hmr: {
|
|
overlay: hmrOverlay,
|
|
},
|
|
cors: {
|
|
origin: corsOrigin
|
|
},
|
|
watch: {
|
|
ignored: [
|
|
'**/prd.md',
|
|
'**.log',
|
|
'**/.azcopy/**',
|
|
],
|
|
awaitWriteFinish: {
|
|
pollInterval: 50,
|
|
stabilityThreshold: 100,
|
|
},
|
|
},
|
|
proxy: {
|
|
'^/_spark/llm': {
|
|
target: 'https://models.github.ai/inference/chat/completions',
|
|
changeOrigin: true,
|
|
ignorePath: true,
|
|
configure: addGitHubAuth
|
|
},
|
|
'^/_spark/.*': {
|
|
target: githubApiUrl,
|
|
changeOrigin: true,
|
|
rewrite: (path) => {
|
|
const serviceName = path.replace('/_spark/', '').split('/')[0];
|
|
return path.replace(`/_spark/${serviceName}`, `/runtime/${githubRuntimeName}/${serviceName}`);
|
|
},
|
|
configure: addGitHubAuth
|
|
}
|
|
},
|
|
},
|
|
})
|
|
}
|
|
];
|
|
if (includeProxy) {
|
|
plugins.push(runtimeBuildPlugin());
|
|
}
|
|
// Add workbench-specific plugins only when running in workbench
|
|
if (runningInWorkbench) {
|
|
plugins.unshift(sparkAgent({ serverURL, disabled: agentDisabled }), tagSourcePlugin(), heartbeatPlugin(), designerHost());
|
|
}
|
|
return plugins;
|
|
}
|
|
|
|
export { sparkVitePlugin as default };
|
|
//# sourceMappingURL=sparkVitePlugin.js.map
|