mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
22a79cdedd
in order to separate compiler/ and runtime/ code
32 lines
1.0 KiB
TypeScript
32 lines
1.0 KiB
TypeScript
import type { TemplateSet } from "../runtime/template_set";
|
|
import type { BDom } from "../runtime/blockdom";
|
|
import { CodeGenerator, Config } from "./code_generator";
|
|
import { parse } from "./parser";
|
|
|
|
export type Template = (context: any, vnode: any, key?: string) => BDom;
|
|
|
|
export type TemplateFunction = (app: TemplateSet, bdom: any, helpers: any) => Template;
|
|
|
|
interface CompileOptions extends Config {
|
|
name?: string;
|
|
}
|
|
export function compile(
|
|
template: string | Element,
|
|
options: CompileOptions = {}
|
|
): TemplateFunction {
|
|
// parsing
|
|
const ast = parse(template);
|
|
|
|
// some work
|
|
const hasSafeContext =
|
|
template instanceof Node
|
|
? !(template instanceof Element) || template.querySelector("[t-set], [t-call]") === null
|
|
: !template.includes("t-set") && !template.includes("t-call");
|
|
|
|
// code generation
|
|
const codeGenerator = new CodeGenerator(ast, { ...options, hasSafeContext });
|
|
const code = codeGenerator.generateCode();
|
|
// template function
|
|
return new Function("app, bdom, helpers", code) as TemplateFunction;
|
|
}
|