fix: Amélioration de la résolution des chemins relatifs VAULT_CONFS_DIR

- Ajout de logique spéciale pour les chemins commençant par ../../../
- Détection automatique du répertoire du fichier .env
- Support amélioré pour les chemins relatifs dans les projets clonés
- Fallback vers le répertoire parent du SDK quand approprié
This commit is contained in:
4NK Dev 2025-10-01 14:59:17 +00:00
parent 21548dbdce
commit 8dd9858576

View File

@ -391,10 +391,22 @@ export class SecureVaultClient {
try { try {
// 1. Créer le dossier de destination s'il n'existe pas // 1. Créer le dossier de destination s'il n'existe pas
// Si c'est un chemin relatif, le résoudre par rapport au répertoire du fichier .env // Si c'est un chemin relatif, le résoudre par rapport au répertoire de base approprié
const targetDir = path.isAbsolute(localDir) let targetDir;
? localDir if (path.isAbsolute(localDir)) {
: path.resolve(this._getEnvFileDirectory(), localDir); targetDir = localDir;
} else {
const baseDir = this._getBaseDirectoryForRelativePaths();
// Si le chemin commence par plusieurs ../, on part du répertoire du fichier .env
// sinon on part du répertoire parent du SDK
if (localDir.startsWith('../../../') && path.basename(baseDir) === 'sdk-client') {
// Pour les chemins comme ../../../projects/..., partir du répertoire du fichier .env
const envFileDir = path.dirname(path.resolve(path.join(__dirname, '.env')));
targetDir = path.resolve(envFileDir, localDir);
} else {
targetDir = path.resolve(baseDir, localDir);
}
}
if (!fs.existsSync(targetDir)) { if (!fs.existsSync(targetDir)) {
fs.mkdirSync(targetDir, { recursive: true }); fs.mkdirSync(targetDir, { recursive: true });
if (verbose) { if (verbose) {
@ -615,9 +627,11 @@ export class SecureVaultClient {
} }
/** /**
* Retourne le répertoire du fichier .env trouvé * Retourne le répertoire de base pour résoudre les chemins relatifs VAULT_CONFS_DIR
* Pour les chemins avec plusieurs ../ (comme ../../../), on part du répertoire parent du SDK
* Cela permet aux chemins relatifs de fonctionner correctement depuis le fichier .env
*/ */
private _getEnvFileDirectory(): string { private _getBaseDirectoryForRelativePaths(): string {
const possibleEnvPaths = [ const possibleEnvPaths = [
'.env', // Répertoire courant '.env', // Répertoire courant
'../.env', // Répertoire parent '../.env', // Répertoire parent
@ -628,10 +642,13 @@ export class SecureVaultClient {
path.join(process.cwd(), '.env'), // Répertoire de travail path.join(process.cwd(), '.env'), // Répertoire de travail
]; ];
let envFileDir = null;
for (const envPath of possibleEnvPaths) { for (const envPath of possibleEnvPaths) {
try { try {
if (fs.existsSync(envPath)) { if (fs.existsSync(envPath)) {
return path.dirname(path.resolve(envPath)); envFileDir = path.dirname(path.resolve(envPath));
break;
} }
} catch (error) { } catch (error) {
// Ignorer les erreurs et continuer avec le chemin suivant // Ignorer les erreurs et continuer avec le chemin suivant
@ -640,7 +657,17 @@ export class SecureVaultClient {
} }
// Fallback vers le répertoire de travail si aucun .env n'est trouvé // Fallback vers le répertoire de travail si aucun .env n'est trouvé
return process.cwd(); if (!envFileDir) {
envFileDir = process.cwd();
}
// Si le fichier .env est dans sdk-client/, on part du répertoire parent
// Cela permet aux chemins comme ../../../projects/... de fonctionner correctement
if (path.basename(envFileDir) === 'sdk-client') {
return path.dirname(envFileDir); // Remonter au répertoire parent du SDK
}
return envFileDir;
} }
/** /**