UNPKG

relaycode

Version:

A developer assistant that automates applying code changes from LLMs.

1 lines 6 kB
{"version":3,"sources":["../../src/core/config.ts"],"names":["findConfigPath","cwd","fileName","CONFIG_FILE_NAMES","configPath","path","fs","error","isEnoentError","findConfig","fileContent","configJson","ConfigSchema","z","loadConfigOrExit","config","logger","chalk","CONFIG_FILE_NAME_JSON","stateDirectoryCache","getStateDirectory","STATE_DIRECTORY_NAME","ensureStateDirExists","stateDirPath","createConfig","projectId","configContent","getProjectId","pkgJsonPath","pkgJson"],"mappings":"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","file":"config.cjs","sourcesContent":["import { z } from 'zod';\nimport path from 'path';\nimport { promises as fs } from 'fs';\nimport { type Config, ConfigSchema } from 'relaycode-core';\nimport { CONFIG_FILE_NAMES, STATE_DIRECTORY_NAME, CONFIG_FILE_NAME_JSON } from '../utils/constants';\nimport { logger, isEnoentError } from '../utils/logger';\nimport chalk from 'chalk';\n\nexport const findConfigPath = async (cwd: string = process.cwd()): Promise<string | null> => {\n for (const fileName of CONFIG_FILE_NAMES) {\n const configPath = path.join(cwd, fileName);\n try {\n await fs.access(configPath);\n return configPath;\n } catch (error) {\n if (!isEnoentError(error)) {\n // ignore other errors for now to keep searching\n }\n }\n }\n return null;\n};\n\nexport const findConfig = async (cwd: string = process.cwd()): Promise<Config | null> => {\n const configPath = await findConfigPath(cwd);\n if (!configPath) {\n return null;\n }\n try {\n const fileContent = await fs.readFile(configPath, 'utf-8');\n const configJson = JSON.parse(fileContent);\n return ConfigSchema.parse(configJson);\n } catch (error) {\n if (isEnoentError(error)) {\n return null;\n }\n if (error instanceof z.ZodError) {\n throw new Error(`Invalid configuration in ${path.basename(configPath)}: ${error.message}`);\n }\n throw error;\n }\n};\n\nexport const loadConfigOrExit = async (cwd: string = process.cwd()): Promise<Config> => {\n const config = await findConfig(cwd);\n if (!config) {\n logger.error(`Configuration file ('${chalk.cyan(CONFIG_FILE_NAME_JSON)}') not found.`);\n logger.info(`Please run ${chalk.magenta(\"'relay init'\")} to create one.`);\n process.exit(1);\n }\n return config;\n};\n\nconst stateDirectoryCache = new Map<string, boolean>();\n\nexport const getStateDirectory = (cwd: string) => path.resolve(cwd, STATE_DIRECTORY_NAME);\n\nexport const ensureStateDirExists = async (cwd: string = process.cwd()): Promise<void> => {\n const stateDirPath = getStateDirectory(cwd);\n if (!stateDirectoryCache.has(stateDirPath)) {\n await fs.mkdir(stateDirPath, { recursive: true });\n stateDirectoryCache.set(stateDirPath, true);\n }\n};\n\nexport const createConfig = async (projectId: string, cwd: string = process.cwd()): Promise<Config> => {\n\n const defaultConfig = ConfigSchema.parse({ projectId });\n\n const configContent = {\n $schema: \"https://relay.noca.pro/schema.json\",\n ...defaultConfig\n };\n\n const configPath = path.join(cwd, CONFIG_FILE_NAME_JSON);\n await fs.writeFile(configPath, JSON.stringify(configContent, null, 2));\n\n return configContent;\n};\n\nexport const getProjectId = async (cwd: string = process.cwd()): Promise<string> => {\n try {\n const pkgJsonPath = path.join(cwd, 'package.json');\n const fileContent = await fs.readFile(pkgJsonPath, 'utf-8');\n const pkgJson = JSON.parse(fileContent);\n if (pkgJson.name && typeof pkgJson.name === 'string') {\n return pkgJson.name;\n }\n } catch (e) {\n // Ignore if package.json doesn't exist or is invalid\n }\n return path.basename(cwd);\n};\n"]}