Bogdan Savluk 089c200c8b Convert @babel/template from Flow to TS (#12317)
Co-authored-by: Nicolò Ribaudo <nicolo.ribaudo@gmail.com>
2020-11-09 23:17:25 +01:00

24 lines
664 B
TypeScript

import type { Formatter } from "./formatters";
import type { TemplateOpts } from "./options";
import { normalizeReplacements } from "./options";
import parseAndBuildMetadata from "./parse";
import populatePlaceholders from "./populate";
export default function stringTemplate<T>(
formatter: Formatter<T>,
code: string,
opts: TemplateOpts,
): (arg?: unknown) => T {
code = formatter.code(code);
let metadata;
return (arg?: unknown) => {
const replacements = normalizeReplacements(arg);
if (!metadata) metadata = parseAndBuildMetadata(formatter, code, opts);
return formatter.unwrap(populatePlaceholders(metadata, replacements));
};
}