44 lines
1.5 KiB
JavaScript
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;
|
|
}
|