@vkontakte/api-schema-typescript-generator
Version:
VK API TypeScript generator
102 lines (101 loc) • 3.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SchemaObject = void 0;
const utils_1 = require("../utils");
const helpers_1 = require("../helpers");
const log_1 = require("../log");
class SchemaObject {
constructor(name, object, parentName) {
if (!(0, utils_1.isObject)(object)) {
(0, log_1.consoleLogErrorAndExit)(`[SchemaObject] "${name}" is not an object.`, {
name,
object,
parentName,
});
return;
}
this.name = name;
if (parentName) {
this.parentObjectName = parentName;
}
if ((0, utils_1.isString)(object.type)) {
this.type = object.type;
}
else if (Array.isArray(object.type)) {
this.type = object.type;
}
if ((0, utils_1.isString)(object.description)) {
this.description = object.description;
}
if ((0, utils_1.isString)(object.$ref)) {
this.ref = object.$ref;
}
if (Array.isArray(object.enum)) {
this.enum = object.enum;
}
if (Array.isArray(object.enumNames)) {
this.enumNames = object.enumNames;
}
if (Array.isArray(object.required)) {
this.required = object.required;
}
else {
this.required = [];
}
if (typeof object.required === 'boolean') {
this.isRequired = object.required;
}
this.properties = [];
if (object.properties) {
Object.entries(object.properties).forEach(([propertyName, property]) => {
this.properties.push(new SchemaObject(propertyName, property, name));
});
}
this.parameters = [];
if (Array.isArray(object.parameters)) {
object.parameters.forEach((parameter) => {
this.parameters.push(new SchemaObject(parameter.name, parameter, `${name} param`));
});
}
if (object.patternProperties) {
Object.entries(object.patternProperties).forEach(([propertyName, property]) => {
this.properties.push(new SchemaObject((0, helpers_1.transformPatternPropertyName)(propertyName), property, name));
});
}
if ((0, utils_1.isObject)(object.items)) {
this.items = new SchemaObject(name + '_items', object.items, this.name);
}
if (Array.isArray(object.oneOf) && object.oneOf.length > 0) {
this.oneOf = object.oneOf.map((item) => new SchemaObject(name, item));
}
if (Array.isArray(object.allOf) && object.allOf.length > 0) {
this.allOf = object.allOf.map((item) => new SchemaObject(name, item));
}
}
name;
parentObjectName;
type;
description;
ref;
required;
isRequired;
enum;
enumNames;
properties;
parameters;
items;
oneOf;
allOf;
setName(name) {
this.name = name;
if (Array.isArray(this.properties)) {
this.properties.forEach((property) => {
property.parentObjectName = name;
});
}
}
clone() {
return Object.assign(Object.create(Object.getPrototypeOf(this)), this);
}
}
exports.SchemaObject = SchemaObject;