UNPKG

@kipper/target-js

Version:

The JavaScript target for the Kipper compiler 🦊

59 lines • 3.24 kB
"use strict"; 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