@xec-sh/cli
Version:
Xec: The Universal Shell for TypeScript
125 lines • 3.42 kB
JavaScript
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