@@ -3,6 +3,7 @@ import { createParser, ResourceNode } from './parser'
3
3
import { transform } from './transformer'
4
4
import { generate } from './generator'
5
5
import { CompileError , defaultOnError } from './errors'
6
+ import { MessageFunction , MessageFunctions } from './runtime'
6
7
import { warn , isBoolean } from '../utils'
7
8
8
9
export type CompileResult = {
@@ -17,8 +18,6 @@ export type Compiler = Readonly<{
17
18
compile : ( source : string , options ?: CompileOptions ) => CompileResult
18
19
} >
19
20
20
- export type MessageFunction = ( ctx : unknown ) => unknown
21
-
22
21
// TODO: This code should be removed with using rollup (`/*#__PURE__*/`)
23
22
const RE_HTML_TAG = / < \/ ? [ \w \s = " / . ' : ; # -\/ ] + > /
24
23
function checkHtmlMessage ( source : string , options : CompileOptions ) : void {
@@ -33,7 +32,24 @@ function checkHtmlMessage(source: string, options: CompileOptions): void {
33
32
}
34
33
35
34
const defaultOnCacheKey = ( source : string ) : string => source
36
- const compileCache : Record < string , MessageFunction > = Object . create ( null )
35
+ const compileCache : MessageFunctions = Object . create ( null )
36
+
37
+ export function baseCompile (
38
+ source : string ,
39
+ options : CompileOptions = { }
40
+ ) : CompileResult {
41
+ // parse source codes
42
+ const parser = createParser ( { ...options } )
43
+ const ast = parser . parse ( source )
44
+
45
+ // transform ASTs
46
+ transform ( ast , { ...options } )
47
+
48
+ // generate javascript codes
49
+ const code = generate ( ast , { ...options } )
50
+
51
+ return { ast, code }
52
+ }
37
53
38
54
export function compile (
39
55
source : string ,
@@ -58,16 +74,10 @@ export function compile(
58
74
onError ( err )
59
75
}
60
76
61
- // parse source codes
62
- const parser = createParser ( { ...options } )
63
- const ast = parser . parse ( source )
64
-
65
- // transform ASTs
66
- transform ( ast , { ...options } )
67
-
68
- // generate javascript codes
69
- const code = generate ( ast , { ...options } )
77
+ // compile
78
+ const { code } = baseCompile ( source , options )
70
79
80
+ // evaluate function
71
81
const msg = new Function ( `return ${ code } ` ) ( ) as MessageFunction
72
82
73
83
// if occured compile error, don't cache
0 commit comments