@@ -3,6 +3,7 @@ import { createParser, ResourceNode } from './parser'
33import { transform } from './transformer'
44import { generate } from './generator'
55import { CompileError , defaultOnError } from './errors'
6+ import { MessageFunction , MessageFunctions } from './runtime'
67import { warn , isBoolean } from '../utils'
78
89export type CompileResult = {
@@ -17,8 +18,6 @@ export type Compiler = Readonly<{
1718 compile : ( source : string , options ?: CompileOptions ) => CompileResult
1819} >
1920
20- export type MessageFunction = ( ctx : unknown ) => unknown
21-
2221// TODO: This code should be removed with using rollup (`/*#__PURE__*/`)
2322const RE_HTML_TAG = / < \/ ? [ \w \s = " / . ' : ; # -\/ ] + > /
2423function checkHtmlMessage ( source : string , options : CompileOptions ) : void {
@@ -33,7 +32,24 @@ function checkHtmlMessage(source: string, options: CompileOptions): void {
3332}
3433
3534const 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+ }
3753
3854export function compile (
3955 source : string ,
@@ -58,16 +74,10 @@ export function compile(
5874 onError ( err )
5975 }
6076
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 )
7079
80+ // evaluate function
7181 const msg = new Function ( `return ${ code } ` ) ( ) as MessageFunction
7282
7383 // if occured compile error, don't cache
0 commit comments