@autorest/openapi-to-typespec
Version:
Autorest plugin to scaffold a Typespec definition from an OpenAPI document
61 lines • 3.1 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateAdditionalProperties = exports.generateTemplateModel = exports.getSpreadExpressionDecalaration = exports.getModelPropertyDeclarations = exports.getModelPropertiesDeclarations = void 0;
const decorators_1 = require("./decorators");
const docs_1 = require("./docs");
const suppressions_1 = require("./suppressions");
const type_mapping_1 = require("./type-mapping");
function getModelPropertiesDeclarations(properties) {
const definitions = [];
for (const property of properties) {
definitions.push(...getModelPropertyDeclarations(property));
}
return definitions;
}
exports.getModelPropertiesDeclarations = getModelPropertiesDeclarations;
function getModelPropertyDeclarations(property) {
const definitions = [];
const propertyDoc = (0, docs_1.generateDocs)(property);
propertyDoc && definitions.push(propertyDoc);
const decorators = (0, decorators_1.generateDecorators)(property.decorators);
decorators && definitions.push(decorators);
property.fixMe && property.fixMe.length && definitions.push(property.fixMe.join("\n"));
let defaultValue = "";
if (property.defaultValue) {
defaultValue = ` = ${property.defaultValue}`;
}
if (property.suppressions) {
definitions.push(...(0, suppressions_1.generateSuppressions)(property.suppressions));
}
definitions.push(`"${property.name}"${getOptionalOperator(property)}: ${(0, type_mapping_1.getFullyQualifiedName)(property.type)}${defaultValue};`);
return definitions;
}
exports.getModelPropertyDeclarations = getModelPropertyDeclarations;
function getSpreadExpressionDecalaration(property) {
return `...${generateTemplateModel(property.model)}`;
}
exports.getSpreadExpressionDecalaration = getSpreadExpressionDecalaration;
function getOptionalOperator(property) {
return property.isOptional ? "?" : "";
}
function generateTemplateModel(templateModel) {
return `${templateModel.name}${templateModel.namedArguments
? `<${Object.keys(templateModel.namedArguments)
.map((k) => `${k} = ${templateModel.namedArguments[k]}`)
.join(",")}>`
: ""}${!templateModel.namedArguments && templateModel.arguments
? `<${templateModel.arguments
.map((a) => a.kind === "template"
? generateTemplateModel(a)
: `${a.name}${a.additionalProperties ? ` & { ${generateAdditionalProperties(a.additionalProperties)} }` : ""}`)
.join(",")}>`
: ""}${templateModel.additionalProperties
? ` & { ${generateAdditionalProperties(templateModel.additionalProperties)} }`
: ""}${templateModel.additionalTemplateModel ? templateModel.additionalTemplateModel : ""}`;
}
exports.generateTemplateModel = generateTemplateModel;
function generateAdditionalProperties(properties) {
return properties.map((p) => getModelPropertyDeclarations(p).join("\n")).join(";");
}
exports.generateAdditionalProperties = generateAdditionalProperties;
//# sourceMappingURL=model-generation.js.map
;