@@ -4,6 +4,7 @@ import com.squareup.kotlinpoet.ClassName
4
4
import org.modelix.model.data.LanguageData
5
5
import org.modelix.model.data.Primitive
6
6
import org.modelix.model.data.PrimitivePropertyType
7
+ import java.nio.file.Files
7
8
import java.nio.file.Path
8
9
import kotlin.io.path.writeText
9
10
@@ -25,6 +26,7 @@ class TypescriptMMGenerator(val outputDir: Path, val nameConfig: NameConfig = Na
25
26
}
26
27
27
28
internal fun generate (languages : ProcessedLanguageSet ) {
29
+ Files .createDirectories(outputDir)
28
30
for (language in languages.getLanguages()) {
29
31
// TODO delete old files from previous generation
30
32
outputDir
@@ -62,7 +64,8 @@ class TypescriptMMGenerator(val outputDir: Path, val nameConfig: NameConfig = Na
62
64
INodeJS,
63
65
ITypedNode,
64
66
SingleChildAccessor,
65
- TypedNode
67
+ TypedNode,
68
+ LanguageRegistry
66
69
} from "@modelix/ts-model-api";
67
70
68
71
${language.languageDependencies().joinToString(" \n " ) {
@@ -129,9 +132,19 @@ class TypescriptMMGenerator(val outputDir: Path, val nameConfig: NameConfig = Na
129
132
}
130
133
} else defaultPropertyText
131
134
}
132
- is ProcessedReferenceLink -> """
133
-
135
+ is ProcessedReferenceLink -> {
136
+ val typeRef = feature.type.resolved
137
+ val languagePrefix = typeRef.languagePrefix(concept.language)
138
+ val entityType = " $languagePrefix${typeRef.nodeWrapperInterfaceName()} "
139
+ """
140
+ public set ${feature.generatedName} (value: $entityType | undefined) {
141
+ this.node.setReferenceTargetNode("${feature.originalName} ", value.unwrap());
142
+ }
143
+ public get ${feature.generatedName} : $entityType | undefined {
144
+ return LanguageRegistry.INSTANCE.wrapNode(this.node.getReferenceTargetNode("${feature.originalName} "));
145
+ }
134
146
""" .trimIndent()
147
+ }
135
148
is ProcessedChildLink -> {
136
149
val accessorClassName = if (feature.multiple) " ChildListAccessor" else " SingleChildAccessor"
137
150
val typeRef = feature.type.resolved
@@ -167,9 +180,15 @@ class TypescriptMMGenerator(val outputDir: Path, val nameConfig: NameConfig = Na
167
180
}
168
181
} else defaultPropertyText
169
182
}
170
- is ProcessedReferenceLink -> """
171
-
172
- """ .trimIndent()
183
+ is ProcessedReferenceLink -> {
184
+ val typeRef = feature.type.resolved
185
+ val languagePrefix = typeRef.languagePrefix(concept.language)
186
+ val entityType = " $languagePrefix${typeRef.nodeWrapperInterfaceName()} "
187
+ """
188
+ set ${feature.generatedName} (value: $entityType | undefined);
189
+ get ${feature.generatedName} : $entityType | undefined;
190
+ """ .trimIndent()
191
+ }
173
192
is ProcessedChildLink -> {
174
193
val accessorClassName = if (feature.multiple) " ChildListAccessor" else " SingleChildAccessor"
175
194
"""
0 commit comments