env-sentinel
Version:
Zero-dependency tool that auto-validates .env files against schema.env, with optional fallback and secure warnings.
31 lines (30 loc) • 1.12 kB
JavaScript
export function noDuplicateReferenceCheck(lineNumber, lineContent) {
const equalIndex = lineContent.indexOf('=');
if (equalIndex === -1)
return;
const rawKey = lineContent.slice(0, equalIndex).trim();
let rawValue = lineContent.slice(equalIndex + 1).trim();
const isQuoted = (rawValue.startsWith('"') && rawValue.endsWith('"')) || (rawValue.startsWith("'") && rawValue.endsWith("'"));
if (isQuoted)
return;
rawValue = rawValue.split('#')[0].trim();
const referenceRegex = /\$\{([A-Z0-9_]+)\}/g;
const found = new Map();
let match;
while ((match = referenceRegex.exec(rawValue)) !== null) {
const varName = match[1];
const count = found.get(varName) ?? 0;
found.set(varName, count + 1);
}
for (const [ref, count] of found.entries()) {
if (count > 1) {
return {
line: lineNumber,
issue: `Duplicate reference "\${${ref}}" found ${count} times in "${rawKey}"`,
content: lineContent,
severity: 'notice',
};
}
}
return;
}