@@ -126,11 +126,25 @@ func (c *compiler) errorf(n d2ast.Node, f string, v ...interface{}) {
126
126
func (c * compiler ) compileMap (obj * d2graph.Object , m * d2ir.Map ) {
127
127
class := m .GetField ("class" )
128
128
if class != nil {
129
- className := class .Primary ()
130
- if className == nil {
131
- c .errorf (class .LastRef ().AST (), "class missing value" )
129
+ var classNames []string
130
+ if class .Primary () != nil {
131
+ classNames = append (classNames , class .Primary ().String ())
132
+ } else if class .Composite != nil {
133
+ if arr , ok := class .Composite .(* d2ir.Array ); ok {
134
+ for _ , class := range arr .Values {
135
+ if scalar , ok := class .(* d2ir.Scalar ); ok {
136
+ classNames = append (classNames , scalar .Value .ScalarString ())
137
+ } else {
138
+ c .errorf (class .LastPrimaryKey (), "invalid value in array" )
139
+ }
140
+ }
141
+ }
132
142
} else {
133
- classMap := m .GetClassMap (className .String ())
143
+ c .errorf (class .LastRef ().AST (), "class missing value" )
144
+ }
145
+
146
+ for _ , className := range classNames {
147
+ classMap := m .GetClassMap (className )
134
148
if classMap != nil {
135
149
c .compileMap (obj , classMap )
136
150
}
@@ -293,7 +307,7 @@ func (c *compiler) compileLabel(attrs *d2graph.Attributes, f d2ir.Node) {
293
307
294
308
func (c * compiler ) compileReserved (attrs * d2graph.Attributes , f * d2ir.Field ) {
295
309
if f .Primary () == nil {
296
- if f .Composite != nil {
310
+ if f .Composite != nil && ! strings . EqualFold ( f . Name , "class" ) {
297
311
c .errorf (f .LastPrimaryKey (), "reserved field %v does not accept composite" , f .Name )
298
312
}
299
313
return
@@ -463,7 +477,17 @@ func (c *compiler) compileReserved(attrs *d2graph.Attributes, f *d2ir.Field) {
463
477
attrs .HorizontalGap .Value = scalar .ScalarString ()
464
478
attrs .HorizontalGap .MapKey = f .LastPrimaryKey ()
465
479
case "class" :
466
- attrs .Classes = append (attrs .Classes , scalar .ScalarString ())
480
+ if f .Primary () != nil {
481
+ attrs .Classes = append (attrs .Classes , scalar .ScalarString ())
482
+ } else if f .Composite != nil {
483
+ if arr , ok := f .Composite .(* d2ir.Array ); ok {
484
+ for _ , class := range arr .Values {
485
+ if scalar , ok := class .(* d2ir.Scalar ); ok {
486
+ attrs .Classes = append (attrs .Classes , scalar .Value .ScalarString ())
487
+ }
488
+ }
489
+ }
490
+ }
467
491
case "classes" :
468
492
}
469
493
@@ -582,11 +606,25 @@ func (c *compiler) compileEdge(obj *d2graph.Object, e *d2ir.Edge) {
582
606
func (c * compiler ) compileEdgeMap (edge * d2graph.Edge , m * d2ir.Map ) {
583
607
class := m .GetField ("class" )
584
608
if class != nil {
585
- className := class .Primary ()
586
- if className == nil {
587
- c .errorf (class .LastRef ().AST (), "class missing value" )
609
+ var classNames []string
610
+ if class .Primary () != nil {
611
+ classNames = append (classNames , class .Primary ().String ())
612
+ } else if class .Composite != nil {
613
+ if arr , ok := class .Composite .(* d2ir.Array ); ok {
614
+ for _ , class := range arr .Values {
615
+ if scalar , ok := class .(* d2ir.Scalar ); ok {
616
+ classNames = append (classNames , scalar .Value .ScalarString ())
617
+ } else {
618
+ c .errorf (class .LastPrimaryKey (), "invalid value in array" )
619
+ }
620
+ }
621
+ }
588
622
} else {
589
- classMap := m .GetClassMap (className .String ())
623
+ c .errorf (class .LastRef ().AST (), "class missing value" )
624
+ }
625
+
626
+ for _ , className := range classNames {
627
+ classMap := m .GetClassMap (className )
590
628
if classMap != nil {
591
629
c .compileEdgeMap (edge , classMap )
592
630
}
0 commit comments