@stekoe/ocl.js / IMetamodelProvider
Interface: IMetamodelProvider
Defined in: components/IMetamodelProvider.ts:32
Interface for pluggable metamodel providers.
Implement this interface to integrate ocl.js with runtime metamodels where type hierarchies are not based on JavaScript prototype chains.
This is particularly useful for:
- Modeling platforms with dynamic metamodels (e.g., EMF/Ecore-style)
- Systems where objects are plain data and type information is external
- Runtime environments where types and relationships evolve dynamically
Example
const provider: IMetamodelProvider = {
getTypeName(obj) {
return obj._type; // or lookup in external metamodel registry
},
isKindOf(obj, typeName) {
const objType = this.getTypeName(obj);
return metamodel.isSubtypeOf(objType, typeName);
},
isTypeOf(obj, typeName) {
return this.getTypeName(obj) === typeName;
}
};
const engine = OclEngine.create()
.setMetamodelProvider(provider)
.addOclExpression('context Entity inv: self.oclIsKindOf(NamedElement)');Methods
getTypeName()
getTypeName(obj): string | undefined;Defined in: components/IMetamodelProvider.ts:39
Returns the type name for a given object.
Parameters
| Parameter | Type | Description |
|---|---|---|
obj | unknown | The object to determine the type of |
Returns
string | undefined
The type name as a string, or undefined if the type cannot be determined
isKindOf()
isKindOf(obj, typeName): boolean;Defined in: components/IMetamodelProvider.ts:52
Checks if an object is an instance of the specified type or any of its supertypes.
This method should implement the metamodel's inheritance/subtype relationship. For example, if Person extends Entity, then isKindOf(personObj, 'Entity') should return true.
Parameters
| Parameter | Type | Description |
|---|---|---|
obj | unknown | The object to check |
typeName | string | The type name to check against (including supertypes) |
Returns
boolean
true if the object is an instance of typeName or any supertype
isTypeOf()
isTypeOf(obj, typeName): boolean;Defined in: components/IMetamodelProvider.ts:64
Checks if an object is exactly of the specified type (no inheritance).
Unlike isKindOf, this method should only return true if the object's direct type matches the specified type name exactly.
Parameters
| Parameter | Type | Description |
|---|---|---|
obj | unknown | The object to check |
typeName | string | The exact type name to match |
Returns
boolean
true if the object is exactly of the specified type