Skip to content

Commit

Permalink
fix(aliasing): resolve aliased import type name to imported type name (
Browse files Browse the repository at this point in the history
…#32)

* fix(aliasing): resolve aliased import type name to imported type name

Signed-off-by: muhammed-abdulkadir <[email protected]>

* chore(*): update test

Signed-off-by: muhammed-abdulkadir <[email protected]>

---------

Signed-off-by: muhammed-abdulkadir <[email protected]>
Co-authored-by: muhammed-abdulkadir <[email protected]>
  • Loading branch information
muhabdulkadir and muhammed-abdulkadir authored Dec 3, 2024
1 parent 46354a3 commit 2fb1630
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 105 deletions.
23 changes: 13 additions & 10 deletions lib/metamodelutil.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,11 @@ function findDeclaration(thisModel, name) {
function createNameTable(priorModels, metaModel) {
const concertoNs = '[email protected]';
const table = {
'Concept': concertoNs,
'Asset': concertoNs,
'Participant': concertoNs,
'Transaction ': concertoNs,
'Event': concertoNs
'Concept': {namespace: concertoNs, name: 'Concept'},
'Asset': {namespace: concertoNs, name: 'Asset'},
'Participant': {namespace: concertoNs, name: 'Participant'},
'Transaction': {namespace: concertoNs, name: 'Transaction'},
'Event': {namespace: concertoNs, name: 'Event'}
};

// First list the imported names in order (overriding as we go along)
Expand All @@ -74,7 +74,7 @@ function createNameTable(priorModels, metaModel) {
if (!findDeclaration(modelFile, imp.name)) {
throw new Error(`Declaration ${imp.name} in namespace ${namespace} not found`);
}
table[imp.name] = namespace;
table[imp.name] = {namespace, name: imp.name};
} else if (imp.$class === `${MetaModelNamespace}.ImportTypes`) {
// Create a map of aliased types if they exist, otherwise initialize an empty map.
const aliasedMap = imp.aliasedTypes
Expand All @@ -89,18 +89,18 @@ function createNameTable(priorModels, metaModel) {
if (!findDeclaration(modelFile, type)) {
throw new Error(`Declaration ${type} in namespace ${namespace} not found`);
}
table[localName] = namespace;
table[localName] = {namespace, name: type};
});
} else {
(modelFile.declarations || []).forEach((decl) => {
table[decl.name] = namespace;
table[decl.name] = {namespace, name: decl.name};
});
}
});

// Then add the names local to this metaModel (overriding as we go along)
(metaModel.declarations || []).forEach((decl) => {
table[decl.name] = metaModel.namespace;
table[decl.name] = {namespace: metaModel.namespace, name: decl.name};
});

return table;
Expand All @@ -116,7 +116,7 @@ function resolveName(name, table) {
if (!table[name]) {
throw new Error(`Name ${name} not found`);
}
return table[name];
return table[name].namespace;
}

/**
Expand Down Expand Up @@ -146,6 +146,7 @@ function resolveTypeNames(metaModel, table) {
if (metaModel.superType) {
const name = metaModel.superType.name;
metaModel.superType.namespace = resolveName(name, table);
metaModel.superType.name = table[name].name;
}
(metaModel.properties || []).forEach((property) => {
resolveTypeNames(property, table);
Expand All @@ -170,6 +171,7 @@ function resolveTypeNames(metaModel, table) {
case `${MetaModelNamespace}.ObjectMapKeyType`:
case `${MetaModelNamespace}.ObjectMapValueType`: {
metaModel.type.namespace = resolveName(metaModel.type.name, table);
metaModel.type.name = table[metaModel.type.name].name;
}
break;
case `${MetaModelNamespace}.StringScalar`:
Expand All @@ -179,6 +181,7 @@ function resolveTypeNames(metaModel, table) {
case `${MetaModelNamespace}.LongScalar`:
case `${MetaModelNamespace}.IntegerScalar`: {
metaModel.namespace = resolveName(metaModel.name, table);
metaModel.name = table[metaModel.name].name;
}
break;
}
Expand Down
49 changes: 2 additions & 47 deletions test/cto/aliasedImport.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,39 +16,9 @@
"$class": "[email protected]",
"name": "name",
"isArray": false,
"isOptional": false,
"location": {
"$class": "[email protected]",
"start": {
"offset": 35,
"line": 4,
"column": 2,
"$class": "[email protected]"
},
"end": {
"offset": 49,
"line": 5,
"column": 1,
"$class": "[email protected]"
}
}
"isOptional": false
}
],
"location": {
"$class": "[email protected]",
"start": {
"offset": 22,
"line": 3,
"column": 1,
"$class": "[email protected]"
},
"end": {
"offset": 50,
"line": 5,
"column": 2,
"$class": "[email protected]"
}
}
]
}
]
},
Expand Down Expand Up @@ -78,21 +48,6 @@
"name": "file",
"isAbstract": false,
"properties": [],
"location": {
"$class": "[email protected]",
"start": {
"offset": 50,
"line": 5,
"column": 1,
"$class": "[email protected]"
},
"end": {
"offset": 75,
"line": 6,
"column": 2,
"$class": "[email protected]"
}
},
"superType": {
"$class": "[email protected]",
"name": "d"
Expand Down
51 changes: 3 additions & 48 deletions test/cto/aliasedImportResolved.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,39 +16,9 @@
"$class": "[email protected]",
"name": "name",
"isArray": false,
"isOptional": false,
"location": {
"$class": "[email protected]",
"start": {
"offset": 35,
"line": 4,
"column": 2,
"$class": "[email protected]"
},
"end": {
"offset": 49,
"line": 5,
"column": 1,
"$class": "[email protected]"
}
}
"isOptional": false
}
],
"location": {
"$class": "[email protected]",
"start": {
"offset": 22,
"line": 3,
"column": 1,
"$class": "[email protected]"
},
"end": {
"offset": 50,
"line": 5,
"column": 2,
"$class": "[email protected]"
}
}
]
}
]
},
Expand Down Expand Up @@ -78,24 +48,9 @@
"name": "file",
"isAbstract": false,
"properties": [],
"location": {
"$class": "[email protected]",
"start": {
"offset": 50,
"line": 5,
"column": 1,
"$class": "[email protected]"
},
"end": {
"offset": 75,
"line": 6,
"column": 2,
"$class": "[email protected]"
}
},
"superType": {
"$class": "[email protected]",
"name": "d",
"name": "doc",
"namespace": "org.saluja"
}
}
Expand Down

0 comments on commit 2fb1630

Please sign in to comment.