Skip to content

Commit 5c3897c

Browse files
Copilotdanmarshall
andcommitted
Replace templateId with explicit setTemplate/getTemplate properties
Co-authored-by: danmarshall <11507384+danmarshall@users.noreply.github.com>
1 parent cd0ed4c commit 5c3897c

3 files changed

Lines changed: 49 additions & 30 deletions

File tree

packages/markdown/src/plugins/treebark.ts

Lines changed: 40 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,28 @@ function inspectTreebarkSpec(spec: TreebarkSpec): RawFlaggableSpec<TreebarkSpec>
3232
const reasons: string[] = [];
3333
let hasFlags = false;
3434

35-
// Validate: either template or templateId must be present
36-
if (!spec.template && !spec.templateId) {
35+
// Validate: either template, setTemplate, or getTemplate must be present
36+
if (!spec.template && !spec.setTemplate && !spec.getTemplate) {
3737
hasFlags = true;
38-
reasons.push('Either template or templateId is required');
38+
reasons.push('Either template, setTemplate, or getTemplate is required');
39+
}
40+
41+
// Validate: setTemplate and getTemplate are mutually exclusive
42+
if (spec.setTemplate && spec.getTemplate) {
43+
hasFlags = true;
44+
reasons.push('setTemplate and getTemplate cannot both be specified');
45+
}
46+
47+
// Validate: setTemplate requires template
48+
if (spec.setTemplate && !spec.template) {
49+
hasFlags = true;
50+
reasons.push('setTemplate requires template to be provided');
51+
}
52+
53+
// Validate: getTemplate should not have template
54+
if (spec.getTemplate && spec.template) {
55+
hasFlags = true;
56+
reasons.push('getTemplate should not have template (it references an existing template)');
3957
}
4058

4159
// If template is provided, it must be object or string
@@ -79,29 +97,27 @@ export const treebarkPlugin: Plugin<TreebarkSpec> = {
7997

8098
let resolvedTemplate: TemplateElement;
8199

82-
// Use templateId to determine SET vs GET
83-
if (spec.templateId) {
84-
if (spec.template) {
85-
// SET: templateId + template = register the template
86-
templateRegistry[spec.templateId] = spec.template;
87-
resolvedTemplate = spec.template;
88-
} else {
89-
// GET: templateId without template = lookup the template
90-
resolvedTemplate = templateRegistry[spec.templateId];
91-
if (!resolvedTemplate) {
92-
container.innerHTML = `<div class="error">Template '${spec.templateId}' not found</div>`;
93-
errorHandler(
94-
new Error(`Template '${spec.templateId}' not found`),
95-
pluginName,
96-
index,
97-
'resolve',
98-
container
99-
);
100-
continue;
101-
}
100+
// Explicit SET/GET semantics
101+
if (spec.setTemplate) {
102+
// SET: Register and use the template
103+
templateRegistry[spec.setTemplate] = spec.template;
104+
resolvedTemplate = spec.template;
105+
} else if (spec.getTemplate) {
106+
// GET: Lookup the template
107+
resolvedTemplate = templateRegistry[spec.getTemplate];
108+
if (!resolvedTemplate) {
109+
container.innerHTML = `<div class="error">Template '${spec.getTemplate}' not found</div>`;
110+
errorHandler(
111+
new Error(`Template '${spec.getTemplate}' not found`),
112+
pluginName,
113+
index,
114+
'resolve',
115+
container
116+
);
117+
continue;
102118
}
103119
} else {
104-
// No templateId: template is used inline (can be object or string)
120+
// INLINE: Use template directly (can be object or string)
105121
resolvedTemplate = spec.template;
106122
}
107123

packages/schema-doc/src/interactive.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,11 @@ export interface TreebarkElementProps extends OptionalVariableControl {
152152
/** Static data object (optional) */
153153
data?: object;
154154

155-
/** Template ID for markdown head syntax (e.g., ```treebark{templateId=foo}) */
156-
templateId?: string;
155+
/** Register a template with this name for reuse (SET operation) */
156+
setTemplate?: string;
157+
158+
/** Use a previously registered template by name (GET operation) */
159+
getTemplate?: string;
157160

158161
/** Dynamic option: variableId to intake a signal and behave as data */
159162
}

packages/web-deploy/json/agentic-task-log.idoc.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@
350350
{
351351
"type": "treebark",
352352
"variableId": "chatMessages",
353-
"templateId": "chatBubble",
353+
"setTemplate": "chatBubble",
354354
"template": {
355355
"div": {
356356
"class": "chat-container",
@@ -451,7 +451,7 @@
451451
{
452452
"type": "treebark",
453453
"variableId": "chatMessages2",
454-
"template": "chatBubble"
454+
"getTemplate": "chatBubble"
455455
},
456456
"",
457457
{
@@ -514,7 +514,7 @@
514514
{
515515
"type": "treebark",
516516
"variableId": "chatMessages3",
517-
"template": "chatBubble"
517+
"getTemplate": "chatBubble"
518518
},
519519
"",
520520
"",
@@ -592,7 +592,7 @@
592592
{
593593
"type": "treebark",
594594
"variableId": "chatMessages4",
595-
"template": "chatBubble"
595+
"getTemplate": "chatBubble"
596596
},
597597
"",
598598
{

0 commit comments

Comments
 (0)