UNPKG

@xec-sh/cli

Version:

Xec: The Universal Shell for TypeScript

125 lines 3.42 kB
export function getDefaultConfig() { return { version: '1.0.0', name: 'my-project', description: 'A Xec managed project', defaults: {}, targets: { local: { type: 'local' }, defaults: { ssh: { port: 22, keepAlive: true, keepAliveInterval: 30000, timeout: 60000 }, docker: { workdir: '/app', tty: true, interactive: true }, kubernetes: { namespace: 'default', context: undefined } } }, commands: { exec: { shell: '/bin/sh', tty: true, interactive: true }, logs: { tail: '50', timestamps: false, follow: false, prefix: false, since: undefined, until: undefined, grep: undefined, color: true }, cp: { recursive: true, preserveMode: true, preserveTimestamps: false, followSymlinks: false }, sync: { delete: false, exclude: [], dryRun: false } }, secrets: { provider: 'env', path: undefined }, vars: {}, tasks: {} }; } export const ROOT_KEY_ORDER = [ 'version', 'name', 'description', 'defaults', 'targets', 'commands', 'secrets', 'vars', 'tasks' ]; export function sortConfigKeys(config) { if (!config || typeof config !== 'object' || Array.isArray(config)) { return config; } const sorted = {}; for (const key of ROOT_KEY_ORDER) { if (key in config) { sorted[key] = config[key]; } } for (const key in config) { if (!ROOT_KEY_ORDER.includes(key)) { sorted[key] = config[key]; } } return sorted; } export function mergeWithDefaults(config, defaults = getDefaultConfig()) { const result = {}; for (const key in defaults) { if (defaults[key] !== undefined) { if (typeof defaults[key] === 'object' && !Array.isArray(defaults[key]) && defaults[key] !== null) { result[key] = mergeWithDefaults(config?.[key] || {}, defaults[key]); } else { result[key] = config?.[key] !== undefined ? config[key] : defaults[key]; } } } for (const key in config) { if (!(key in result)) { result[key] = config[key]; } } return result; } export function isDefaultValue(path, value, defaults = getDefaultConfig()) { const keys = path.split('.'); let defaultValue = defaults; for (const key of keys) { if (defaultValue && typeof defaultValue === 'object' && key in defaultValue) { defaultValue = defaultValue[key]; } else { return false; } } return JSON.stringify(value) === JSON.stringify(defaultValue); } //# sourceMappingURL=defaults.js.map