Skip to content

Commit 74e909b

Browse files
authored
Fix initialization of class fields with instance type "string" (#499)
1 parent 3e92a05 commit 74e909b

File tree

3 files changed

+73
-6
lines changed

3 files changed

+73
-6
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
$base: "https://example.com/classFieldTest#"
2+
3+
$namespaces:
4+
classFieldTest: "https://example.com/classFieldTest#"
5+
6+
$graph:
7+
- name: ClassFieldString
8+
type: record
9+
documentRoot: true
10+
fields:
11+
- name: "class"
12+
jsonldPredicate:
13+
"_id": "@type"
14+
"_type": "@vocab"
15+
type: string
16+
17+
- name: ClassFieldEnum
18+
type: record
19+
documentRoot: true
20+
fields:
21+
- name: class
22+
jsonldPredicate:
23+
"_id": "@type"
24+
"_type": "@vocab"
25+
type:
26+
type: enum
27+
name: ClassFieldEnum_class
28+
symbols:
29+
- classFieldTest:ClassFieldEnum

schema_salad/tests/test_typescript_codegen.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,35 @@ def test_meta_schema_gen(tmp_path: Path) -> None:
4646
)
4747

4848

49+
def test_class_field(tmp_path: Path) -> None:
50+
schema_path = get_data_uri("tests/class_field_test.yml")
51+
assert schema_path
52+
target_dir = tmp_path / "target"
53+
54+
target_dir.mkdir()
55+
typescript_codegen(schema_path, target_dir)
56+
57+
package_json_path = target_dir / "package.json"
58+
assert package_json_path.exists
59+
60+
tests_dir = target_dir / "src" / "test"
61+
assert tests_dir.exists()
62+
63+
with open(target_dir / "src" / "ClassFieldString.ts") as f:
64+
assert (
65+
" constructor ({loadingOptions, extensionFields, class_ = 'ClassFieldString'} :"
66+
+ " {loadingOptions?: LoadingOptions} & Internal.ClassFieldStringProperties) {\n"
67+
in f.read()
68+
)
69+
with open(target_dir / "src" / "ClassFieldEnum.ts") as f:
70+
assert (
71+
" constructor ({loadingOptions, extensionFields, class_ = "
72+
+ "Internal.ClassFieldEnum_class.CLASSFIELDENUM} :"
73+
+ " {loadingOptions?: LoadingOptions} & Internal.ClassFieldEnumProperties) {\n"
74+
in f.read()
75+
)
76+
77+
4978
def get_data_uri(resource_path: str) -> str:
5079
path = get_data(resource_path)
5180
assert path

schema_salad/typescript_codegen.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -525,13 +525,22 @@ def declare_field(
525525
)
526526
)
527527
if fieldname == "class":
528-
self.current_constructor_signature.write(
529-
", {safename} = {type}.{val}".format(
530-
safename=safename,
531-
type=fieldtype.instance_type,
532-
val=self.current_class.replace("-", "_").replace(".", "_").upper(),
528+
if fieldtype.instance_type == "string":
529+
self.current_constructor_signature.write(
530+
", {safename} = '{val}'".format(
531+
safename=safename, val=self.current_class
532+
)
533+
)
534+
else:
535+
self.current_constructor_signature.write(
536+
", {safename} = {type}.{val}".format(
537+
safename=safename,
538+
type=fieldtype.instance_type,
539+
val=self.current_class.replace("-", "_")
540+
.replace(".", "_")
541+
.upper(),
542+
)
533543
)
534-
)
535544
else:
536545
self.current_constructor_signature.write(
537546
", {safename}".format(

0 commit comments

Comments
 (0)