MCPcopy Index your code
hub / github.com/callumalpass/tasknotes / processTemplateVariablesForYaml

Function processTemplateVariablesForYaml

src/utils/templateProcessor.ts:156–323  ·  view source on GitHub ↗

* Process template variables for YAML frontmatter with proper quoting * This version ensures that values that could break YAML parsing are properly quoted

(
	template: string,
	taskData: TemplateData | ICSTemplateData
)

Source from the content-addressed store, hash-verified

154 * This version ensures that values that could break YAML parsing are properly quoted
155 */
156function processTemplateVariablesForYaml(
157 template: string,
158 taskData: TemplateData | ICSTemplateData
159): string {
160 let result = template;
161 const now = new Date();
162
163 // {{title}} - Task title (quote if contains special characters)
164 const title = taskData.title || "";
165 result = replaceYamlTemplateVariable(result, "title", title);
166
167 // {{priority}} - Task priority
168 result = result.replace(/\{\{priority\}\}/g, taskData.priority || "");
169
170 // {{status}} - Task status
171 result = result.replace(/\{\{status\}\}/g, taskData.status || "");
172
173 // {{contexts}} - Task contexts (comma-separated)
174 const contexts = Array.isArray(taskData.contexts) ? taskData.contexts.join(", ") : "";
175 result = result.replace(/\{\{contexts\}\}/g, contexts);
176
177 // {{tags}} - Task tags (comma-separated)
178 const tags = Array.isArray(taskData.tags) ? taskData.tags.join(", ") : "";
179 result = result.replace(/\{\{tags\}\}/g, tags);
180
181 // {{hashtags}} - Task tags as space-separated hashtags
182 const hashtags = Array.isArray(taskData.tags)
183 ? taskData.tags.map((tag) => `#${tag}`).join(" ")
184 : "";
185 result = result.replace(/\{\{hashtags\}\}/g, hashtags);
186
187 // {{timeEstimate}} - Time estimate in minutes
188 result = result.replace(/\{\{timeEstimate\}\}/g, taskData.timeEstimate?.toString() || "");
189
190 // {{dueDate}} - Due date
191 result = result.replace(/\{\{dueDate\}\}/g, taskData.dueDate || "");
192
193 // {{scheduledDate}} - Scheduled date
194 result = result.replace(/\{\{scheduledDate\}\}/g, taskData.scheduledDate || "");
195
196 // {{details}} - User-provided details/description
197 result = result.replace(/\{\{details\}\}/g, taskData.details || "");
198
199 // {{parentNote}} - Parent note name/path - ALWAYS quote for YAML safety
200 const parentNote = taskData.parentNote || "";
201 result = replaceYamlTemplateVariable(result, "parentNote", parentNote, { alwaysQuote: true });
202
203 // {{date}} - Current date (basic format only)
204 result = result.replace(/\{\{date\}\}/g, format(now, "yyyy-MM-dd"));
205
206 // {{time}} - Current time (basic format only)
207 result = result.replace(/\{\{time\}\}/g, format(now, "HH:mm"));
208
209 // Extended date/time variables (consistent with filename templates)
210 result = result.replace(/\{\{year\}\}/g, format(now, "yyyy"));
211 result = result.replace(/\{\{month\}\}/g, format(now, "MM"));
212 result = result.replace(/\{\{day\}\}/g, format(now, "dd"));
213 result = result.replace(/\{\{hour\}\}/g, format(now, "HH"));

Callers 1

Calls 3

nowMethod · 0.80
toStringMethod · 0.65

Tested by

no test coverage detected