Files
windmill/frontend/scripts/package-system-prompts.js

92 lines
2.7 KiB
JavaScript

import { execSync } from 'child_process'
import { writeFileSync, mkdirSync, cpSync, existsSync, rmSync, readdirSync, readFileSync } from 'fs'
import { fileURLToPath } from 'url'
import { dirname, join, resolve, relative } from 'path'
const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)
const frontendDir = resolve(__dirname, '..')
const rootDir = resolve(frontendDir, '..')
const systemPromptsDir = join(rootDir, 'system_prompts', 'auto-generated')
const packageDir = join(frontendDir, 'package')
const packageSystemPromptsDir = join(packageDir, 'system_prompts')
// Create package/system_prompts directory
if (!existsSync(packageSystemPromptsDir)) {
mkdirSync(packageSystemPromptsDir, { recursive: true })
}
// Create a temporary tsconfig for compiling system_prompts
const tempTsConfig = {
compilerOptions: {
target: 'ES2021',
module: 'ESNext',
moduleResolution: 'bundler',
lib: ['ES2021'],
declaration: true,
declarationMap: false,
sourceMap: false,
outDir: packageSystemPromptsDir,
rootDir: systemPromptsDir,
esModuleInterop: true,
skipLibCheck: true,
strict: false,
isolatedModules: true,
resolveJsonModule: true,
allowSyntheticDefaultImports: true
},
include: [join(systemPromptsDir, '**/*.ts')],
exclude: ['node_modules']
}
const tempTsConfigPath = join(frontendDir, 'tsconfig.system-prompts.json')
writeFileSync(tempTsConfigPath, JSON.stringify(tempTsConfig, null, 2))
try {
// Compile TypeScript files
console.log('Compiling system_prompts...')
execSync(`npx tsc --project ${tempTsConfigPath}`, {
stdio: 'inherit',
cwd: frontendDir
})
console.log('system_prompts compiled and copied to package/system_prompts')
// Rewrite imports in packaged files to use the correct path
console.log('Rewriting $system_prompts imports in packaged files...')
function rewriteImportsInFile(filePath) {
const content = readFileSync(filePath, 'utf-8')
// Specifically rewrite: ../../../../../../../system_prompts/auto-generated to ../../../../system_prompts
const pattern = /from\s+['"](\.\.\/){7}system_prompts\/auto-generated['"]/g
const modified = content.replace(pattern, "from '../../../../system_prompts'")
if (modified !== content) {
writeFileSync(filePath, modified, 'utf-8')
}
}
function processDirectory(dir) {
const entries = readdirSync(dir, { withFileTypes: true })
for (const entry of entries) {
const fullPath = join(dir, entry.name)
if (entry.isDirectory()) {
processDirectory(fullPath)
} else if (entry.isFile() && entry.name.endsWith('.js')) {
rewriteImportsInFile(fullPath)
}
}
}
processDirectory(packageDir)
console.log('Finished rewriting imports')
} finally {
// Clean up temporary tsconfig
if (existsSync(tempTsConfigPath)) {
rmSync(tempTsConfigPath)
}
}