Packages
caffeine_lang
6.1.2
6.3.1
6.3.0
6.2.2
6.2.1
6.2.0
6.1.2
6.1.1
6.1.0
6.0.0
5.6.0
5.5.0
5.4.4
5.4.3
5.4.2
5.4.1
5.4.0
5.3.0
5.2.0
5.1.1
5.1.0
5.0.12
5.0.11
5.0.10
5.0.8
5.0.7
5.0.6
5.0.5
5.0.4
5.0.1
5.0.0
4.10.0
4.9.0
4.8.3
4.8.2
4.8.1
4.8.0
4.7.9
4.7.8
4.7.7
4.7.6
4.7.5
4.6.7
4.6.6
4.6.5
4.6.4
4.6.3
4.6.2
4.6.0
4.5.1
4.5.0
4.4.4
4.4.3
4.4.1
4.4.0
4.3.7
4.3.6
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
2.0.5
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
1.0.2
1.0.1
0.1.0
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.2
0.0.1
A compiler for generating reliability artifacts from service expectation definitions.
Current section
Files
Jump to
Current section
Files
src/caffeine_query_language/parser_ffi.mjs
// Fast codeunit-level access used by parser.gleam to avoid the Intl.Segmenter
// machinery in gleam_stdlib's string.slice / pop_grapheme. Those grapheme-safe
// helpers construct a new Segmenter iterator per call and walk it from index 0,
// turning the parser's per-position scans into O(N^2). For pure-ASCII tokens
// (operators, parens, keywords like "per") UTF-16 codeunit access is correct
// and orders of magnitude faster.
// Returns the UTF-16 code unit at index i, or -1 if i is out of bounds.
export function code_unit_at(s, i) {
if (i < 0 || i >= s.length) return -1;
return s.charCodeAt(i);
}
// Byte-substring equality: true when s.substring(pos, pos+needle.length) === needle.
// Uses substring (no Segmenter) and short-circuits on length check.
export function substring_equals_at(haystack, pos, needle) {
const end = pos + needle.length;
if (pos < 0 || end > haystack.length) return false;
return haystack.substring(pos, end) === needle;
}
// Codeunit count — matches the indexing space used by code_unit_at /
// substring_equals_at / slice_codeunits. Crucially this is NOT grapheme
// count (which gleam_stdlib's string.length returns).
export function code_unit_length(s) {
return s.length;
}
// Slice by codeunit range. Returns "" if start is out of bounds; clamps len.
export function slice_codeunits(s, start, len) {
if (start < 0 || start >= s.length || len <= 0) return "";
return s.substring(start, start + len);
}