feat: add support for custom patch delimiters in PatchDocumentOptions (#3036)
* feat: add support for custom patch delimiters in PatchDocumentOptions * chore: add validation for placeholder delimiters
This commit is contained in:
committed by
GitHub
parent
4d1a351649
commit
5af1045a59
@ -55,6 +55,10 @@ export type PatchDocumentOptions<T extends PatchDocumentOutputType = PatchDocume
|
||||
readonly data: InputDataType;
|
||||
readonly patches: Readonly<Record<string, IPatch>>;
|
||||
readonly keepOriginalStyles?: boolean;
|
||||
readonly placeholderDelimiters?: Readonly<{
|
||||
readonly start: string;
|
||||
readonly end: string;
|
||||
}>;
|
||||
};
|
||||
|
||||
const imageReplacer = new ImageReplacer();
|
||||
@ -64,6 +68,7 @@ export const patchDocument = async <T extends PatchDocumentOutputType = PatchDoc
|
||||
data,
|
||||
patches,
|
||||
keepOriginalStyles,
|
||||
placeholderDelimiters = { start: "{{", end: "}}" } as const,
|
||||
}: PatchDocumentOptions<T>): Promise<OutputByType[T]> => {
|
||||
const zipContent = await JSZip.loadAsync(data);
|
||||
const contexts = new Map<string, IContext>();
|
||||
@ -132,8 +137,14 @@ export const patchDocument = async <T extends PatchDocumentOutputType = PatchDoc
|
||||
};
|
||||
contexts.set(key, context);
|
||||
|
||||
if (!placeholderDelimiters?.start.trim() || !placeholderDelimiters?.end.trim()) {
|
||||
throw new Error("Both start and end delimiters must be non-empty strings.");
|
||||
}
|
||||
|
||||
const { start, end } = placeholderDelimiters;
|
||||
|
||||
for (const [patchKey, patchValue] of Object.entries(patches)) {
|
||||
const patchText = `{{${patchKey}}}`;
|
||||
const patchText = `${start}${patchKey}${end}`;
|
||||
// TODO: mutates json. Make it immutable
|
||||
// We need to loop through to catch every occurrence of the patch text
|
||||
// It is possible that the patch text is in the same run
|
||||
|
Reference in New Issue
Block a user