LevenshteinStringMatcher Class — astro Architecture
Architecture documentation for the LevenshteinStringMatcher class in levenshtein-string-matcher.ts from the astro codebase.
Entity Profile
Dependency Diagram
graph TD d6c0cbba_560c_49e8_9eb1_ca2ef141e506["LevenshteinStringMatcher"] 280a8d04_e5cc_5816_33cf_7329d7941cdd["levenshtein-string-matcher.ts"] d6c0cbba_560c_49e8_9eb1_ca2ef141e506 -->|defined in| 280a8d04_e5cc_5816_33cf_7329d7941cdd 224bb548_9626_6969_98c6_3748a47281dd["a()"] d6c0cbba_560c_49e8_9eb1_ca2ef141e506 -->|method| 224bb548_9626_6969_98c6_3748a47281dd baf7d8ae_50a7_3b8f_6732_c04b03c46b3f["b()"] d6c0cbba_560c_49e8_9eb1_ca2ef141e506 -->|method| baf7d8ae_50a7_3b8f_6732_c04b03c46b3f 88dd0cf6_678c_56c2_5000_92d6f397ead0["str()"] d6c0cbba_560c_49e8_9eb1_ca2ef141e506 -->|method| 88dd0cf6_678c_56c2_5000_92d6f397ead0 f9b53f04_a92f_c859_70b7_e60149d4ee33["getClosestMatch()"] d6c0cbba_560c_49e8_9eb1_ca2ef141e506 -->|method| f9b53f04_a92f_c859_70b7_e60149d4ee33
Relationship Graph
Source Code
packages/astro/src/assets/fonts/infra/levenshtein-string-matcher.ts lines 5–151
export class LevenshteinStringMatcher implements StringMatcher {
readonly #peq = new Uint32Array(0x10000);
#myers_32(a: string, b: string): number {
const n = a.length;
const m = b.length;
const lst = 1 << (n - 1);
let pv = -1;
let mv = 0;
let sc = n;
let i = n;
while (i--) {
this.#peq[a.charCodeAt(i)] |= 1 << i;
}
for (i = 0; i < m; i++) {
let eq = this.#peq[b.charCodeAt(i)];
const xv = eq | mv;
eq |= ((eq & pv) + pv) ^ pv;
mv |= ~(eq | pv);
pv &= eq;
if (mv & lst) {
sc++;
}
if (pv & lst) {
sc--;
}
mv = (mv << 1) | 1;
pv = (pv << 1) | ~(xv | mv);
mv &= xv;
}
i = n;
while (i--) {
this.#peq[a.charCodeAt(i)] = 0;
}
return sc;
}
#myers_x(b: string, a: string): number {
const n = a.length;
const m = b.length;
const mhc = [];
const phc = [];
const hsize = Math.ceil(n / 32);
const vsize = Math.ceil(m / 32);
for (let i = 0; i < hsize; i++) {
phc[i] = -1;
mhc[i] = 0;
}
let j = 0;
for (; j < vsize - 1; j++) {
let mv = 0;
let pv = -1;
const start = j * 32;
const vlen = Math.min(32, m) + start;
for (let k = start; k < vlen; k++) {
this.#peq[b.charCodeAt(k)] |= 1 << k;
}
for (let i = 0; i < n; i++) {
const eq = this.#peq[a.charCodeAt(i)];
const pb = (phc[(i / 32) | 0] >>> i) & 1;
const mb = (mhc[(i / 32) | 0] >>> i) & 1;
const xv = eq | mv;
const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;
let ph = mv | ~(xh | pv);
let mh = pv & xh;
if ((ph >>> 31) ^ pb) {
phc[(i / 32) | 0] ^= 1 << i;
}
if ((mh >>> 31) ^ mb) {
mhc[(i / 32) | 0] ^= 1 << i;
}
ph = (ph << 1) | pb;
mh = (mh << 1) | mb;
pv = mh | ~(xv | ph);
mv = ph & xv;
}
for (let k = start; k < vlen; k++) {
this.#peq[b.charCodeAt(k)] = 0;
}
}
let mv = 0;
Domain
Source
Frequently Asked Questions
What is the LevenshteinStringMatcher class?
LevenshteinStringMatcher is a class in the astro codebase, defined in packages/astro/src/assets/fonts/infra/levenshtein-string-matcher.ts.
Where is LevenshteinStringMatcher defined?
LevenshteinStringMatcher is defined in packages/astro/src/assets/fonts/infra/levenshtein-string-matcher.ts at line 5.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free