2025-03-06 22:09:53 -07:00

44 lines
1.5 KiB
JavaScript

class Sigil {
// Convert string to sigil array
static generate(str) {
if (!str) return [];
// Convert to lowercase, remove non-word characters
const cleaned = str.toLowerCase().replace(/[^a-z]/g, '');
// Remove vowels
const noVowels = cleaned.replace(/[aeiou]/g, '');
// Remove duplicate characters
const deduped = [...new Set(noVowels)].join('');
// Convert to ASCII values and get digital roots
return [...deduped].map(char => {
const ascii = char.charCodeAt(0);
return Sigil.getDigitalRoot(ascii);
});
}
// Get digital root of a number (sum digits until single digit)
static getDigitalRoot(num) {
if (num < 10) return num;
return Sigil.getDigitalRoot([...num.toString()].reduce((sum, digit) => sum + parseInt(digit), 0));
}
// Helper to validate and debug sigil generation
static debug(str) {
console.log({
original: str,
lowercase: str.toLowerCase(),
cleaned: str.toLowerCase().replace(/[^a-z]/g, ''),
noVowels: str.toLowerCase().replace(/[^a-z]/g, '').replace(/[aeiou]/g, ''),
deduped: [...new Set(str.toLowerCase().replace(/[^a-z]/g, '').replace(/[aeiou]/g, ''))].join(''),
sigil: Sigil.generate(str)
});
}
}
// Export for use in other files
if (typeof module !== 'undefined' && module.exports) {
module.exports = Sigil;
}