@@ -8,9 +8,20 @@ import {
88import { TitleFromAutotitleError } from '@/content-render/unified/rewrite-local-links'
99import Page from '@/frame/lib/page'
1010
11+ // Type aliases for error objects with token information
12+ type ErrorWithToken = Error & { token : { file : string ; getPosition : ( ) => number [ ] } }
13+ type ErrorWithTokenNoFile = Error & { token : { getPosition : ( ) => number [ ] } }
14+ type ErrorWithTokenNoPosition = Error & { token : { file : string } }
15+ type ErrorWithTokenAndOriginal = Error & {
16+ token : { file : string ; getPosition : ( ) => number [ ] }
17+ originalError : Error
18+ }
19+
1120describe ( 'Translation Error Comments' , ( ) => {
1221 // Mock renderContent for integration tests
13- let mockRenderContent : MockedFunction < ( template : string , context : any ) => string >
22+ let mockRenderContent : MockedFunction <
23+ ( template : string , context : Record < string , unknown > ) => string
24+ >
1425
1526 beforeEach ( ( ) => {
1627 mockRenderContent = vi . fn ( )
@@ -26,7 +37,7 @@ describe('Translation Error Comments', () => {
2637 test ( 'includes all fields when token information is available' , ( ) => {
2738 const error = new Error ( "Unknown tag 'badtag', line:1, col:3" )
2839 error . name = 'ParseError'
29- ; ( error as any ) . token = {
40+ ; ( error as unknown as ErrorWithToken ) . token = {
3041 file : '/content/test/article.md' ,
3142 getPosition : ( ) => [ 1 , 3 ] ,
3243 }
@@ -48,11 +59,13 @@ describe('Translation Error Comments', () => {
4859 test ( 'includes original error message when available' , ( ) => {
4960 const error = new Error ( "Unknown variable 'variables.nonexistent.value'" )
5061 error . name = 'RenderError'
51- ; ( error as any ) . token = {
62+ ; ( error as unknown as ErrorWithToken ) . token = {
5263 file : '/content/test/intro.md' ,
5364 getPosition : ( ) => [ 3 , 15 ] ,
5465 }
55- ; ( error as any ) . originalError = new Error ( 'Variable not found: variables.nonexistent.value' )
66+ ; ( error as unknown as ErrorWithTokenAndOriginal ) . originalError = new Error (
67+ 'Variable not found: variables.nonexistent.value' ,
68+ )
5669
5770 const result = createTranslationFallbackComment ( error , 'rawIntro' )
5871
@@ -67,7 +80,7 @@ describe('Translation Error Comments', () => {
6780 test ( 'falls back to main error message when no originalError' , ( ) => {
6881 const error = new Error ( 'Main error message' )
6982 error . name = 'RenderError'
70- ; ( error as any ) . token = {
83+ ; ( error as unknown as ErrorWithToken ) . token = {
7184 file : '/content/test.md' ,
7285 getPosition : ( ) => [ 1 , 1 ] ,
7386 }
@@ -82,7 +95,7 @@ describe('Translation Error Comments', () => {
8295 test ( 'includes tokenization error details' , ( ) => {
8396 const error = new Error ( 'Unexpected token, line:1, col:10' )
8497 error . name = 'TokenizationError'
85- ; ( error as any ) . token = {
98+ ; ( error as unknown as ErrorWithToken ) . token = {
8699 file : '/content/test/page.md' ,
87100 getPosition : ( ) => [ 1 , 10 ] ,
88101 }
@@ -152,7 +165,7 @@ describe('Translation Error Comments', () => {
152165 test ( 'handles error with token but no file' , ( ) => {
153166 const error = new Error ( 'Error message' )
154167 error . name = 'ParseError'
155- ; ( error as any ) . token = {
168+ ; ( error as unknown as ErrorWithTokenNoFile ) . token = {
156169 // No file property
157170 getPosition : ( ) => [ 5 , 10 ] ,
158171 }
@@ -167,7 +180,7 @@ describe('Translation Error Comments', () => {
167180 test ( 'handles error with token but no getPosition method' , ( ) => {
168181 const error = new Error ( 'Error message' )
169182 error . name = 'ParseError'
170- ; ( error as any ) . token = {
183+ ; ( error as unknown as ErrorWithTokenNoPosition ) . token = {
171184 file : '/content/test.md' ,
172185 // No getPosition method
173186 }
@@ -246,7 +259,7 @@ describe('Translation Error Comments', () => {
246259 test ( 'comment format is valid HTML' , ( ) => {
247260 const error = new Error ( 'Test error' )
248261 error . name = 'ParseError'
249- ; ( error as any ) . token = {
262+ ; ( error as unknown as ErrorWithToken ) . token = {
250263 file : '/content/test.md' ,
251264 getPosition : ( ) => [ 1 , 1 ] ,
252265 }
@@ -264,7 +277,7 @@ describe('Translation Error Comments', () => {
264277 test ( 'contains all required fields when available' , ( ) => {
265278 const error = new Error ( 'Detailed error message' )
266279 error . name = 'RenderError'
267- ; ( error as any ) . token = {
280+ ; ( error as unknown as ErrorWithToken ) . token = {
268281 file : '/content/detailed-test.md' ,
269282 getPosition : ( ) => [ 42 , 15 ] ,
270283 }
@@ -283,7 +296,7 @@ describe('Translation Error Comments', () => {
283296 test ( 'maintains consistent field order' , ( ) => {
284297 const error = new Error ( 'Test message' )
285298 error . name = 'ParseError'
286- ; ( error as any ) . token = {
299+ ; ( error as unknown as ErrorWithToken ) . token = {
287300 file : '/content/test.md' ,
288301 getPosition : ( ) => [ 1 , 1 ] ,
289302 }
@@ -320,18 +333,20 @@ describe('Translation Error Comments', () => {
320333 }
321334
322335 // Mock renderContent to simulate error for Japanese, success for English
323- mockRenderContent . mockImplementation ( ( template : string , innerContext : any ) => {
324- if ( innerContext . currentLanguage !== 'en' && template . includes ( 'badtag' ) ) {
325- const error = new Error ( "Unknown tag 'badtag'" )
326- error . name = 'ParseError'
327- ; ( error as any ) . token = {
328- file : '/content/test.md' ,
329- getPosition : ( ) => [ 1 , 5 ] ,
336+ mockRenderContent . mockImplementation (
337+ ( template : string , innerContext : Record < string , unknown > ) => {
338+ if ( innerContext . currentLanguage !== 'en' && template . includes ( 'badtag' ) ) {
339+ const error = new Error ( "Unknown tag 'badtag'" )
340+ error . name = 'ParseError'
341+ ; ( error as unknown as ErrorWithToken ) . token = {
342+ file : '/content/test.md' ,
343+ getPosition : ( ) => [ 1 , 5 ] ,
344+ }
345+ throw error
330346 }
331- throw error
332- }
333- return innerContext . currentLanguage === 'en' ? 'English Title' : template
334- } )
347+ return innerContext . currentLanguage === 'en' ? 'English Title' : template
348+ } ,
349+ )
335350
336351 const result = await renderContentWithFallback ( mockPage , 'rawTitle' , context )
337352
@@ -357,14 +372,16 @@ describe('Translation Error Comments', () => {
357372 } ,
358373 }
359374
360- mockRenderContent . mockImplementation ( ( template : string , innerContext : any ) => {
361- if ( innerContext . currentLanguage !== 'en' && template . includes ( 'badtag' ) ) {
362- const error = new Error ( "Unknown tag 'badtag'" )
363- error . name = 'ParseError'
364- throw error
365- }
366- return 'English Title'
367- } )
375+ mockRenderContent . mockImplementation (
376+ ( template : string , innerContext : Record < string , unknown > ) => {
377+ if ( innerContext . currentLanguage !== 'en' && template . includes ( 'badtag' ) ) {
378+ const error = new Error ( "Unknown tag 'badtag'" )
379+ error . name = 'ParseError'
380+ throw error
381+ }
382+ return 'English Title'
383+ } ,
384+ )
368385
369386 const result = await renderContentWithFallback ( mockPage , 'rawTitle' , context , {
370387 textOnly : true ,
@@ -384,7 +401,7 @@ describe('Translation Error Comments', () => {
384401 const failingCallable = async ( ) => {
385402 const error = new Error ( "Unknown variable 'variables.bad'" )
386403 error . name = 'RenderError'
387- ; ( error as any ) . token = {
404+ ; ( error as unknown as ErrorWithToken ) . token = {
388405 file : '/content/article.md' ,
389406 getPosition : ( ) => [ 10 , 20 ] ,
390407 }
0 commit comments