Skip to content

Commit 92fa26b

Browse files
committed
fix: string problem in injectSchemas
1 parent e109c6b commit 92fa26b

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

src/core/injectSchemas.ts

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,33 @@
1+
function generateRandomString(length: number) {
2+
return [...Array(length)].map(() => Math.random().toString(36)[2]).join("");
3+
}
4+
5+
function preserveStrings(code: string) {
6+
let replacements = {} as Record<string, string>;
7+
8+
const output = code.replace(/(['"`])([^'`"]+)\1/g, replacedString => {
9+
const replacementId = generateRandomString(32);
10+
replacements = {
11+
...replacements,
12+
[replacementId]: replacedString,
13+
};
14+
return `<@~${replacementId}~@>`;
15+
});
16+
return { output, replacements };
17+
}
18+
19+
function restoreStrings(code: string, replacements: Record<string, string>) {
20+
return code.replace(/<@~(.*?)~@>/g, (_, replacementId) => {
21+
return replacements[replacementId];
22+
});
23+
}
24+
125
export default function injectSchemas(code: string, refName: string) {
2-
return code
26+
const { output: preservedCode, replacements } = preserveStrings(code);
27+
28+
const preservedCodeWithSchemasInjected = preservedCode
329
.replace(new RegExp(`\\b${refName}\\.`, "g"), `global.schemas[${refName}].`)
430
.replace(new RegExp(`\\b${refName}\\b`, "g"), `"${refName}"`);
31+
32+
return restoreStrings(preservedCodeWithSchemasInjected, replacements);
533
}

0 commit comments

Comments
 (0)