@kipper/target-js
Version:
The JavaScript target for the Kipper compiler 🦊
59 lines • 3.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RuntimeTypesGenerator = void 0;
const tslib_1 = require("tslib");
const core_1 = require("@kipper/core");
const index_1 = require("./index");
class RuntimeTypesGenerator {
static generateInterfaceRuntimeType(node) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const semanticData = node.getSemanticData();
const interfaceName = semanticData.identifier;
const interfaceMembers = semanticData.members;
const identifier = `${index_1.KipperJavaScriptTarget.internalInterfacePrefix}_${interfaceName}`;
const propertiesWithTypes = [];
const functionsWithTypes = [];
for (let member of interfaceMembers) {
if (member instanceof core_1.InterfacePropertyDeclaration) {
const property = member.getSemanticData();
const type = member.getTypeSemanticData();
if (type.valueType instanceof core_1.BuiltInType) {
const runtimeType = index_1.TargetJS.getRuntimeType(type.valueType);
propertiesWithTypes.push(`new ${index_1.TargetJS.getBuiltInIdentifier("Property")}("${property.identifier}", ${runtimeType}),`);
}
else {
propertiesWithTypes.push(`new ${index_1.TargetJS.getBuiltInIdentifier("Property")}("${property.identifier}",` +
` ${index_1.KipperJavaScriptTarget.internalInterfacePrefix}_${type.valueType}),`);
}
}
if (member instanceof core_1.InterfaceMethodDeclaration) {
const method = member.getSemanticData();
const methodName = method.identifier;
const returnType = method.returnTypeSpecifier.getTypeSemanticData().storedType;
const runtimeReturnType = index_1.TargetJS.getRuntimeType(returnType);
const paramsArray = method.params.map((param) => {
const type = param.getTypeSemanticData().valueType;
const name = param.getSemanticData().identifier;
return `new ${index_1.TargetJS.getBuiltInIdentifier("Property")}` + `("${name}", ${index_1.TargetJS.getRuntimeType(type)})`;
});
const params = paramsArray.length > 0 ? `[${paramsArray.join(", ")}]` : "[]";
functionsWithTypes.push(`new ${index_1.TargetJS.getBuiltInIdentifier("Method")}` + `("${methodName}", ${runtimeReturnType}, ${params})`);
}
}
return [
[
"const ",
identifier,
` = new ${index_1.TargetJS.internalObjectIdentifier}.Type("` + interfaceName + '"',
", [",
...propertiesWithTypes,
"], [",
...functionsWithTypes,
"])",
],
];
});
}
}
exports.RuntimeTypesGenerator = RuntimeTypesGenerator;
//# sourceMappingURL=runtime-types.js.map