Skip to content

Commit 862c149

Browse files
committed
refactor: Extracted sliceByteRange()
1 parent c6b3880 commit 862c149

2 files changed

Lines changed: 19 additions & 16 deletions

File tree

src/parse/preprocess.ts

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
import { getBuffer, parse, type Range } from '../utils/content-tag.js';
1+
import {
2+
getBuffer,
3+
parse,
4+
type Range,
5+
sliceByteRange,
6+
} from '../utils/content-tag.js';
27

38
export interface Template {
49
contents: string;
@@ -12,18 +17,6 @@ export interface Template {
1217

1318
const PLACEHOLDER = '~';
1419

15-
/** Slice string using byte range */
16-
function sliceByteRange(s: string, a: number, b?: number): string {
17-
const buf = getBuffer(s);
18-
return buf.subarray(a, b).toString();
19-
}
20-
21-
/** Converts byte index to js char index (utf16) */
22-
function byteToCharIndex(s: string, byteOffset: number): number {
23-
const buf = getBuffer(s);
24-
return buf.subarray(0, byteOffset).toString().length;
25-
}
26-
2720
function replaceRange(
2821
s: string,
2922
start: number,
@@ -53,7 +46,7 @@ export function preprocessTemplateRange(
5346
prefix = '{/*';
5447
suffix = '*/}';
5548

56-
const nextToken = code.slice(template.range.end).toString().match(/\S+/);
49+
const nextToken = sliceByteRange(code, template.range.end).match(/\S+/);
5750

5851
if (nextToken && (nextToken[0] === 'as' || nextToken[0] === 'satisfies')) {
5952
// Replace with parenthesized ObjectExpression
@@ -84,8 +77,8 @@ export function codeToGlimmerAst(code: string, filename: string): Template[] {
8477
contentRange: r.contentRange,
8578
contents: r.contents,
8679
utf16Range: {
87-
start: byteToCharIndex(code, r.range.start),
88-
end: byteToCharIndex(code, r.range.end),
80+
start: sliceByteRange(code, 0, r.range.start).length,
81+
end: sliceByteRange(code, 0, r.range.end).length,
8982
},
9083
}));
9184

src/utils/content-tag.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,14 @@ export function parse(
3232
return preprocessor.parse(file, options);
3333
}
3434

35+
export function sliceByteRange(
36+
string_: string,
37+
indexStart: number,
38+
indexEnd?: number,
39+
): string {
40+
const buffer = getBuffer(string_);
41+
42+
return buffer.slice(indexStart, indexEnd).toString();
43+
}
44+
3545
export type { ContentTag, Range };

0 commit comments

Comments
 (0)