1
1
import validateJs from './js/index.js' ;
2
2
import { getLocator } from 'locate-character' ;
3
+ import getCodeFrame from '../utils/getCodeFrame.js' ;
3
4
4
- export default function validate ( parsed , source ) {
5
+ export default function validate ( parsed , source , options ) {
5
6
const locator = getLocator ( source ) ;
6
7
7
8
const validator = {
8
9
error : ( message , pos ) => {
9
10
const { line, column } = locator ( pos ) ;
10
11
11
- validator . errors . push ( {
12
- message,
13
- pos,
14
- loc : { line : line + 1 , column }
15
- } ) ;
12
+ const error = new Error ( message ) ;
13
+ error . frame = getCodeFrame ( source , line , column ) ;
14
+ error . loc = { line : line + 1 , column } ;
15
+ error . pos = pos ;
16
+
17
+ error . toString = ( ) => `${ error . message } (${ error . loc . line } :${ error . loc . column } )\n${ error . frame } ` ;
18
+
19
+ if ( options . onerror ) {
20
+ options . onerror ( error ) ;
21
+ } else {
22
+ throw error ;
23
+ }
16
24
} ,
17
25
18
26
warn : ( message , pos ) => {
19
27
const { line, column } = locator ( pos ) ;
20
28
21
- validator . warnings . push ( {
29
+ const frame = getCodeFrame ( source , line , column ) ;
30
+
31
+ options . onwarn ( {
22
32
message,
33
+ frame,
34
+ loc : { line : line + 1 , column } ,
23
35
pos,
24
- loc : { line : line + 1 , column }
36
+ toString : ( ) => ` ${ message } ( ${ line + 1 } : ${ column } )\n ${ frame } `
25
37
} ) ;
26
38
} ,
27
39
@@ -32,7 +44,7 @@ export default function validate ( parsed, source ) {
32
44
} ;
33
45
34
46
if ( parsed . js ) {
35
- validateJs ( validator , parsed . js , source ) ;
47
+ validateJs ( validator , parsed . js ) ;
36
48
}
37
49
38
50
return {
0 commit comments