lit-xml
Version:
Burning your XML documents to the ground? Yes please. In the mean time, let's use lit-xml.
29 lines (22 loc) • 1.08 kB
text/typescript
import { LitXmlOptions } from './lit-xml-options';
import { XmlFragment } from './xml-fragment';
const DEFAULT_OPTIONS: Readonly<LitXmlOptions> = {
format: false,
indent: 2,
validators: [],
strictTemplateValues: false,
};
export type XmlPrimitive = string | number | boolean | bigint | XmlFragment | XmlFragment[];
export type XmlTemplateLiteralTag<T> = (xmlLiterals: TemplateStringsArray, ...values: T[]) => XmlFragment;
export type XmlTemplateLiteral = XmlTemplateLiteralTag<unknown>;
export type StrictXmlTemplateLiteral = XmlTemplateLiteralTag<XmlPrimitive>;
export function createLitXml<T extends Partial<LitXmlOptions>>(
overrideOptions?: T,
): XmlTemplateLiteralTag<T extends { strictTemplateValues: true } ? XmlPrimitive : unknown> {
const options = Object.freeze({ ...DEFAULT_OPTIONS, ...overrideOptions });
return function xml(xmlLiterals: TemplateStringsArray, ...values: unknown[]): XmlFragment {
return new XmlFragment(xmlLiterals, values, options);
};
}
createLitXml.inject = ['lit-xml-options'] as const;
export const xml = createLitXml();