← back to ClawCoder
src/lib/generator/bundle.ts
52 lines
import type { Profile } from '../profiles/types'
import { generateClaudeMd, type GeneratorVars } from './claude-md'
import { generateRulesFiles, type RuleFile } from './rules'
import { generateSettingsJson, serializeSettingsJson, type SettingsJson } from './hooks'
/**
* A complete generated bundle for a profile.
*/
export interface GeneratedBundle {
/** The rendered CLAUDE.md content */
claudeMd: string
/** Rule files to place in .claude/rules/ */
rulesFiles: RuleFile[]
/** The .claude/settings.json content (object form) */
settings: SettingsJson
/** The .claude/settings.json content (serialized JSON string) */
settingsJson: string
/** Profile metadata for reference */
profile: {
slug: string
displayName: string
ageGroup: string
skillLevel: string
persona: string
}
}
/**
* Generate a complete bundle of all Claude configuration files
* for a given profile and user-provided variables.
*/
export function generateBundle(profile: Profile, vars: GeneratorVars): GeneratedBundle {
const claudeMd = generateClaudeMd(profile, vars)
const rulesFiles = generateRulesFiles(profile)
const settings = generateSettingsJson(profile)
const settingsJson = serializeSettingsJson(settings)
return {
claudeMd,
rulesFiles,
settings,
settingsJson,
profile: {
slug: profile.slug,
displayName: profile.displayName,
ageGroup: profile.ageGroup,
skillLevel: profile.skillLevel,
persona: profile.persona,
},
}
}