@@ -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
0 commit comments