Width / normalization
JS
open
Full-width/kana conversion drops the first and last char of each range (moji)
Width/kana conversion drops the first and last character of each range
moji · niwaringo/moji
Symptom
Full-width/half-width and kana range conversions skip the boundary characters of each range (! ~ ぁ ゖ ...), so edge code points like ! (U+FF01) are not converted.
Minimal repro
moji('!~').convert('ZE', 'HE').toString() // boundary chars at range edges are skipped
Fix
Convert the first and last character of each range, not just the interior.