Skip to content

Commit da4ded5

Browse files
abstraktorslisson
authored andcommitted
fix(model-api-gen): references where not generated for TypeScript
1 parent a14f95f commit da4ded5

File tree

2 files changed

+58
-6
lines changed

2 files changed

+58
-6
lines changed

model-api-gen/src/main/kotlin/org/modelix/metamodel/generator/TypescriptMMGenerator.kt

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ class TypescriptMMGenerator(val outputDir: Path, val nameConfig: NameConfig = Na
6262
INodeJS,
6363
ITypedNode,
6464
SingleChildAccessor,
65-
TypedNode
65+
TypedNode,
66+
LanguageRegistry
6667
} from "@modelix/ts-model-api";
6768
6869
${language.languageDependencies().joinToString("\n") {
@@ -129,9 +130,19 @@ class TypescriptMMGenerator(val outputDir: Path, val nameConfig: NameConfig = Na
129130
}
130131
} else defaultPropertyText
131132
}
132-
is ProcessedReferenceLink -> """
133-
133+
is ProcessedReferenceLink -> {
134+
val typeRef = feature.type.resolved
135+
val languagePrefix = typeRef.languagePrefix(concept.language)
136+
val entityType = "$languagePrefix${typeRef.nodeWrapperInterfaceName()}"
137+
"""
138+
public set ${feature.generatedName}(value: $entityType | undefined) {
139+
this.node.setReferenceTargetNode("${feature.originalName}", value.unwrap());
140+
}
141+
public get ${feature.generatedName}: $entityType | undefined {
142+
return LanguageRegistry.INSTANCE.wrapNode(this.node.getReferenceTargetNode("${feature.originalName}"));
143+
}
134144
""".trimIndent()
145+
}
135146
is ProcessedChildLink -> {
136147
val accessorClassName = if (feature.multiple) "ChildListAccessor" else "SingleChildAccessor"
137148
val typeRef = feature.type.resolved
@@ -167,9 +178,15 @@ class TypescriptMMGenerator(val outputDir: Path, val nameConfig: NameConfig = Na
167178
}
168179
} else defaultPropertyText
169180
}
170-
is ProcessedReferenceLink -> """
171-
172-
""".trimIndent()
181+
is ProcessedReferenceLink -> {
182+
val typeRef = feature.type.resolved
183+
val languagePrefix = typeRef.languagePrefix(concept.language)
184+
val entityType = "$languagePrefix${typeRef.nodeWrapperInterfaceName()}"
185+
"""
186+
set ${feature.generatedName}(value: $entityType | undefined);
187+
get ${feature.generatedName}: $entityType | undefined;
188+
""".trimIndent()
189+
}
173190
is ProcessedChildLink -> {
174191
val accessorClassName = if (feature.multiple) "ChildListAccessor" else "SingleChildAccessor"
175192
"""

model-api-gen/src/test/kotlin/org/modelix/metamodel/generator/KotlinGeneratorTest.kt

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,41 @@ class KotlinGeneratorTest {
4444
val outputDir = File("build/test-generator-output").toPath()
4545
MetaModelGenerator(outputDir).generate(LanguageSet(listOf(language)).process())
4646
}
47+
@Test
48+
fun test_ts() {
49+
val input = """
50+
name: org.modelix.entities
51+
concepts:
52+
- name: Entity
53+
properties:
54+
- name: name
55+
children:
56+
- name: properties
57+
type: Property
58+
multiple: true
59+
optional: true
60+
- name: Property
61+
children:
62+
- name: type
63+
type: Type
64+
optional: false
65+
- name: Type
66+
- name: EntityType
67+
extends:
68+
- Type
69+
references:
70+
- name: entity
71+
type: Entity
72+
optional: false
73+
enums: []
74+
""".trimIndent()
75+
76+
val language = Yaml.default.decodeFromString<LanguageData>(input)
77+
//val outputDir = File(".").toPath().resolve("build").resolve("test-generator-output")
78+
val outputDir = File("build/test-generator-output").toPath()
79+
TypescriptMMGenerator(outputDir).generate(LanguageSet(listOf(language)).process())
80+
}
81+
4782

4883
@OptIn(ExperimentalPathApi::class)
4984
@Test

0 commit comments

Comments
 (0)