ern-api-gen
Version:
Electrode Native API generator
68 lines • 2.51 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const factory_1 = require("./factory");
const ModelImpl_1 = __importDefault(require("./ModelImpl"));
const ArrayModel_1 = __importDefault(require("./ArrayModel"));
const RefModel_1 = __importDefault(require("./RefModel"));
const ComposedModel_1 = __importDefault(require("./ComposedModel"));
const beanUtils_1 = require("../java/beanUtils");
const properties_1 = require("./properties");
const LoggerFactory_1 = __importDefault(require("../java/LoggerFactory"));
const Log = LoggerFactory_1.default.getLogger(`PropertyBuilder`);
function build(type, format, args) {
const prop = { type, format };
if (args) {
for (const [k, v] of args) {
prop[k] = v;
}
}
const property = factory_1.factory(prop);
if (property == null) {
Log.error(`could not find property for type ${type} ${format}`);
}
return property;
}
exports.build = build;
function toModel(property, parent) {
if (property == null ||
property instanceof ArrayModel_1.default ||
property instanceof RefModel_1.default ||
property instanceof ModelImpl_1.default) {
return property;
}
property = factory_1.factory(property);
const { allowedProps } = property.constructor;
let model;
if (property.allOf) {
model = new ComposedModel_1.default();
const interfaces = property.allOf.filter(withRef);
const child = property.allOf.filter(withOutRef);
model.parent(parent).child(toModel(child.shift(), model));
model.setInterfaces(interfaces.map(c => toModel(c, model)));
if (child.length) {
Log.warn(`An allOf can only have 1 implementation, it can have multiple $ref types`);
}
}
else if (property instanceof properties_1.ArrayProperty) {
model = new ArrayModel_1.default();
}
else if (property instanceof properties_1.RefProperty) {
model = new RefModel_1.default();
}
else {
model = new ModelImpl_1.default();
}
beanUtils_1.apply(model, property, [...allowedProps, 'externalDocs']);
return model;
}
exports.toModel = toModel;
const withOutRef = ({ $ref }) => !$ref;
const withRef = ({ $ref }) => $ref;
exports.default = {
build,
toModel,
};
//# sourceMappingURL=PropertyBuilder.js.map