Skip to content

Commit 67bde89

Browse files
committed
fix: escape single quotes in YAML list variables #48
1 parent 8d5c8ff commit 67bde89

2 files changed

Lines changed: 57 additions & 3 deletions

File tree

esbuild.config.mjs

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ if you want to view the source, please visit the github repository of this plugi
1111
`;
1212

1313
const prod = process.argv[2] === "production";
14+
const devVaultPath =
15+
"/home/lonoxx/Nextcloud/Obsidian/.obsidian/plugins/github-issues/";
1416

1517
// Function to copy files to dist folder
1618
function copyToDist(files) {
@@ -31,6 +33,33 @@ function copyToDist(files) {
3133
});
3234
}
3335

36+
// Function to copy files from dist to dev vault
37+
function copyToDevVault() {
38+
if (!fs.existsSync(devVaultPath)) {
39+
fs.mkdirSync(devVaultPath, { recursive: true });
40+
}
41+
42+
const distFiles = [
43+
"dist/main.js",
44+
"manifest.json",
45+
"styles.css",
46+
"versions.json",
47+
];
48+
49+
distFiles.forEach((file) => {
50+
if (fs.existsSync(file)) {
51+
const fileName = path.basename(file);
52+
const destPath = path.join(devVaultPath, fileName);
53+
fs.copyFileSync(file, destPath);
54+
console.log(`Copied ${file} to ${destPath}`);
55+
} else {
56+
console.warn(
57+
`Warning: ${file} not found, skipping copy to dev vault`,
58+
);
59+
}
60+
});
61+
}
62+
3463
const context = await esbuild.context({
3564
banner: {
3665
js: banner,
@@ -60,11 +89,36 @@ const context = await esbuild.context({
6089
treeShaking: true,
6190
outfile: "dist/main.js",
6291
minify: prod,
92+
plugins: prod
93+
? []
94+
: [
95+
{
96+
name: "copy-to-dev-vault",
97+
setup(build) {
98+
build.onEnd((result) => {
99+
if (result.errors.length === 0) {
100+
console.log("Copying to dev vault...");
101+
const mainJsPath = path.join(
102+
devVaultPath,
103+
"main.js",
104+
);
105+
if (fs.existsSync("dist/main.js")) {
106+
fs.copyFileSync("dist/main.js", mainJsPath);
107+
console.log(
108+
`Copied dist/main.js → ${mainJsPath}`,
109+
);
110+
}
111+
}
112+
});
113+
},
114+
},
115+
],
63116
});
64117

65118
if (prod) {
66119
await context.rebuild();
67120
copyToDist(["versions.json", "manifest.json", "styles.css"]);
121+
copyToDevVault();
68122
process.exit(0);
69123
} else {
70124
await context.watch();

src/util/templateUtils.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ function buildReplacements(
217217
.map((a) => `- ${a}`)
218218
.join("\n");
219219
replacements["{assignees_yaml}"] =
220-
`[${data.assignees.map((a) => `'${a}'`).join(", ")}]`;
220+
`[${data.assignees.map((a) => `"${escapeYamlString(a)}"`).join(", ")}]`;
221221
} else {
222222
replacements["{assignees}"] = "";
223223
replacements["{assignees_list}"] = "";
@@ -233,7 +233,7 @@ function buildReplacements(
233233
.map((l) => `#${l.replace(/\s/g, "_")}`)
234234
.join(" ");
235235
replacements["{labels_yaml}"] =
236-
`[${data.labels.map((l) => `'${l}'`).join(", ")}]`;
236+
`[${data.labels.map((l) => `"${escapeYamlString(l)}"`).join(", ")}]`;
237237
} else {
238238
replacements["{labels}"] = "";
239239
replacements["{labels_list}"] = "";
@@ -269,7 +269,7 @@ function buildReplacements(
269269
.map((p) => p.projectTitle)
270270
.join(", ");
271271
replacements["{projects_yaml}"] =
272-
`[${data.projectData.map((p) => `'${p.projectTitle}'`).join(", ")}]`;
272+
`[${data.projectData.map((p) => `"${escapeYamlString(p.projectTitle)}"`).join(", ")}]`;
273273

274274
const customFieldsYaml = Object.entries(firstProject.customFields)
275275
.map(([name, field]) => ` ${name}: "${field.value}"`)

0 commit comments

Comments
 (0)